From ece54198638eec07f9f88a10f2c7e26adb75fe0e Mon Sep 17 00:00:00 2001 From: Ivan Max <60917834+Maxython@users.noreply.github.com> Date: Fri, 14 Jan 2022 16:16:37 +0300 Subject: [PATCH] build-package.sh: setting up to work with pacman (#8451) --- build-package.sh | 6 +++--- scripts/build/setup/termux_setup_cmake.sh | 5 ++++- scripts/build/setup/termux_setup_ghc.sh | 3 ++- scripts/build/setup/termux_setup_gn.sh | 5 ++++- scripts/build/setup/termux_setup_golang.sh | 5 ++++- scripts/build/setup/termux_setup_ninja.sh | 5 ++++- scripts/build/setup/termux_setup_rust.sh | 5 ++++- .../build/termux_create_pacman_subpackages.sh | 19 +++---------------- ...load_deb.sh => termux_download_deb_pac.sh} | 5 +++-- scripts/build/termux_extract_dep_info.sh | 14 +++++++++++++- .../termux_step_create_pacman_package.sh | 19 +++---------------- scripts/build/termux_step_get_dependencies.sh | 6 +++--- scripts/build/termux_step_start_build.sh | 15 ++++++++++++++- 13 files changed, 64 insertions(+), 48 deletions(-) rename scripts/build/{termux_download_deb.sh => termux_download_deb_pac.sh} (91%) diff --git a/build-package.sh b/build-package.sh index 5081055dc..19a01d27b 100755 --- a/build-package.sh +++ b/build-package.sh @@ -96,8 +96,8 @@ source "$TERMUX_SCRIPTDIR/scripts/build/termux_step_handle_buildarch.sh" source "$TERMUX_SCRIPTDIR/scripts/build/termux_extract_dep_info.sh" # Function that downloads a .deb (using the termux_download function) -# shellcheck source=scripts/build/termux_download_deb.sh -source "$TERMUX_SCRIPTDIR/scripts/build/termux_download_deb.sh" +# shellcheck source=scripts/build/termux_download_deb_pac.sh +source "$TERMUX_SCRIPTDIR/scripts/build/termux_download_deb_pac.sh" # Script to download InRelease, verify it's signature and then download Packages.xz by hash # shellcheck source=scripts/build/termux_get_repo_files.sh @@ -269,7 +269,7 @@ source "$TERMUX_SCRIPTDIR/scripts/build/termux_step_finish_build.sh" if [ "$TERMUX_ON_DEVICE_BUILD" = "true" ]; then # For on device builds cross compiling is not supported. # Target architecture must be same as for environment used currently. - TERMUX_ARCH=$(dpkg --print-architecture) + TERMUX_ARCH=$(dpkg --print-architecture 2>/dev/null || pacman-conf | grep Architecture | sed 's/Architecture = //g') export TERMUX_ARCH fi diff --git a/scripts/build/setup/termux_setup_cmake.sh b/scripts/build/setup/termux_setup_cmake.sh index 435eeb2b6..526b50158 100644 --- a/scripts/build/setup/termux_setup_cmake.sh +++ b/scripts/build/setup/termux_setup_cmake.sh @@ -25,12 +25,15 @@ termux_setup_cmake() { export PATH=$TERMUX_CMAKE_FOLDER/bin:$PATH else - if [ "$(dpkg-query -W -f '${db:Status-Status}\n' cmake 2>/dev/null)" != "installed" ]; then + if [[ "$(dpkg --version 2>/dev/null)" && "$(dpkg-query -W -f '${db:Status-Status}\n' cmake 2>/dev/null)" != "installed" ]] || + [[ "$(pacman -V 2>/dev/null)" && ! "$(pacman -Q cmake 2>/dev/null)" ]]; then echo "Package 'cmake' is not installed." echo "You can install it with" echo echo " pkg install cmake" echo + echo " pacman -S cmake" + echo exit 1 fi fi diff --git a/scripts/build/setup/termux_setup_ghc.sh b/scripts/build/setup/termux_setup_ghc.sh index 04d7153ae..28819eb88 100644 --- a/scripts/build/setup/termux_setup_ghc.sh +++ b/scripts/build/setup/termux_setup_ghc.sh @@ -32,7 +32,8 @@ termux_setup_ghc() { rm -Rf "$TERMUX_GHC_TEMP_FOLDER" else - if [ "$(dpkg-query -W -f '${db:Status-Status}\n' ghc 2>/dev/null)" != "installed" ]; then + if [[ "$(dpkg --version 2>/dev/null)" && "$(dpkg-query -W -f '${db:Status-Status}\n' ghc 2>/dev/null)" != "installed" ]] || + [[ "$(pacman -V 2>/dev/null)" && ! "$(pacman -Q ghc 2>/dev/null)" ]]; then echo "Package 'ghc' is not installed." exit 1 fi diff --git a/scripts/build/setup/termux_setup_gn.sh b/scripts/build/setup/termux_setup_gn.sh index 0378cd728..d88dd3b96 100644 --- a/scripts/build/setup/termux_setup_gn.sh +++ b/scripts/build/setup/termux_setup_gn.sh @@ -40,12 +40,15 @@ termux_setup_gn() { fi export PATH=$GN_FOLDER/out:$PATH else - if [ "$(dpkg-query -W -f '${db:Status-Status}\n' gn 2>/dev/null)" != "installed" ]; then + if [[ "$(dpkg --version 2>/dev/null)" && "$(dpkg-query -W -f '${db:Status-Status}\n' gn 2>/dev/null)" != "installed" ]] || + [[ "$(pacman -V 2>/dev/null)" && ! "$(pacman -Q gn 2>/dev/null)" ]]; then echo "Package 'gn' is not installed." echo "You can install it with" echo echo " pkg install gn" echo + echo " pacman -S gn" + echo exit 1 fi fi diff --git a/scripts/build/setup/termux_setup_golang.sh b/scripts/build/setup/termux_setup_golang.sh index 81d8c139e..2226d4d66 100644 --- a/scripts/build/setup/termux_setup_golang.sh +++ b/scripts/build/setup/termux_setup_golang.sh @@ -24,12 +24,15 @@ termux_setup_golang() { ( cd "$TERMUX_COMMON_CACHEDIR"; tar xf "$TERMUX_BUILDGO_TAR"; mv go "$TERMUX_BUILDGO_FOLDER"; rm "$TERMUX_BUILDGO_TAR" ) else - if [ "$(dpkg-query -W -f '${db:Status-Status}\n' golang 2>/dev/null)" != "installed" ]; then + if [[ "$(dpkg --version 2>/dev/null)" && "$(dpkg-query -W -f '${db:Status-Status}\n' golang 2>/dev/null)" != "installed" ]] || + [[ "$(pacman -V 2>/dev/null)" && ! "$(pacman -Q golang 2>/dev/null)" ]]; then echo "Package 'golang' is not installed." echo "You can install it with" echo echo " pkg install golang" echo + echo " pacman -S golang" + echo echo "or build it from source with" echo echo " ./build-package.sh golang" diff --git a/scripts/build/setup/termux_setup_ninja.sh b/scripts/build/setup/termux_setup_ninja.sh index 6366cac38..095fbff05 100644 --- a/scripts/build/setup/termux_setup_ninja.sh +++ b/scripts/build/setup/termux_setup_ninja.sh @@ -23,12 +23,15 @@ termux_setup_ninja() { local NINJA_PKG_VERSION=$(bash -c ". $TERMUX_SCRIPTDIR/packages/ninja/build.sh; echo \$TERMUX_PKG_VERSION") if ([ ! -e "$TERMUX_BUILT_PACKAGES_DIRECTORY/ninja" ] || [ "$(cat "$TERMUX_BUILT_PACKAGES_DIRECTORY/ninja")" != "$NINJA_PKG_VERSION" ]) && - [ "$(dpkg-query -W -f '${db:Status-Status}\n' ninja 2>/dev/null)" != "installed" ]; then + ([[ "$(dpkg --version 2>/dev/null)" && "$(dpkg-query -W -f '${db:Status-Status}\n' ninja 2>/dev/null)" != "installed" ]] || + [[ "$(pacman -V 2>/dev/null)" && ! "$(pacman -Q ninja 2>/dev/null)" ]]); then echo "Package 'ninja' is not installed." echo "You can install it with" echo echo " pkg install ninja" echo + echo " pacman -S ninja" + echo echo "or build it from source with" echo echo " ./build-package.sh ninja" diff --git a/scripts/build/setup/termux_setup_rust.sh b/scripts/build/setup/termux_setup_rust.sh index ce796e714..32a81080f 100644 --- a/scripts/build/setup/termux_setup_rust.sh +++ b/scripts/build/setup/termux_setup_rust.sh @@ -6,12 +6,15 @@ termux_setup_rust() { fi if [ "$TERMUX_ON_DEVICE_BUILD" = "true" ]; then - if [ "$(dpkg-query -W -f '${db:Status-Status}\n' rust 2>/dev/null)" != "installed" ]; then + if [[ "$(dpkg --version 2>/dev/null)" && "$(dpkg-query -W -f '${db:Status-Status}\n' rust 2>/dev/null)" != "installed" ]] || + [[ "$(pacman -V 2>/dev/null)" && ! "$(pacman -Q rust 2>/dev/null)" ]]; then echo "Package 'rust' is not installed." echo "You can install it with" echo echo " pkg install rust" echo + echo " pacman -S rust" + echo echo "or build it from source with" echo echo " ./build-package.sh rust" diff --git a/scripts/build/termux_create_pacman_subpackages.sh b/scripts/build/termux_create_pacman_subpackages.sh index 271b13c02..e114d33b0 100644 --- a/scripts/build/termux_create_pacman_subpackages.sh +++ b/scripts/build/termux_create_pacman_subpackages.sh @@ -67,24 +67,11 @@ termux_create_pacman_subpackages() { TERMUX_SUBPKG_DEPENDS+=", $TERMUX_PKG_DEPENDS" fi - # Version view revisions. - local TERMUX_PKG_VERSION_EDITED=${TERMUX_PKG_VERSION//-/.} - local INCORRECT_SYMBOLS=$(echo $TERMUX_PKG_VERSION_EDITED | grep -o '[0-9][a-z]') - if [ -n "$INCORRECT_SYMBOLS" ]; then - local TERMUX_PKG_VERSION_EDITED=${TERMUX_PKG_VERSION_EDITED//${INCORRECT_SYMBOLS:0:1}${INCORRECT_SYMBOLS:1:1}/${INCORRECT_SYMBOLS:0:1}.${INCORRECT_SYMBOLS:1:1}} - fi - local TERMUX_PKG_FULLVERSION="${TERMUX_PKG_VERSION_EDITED}" - if [ -n "$TERMUX_PKG_REVISION" ]; then - TERMUX_PKG_FULLVERSION+="-${TERMUX_PKG_REVISION}" - else - TERMUX_PKG_FULLVERSION+="-0" - fi - # Package metadata. { echo "pkgname = $SUB_PKG_NAME" echo "pkgbase = $TERMUX_PKG_NAME" - echo "pkgver = $TERMUX_PKG_FULLVERSION" + echo "pkgver = $TERMUX_PKG_FULLVERSION_FOR_PACMAN" echo "pkgdesc = $(echo "$TERMUX_SUBPKG_DESCRIPTION" | tr '\n' ' ')" echo "url = $TERMUX_PKG_HOMEPAGE" echo "builddate = $BUILD_DATE" @@ -122,7 +109,7 @@ termux_create_pacman_subpackages() { echo "format = 2" echo "pkgname = $SUB_PKG_NAME" echo "pkgbase = $TERMUX_PKG_NAME" - echo "pkgver = $TERMUX_PKG_FULLVERSION" + echo "pkgver = $TERMUX_PKG_FULLVERSION_FOR_PACMAN" echo "pkgarch = $SUB_PKG_ARCH" echo "packager = $TERMUX_PKG_MAINTAINER" echo "builddate = $BUILD_DATE" @@ -163,7 +150,7 @@ termux_create_pacman_subpackages() { esac # Create the actual .pkg file: - local TERMUX_SUBPKG_PACMAN_FILE=$TERMUX_OUTPUT_DIR/${SUB_PKG_NAME}${DEBUG}-${TERMUX_PKG_FULLVERSION}-${SUB_PKG_ARCH}.pkg.tar.${PKG_FORMAT} + local TERMUX_SUBPKG_PACMAN_FILE=$TERMUX_OUTPUT_DIR/${SUB_PKG_NAME}${DEBUG}-${TERMUX_PKG_FULLVERSION_FOR_PACMAN}-${SUB_PKG_ARCH}.pkg.tar.${PKG_FORMAT} shopt -s dotglob globstar printf '%s\0' **/* | bsdtar -cnf - --format=mtree \ --options='!all,use-set,type,uid,gid,mode,time,size,md5,sha256,link' \ diff --git a/scripts/build/termux_download_deb.sh b/scripts/build/termux_download_deb_pac.sh similarity index 91% rename from scripts/build/termux_download_deb.sh rename to scripts/build/termux_download_deb_pac.sh index a4e29df12..dc476e50a 100755 --- a/scripts/build/termux_download_deb.sh +++ b/scripts/build/termux_download_deb_pac.sh @@ -1,10 +1,11 @@ -termux_download_deb() { +termux_download_deb_pac() { local PACKAGE=$1 local PACKAGE_ARCH=$2 local VERSION=$3 + local VERSION_PACMAN=$4 if [ "$TERMUX_ON_DEVICE_BUILD" = "true" ]; then - apt install -y "${PACKAGE}=${VERSION}" + apt install -y "${PACKAGE}=${VERSION}" 2>/dev/null || pacman -S "${PACKAGE}=${VERSION_PACMAN}" --needed --noconfirm return "$?" fi diff --git a/scripts/build/termux_extract_dep_info.sh b/scripts/build/termux_extract_dep_info.sh index 7d6e5be13..5cc469bfd 100755 --- a/scripts/build/termux_extract_dep_info.sh +++ b/scripts/build/termux_extract_dep_info.sh @@ -33,13 +33,25 @@ termux_extract_dep_info() { ) fi ( + # debian version TERMUX_PKG_REVISION="0" source ${PKG_DIR}/build.sh if [ "$TERMUX_PKG_REVISION" != "0" ] || \ [ "$TERMUX_PKG_VERSION" != "${TERMUX_PKG_VERSION/-/}" ]; then TERMUX_PKG_VERSION+="-$TERMUX_PKG_REVISION" fi - echo ${TERMUX_ARCH} ${TERMUX_PKG_VERSION} + echo -n "${TERMUX_ARCH} ${TERMUX_PKG_VERSION} " + ) + ( + # pacman version + TERMUX_PKG_REVISION="0" + source ${PKG_DIR}/build.sh + TERMUX_PKG_VERSION_EDITED=${TERMUX_PKG_VERSION//-/.} + INCORRECT_SYMBOLS=$(echo $TERMUX_PKG_VERSION_EDITED | grep -o '[0-9][a-z]') + if [ -n "$INCORRECT_SYMBOLS" ]; then + TERMUX_PKG_VERSION_EDITED=${TERMUX_PKG_VERSION_EDITED//${INCORRECT_SYMBOLS:0:1}${INCORRECT_SYMBOLS:1:1}/${INCORRECT_SYMBOLS:0:1}.${INCORRECT_SYMBOLS:1:1}} + fi + echo "${TERMUX_PKG_VERSION_EDITED}-${TERMUX_PKG_REVISION}" ) } diff --git a/scripts/build/termux_step_create_pacman_package.sh b/scripts/build/termux_step_create_pacman_package.sh index 7b14b4dc3..0c79cc650 100644 --- a/scripts/build/termux_step_create_pacman_package.sh +++ b/scripts/build/termux_step_create_pacman_package.sh @@ -35,20 +35,7 @@ termux_step_create_pacman_package() { PKG_FORMAT="xz";; esac - # Version view revisions. - local TERMUX_PKG_VERSION_EDITED=${TERMUX_PKG_VERSION//-/.} - local INCORRECT_SYMBOLS=$(echo $TERMUX_PKG_VERSION_EDITED | grep -o '[0-9][a-z]') - if [ -n "$INCORRECT_SYMBOLS" ]; then - local TERMUX_PKG_VERSION_EDITED=${TERMUX_PKG_VERSION_EDITED//${INCORRECT_SYMBOLS:0:1}${INCORRECT_SYMBOLS:1:1}/${INCORRECT_SYMBOLS:0:1}.${INCORRECT_SYMBOLS:1:1}} - fi - local TERMUX_PKG_FULLVERSION="${TERMUX_PKG_VERSION_EDITED}" - if [ -n "$TERMUX_PKG_REVISION" ]; then - TERMUX_PKG_FULLVERSION+="-${TERMUX_PKG_REVISION}" - else - TERMUX_PKG_FULLVERSION+="-0" - fi - - local PACMAN_FILE=$TERMUX_OUTPUT_DIR/${TERMUX_PKG_NAME}${DEBUG}-${TERMUX_PKG_FULLVERSION}-${TERMUX_ARCH}.pkg.tar.${PKG_FORMAT} + local PACMAN_FILE=$TERMUX_OUTPUT_DIR/${TERMUX_PKG_NAME}${DEBUG}-${TERMUX_PKG_FULLVERSION_FOR_PACMAN}-${TERMUX_ARCH}.pkg.tar.${PKG_FORMAT} local BUILD_DATE BUILD_DATE=$(date +%s) @@ -57,7 +44,7 @@ termux_step_create_pacman_package() { { echo "pkgname = $TERMUX_PKG_NAME" echo "pkgbase = $TERMUX_PKG_NAME" - echo "pkgver = $TERMUX_PKG_FULLVERSION" + echo "pkgver = $TERMUX_PKG_FULLVERSION_FOR_PACMAN" echo "pkgdesc = $(echo "$TERMUX_PKG_DESCRIPTION" | tr '\n' ' ')" echo "url = $TERMUX_PKG_HOMEPAGE" echo "builddate = $BUILD_DATE" @@ -115,7 +102,7 @@ termux_step_create_pacman_package() { echo "format = 2" echo "pkgname = $TERMUX_PKG_NAME" echo "pkgbase = $TERMUX_PKG_NAME" - echo "pkgver = $TERMUX_PKG_FULLVERSION" + echo "pkgver = $TERMUX_PKG_FULLVERSION_FOR_PACMAN" echo "pkgarch = $TERMUX_ARCH" echo "packager = $TERMUX_PKG_MAINTAINER" echo "builddate = $BUILD_DATE" diff --git a/scripts/build/termux_step_get_dependencies.sh b/scripts/build/termux_step_get_dependencies.sh index 707b93ad4..0b6145490 100644 --- a/scripts/build/termux_step_get_dependencies.sh +++ b/scripts/build/termux_step_get_dependencies.sh @@ -4,7 +4,7 @@ termux_step_get_dependencies() { termux_get_repo_files # When doing build on device, ensure that apt lists are up-to-date. - [ "$TERMUX_ON_DEVICE_BUILD" = "true" ] && apt update + [ "$TERMUX_ON_DEVICE_BUILD" = "true" ] && (apt update 2>/dev/null || pacman -Sy) # Download dependencies while read PKG PKG_DIR; do @@ -15,7 +15,7 @@ termux_step_get_dependencies() { fi # llvm doesn't build if ndk-sysroot is installed: if [ "$PKG" = "ndk-sysroot" ]; then continue; fi - read DEP_ARCH DEP_VERSION <<< $(termux_extract_dep_info $PKG "${PKG_DIR}") + read DEP_ARCH DEP_VERSION DEP_VERSION_PAC <<< $(termux_extract_dep_info $PKG "${PKG_DIR}") if [ ! "$TERMUX_QUIET_BUILD" = true ]; then echo "Downloading dependency $PKG@$DEP_VERSION if necessary..." @@ -27,7 +27,7 @@ termux_step_get_dependencies() { fi fi - if ! termux_download_deb $PKG $DEP_ARCH $DEP_VERSION; then + if ! termux_download_deb_pac $PKG $DEP_ARCH $DEP_VERSION $DEP_VERSION_PAC; then echo "Download of $PKG@$DEP_VERSION from $TERMUX_REPO_URL failed, building instead" TERMUX_BUILD_IGNORE_LOCK=true ./build-package.sh -I --format $TERMUX_PACKAGE_FORMAT "${PKG_DIR}" continue diff --git a/scripts/build/termux_step_start_build.sh b/scripts/build/termux_step_start_build.sh index 5cf3bfeee..b1b7c7b5f 100644 --- a/scripts/build/termux_step_start_build.sh +++ b/scripts/build/termux_step_start_build.sh @@ -25,6 +25,18 @@ termux_step_start_build() { # "0" is the default revision, so only include it if the upstream versions contains "-" itself TERMUX_PKG_FULLVERSION+="-$TERMUX_PKG_REVISION" fi + # full format version for pacman + local TERMUX_PKG_VERSION_EDITED=${TERMUX_PKG_VERSION//-/.} + local INCORRECT_SYMBOLS=$(echo $TERMUX_PKG_VERSION_EDITED | grep -o '[0-9][a-z]') + if [ -n "$INCORRECT_SYMBOLS" ]; then + local TERMUX_PKG_VERSION_EDITED=${TERMUX_PKG_VERSION_EDITED//${INCORRECT_SYMBOLS:0:1}${INCORRECT_SYMBOLS:1:1}/${INCORRECT_SYMBOLS:0:1}.${INCORRECT_SYMBOLS:1:1}} + fi + TERMUX_PKG_FULLVERSION_FOR_PACMAN="${TERMUX_PKG_VERSION_EDITED}" + if [ -n "$TERMUX_PKG_REVISION" ]; then + TERMUX_PKG_FULLVERSION_FOR_PACMAN+="-${TERMUX_PKG_REVISION}" + else + TERMUX_PKG_FULLVERSION_FOR_PACMAN+="-0" + fi if [ "$TERMUX_DEBUG_BUILD" = "true" ]; then if [ "$TERMUX_PKG_HAS_DEBUG" = "true" ]; then @@ -43,7 +55,8 @@ termux_step_start_build() { echo "$TERMUX_PKG_NAME@$TERMUX_PKG_FULLVERSION built - skipping (rm $TERMUX_BUILT_PACKAGES_DIRECTORY/$TERMUX_PKG_NAME to force rebuild)" exit 0 elif [ "$TERMUX_ON_DEVICE_BUILD" = "true" ] && - [ "$(dpkg-query -W -f '${db:Status-Status} ${Version}\n' "$TERMUX_PKG_NAME" 2>/dev/null)" = "installed $TERMUX_PKG_FULLVERSION" ]; then + ([ "$(dpkg-query -W -f '${db:Status-Status} ${Version}\n' "$TERMUX_PKG_NAME" 2>/dev/null)" = "installed $TERMUX_PKG_FULLVERSION" ] || + [ "$(pacman -Q $TERMUX_PKG_NAME 2>/dev/null)" = "$TERMUX_PKG_NAME $TERMUX_PKG_FULLVERSION_FOR_PACMAN" ]); then echo "$TERMUX_PKG_NAME@$TERMUX_PKG_FULLVERSION installed - skipping" exit 0 fi