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 GAME_ADDON=$(basename ${addon})
if [ -n "$(echo $addon | grep game.)" -o -n "$(echo $addon | grep peripheral.)" ]; then
ADDON=$(basename $addon)
GIT_BRANCH=$(cat $addon/$ADDON.txt | awk '{print $3}')
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 [[ "${GAME_ADDON}" =~ ^game.libretro ]] || continue
continue
fi
######################### if ! grep -q all $addon/platforms.txt && ! grep -q linux $addon/platforms.txt && ! grep -q ! $addon/platforms.txt; then
# binary add-on section # continue
######################### fi
if [ -f ${ROOT}/packages/mediacenter/kodi-binary-addons/$ADDON/package.mk ]; then GAME_GIT_BRANCH=$(cat $addon/${GAME_ADDON}.txt | awk '{print $3}')
GAME_PATH="${ROOT}/packages/mediacenter/kodi-binary-addons/${GAME_ADDON}"
OLD_HASH=$(get_pkg_var "${ADDON}" PKG_VERSION) if [ ! -d "$GAME_PATH" ] ; then
PKG_SITE=$(get_pkg_var "${ADDON}" PKG_SITE) echo "SKIPPING ${GAME_ADDON}, not present in LE"
GIT_HASH=$(git ls-remote $PKG_SITE $GIT_BRANCH | awk '{print $1}') continue
fi
if [ "$OLD_HASH" != "$GIT_HASH" -a -n "$GIT_HASH" ]; then if [[ "${GAME_ADDON}" =~ ^game.libretro. ]]; then
update_pkg ${ROOT}/packages/mediacenter/kodi-binary-addons/$ADDON/package.mk ${ADDON} ${GIT_HASH} RETRO_NAME="${GAME_ADDON#game.libretro.}"
RETRO_ADDON="libretro-${RETRO_NAME}"
RETRO_PATH="${ROOT}/packages/emulation/${RETRO_ADDON}"
else
RETRO_NAME=""
RETRO_ADDON=""
RETRO_PATH=""
fi
BUMP_REV=true BUMPED=""
CHECK_RETRO=""
echo "UPDATING: $ADDON" GAME_VERSION=$(get_pkg_var "${GAME_ADDON}" PKG_VERSION)
echo "OLD_HASH: $OLD_HASH" GAME_PKG_SITE=$(get_pkg_var "${GAME_ADDON}" PKG_SITE)
echo "NEW_HASH: $GIT_HASH" GAME_NEW_HASH=$(git ls-remote $GAME_PKG_SITE $GAME_GIT_BRANCH | awk '{print $1}')
echo ""
fi if [ "${GAME_VERSION}" != "${GAME_NEW_HASH}" ]; then
fi BUMPED="yes"
[ -n "${RETRO_NAME}" ] && CHECK_RETRO="yes"
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
# emulation section # download_pkg_file "${GAME_ADDON}"
######################### CHECK_RETRO="yes"
fi
if [ -f ${ROOT}/packages/emulation/$EMULATOR/package.mk ]; then if [ -n "${CHECK_RETRO}" ]; then
if [ ! -d "${RETRO_PATH}" ]; then
OLD_HASH=$(get_pkg_var "${EMULATOR}" PKG_VERSION) echo "ERROR: ${RETRO_PATH} doesn't exist"
PKG_SITE=$(get_pkg_var "${EMULATOR}" PKG_SITE) cleanup_pkg_tmp
GIT_HASH=$(git ls-remote $PKG_SITE HEAD | awk '{print $1}') exit 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
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
if [ -n "${BUMPED}" ]; then
bump_pkg_rev "${GAME_PATH}" "${GAME_ADDON}"
cleanup_pkg_tmp
fi
done
done done
rm -rf "${TMPDIR}"