@@ -24,11 +24,19 @@ cd "$(realpath "$(dirname "$0")")"
24
24
TERMUX_SCRIPTDIR=$( pwd)
25
25
export TERMUX_SCRIPTDIR
26
26
27
+
28
+
29
+ # Source the utils library.
30
+ # shellcheck source=scripts/utils/utils.sh
31
+ source " $TERMUX_SCRIPTDIR /scripts/utils/utils.sh"
32
+
33
+ # Set all utils library default variables
34
+ utils__set_all_default_variables || exit $?
35
+
27
36
# Store pid of current process in a file for docker__run_docker_exec_trap
28
- source " $TERMUX_SCRIPTDIR /scripts/utils/docker/docker.sh" ; docker__create_docker_exec_pid_file
37
+ docker__create_docker_exec_pid_file
38
+
29
39
30
- # Source the `termux_package` library.
31
- source " $TERMUX_SCRIPTDIR /scripts/utils/termux/package/termux_package.sh"
32
40
33
41
export SOURCE_DATE_EPOCH=${SOURCE_DATE_EPOCH:- $(git -c log.showSignature=false log -1 --pretty=% ct 2>/ dev/ null || date " +%s" )}
34
42
60
68
61
69
export TERMUX_REPO_PKG_FORMAT=$( jq --raw-output ' .pkg_format // "debian"' ${TERMUX_SCRIPTDIR} /repo.json)
62
70
71
+ TERMUX_PKGS__BUILD__NO_BUILD_UNNEEDED_SUBPACKAGES=" false"
72
+
63
73
# Special variable for internal use. It forces script to ignore
64
74
# lock file.
65
75
: " ${TERMUX_BUILD_IGNORE_LOCK:= false} "
@@ -221,6 +231,15 @@ source "$TERMUX_SCRIPTDIR/scripts/build/termux_step_start_build.sh"
221
231
# shellcheck source=scripts/build/termux_step_start_build.sh
222
232
source " $TERMUX_SCRIPTDIR /scripts/build/termux_step_cleanup_packages.sh"
223
233
234
+ # Set the package version variables. Not to be overridden by packages.
235
+ # shellcheck source=scripts/build/termux_set_package_version_variables.sh
236
+ source " $TERMUX_SCRIPTDIR /scripts/build/termux_set_package_version_variables.sh"
237
+
238
+ # Validate if all package files for package were successfully built.
239
+ # Not to be overridden by packages.
240
+ # shellcheck source=scripts/build/termux_validate_built_packages.sh
241
+ source " $TERMUX_SCRIPTDIR /scripts/build/termux_validate_built_packages.sh"
242
+
224
243
# Download or build dependencies. Not to be overridden by packages.
225
244
# shellcheck source=scripts/build/termux_step_create_timestamp_file.sh
226
245
source " $TERMUX_SCRIPTDIR /scripts/build/termux_step_create_timestamp_file.sh"
@@ -343,6 +362,10 @@ source "$TERMUX_SCRIPTDIR/scripts/build/termux_step_copy_into_massagedir.sh"
343
362
# shellcheck source=scripts/build/termux_step_create_subpkg_debscripts.sh
344
363
source " $TERMUX_SCRIPTDIR /scripts/build/termux_step_create_subpkg_debscripts.sh"
345
364
365
+ # Set all subpackages for package in TERMUX_PKG_SUBPACKAGES_LIST.
366
+ # shellcheck source=scripts/build/termux_set_subpackages.sh
367
+ source " $TERMUX_SCRIPTDIR /scripts/build/termux_set_subpackages.sh"
368
+
346
369
# Create all subpackages. Run from termux_step_massage
347
370
# shellcheck source=scripts/build/termux_create_debian_subpackages.sh
348
371
source " $TERMUX_SCRIPTDIR /scripts/build/termux_create_debian_subpackages.sh"
@@ -382,6 +405,10 @@ source "$TERMUX_SCRIPTDIR/scripts/build/termux_step_create_debscripts.sh"
382
405
# shellcheck source=scripts/build/termux_step_create_pacman_install_hook.sh
383
406
source " $TERMUX_SCRIPTDIR /scripts/build/termux_step_create_pacman_install_hook.sh"
384
407
408
+ # Set the package file variables. Not to be overridden by packages.
409
+ # shellcheck source=scripts/build/termux_set_package_file_variables.sh
410
+ source " $TERMUX_SCRIPTDIR /scripts/build/termux_set_package_file_variables.sh"
411
+
385
412
# Create the build deb file. Not to be overridden by package scripts.
386
413
# shellcheck source=scripts/build/termux_step_create_debian_package.sh
387
414
source " $TERMUX_SCRIPTDIR /scripts/build/termux_step_create_debian_package.sh"
@@ -500,10 +527,11 @@ _show_usage() {
500
527
echo " -o Specify directory where to put built packages. Default: output/."
501
528
echo " --format Specify package output format (debian, pacman)."
502
529
echo " --library Specify library of package (bionic, glibc)."
530
+ echo " --no-build-unneeded-subpackages Do not build unneeded subpackages that are not dependencies of parent package."
503
531
exit 1
504
532
}
505
533
506
- declare -a PACKAGE_LIST =()
534
+ declare -a PACKAGES_ARGS_LIST =()
507
535
508
536
if [ " $# " -lt 1 ]; then _show_usage; fi
509
537
while (( $# >= 1 )) ; do
@@ -532,6 +560,9 @@ while (($# >= 1)); do
532
560
termux_error_exit " ./build-package.sh: option '--library' requires an argument"
533
561
fi
534
562
;;
563
+ --no-build-unneeded-subpackages)
564
+ export TERMUX_PKGS__BUILD__NO_BUILD_UNNEEDED_SUBPACKAGES=" true"
565
+ ;;
535
566
-a)
536
567
if [ $# -ge 2 ]; then
537
568
shift 1
@@ -582,11 +613,10 @@ while (($# >= 1)); do
582
613
-c) TERMUX_CONTINUE_BUILD=true;;
583
614
-C) TERMUX_CLEANUP_BUILT_PACKAGES_ON_LOW_DISK_SPACE=true;;
584
615
-* ) termux_error_exit " ./build-package.sh: illegal option '$1 '" ;;
585
- * ) PACKAGE_LIST +=(" $1 " );;
616
+ * ) PACKAGES_ARGS_LIST +=(" $1 " );;
586
617
esac
587
618
shift 1
588
619
done
589
- unset -f _show_usage
590
620
591
621
# Dependencies should be used from repo only if they are built for
592
622
# same package name.
@@ -613,6 +643,11 @@ if [ -n "${TERMUX_PACKAGE_LIBRARY-}" ]; then
613
643
esac
614
644
fi
615
645
646
+ if [ " ${TERMUX_INSTALL_DEPS:- false} " = " true" ]; then
647
+ # Request `buildorder.py` to return legacy build order if a cycle is found with topological build order.
648
+ export TERMUX_PKGS__BUILD_ORDER__RETURN_LEGACY_TARGET_BUILD_ORDER_ON_CYCLE=" true"
649
+ fi
650
+
616
651
if [ " ${TERMUX_INSTALL_DEPS-false} " = " true" ] || [ " ${TERMUX_PACKAGE_LIBRARY-bionic} " = " glibc" ]; then
617
652
# Setup PGP keys for verifying integrity of dependencies.
618
653
# Keys are obtained from our keyring package.
@@ -630,7 +665,32 @@ if [ "${TERMUX_INSTALL_DEPS-false}" = "true" ] || [ "${TERMUX_PACKAGE_LIBRARY-bi
630
665
}
631
666
fi
632
667
633
- for (( i= 0 ; i< ${# PACKAGE_LIST[@]} ; i++ )) ; do
668
+ # Remove duplicate and empty packages passed
669
+ declare -A PACKAGES_FOUND_LIST=()
670
+ declare -a PACKAGES_LIST=()
671
+
672
+ for i in " ${PACKAGES_ARGS_LIST[@]} " ; do
673
+ if [[ -z " ${i:- } " ]]; then
674
+ continue
675
+ fi
676
+ if [[ -z " ${PACKAGES_FOUND_LIST["$i"]:- } " ]]; then
677
+ PACKAGES_LIST+=(" $i " )
678
+ fi
679
+ PACKAGES_FOUND_LIST[" $i " ]=1
680
+ done
681
+ unset PACKAGES_ARGS_LIST
682
+ unset PACKAGES_FOUND_LIST
683
+
684
+ if [ " ${# PACKAGES_LIST[@]} " -lt 1 ]; then _show_usage; unset -f _show_usage; fi
685
+
686
+
687
+
688
+ # Build all packages in PACKAGES_LIST
689
+ if [ " $TERMUX_BUILD_PACKAGE_CALL_DEPTH " -ge 1 ]; then echo $' \n\n\n\n\n ' ; fi
690
+ echo -n " [*] Building packages for arch '${TERMUX_ARCH:= " aarch64" } ': "
691
+ for (( i= 0 ; i< ${# PACKAGES_LIST[@]} ; i++ )) ; do [ " $i " -ge 1 ] && echo -n " , " ; echo -n " '${PACKAGES_LIST[i]} '" ; done ; echo
692
+
693
+ for (( i= 0 ; i< ${# PACKAGES_LIST[@]} ; i++ )) ; do
634
694
# Following commands must be executed under lock to prevent running
635
695
# multiple instances of "./build-package.sh".
636
696
#
@@ -658,35 +718,32 @@ for ((i=0; i<${#PACKAGE_LIST[@]}; i++)); do
658
718
$( test " ${TERMUX_WITHOUT_DEPVERSION_BINDING:- } " = " true" && echo " -w" ) \
659
719
$( test -n " ${TERMUX_PACKAGE_FORMAT:- } " && echo " --format $TERMUX_PACKAGE_FORMAT " ) \
660
720
$( test -n " ${TERMUX_PACKAGE_LIBRARY:- } " && echo " --library $TERMUX_PACKAGE_LIBRARY " ) \
661
- " ${PACKAGE_LIST[i]} "
721
+ $( test " ${TERMUX_PKGS__BUILD__NO_BUILD_UNNEEDED_SUBPACKAGES:- } " = " true" && echo " --no-build-unneeded-subpackages" ) \
722
+ " ${PACKAGES_LIST[i]} "
662
723
done
663
724
exit
664
725
fi
665
726
666
- # Check the package to build:
667
- TERMUX_PKG_NAME= $( basename " ${PACKAGE_LIST[i]} " )
668
- export TERMUX_PKG_BUILDER_DIR=
669
- if [[ ${PACKAGE_LIST[i]} == * " / " * ]] ; then
670
- # Path to directory which may be outside this repo:
671
- if [ ! -d " ${PACKAGE_LIST[i]} " ] ; then termux_error_exit " ' ${PACKAGE_LIST[i]} ' seems to be a path but is not a directory " ; fi
672
- export TERMUX_PKG_BUILDER_DIR= $( realpath " ${PACKAGE_LIST[i]} " )
727
+ # Get package directory and type for the package to build:
728
+ declare orig_package_name package_name package_dir subpackage_name is_subpackage is_virtual
729
+ termux_package__set_package_build_file_variables " ${PACKAGES_LIST[i]} " " $TERMUX_SCRIPTDIR " " $TERMUX_PACKAGES_DIRECTORIES " " ${TERMUX_IS_DISABLED :- } "
730
+
731
+ if [ " $i " -ge 1 ] ; then echo $' \n\n\n ' ; fi
732
+ if [ " $is_subpackage " != " true " ] ; then
733
+ echo " [*] Building package ' $package_name '... "
673
734
else
674
- # Package name:
675
- for package_directory in $TERMUX_PACKAGES_DIRECTORIES ; do
676
- if [ -d " ${TERMUX_SCRIPTDIR} /${package_directory} /${TERMUX_PKG_NAME} " ]; then
677
- export TERMUX_PKG_BUILDER_DIR=${TERMUX_SCRIPTDIR} /$package_directory /$TERMUX_PKG_NAME
678
- break
679
- elif [ -n " ${TERMUX_IS_DISABLED=" " } " ] && [ -d " ${TERMUX_SCRIPTDIR} /disabled-packages/${TERMUX_PKG_NAME} " ]; then
680
- export TERMUX_PKG_BUILDER_DIR=$TERMUX_SCRIPTDIR /disabled-packages/$TERMUX_PKG_NAME
681
- break
682
- fi
683
- done
684
- if [ -z " ${TERMUX_PKG_BUILDER_DIR} " ]; then
685
- termux_error_exit " No package $TERMUX_PKG_NAME found in any of the enabled repositories. Are you trying to set up a custom repository?"
735
+ if [ " $is_virtual " = " true" ]; then
736
+ echo " [*] Building package '$package_name ' for virtual subpackage '$subpackage_name '..."
737
+ else
738
+ echo " [*] Building package '$package_name ' for subpackage '$subpackage_name '..."
686
739
fi
687
740
fi
741
+
742
+ TERMUX_PKG_NAME=" $package_name "
743
+ export TERMUX_ORIG_PKG_NAME=" $orig_package_name "
744
+ export TERMUX_PKG_BUILDER_DIR=" $package_dir "
688
745
TERMUX_PKG_BUILDER_SCRIPT=$TERMUX_PKG_BUILDER_DIR /build.sh
689
- if test ! -f " $TERMUX_PKG_BUILDER_SCRIPT " ; then
746
+ if [ ! -f " $TERMUX_PKG_BUILDER_SCRIPT " ] ; then
690
747
termux_error_exit " No build.sh script at package dir $TERMUX_PKG_BUILDER_DIR !"
691
748
fi
692
749
@@ -763,11 +820,15 @@ for ((i=0; i<${#PACKAGE_LIST[@]}; i++)); do
763
820
else
764
821
termux_error_exit " Unknown packaging format '$TERMUX_PACKAGE_FORMAT '."
765
822
fi
823
+
824
+ termux_validate_built_packages
825
+
766
826
# Saving a list of compiled packages for further work with it
767
827
if termux_check_package_in_building_packages_list " ${TERMUX_PKG_BUILDER_DIR# ${TERMUX_SCRIPTDIR} / } " ; then
768
828
sed -i " \|^${TERMUX_PKG_BUILDER_DIR# ${TERMUX_SCRIPTDIR} / } $|d" " $TERMUX_BUILD_PACKAGE_CALL_BUILDING_PACKAGES_LIST_FILE_PATH "
769
829
fi
770
830
termux_add_package_to_built_packages_list " $TERMUX_PKG_NAME "
831
+
771
832
termux_step_finish_build
772
833
) 5< " $TERMUX_BUILD_LOCK_FILE "
773
834
done
0 commit comments