diff --git a/config/functions b/config/functions index 793ba089ca..85579cf4de 100644 --- a/config/functions +++ b/config/functions @@ -1155,6 +1155,8 @@ done } install_addon_files() { + mkdir -p "$1" + install_addon_source "$1" install_addon_images "$1" create_addon_xml "$1" @@ -1262,7 +1264,7 @@ pkg_lock() { # As we now have the lock, if .failed still exists then a previous process must have failed if [ -f "${THREAD_CONTROL}/locks/${pkg}.${task}.failed" ]; then - fail_seq="$(cat "${THREAD_CONTROL}/locks/${pkg}.${task}.failed")" + fail_seq="$(< "${THREAD_CONTROL}/locks/${pkg}.${task}.failed")" print_color CLR_ERROR "FAILURE: ${pkg}.${task}.failed exists, a previous dependency process has failed (seq: ${fail_seq})\n" if [ -d "${THREAD_CONTROL}/logs" ]; then cat <>"${THREAD_CONTROL}/status"; num=$((num + 1)); done + num=$(< "${THREAD_CONTROL}/status.max") + if [ ${num} -lt ${sedline} ]; then + echo ${sedline} >"${THREAD_CONTROL}/status.max" + for i in $(seq $((num + 1)) ${sedline}); do echo "" >>"${THREAD_CONTROL}/status"; done + fi - num=$(($(cat "${THREAD_CONTROL}/progress.prev") + 1)) + num=$(< "${THREAD_CONTROL}/progress.prev") projdevarch="${PROJECT}/" [ -n "${DEVICE}" ] && projdevarch+="${DEVICE}/" projdevarch+="${TARGET_ARCH}" TZ=UTC0 printf -v elapsed "%(%H:%M:%S)T" $(($(date +%s) - MTBUILDSTART)) - printf -v preamble "%s Dashboard (%s) - %d of %d jobs completed, %s elapsed" "${DISTRONAME}" "${projdevarch}" ${num} ${MTMAXJOBS} "${elapsed}" + printf -v preamble "%s Dashboard (%s) - %d of %d jobs completed, %s elapsed" "${DISTRONAME}" "${projdevarch}" $((num + 1)) ${MTMAXJOBS} "${elapsed}" printf -v preamble "%b%-105s %s" "\e[2J\e[0;0H" "${preamble//\//\\/}" "$(date "+%Y-%m-%d %H:%M:%S")" if [ "${DISABLE_COLORS}" != "yes" ]; then diff --git a/config/multithread b/config/multithread index cb96bfa574..ca389cddbe 100644 --- a/config/multithread +++ b/config/multithread @@ -107,8 +107,9 @@ package_worker() { ( flock --exclusive 95 [ ${result} -eq 0 ] && status="DONE" || status="FAIL" - num=$(($(cat "${THREAD_CONTROL}/progress") + 1)) + num=$(< "${THREAD_CONTROL}/progress") mv "${THREAD_CONTROL}/progress" "${THREAD_CONTROL}/progress.prev" + num=$((num + 1)) echo ${num} >"${THREAD_CONTROL}/progress" printf "[%0*d/%0*d] [%-4s] %-7s %s\n" ${#jobs} ${num} ${#jobs} ${jobs} "${status}" "${task}" "${pkgname}" >&2 ) 95>"${THREAD_CONTROL}/locks/.progress" @@ -143,6 +144,7 @@ start_multithread_build() { mkdir -p "${THREAD_CONTROL}/locks" echo -1 >"${THREAD_CONTROL}/progress.prev" echo 0 >"${THREAD_CONTROL}/progress" + echo 0 >"${THREAD_CONTROL}/status.max" touch "${THREAD_CONTROL}/status" [ "${THREADCOUNT}" = "0" ] && THREADCOUNT=1 diff --git a/packages/addons/addon-depends/network-tools-depends/udpxy/package.mk b/packages/addons/addon-depends/network-tools-depends/udpxy/package.mk index 9009849291..a8ed4de2ee 100644 --- a/packages/addons/addon-depends/network-tools-depends/udpxy/package.mk +++ b/packages/addons/addon-depends/network-tools-depends/udpxy/package.mk @@ -10,6 +10,10 @@ PKG_URL="http://www.udpxy.com/download/1_23/${PKG_NAME}.${PKG_VERSION}-prod.tar. PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="A UDP-to-HTTP multicast traffic relay daemon." +configure_target() { + export CFLAGS+=" -Wno-stringop-truncation" +} + makeinstall_target() { : } diff --git a/packages/addons/service/slice/package.mk b/packages/addons/service/slice/package.mk index 5fa2876837..c78baa5b30 100644 --- a/packages/addons/service/slice/package.mk +++ b/packages/addons/service/slice/package.mk @@ -20,9 +20,7 @@ PKG_ADDON_PROJECTS="Slice Slice3" PKG_ADDON_TYPE="xbmc.service" makeinstall_target() { - PKG_ADDON_INSTALL_DIR="${INSTALL}/usr/share/kodi/addons/${PKG_SECTION}.${PKG_NAME}" - mkdir -p "${PKG_ADDON_INSTALL_DIR}" - install_addon_files "${PKG_ADDON_INSTALL_DIR}" + install_addon_files "${INSTALL}/usr/share/kodi/addons/${PKG_SECTION}.${PKG_NAME}" } addon() { diff --git a/packages/addons/tools/dotnet-runtime/package.mk b/packages/addons/tools/dotnet-runtime/package.mk index b3dd996ed4..40ed87f919 100644 --- a/packages/addons/tools/dotnet-runtime/package.mk +++ b/packages/addons/tools/dotnet-runtime/package.mk @@ -36,11 +36,6 @@ PKG_ADDON_NAME=".Net Core Runtime" PKG_ADDON_TYPE="xbmc.python.script" PKG_MAINTAINER="Anton Voyl (awiouy)" -unpack() { - mkdir -p $PKG_BUILD - $SCRIPTS/extract $PKG_NAME $PKG_BUILD -} - addon() { mkdir -p $ADDON_BUILD/$PKG_ADDON_ID/bin cp -r $PKG_BUILD/$PKG_NAME-$PKG_VERSION/* \ diff --git a/packages/linux-driver-addons/dvb/depends/media_tree/package.mk b/packages/linux-driver-addons/dvb/depends/media_tree/package.mk index 2aa920e299..ae3fd907a6 100644 --- a/packages/linux-driver-addons/dvb/depends/media_tree/package.mk +++ b/packages/linux-driver-addons/dvb/depends/media_tree/package.mk @@ -15,7 +15,9 @@ PKG_TOOLCHAIN="manual" unpack() { mkdir -p $PKG_BUILD/ tar -xf $SOURCES/$PKG_NAME/$PKG_NAME-$PKG_VERSION.tar.bz2 -C $PKG_BUILD/ +} +post_unpack() { # hack/workaround for borked upstream kernel/media_build # without removing atomisp there a lot additional includes that # slowdown build process after modpost from 3min to 6min diff --git a/packages/linux-driver-addons/dvb/depends/media_tree_cc/package.mk b/packages/linux-driver-addons/dvb/depends/media_tree_cc/package.mk index b04f4771eb..ccce3a9c7e 100644 --- a/packages/linux-driver-addons/dvb/depends/media_tree_cc/package.mk +++ b/packages/linux-driver-addons/dvb/depends/media_tree_cc/package.mk @@ -15,7 +15,9 @@ PKG_TOOLCHAIN="manual" unpack() { mkdir -p $PKG_BUILD/ tar -xf $SOURCES/$PKG_NAME/$PKG_NAME-$PKG_VERSION.tar.bz2 -C $PKG_BUILD/ +} +post_unpack() { # hack/workaround for borked upstream kernel/media_build # without removing atomisp there a lot additional includes that # slowdown build process after modpost from 3min to 6min diff --git a/packages/linux-firmware/firmware-imx/package.mk b/packages/linux-firmware/firmware-imx/package.mk index 4d895b40e2..89dd714efb 100644 --- a/packages/linux-firmware/firmware-imx/package.mk +++ b/packages/linux-firmware/firmware-imx/package.mk @@ -1,5 +1,6 @@ # SPDX-License-Identifier: GPL-2.0-or-later # Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv) +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv) PKG_NAME="firmware-imx" PKG_VERSION="5.4" @@ -13,9 +14,8 @@ PKG_LONGDESC="firmware-imx: Freescale IMX firmware such as for the VPU" PKG_TOOLCHAIN="manual" unpack() { - mkdir -p $BUILD - cd $BUILD - sh $SOURCES/$PKG_NAME/$PKG_NAME-$PKG_VERSION.bin --auto-accept + cd $(dirname $PKG_BUILD) + sh $SOURCES/$PKG_NAME/$PKG_NAME-$PKG_VERSION.bin --auto-accept } makeinstall_target() { diff --git a/packages/linux/package.mk b/packages/linux/package.mk index eec8b248a2..8c46a5fb65 100644 --- a/packages/linux/package.mk +++ b/packages/linux/package.mk @@ -6,7 +6,7 @@ PKG_NAME="linux" PKG_LICENSE="GPL" PKG_SITE="http://www.kernel.org" PKG_DEPENDS_HOST="ccache:host openssl:host" -PKG_DEPENDS_TARGET="toolchain cpio:host kmod:host xz:host wireless-regdb keyutils $KERNEL_EXTRA_DEPENDS_TARGET" +PKG_DEPENDS_TARGET="toolchain linux:host cpio:host kmod:host xz:host wireless-regdb keyutils $KERNEL_EXTRA_DEPENDS_TARGET" PKG_DEPENDS_INIT="toolchain" PKG_NEED_UNPACK="$LINUX_DEPENDS" PKG_LONGDESC="This package contains a precompiled kernel image and the modules." diff --git a/packages/mediacenter/kodi-binary-addons/audiodecoder.usf/package.mk b/packages/mediacenter/kodi-binary-addons/audiodecoder.usf/package.mk index 3529a1507c..b28e165a36 100644 --- a/packages/mediacenter/kodi-binary-addons/audiodecoder.usf/package.mk +++ b/packages/mediacenter/kodi-binary-addons/audiodecoder.usf/package.mk @@ -17,3 +17,4 @@ PKG_LONGDESC="audiodecoder.usf" PKG_IS_ADDON="yes" PKG_ADDON_TYPE="kodi.audiodecoder" +PKG_ADDON_PROJECTS="any !RPi1" diff --git a/packages/mediacenter/kodi-binary-addons/screensaver.greynetic/package.mk b/packages/mediacenter/kodi-binary-addons/screensaver.greynetic/package.mk index 0b7090e9f7..0e443fbabe 100644 --- a/packages/mediacenter/kodi-binary-addons/screensaver.greynetic/package.mk +++ b/packages/mediacenter/kodi-binary-addons/screensaver.greynetic/package.mk @@ -10,7 +10,7 @@ PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="https://github.com/xbmc/screensaver.greynetic" PKG_URL="https://github.com/xbmc/screensaver.greynetic/archive/$PKG_VERSION.tar.gz" -PKG_DEPENDS_TARGET="toolchain kodi-platform" +PKG_DEPENDS_TARGET="toolchain kodi-platform glm" PKG_SECTION="" PKG_SHORTDESC="screensaver.greynetic" PKG_LONGDESC="screensaver.greynetic" diff --git a/packages/readme.md b/packages/readme.md index 26bc6cce55..e67a1c6e33 100644 --- a/packages/readme.md +++ b/packages/readme.md @@ -148,7 +148,7 @@ Full list of overwrittable functions. | unpack
pre_unpack
post_unpack | - | Extract the source from the downloaded file | | pre_patch
post_patch | - | Apply the patches to the source, after extraction. The patch function it self is not allowed to overwritten | | pre_build_\[stage] | yes | Runs before of the start of the build | -| configure_\[stage]
pre_configure_\[stage]
post_configure_\[stage] | yes | Configure the package for the compile. This is only relevant for toolchain, that supports it (e.g. meson, cmake, configure, manual) | +| pre_configure
pre_configure_\[stage]
configure_\[stage]
post_configure_\[stage] | yes | Configure the package for the compile. This is only relevant for toolchain, that supports it (e.g. meson, cmake, configure, manual) | | make_\[stage]
pre_make_\[stage]
post_make_\[stage] | yes | Build of the package | | makeinstall_\[stage]
pre_makeinstall_\[stage]
post_makeinstall_\[stage] | yes | Installation of the files in the correct pathes
host: TOOLCHAIN
target: SYSROOT and IMAGE
bootstrap and init: temporary destination | addon | - | Copy all files together for addon creation. This is requiered for addons | diff --git a/packages/x11/other/fontconfig/package.mk b/packages/x11/other/fontconfig/package.mk index 0dd1f233a1..6b0000b5f1 100644 --- a/packages/x11/other/fontconfig/package.mk +++ b/packages/x11/other/fontconfig/package.mk @@ -8,7 +8,7 @@ PKG_SHA256="9f0d852b39d75fc655f9f53850eb32555394f36104a044bb2b2fc9e66dbbfa7f" PKG_LICENSE="OSS" PKG_SITE="http://www.fontconfig.org" PKG_URL="http://www.freedesktop.org/software/fontconfig/release/$PKG_NAME-$PKG_VERSION.tar.gz" -PKG_DEPENDS_TARGET="toolchain util-macros freetype libxml2 zlib expat" +PKG_DEPENDS_TARGET="toolchain util-linux util-macros freetype libxml2 zlib expat" PKG_LONGDESC="Fontconfig is a library for font customization and configuration." PKG_CONFIGURE_OPTS_TARGET="--with-arch=$TARGET_ARCH \ diff --git a/scripts/build b/scripts/build index 20c804ca89..1d068051c7 100755 --- a/scripts/build +++ b/scripts/build @@ -238,6 +238,7 @@ if [ -f "$PKG_CONFIGURE_SCRIPT" -o -f "$PKG_CMAKE_SCRIPT" -o -f "$PKG_MESON_SCRI fi # configure +pkg_call_exists pre_configure && pkg_call pre_configure pkg_call_exists pre_configure_$TARGET && pkg_call pre_configure_$TARGET if pkg_call_exists configure_$TARGET; then diff --git a/scripts/clean b/scripts/clean index 9e7ca86984..9097af794d 100755 --- a/scripts/clean +++ b/scripts/clean @@ -22,10 +22,13 @@ clean_package() { build_msg "CLR_WARNING" "*" "$(print_color "CLR_WARNING_DIM" "Removing ${i} ...")" rm -rf "${i}" fi - else + elif [ -d "${i}" -a -f "${i}/.libreelec-package" ]; then # force clean if no stamp found (previous unpack failed) - build_msg "" "" "* Removing ${i} ..." - rm -rf "${i}" + . "${i}/.libreelec-package" + if [ "${INFO_PKG_NAME}" = "${1}" ]; then + build_msg "" "" "* Removing ${i} ..." + rm -rf "${i}" + fi fi done rm -f "${STAMPS}/${1}/build_"* diff --git a/scripts/install_addon b/scripts/install_addon index 289b934b39..0a6220328a 100755 --- a/scripts/install_addon +++ b/scripts/install_addon @@ -12,8 +12,6 @@ setup_toolchain target ADDON_DIRECTORY="$ADDON_BUILD/$PKG_ADDON_ID" -mkdir -p "$ADDON_DIRECTORY" - install_addon_files "$ADDON_DIRECTORY" debug_strip "$ADDON_DIRECTORY" diff --git a/scripts/unpack b/scripts/unpack index 5415acf5aa..1f4342a5f4 100755 --- a/scripts/unpack +++ b/scripts/unpack @@ -60,40 +60,46 @@ if [ -d "$SOURCES/${PKG_NAME}" -o -d "$PKG_DIR/sources" ]; then pkg_call_exists pre_unpack && pkg_call pre_unpack if pkg_call_exists unpack; then - pkg_call unpack + ( + PKG_BUILD="${PKG_UNPACK_DIR}/${PKG_NAME}-${PKG_VERSION}" + pkg_call unpack + ) else if [ -n "$PKG_URL" ]; then ${SCRIPTS}/extract "${PKG_NAME}" "${PKG_UNPACK_DIR}" fi fi - _pkg_build="$(basename "${PKG_BUILD}")" - [ -z "${PKG_SOURCE_DIR}" -a -d "${PKG_UNPACK_DIR}/${_pkg_build}"* ] && mv "${PKG_UNPACK_DIR}/${_pkg_build}"* "${PKG_BUILD}" + if [ -z "${PKG_SOURCE_DIR}" -a -d "${PKG_UNPACK_DIR}/${PKG_NAME}-${PKG_VERSION}"* ]; then + mv "${PKG_UNPACK_DIR}/${PKG_NAME}-${PKG_VERSION}"* "${PKG_UNPACK_DIR}/.intermediate" + fi - if [ ! -d "${PKG_BUILD}" ]; then + if [ ! -d "${PKG_UNPACK_DIR}/.intermediate" ]; then if [ -n "${PKG_SOURCE_DIR}" ]; then if [ -d "${PKG_UNPACK_DIR}"/${PKG_SOURCE_DIR} ]; then - mv "${PKG_UNPACK_DIR}"/${PKG_SOURCE_DIR} "${PKG_BUILD}" + mv "${PKG_UNPACK_DIR}"/${PKG_SOURCE_DIR} "${PKG_UNPACK_DIR}/.intermediate" else # fallback - mv "${BUILD}"/${PKG_SOURCE_DIR} "${PKG_BUILD}" + mv "${BUILD}"/${PKG_SOURCE_DIR} "${PKG_UNPACK_DIR}/.intermediate" fi elif [ -d "${PKG_BUILD}"* ]; then - mv "${PKG_BUILD}"* "${PKG_BUILD}" + mv "${PKG_BUILD}"* "${PKG_UNPACK_DIR}/.intermediate" fi fi - # cleanup - rm -rf "${PKG_UNPACK_DIR}" + [ ! -d "${PKG_UNPACK_DIR}/.intermediate" ] && mkdir -p "${PKG_UNPACK_DIR}/.intermediate" if [ -d "$PKG_DIR/sources" ]; then - [ ! -d "$PKG_BUILD" ] && mkdir -p "$PKG_BUILD" - cp -PRf "$PKG_DIR/sources/"* "$PKG_BUILD" + cp -PRf "$PKG_DIR/sources/"* "${PKG_UNPACK_DIR}/.intermediate" fi - if [ -z "$PKG_URL" ]; then - mkdir -p "${PKG_BUILD}" - fi + echo "INFO_PKG_NAME=\"${PKG_NAME}\"" > "${PKG_UNPACK_DIR}/.intermediate/.libreelec-package" + + rm -fr "${PKG_BUILD}" + mv "${PKG_UNPACK_DIR}/.intermediate" "${PKG_BUILD}" + + # cleanup + rm -rf "${PKG_UNPACK_DIR}" pkg_call_exists post_unpack && pkg_call post_unpack @@ -184,6 +190,7 @@ fi if [ "$PKG_SECTION" != "virtual" ]; then mkdir -p "$PKG_BUILD" + echo "INFO_PKG_NAME=\"${PKG_NAME}\"" > "${PKG_BUILD}/.libreelec-package" rm -f $STAMPS/${PKG_NAME}/build_* diff --git a/tools/distro-tool b/tools/distro-tool index 075a855a60..71b3b1473c 100755 --- a/tools/distro-tool +++ b/tools/distro-tool @@ -104,7 +104,13 @@ class MyUtility(object): return (0, subprocess.check_output(command.split(" "), stderr=_logfile)) except subprocess.CalledProcessError as cpe: if MyUtility.isPython3: - return (cpe.returncode, cpe.output.decode("utf-8")) + # Clean up undecodable garbage in response (eg. libftdi1 error page) + output = bytearray() + for c in cpe.output: + if c <= 127: + output.append(c) + + return (cpe.returncode, output.decode("utf-8")) else: return (cpe.returncode, cpe.output) finally: diff --git a/tools/pkgcheck b/tools/pkgcheck index af298edc6c..55282dc9b7 100755 --- a/tools/pkgcheck +++ b/tools/pkgcheck @@ -76,8 +76,8 @@ process_line() { [ -n "${matches}" ] && log "${filename}" ${lc} "FAIL" "late binding violation" "${matches:2}" } -init_multi_func() { - local f t multi +init_target_funcs() { + local f t funcs for t in target host init bootstrap; do for f in pre_build \ @@ -85,10 +85,10 @@ init_multi_func() { pre_make make post_make \ pre_makeinstall makeinstall post_makeinstall \ ; do - multi+=" ${f}_${t}" + funcs+=" ${f}_${t}" done done - echo "${multi:1}" + echo "${funcs:1}" } check_func_name() { @@ -98,7 +98,8 @@ check_func_name() { for f in configure_package \ pre_unpack unpack post_unpack \ pre_patch post_patch \ - ${MULTI_FUNC} \ + pre_configure \ + ${TARGET_FUNCS} \ pre_install post_install \ addon \ ; do @@ -146,7 +147,7 @@ process_pkg() { done <<< "$(grep -E ".*() {" "${filename}" | sed 's/[[:space:]]*{.*//' | sort | uniq -c | grep -v ^[[:space:]]*1[[:space:]])" } -MULTI_FUNC="$(init_multi_func)" +TARGET_FUNCS="$(init_target_funcs)" if [ $# -ne 0 ]; then for arg in ${@}; do