update_retroplayer-addons: sync libretro core versions with kodi

Instead of bumping libretro cores to their current master version
use the githash from depends file in kodi game addon.

This ensures we ship the same libretro core versions as Kodi.

When a kodi game addon is bumped the libretro package is automatically
bumped, too.

If the script is invoked with the "-f" option all libretro packages
will be synced to the version specified in the kodi game addon.

Signed-off-by: Matthias Reichl <hias@horus.com>
This commit is contained in:
Matthias Reichl 2019-01-26 15:55:59 +01:00
parent 2a815a4cd3
commit 9a6c8520a4

View File

@ -3,7 +3,20 @@
# SPDX-License-Identifier: GPL-2.0-or-later # SPDX-License-Identifier: GPL-2.0-or-later
# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv) # Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv)
FORCE_LIBRETRO_BUMP=""
if [ "$1" == "-f" ]; then
FORCE_LIBRETRO_BUMP="yes"
shift
fi
ROOT=$(cd $(dirname $0)/../.. && pwd) ROOT=$(cd $(dirname $0)/../.. && pwd)
TMPDIR="$(pwd)/.update-retroplayer-tmp"
TMP_PKG_FILE="${TMPDIR}/package.tar.gz"
TMP_PKG_DIR="${TMPDIR}/package"
rm -rf "${TMPDIR}"
mkdir -p "${TMPDIR}"
git_clone() { git_clone() {
# git_clone https://repo.url branch ./target_dir [githash] # git_clone https://repo.url branch ./target_dir [githash]
@ -35,21 +48,39 @@ get_pkg_var() {
echo "${!pkg_var}" echo "${!pkg_var}"
} }
update_pkg() { set_pkg_version() {
local pkg_path="$1" pkg_name="$2" pkg_version="$3" local package_mk="$1/package.mk" pkg_version="$2"
local old_version pkg_url new_sha256 sed -e "s|PKG_VERSION=.*|PKG_VERSION=\"${pkg_version}\"|g" -i "${package_mk}"
}
old_version=$(get_pkg_var "${pkg_name}" PKG_VERSION) download_pkg_file() {
local pkg_name="$1"
local pkg_url=$(get_pkg_var "${pkg_name}" PKG_URL)
wget -q -O "${TMP_PKG_FILE}" "${pkg_url}"
}
if [ "${old_version}" != "${pkg_version}" ]; then extract_pkg_file() {
[ -n "$pkg_version}" ] && sed -e "s|PKG_VERSION=.*|PKG_VERSION=\"${pkg_version}\"|g" -i ${pkg_path} mkdir -p "${TMP_PKG_DIR}"
tar xf "${TMP_PKG_FILE}" --strip-components=1 -C "${TMP_PKG_DIR}"
}
pkg_url=$(get_pkg_var "${pkg_name}" PKG_URL) cleanup_pkg_tmp() {
if [ -n "${pkg_url}" ]; then rm -rf "${TMP_PKG_FILE}" "${TMP_PKG_DIR}"
new_sha256="$(wget -q ${pkg_url} -O- | sha256sum | awk '{print $1}')" || exit 1 }
sed -e "s|PKG_SHA256=.*|PKG_SHA256=\"${new_sha256}\"|g" -i ${pkg_path}
fi set_pkg_sha256() {
fi local package_mk="$1/package.mk"
local new_sha256=$(sha256sum < "${TMP_PKG_FILE}" | awk '{print $1}')
sed -e "s|PKG_SHA256=.*|PKG_SHA256=\"${new_sha256}\"|g" -i "${package_mk}"
}
bump_pkg_rev() {
local package_mk="$1/package.mk" pkg_name="$2"
local pkg_rev=$(get_pkg_var "${pkg_name}" PKG_REV)
local new_pkg_rev=$((${pkg_rev}+1))
sed -e "s|PKG_REV=.*|PKG_REV=\"${new_pkg_rev}\"|" -i "${package_mk}"
echo "BUMPED ${pkg_name} PKG_REV from ${pkg_rev} to ${new_pkg_rev}"
} }
# addons # addons
@ -59,76 +90,99 @@ for addontxt in "binary-addons https://github.com/kodi-game/repo-binary-addons.g
GIT_HASH=$(echo $addontxt | awk '{print $3}') GIT_HASH=$(echo $addontxt | awk '{print $3}')
git_clone $ADDONREPO retroplayer $ADDONS.git $GIT_HASH git_clone $ADDONREPO retroplayer $ADDONS.git $GIT_HASH
if [ -z "$1" ]; then
for addon in $ADDONS.git/*.*/ ; do for addon in $ADDONS.git/*.*/ ; do
if [ -n "$(echo $addon | grep game.)" -o -n "$(echo $addon | grep peripheral.)" ]; then GAME_ADDON=$(basename ${addon})
ADDON=$(basename $addon)
GIT_BRANCH=$(cat $addon/$ADDON.txt | awk '{print $3}') [[ "${GAME_ADDON}" =~ ^game.libretro ]] || continue
EMULATOR="libretro-${ADDON##*.}"
BUMP_REV=""
OLD_HASH=""
GIT_HASH=""
if ! grep -q all $addon/platforms.txt && ! grep -q linux $addon/platforms.txt && ! grep -q ! $addon/platforms.txt; then if ! grep -q all $addon/platforms.txt && ! grep -q linux $addon/platforms.txt && ! grep -q ! $addon/platforms.txt; then
continue continue
fi fi
######################### GAME_GIT_BRANCH=$(cat $addon/${GAME_ADDON}.txt | awk '{print $3}')
# binary add-on section # GAME_PATH="${ROOT}/packages/mediacenter/kodi-binary-addons/${GAME_ADDON}"
#########################
if [ -f ${ROOT}/packages/mediacenter/kodi-binary-addons/$ADDON/package.mk ]; then if [ ! -d "$GAME_PATH" ] ; then
echo "SKIPPING ${GAME_ADDON}, not present in LE"
continue
fi
OLD_HASH=$(get_pkg_var "${ADDON}" PKG_VERSION) if [[ "${GAME_ADDON}" =~ ^game.libretro. ]]; then
PKG_SITE=$(get_pkg_var "${ADDON}" PKG_SITE) RETRO_NAME="${GAME_ADDON#game.libretro.}"
GIT_HASH=$(git ls-remote $PKG_SITE $GIT_BRANCH | awk '{print $1}') RETRO_ADDON="libretro-${RETRO_NAME}"
RETRO_PATH="${ROOT}/packages/emulation/${RETRO_ADDON}"
else
RETRO_NAME=""
RETRO_ADDON=""
RETRO_PATH=""
fi
if [ "$OLD_HASH" != "$GIT_HASH" -a -n "$GIT_HASH" ]; then BUMPED=""
update_pkg ${ROOT}/packages/mediacenter/kodi-binary-addons/$ADDON/package.mk ${ADDON} ${GIT_HASH} CHECK_RETRO=""
BUMP_REV=true GAME_VERSION=$(get_pkg_var "${GAME_ADDON}" PKG_VERSION)
GAME_PKG_SITE=$(get_pkg_var "${GAME_ADDON}" PKG_SITE)
GAME_NEW_HASH=$(git ls-remote $GAME_PKG_SITE $GAME_GIT_BRANCH | awk '{print $1}')
echo "UPDATING: $ADDON" if [ "${GAME_VERSION}" != "${GAME_NEW_HASH}" ]; then
echo "OLD_HASH: $OLD_HASH" BUMPED="yes"
echo "NEW_HASH: $GIT_HASH" [ -n "${RETRO_NAME}" ] && CHECK_RETRO="yes"
echo "" set_pkg_version "${GAME_PATH}" "${GAME_NEW_HASH}"
download_pkg_file "${GAME_ADDON}"
set_pkg_sha256 "${GAME_PATH}"
echo "UPDATED ${GAME_ADDON} from ${GAME_VERSION} to ${GAME_NEW_HASH}"
fi
if [ -n "${FORCE_LIBRETRO_BUMP}" -a -n "${RETRO_NAME}" -a -z "${CHECK_RETRO}" ]; then
download_pkg_file "${GAME_ADDON}"
CHECK_RETRO="yes"
fi
if [ -n "${CHECK_RETRO}" ]; then
if [ ! -d "${RETRO_PATH}" ]; then
echo "ERROR: ${RETRO_PATH} doesn't exist"
cleanup_pkg_tmp
exit 1
fi
RETRO_VERSION=$(get_pkg_var "${RETRO_ADDON}" PKG_VERSION)
extract_pkg_file
RETRO_VERSION_FILE="${TMP_PKG_DIR}/depends/common/${RETRO_NAME}/${RETRO_NAME}.txt"
if [ ! -f "${RETRO_VERSION_FILE}" ]; then
echo "ERROR: ${RETRO_VERSION_FILE} does not exist"
cleanup_pkg_tmp
exit 1
fi
VERSION_INFO=$(grep "^${RETRO_NAME}" "${RETRO_VERSION_FILE}" | head -1)
if [[ "$VERSION_INFO" =~ .zip$ ]] ; then
# version referenced by githash
RETRO_NEW_HASH=$(sed -e 's|^.*/archive/||' -e 's|\.zip$||' "${RETRO_VERSION_FILE}")
else
echo "unmanaged version in kodi package: ${VERSION_INFO}"
# unmanaged version, repo plus branch
RETRO_SITE=$(echo "${VERSION_INFO}" | awk '{print $2}')
RETRO_BRANCH=$(echo "${VERSION_INFO}" | awk '{print $3}')
RETRO_NEW_HASH=$(git ls-remote "${RETRO_SITE}" "${RETRO_BRANCH}" | awk '{print $1}')
fi
if [ "${RETRO_VERSION}" != "${RETRO_NEW_HASH}" ]; then
BUMPED="yes"
set_pkg_version "${RETRO_PATH}" "${RETRO_NEW_HASH}"
download_pkg_file "${RETRO_ADDON}"
set_pkg_sha256 "${RETRO_PATH}"
echo "UPDATED ${RETRO_ADDON} from ${RETRO_VERSION} to ${RETRO_NEW_HASH}"
fi fi
fi fi
######################### if [ -n "${BUMPED}" ]; then
# emulation section # bump_pkg_rev "${GAME_PATH}" "${GAME_ADDON}"
######################### cleanup_pkg_tmp
if [ -f ${ROOT}/packages/emulation/$EMULATOR/package.mk ]; then
OLD_HASH=$(get_pkg_var "${EMULATOR}" PKG_VERSION)
PKG_SITE=$(get_pkg_var "${EMULATOR}" PKG_SITE)
GIT_HASH=$(git ls-remote $PKG_SITE HEAD | awk '{print $1}')
if [ "$OLD_HASH" != "$GIT_HASH" -a -n "$GIT_HASH" ]; then
update_pkg ${ROOT}/packages/emulation/$EMULATOR/package.mk ${EMULATOR} ${GIT_HASH}
BUMP_REV=true
echo "UPDATING: $EMULATOR"
echo "OLD_HASH: $OLD_HASH"
echo "NEW_HASH: $GIT_HASH"
echo ""
fi
fi
if [ "$BUMP_REV" = "true" ]; then
PKG_REV=$(get_pkg_var "${ADDON}" PKG_REV)
sed -e "s|PKG_REV=.*|PKG_REV=\"$((PKG_REV+1))\"|" -i ${ROOT}/packages/mediacenter/kodi-binary-addons/$ADDON/package.mk
echo "BUMPING PKG_REV FROM: $PKG_REV TO: $((PKG_REV+1))"
echo ""
fi
fi fi
done done
fi
done done
rm -rf "${TMPDIR}"