From 70fdc03530aad079d0771925c19aba2381f3ede7 Mon Sep 17 00:00:00 2001 From: termux-pacman-bot Date: Sun, 7 Jan 2024 20:08:22 +0000 Subject: [PATCH] Update repo --- build-package.sh | 17 +++++ scripts/build/termux_step_get_dependencies.sh | 75 ++++++++++++------- 2 files changed, 65 insertions(+), 27 deletions(-) diff --git a/build-package.sh b/build-package.sh index 7082f89d68..95f4825440 100755 --- a/build-package.sh +++ b/build-package.sh @@ -11,7 +11,9 @@ export TMPDIR if [[ ! "$TERMUX_BUILD_PACKAGE_CALL_DEPTH" =~ ^[0-9]+$ ]]; then export TERMUX_BUILD_PACKAGE_CALL_DEPTH=0 export TERMUX_BUILD_PACKAGE_CALL_BUILT_PACKAGES_LIST_FILE_PATH="${TMPDIR}/build-package-call-built-packages-list-$(date +"%Y-%m-%d-%H.%M.%S.")$((RANDOM%1000))" + export TERMUX_BUILD_PACKAGE_CALL_BUILDING_PACKAGES_LIST_FILE_PATH="${TMPDIR}/build-package-call-building-packages-list-$(date +"%Y-%m-%d-%H.%M.%S.")$((RANDOM%1000))" echo -n " " > "$TERMUX_BUILD_PACKAGE_CALL_BUILT_PACKAGES_LIST_FILE_PATH" + touch "$TERMUX_BUILD_PACKAGE_CALL_BUILDING_PACKAGES_LIST_FILE_PATH" else export TERMUX_BUILD_PACKAGE_CALL_DEPTH=$((TERMUX_BUILD_PACKAGE_CALL_DEPTH+1)) fi @@ -390,6 +392,13 @@ termux_add_package_to_built_packages_list() { fi } +# Check if the package is in the compiling list +termux_check_package_in_building_packages_list() { + [ ! -f "$TERMUX_BUILD_PACKAGE_CALL_BUILDING_PACKAGES_LIST_FILE_PATH" ] && termux_error_exit "ERROR: file '$TERMUX_BUILD_PACKAGE_CALL_BUILDING_PACKAGES_LIST_FILE_PATH' not found." + grep -q "^${1}$" "$TERMUX_BUILD_PACKAGE_CALL_BUILDING_PACKAGES_LIST_FILE_PATH" + return $? +} + # Special hook to prevent use of "sudo" inside package build scripts. # build-package.sh shouldn't perform any privileged operations. sudo() { @@ -610,6 +619,10 @@ for ((i=0; i<${#PACKAGE_LIST[@]}; i++)); do termux_step_start_build + if ! termux_check_package_in_building_packages_list "$TERMUX_PKG_NAME"; then + echo "$TERMUX_PKG_NAME" >> $TERMUX_BUILD_PACKAGE_CALL_BUILDING_PACKAGES_LIST_FILE_PATH + fi + if [ "$TERMUX_CONTINUE_BUILD" == "false" ]; then termux_step_get_dependencies if [ "$TERMUX_PACKAGE_LIBRARY" = "glibc" ]; then @@ -669,6 +682,9 @@ for ((i=0; i<${#PACKAGE_LIST[@]}; i++)); do termux_error_exit "Unknown packaging format '$TERMUX_PACKAGE_FORMAT'." fi # Saving a list of compiled packages for further work with it + if termux_check_package_in_building_packages_list "$TERMUX_PKG_NAME"; then + sed -i "/^${TERMUX_PKG_NAME}$/d" "$TERMUX_BUILD_PACKAGE_CALL_BUILDING_PACKAGES_LIST_FILE_PATH" + fi termux_add_package_to_built_packages_list "$TERMUX_PKG_NAME" termux_step_finish_build ) 5< "$TERMUX_BUILD_LOCK_FILE" @@ -677,4 +693,5 @@ done # Removing a file to store a list of compiled packages if [ "$TERMUX_BUILD_PACKAGE_CALL_DEPTH" = "0" ]; then rm "$TERMUX_BUILD_PACKAGE_CALL_BUILT_PACKAGES_LIST_FILE_PATH" + rm "$TERMUX_BUILD_PACKAGE_CALL_BUILDING_PACKAGES_LIST_FILE_PATH" fi diff --git a/scripts/build/termux_step_get_dependencies.sh b/scripts/build/termux_step_get_dependencies.sh index 442743e9c6..f3a664d516 100644 --- a/scripts/build/termux_step_get_dependencies.sh +++ b/scripts/build/termux_step_get_dependencies.sh @@ -5,16 +5,21 @@ termux_step_get_dependencies() { if [ "$TERMUX_INSTALL_DEPS" = true ]; then # Download repo files - termux_get_repo_files + termux_download_repo_file + fi - # When doing build on device, ensure that apt lists are up-to-date. - if [ "$TERMUX_ON_DEVICE_BUILD" = "true" ]; then - case "$TERMUX_APP_PACKAGE_MANAGER" in - "apt") apt update;; - "pacman") pacman -Sy;; - esac + while read PKG PKG_DIR; do + # Checking for duplicate dependencies + local cyclic_dependence=false + if termux_check_package_in_building_packages_list "$PKG"; then + echo "A circular dependency was found on '$PKG', the old version of the package will be installed to resolve the conflict" + cyclic_dependence=true + if [ "$TERMUX_INSTALL_DEPS" = false ]; then + termux_download_repo_file + fi fi - while read PKG PKG_DIR; do + + if [ "$TERMUX_INSTALL_DEPS" = true ] || [ "$cyclic_dependence" = true ]; then if [ -z $PKG ]; then continue elif [ "$PKG" = "ERROR" ]; then @@ -23,11 +28,15 @@ termux_step_get_dependencies() { # llvm doesn't build if ndk-sysroot is installed: if [ "$PKG" = "ndk-sysroot" ]; then continue; fi read DEP_ARCH DEP_VERSION DEP_VERSION_PAC <<< $(termux_extract_dep_info $PKG "${PKG_DIR}") - [ ! "$TERMUX_QUIET_BUILD" = true ] && echo "Downloading dependency $PKG$(test ${TERMUX_WITHOUT_DEPVERSION_BINDING} = false && echo "@$DEP_VERSION") if necessary..." - local force_build_dependency="$TERMUX_FORCE_BUILD_DEPENDENCIES" - if [ "$TERMUX_FORCE_BUILD_DEPENDENCIES" = "true" ] && [ "$TERMUX_ON_DEVICE_BUILD" = "true" ] && ! package__is_package_on_device_build_supported "$PKG_DIR"; then - echo "Building dependency $PKG on device is not supported. It will be downloaded..." - force_build_dependency="false" + if [ "$cyclic_dependence" = false ]; then + [ ! "$TERMUX_QUIET_BUILD" = true ] && echo "Downloading dependency $PKG$(test ${TERMUX_WITHOUT_DEPVERSION_BINDING} = false && echo "@$DEP_VERSION") if necessary..." + local force_build_dependency="$TERMUX_FORCE_BUILD_DEPENDENCIES" + if [ "$TERMUX_FORCE_BUILD_DEPENDENCIES" = "true" ] && [ "$TERMUX_ON_DEVICE_BUILD" = "true" ] && ! package__is_package_on_device_build_supported "$PKG_DIR"; then + echo "Building dependency $PKG on device is not supported. It will be downloaded..." + force_build_dependency="false" + fi + else + local force_build_dependency=false fi local build_dependency=false if [ "$force_build_dependency" = "true" ]; then @@ -39,9 +48,9 @@ termux_step_get_dependencies() { [ ! "$TERMUX_QUIET_BUILD" = true ] && echo "Skipping already built dependency $PKG$(test ${TERMUX_WITHOUT_DEPVERSION_BINDING} = false && echo "@$DEP_VERSION")" continue fi - if ! termux_download_deb_pac $PKG $DEP_ARCH $DEP_VERSION $DEP_VERSION_PAC; then - if [ "$TERMUX_FORCE_BUILD_DEPENDENCIES" = "true" ] && [ "$TERMUX_ON_DEVICE_BUILD" = "true" ]; then - echo "Download of $PKG$(test ${TERMUX_WITHOUT_DEPVERSION_BINDING} = false && echo "@$DEP_VERSION") from $TERMUX_REPO_URL failed" + if ! TERMUX_WITHOUT_DEPVERSION_BINDING=$(test "${cyclic_dependence}" = "true" && echo "true" || echo "${TERMUX_WITHOUT_DEPVERSION_BINDING}") termux_download_deb_pac $PKG $DEP_ARCH $DEP_VERSION $DEP_VERSION_PAC; then + if [ "$cyclic_dependence" = "true" ] || ([ "$TERMUX_FORCE_BUILD_DEPENDENCIES" = "true" ] && [ "$TERMUX_ON_DEVICE_BUILD" = "true" ]); then + echo "Download of $PKG$(test ${TERMUX_WITHOUT_DEPVERSION_BINDING} = false && test ${cyclic_dependence} = false && echo "@$DEP_VERSION") from $TERMUX_REPO_URL failed" return 1 else echo "Download of $PKG$(test ${TERMUX_WITHOUT_DEPVERSION_BINDING} = false && echo "@$DEP_VERSION") from $TERMUX_REPO_URL failed, building instead" @@ -49,11 +58,13 @@ termux_step_get_dependencies() { fi fi fi - if $build_dependency; then - termux_run_build-package - continue + if [ "$cyclic_dependence" = false ]; then + if $build_dependency; then + termux_run_build-package + continue + fi + termux_add_package_to_built_packages_list "$PKG" fi - termux_add_package_to_built_packages_list "$PKG" if [ "$TERMUX_ON_DEVICE_BUILD" = "false" ]; then [ ! "$TERMUX_QUIET_BUILD" = true ] && echo "extracting $PKG to $TERMUX_COMMON_CACHEDIR-$DEP_ARCH..." ( @@ -75,13 +86,11 @@ termux_step_get_dependencies() { ) fi mkdir -p $TERMUX_BUILT_PACKAGES_DIRECTORY - if [ "$TERMUX_WITHOUT_DEPVERSION_BINDING" = "false" ] || [ "$TERMUX_ON_DEVICE_BUILD" = "false" ]; then + if [ "$cyclic_dependence" = "false" ] && ([ "$TERMUX_WITHOUT_DEPVERSION_BINDING" = "false" ] || [ "$TERMUX_ON_DEVICE_BUILD" = "false" ]); then echo "$DEP_VERSION" > "$TERMUX_BUILT_PACKAGES_DIRECTORY/$PKG" fi - done<<<$(./scripts/buildorder.py -i "$TERMUX_PKG_BUILDER_DIR" $TERMUX_PACKAGES_DIRECTORIES || echo "ERROR") - else + else # Build dependencies - while read PKG PKG_DIR; do if [ -z $PKG ]; then continue elif [ "$PKG" = "ERROR" ]; then @@ -100,8 +109,8 @@ termux_step_get_dependencies() { [ ! "$TERMUX_QUIET_BUILD" = true ] && echo "Building dependency $PKG if necessary..." fi termux_run_build-package - done<<<$(./scripts/buildorder.py "$TERMUX_PKG_BUILDER_DIR" $TERMUX_PACKAGES_DIRECTORIES || echo "ERROR") - fi + fi + done<<<$(./scripts/buildorder.py $(test "${TERMUX_INSTALL_DEPS}" = "true" && echo "-i") "$TERMUX_PKG_BUILDER_DIR" $TERMUX_PACKAGES_DIRECTORIES || echo "ERROR") } termux_force_check_package_dependency() { @@ -124,7 +133,19 @@ termux_run_build-package() { fi TERMUX_BUILD_IGNORE_LOCK=true ./build-package.sh \ $(test "${TERMUX_INSTALL_DEPS}" = "true" && echo "-I" || echo "-s") \ - $(test "${TERMUX_FORCE_BUILD_DEPENDENCIES}" = "true" && echo "-F" || true) \ + $(test "${TERMUX_FORCE_BUILD_DEPENDENCIES}" = "true" && echo "-F") \ $(test "${TERMUX_WITHOUT_DEPVERSION_BINDING}" = "true" && echo "-w") \ --format $TERMUX_PACKAGE_FORMAT --library $set_library "${PKG_DIR}" } + +termux_download_repo_file() { + termux_get_repo_files + + # When doing build on device, ensure that apt lists are up-to-date. + if [ "$TERMUX_ON_DEVICE_BUILD" = "true" ]; then + case "$TERMUX_APP_PACKAGE_MANAGER" in + "apt") apt update;; + "pacman") pacman -Sy;; + esac + fi +}