2015-06-13 01:03:31 +02:00
|
|
|
#!/bin/bash
|
2018-08-27 22:27:42 +02:00
|
|
|
# shellcheck disable=SC1117
|
2015-06-13 01:03:31 +02:00
|
|
|
|
|
|
|
set -e -o pipefail -u
|
|
|
|
|
2019-04-20 16:27:24 +02:00
|
|
|
# Utility function to log an error message and exit with an error code.
|
|
|
|
source scripts/build/termux_error_exit.sh
|
|
|
|
|
2019-03-26 00:27:09 +01:00
|
|
|
if [ "$(uname -o)" = Android ]; then
|
|
|
|
termux_error_exit "On-device builds are not supported - see README.md"
|
|
|
|
fi
|
|
|
|
|
2019-03-06 15:46:53 +01:00
|
|
|
# Lock file to prevent parallel running in the same environment.
|
|
|
|
TERMUX_BUILD_LOCK_FILE="/tmp/.termux-build.lck"
|
|
|
|
if [ ! -e "$TERMUX_BUILD_LOCK_FILE" ]; then
|
|
|
|
touch "$TERMUX_BUILD_LOCK_FILE"
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Special variable for internal use. It forces script to ignore
|
|
|
|
# lock file.
|
|
|
|
: "${TERMUX_BUILD_IGNORE_LOCK:=false}"
|
|
|
|
|
2018-08-21 00:35:50 +02:00
|
|
|
# Utility function to download a resource with an expected checksum.
|
2019-02-26 21:29:01 +01:00
|
|
|
source scripts/build/termux_download.sh
|
2017-01-06 02:37:45 +01:00
|
|
|
|
|
|
|
# Utility function for golang-using packages to setup a go toolchain.
|
2019-02-26 21:30:03 +01:00
|
|
|
source scripts/build/setup/termux_setup_golang.sh
|
2017-01-06 02:37:45 +01:00
|
|
|
|
2018-09-03 23:57:26 +02:00
|
|
|
# Utility function for rust-using packages to setup a rust toolchain.
|
2019-02-26 21:33:42 +01:00
|
|
|
source scripts/build/setup/termux_setup_rust.sh
|
2018-09-03 23:57:26 +02:00
|
|
|
|
2017-11-07 02:26:49 +01:00
|
|
|
# Utility function to setup a current ninja build system.
|
2019-02-26 21:34:02 +01:00
|
|
|
source scripts/build/setup/termux_setup_ninja.sh
|
2017-07-29 02:11:04 +02:00
|
|
|
|
2017-11-07 02:26:49 +01:00
|
|
|
# Utility function to setup a current meson build system.
|
2019-02-26 21:34:34 +01:00
|
|
|
source scripts/build/setup/termux_setup_meson.sh
|
2017-07-29 02:11:04 +02:00
|
|
|
|
2017-11-07 02:26:49 +01:00
|
|
|
# Utility function to setup a current cmake build system
|
2019-02-26 21:35:27 +01:00
|
|
|
source scripts/build/setup/termux_setup_cmake.sh
|
2017-01-11 18:21:58 +01:00
|
|
|
|
2019-05-12 00:08:10 +02:00
|
|
|
# Utility function to setup protobuf:
|
|
|
|
source scripts/build/setup/termux_setup_protobuf.sh
|
|
|
|
|
2017-01-06 02:37:45 +01:00
|
|
|
# Setup variables used by the build. Not to be overridden by packages.
|
2019-02-26 21:36:42 +01:00
|
|
|
source scripts/build/termux_step_setup_variables.sh
|
2017-01-06 02:37:45 +01:00
|
|
|
|
|
|
|
# Save away and restore build setups which may change between builds.
|
2019-02-26 21:37:26 +01:00
|
|
|
source scripts/build/termux_step_handle_buildarch.sh
|
2016-05-31 01:25:12 +02:00
|
|
|
|
2018-12-29 11:56:40 +01:00
|
|
|
# Function to get TERMUX_PKG_VERSION from build.sh
|
2019-02-26 21:39:17 +01:00
|
|
|
source scripts/build/termux_extract_dep_info.sh
|
2018-12-29 11:56:40 +01:00
|
|
|
|
2019-02-26 21:39:58 +01:00
|
|
|
# Function that downloads a .deb (using the termux_download function)
|
|
|
|
source scripts/build/termux_download_deb.sh
|
2018-12-29 14:50:27 +01:00
|
|
|
|
2019-01-01 21:56:42 +01:00
|
|
|
# Script to download InRelease, verify it's signature and then download Packages.xz by hash
|
2019-03-03 12:32:22 +01:00
|
|
|
source scripts/build/termux_get_repo_files.sh
|
2019-01-01 21:56:42 +01:00
|
|
|
|
|
|
|
# Source the package build script and start building. No to be overridden by packages.
|
2019-02-26 21:41:19 +01:00
|
|
|
source scripts/build/termux_step_start_build.sh
|
2017-01-06 02:37:45 +01:00
|
|
|
|
|
|
|
# Run just after sourcing $TERMUX_PKG_BUILDER_SCRIPT. May be overridden by packages.
|
2019-02-26 21:42:19 +01:00
|
|
|
source scripts/build/termux_step_extract_package.sh
|
2015-06-13 01:03:31 +02:00
|
|
|
|
2017-01-06 02:37:45 +01:00
|
|
|
# Hook for packages to act just after the package has been extracted.
|
2017-01-10 09:14:35 +01:00
|
|
|
# Invoked in $TERMUX_PKG_SRCDIR.
|
2017-01-10 12:35:05 +01:00
|
|
|
termux_step_post_extract_package() {
|
2019-02-12 09:23:21 +01:00
|
|
|
return
|
2015-06-13 01:03:31 +02:00
|
|
|
}
|
|
|
|
|
2017-01-06 02:37:45 +01:00
|
|
|
# Optional host build. Not to be overridden by packages.
|
2019-02-26 21:27:00 +01:00
|
|
|
source scripts/build/termux_step_handle_hostbuild.sh
|
2017-01-06 02:37:45 +01:00
|
|
|
|
2015-06-13 01:03:31 +02:00
|
|
|
# Perform a host build. Will be called in $TERMUX_PKG_HOSTBUILD_DIR.
|
|
|
|
# After termux_step_post_extract_package() and before termux_step_patch_package()
|
2019-02-26 21:28:04 +01:00
|
|
|
source scripts/build/termux_step_host_build.sh
|
2015-06-13 01:03:31 +02:00
|
|
|
|
2017-01-06 02:37:45 +01:00
|
|
|
# Setup a standalone Android NDK toolchain. Not to be overridden by packages.
|
2019-02-27 19:37:27 +01:00
|
|
|
source scripts/build/termux_step_setup_toolchain.sh
|
2017-01-06 02:37:45 +01:00
|
|
|
|
2017-01-07 06:38:04 +01:00
|
|
|
# Apply all *.patch files for the package. Not to be overridden by packages.
|
2019-02-27 19:38:58 +01:00
|
|
|
source scripts/build/termux_step_patch_package.sh
|
2015-06-13 01:03:31 +02:00
|
|
|
|
2017-03-05 11:40:50 +01:00
|
|
|
# Replace autotools build-aux/config.{sub,guess} with ours to add android targets.
|
2019-02-27 19:39:41 +01:00
|
|
|
source scripts/build/termux_step_replace_guess_scripts.sh
|
2015-06-13 01:03:31 +02:00
|
|
|
|
2017-01-06 02:37:45 +01:00
|
|
|
# For package scripts to override. Called in $TERMUX_PKG_BUILDDIR.
|
2017-01-10 12:35:05 +01:00
|
|
|
termux_step_pre_configure() {
|
2017-01-06 02:37:45 +01:00
|
|
|
return
|
2015-06-13 01:03:31 +02:00
|
|
|
}
|
|
|
|
|
2019-02-27 19:40:34 +01:00
|
|
|
# Setup configure args and run $TERMUX_PKG_SRCDIR/configure. This function is called from termux_step_configure
|
|
|
|
source scripts/build/configure/termux_step_configure_autotools.sh
|
2015-06-13 01:03:31 +02:00
|
|
|
|
2019-02-27 19:47:03 +01:00
|
|
|
# Setup configure args and run cmake. This function is called from termux_step_configure
|
|
|
|
source scripts/build/configure/termux_step_configure_cmake.sh
|
2017-01-15 13:48:05 +01:00
|
|
|
|
2019-02-27 19:48:46 +01:00
|
|
|
# Setup configure args and run meson. This function is called from termux_step_configure
|
|
|
|
source scripts/build/configure/termux_step_configure_meson.sh
|
2017-07-29 02:11:04 +02:00
|
|
|
|
2019-02-27 19:49:12 +01:00
|
|
|
# Configure the package
|
|
|
|
source scripts/build/configure/termux_step_configure.sh
|
2017-01-15 13:48:05 +01:00
|
|
|
|
2019-02-27 20:01:08 +01:00
|
|
|
# Hook for packages after configure step
|
2019-02-08 10:37:29 +01:00
|
|
|
termux_step_post_configure() {
|
2017-01-06 02:37:45 +01:00
|
|
|
return
|
2015-06-13 01:03:31 +02:00
|
|
|
}
|
|
|
|
|
2019-02-27 19:49:39 +01:00
|
|
|
# Make package, either with ninja or make
|
|
|
|
source scripts/build/termux_step_make.sh
|
2015-06-13 01:03:31 +02:00
|
|
|
|
2019-02-27 19:50:20 +01:00
|
|
|
# Make install, either with ninja, make of cargo
|
|
|
|
source scripts/build/termux_step_make_install.sh
|
2015-06-13 01:03:31 +02:00
|
|
|
|
2017-01-06 02:37:45 +01:00
|
|
|
# Hook function for package scripts to override.
|
2017-01-10 12:35:05 +01:00
|
|
|
termux_step_post_make_install() {
|
2017-01-06 02:37:45 +01:00
|
|
|
return
|
2015-06-13 01:03:31 +02:00
|
|
|
}
|
|
|
|
|
2019-04-28 22:07:07 +02:00
|
|
|
# Link/copy the LICENSE for the package to $TERMUX_PREFIX/share/$TERMUX_PKG_NAME/
|
|
|
|
source scripts/build/termux_step_install_license.sh
|
|
|
|
|
2019-02-27 19:53:53 +01:00
|
|
|
# Function to cp (through tar) installed files to massage dir
|
|
|
|
source scripts/build/termux_step_extract_into_massagedir.sh
|
2015-06-13 01:03:31 +02:00
|
|
|
|
2019-03-07 20:35:32 +01:00
|
|
|
# Create all subpackages. Run from termux_step_massage
|
|
|
|
source scripts/build/termux_create_subpackages.sh
|
|
|
|
|
2019-02-27 19:58:17 +01:00
|
|
|
# Function to run various cleanup/fixes
|
|
|
|
source scripts/build/termux_step_massage.sh
|
2015-06-13 01:03:31 +02:00
|
|
|
|
2019-02-27 20:01:08 +01:00
|
|
|
# Hook for packages after massage step
|
2017-01-10 12:35:05 +01:00
|
|
|
termux_step_post_massage() {
|
2017-01-06 02:37:45 +01:00
|
|
|
return
|
2015-06-13 01:03:31 +02:00
|
|
|
}
|
|
|
|
|
2017-01-06 02:37:45 +01:00
|
|
|
# Create data.tar.gz with files to package. Not to be overridden by package scripts.
|
2019-02-27 19:58:49 +01:00
|
|
|
source scripts/build/termux_step_create_datatar.sh
|
2016-01-11 01:45:41 +01:00
|
|
|
|
2019-02-27 20:01:08 +01:00
|
|
|
# Hook function to create {pre,post}install, {pre,post}rm-scripts and similar
|
2017-01-10 12:35:05 +01:00
|
|
|
termux_step_create_debscripts() {
|
2017-01-06 02:37:45 +01:00
|
|
|
return
|
2015-12-20 18:02:59 +01:00
|
|
|
}
|
|
|
|
|
2017-01-06 02:37:45 +01:00
|
|
|
# Create the build deb file. Not to be overridden by package scripts.
|
2019-02-27 19:59:31 +01:00
|
|
|
source scripts/build/termux_step_create_debfile.sh
|
2015-06-13 01:03:31 +02:00
|
|
|
|
2017-01-06 02:37:45 +01:00
|
|
|
# Finish the build. Not to be overridden by package scripts.
|
2019-02-27 20:00:42 +01:00
|
|
|
source scripts/build/termux_step_finish_build.sh
|
2016-09-25 01:30:20 +02:00
|
|
|
|
2019-07-20 14:32:54 +02:00
|
|
|
################################################################################
|
|
|
|
|
|
|
|
_show_usage() {
|
|
|
|
echo "Usage: ./build-package.sh [-a ARCH] [-d] [-D] [-f] [-i] [-I] [-q] [-s] [-o DIR] PACKAGE_1 PACKAGE_2 ..."
|
|
|
|
echo "Build a package by creating a .deb file in the debs/ folder."
|
|
|
|
echo " -a The architecture to build for: aarch64(default), arm, i686, x86_64 or all."
|
|
|
|
echo " -d Build with debug symbols."
|
|
|
|
echo " -D Build a disabled package in disabled-packages/."
|
|
|
|
echo " -f Force build even if package has already been built."
|
|
|
|
echo " -i Download and extract dependencies instead of building them."
|
|
|
|
echo " -I Download and extract dependencies instead of building them, keep existing /data/data/com.termux files."
|
|
|
|
echo " -q Quiet build."
|
|
|
|
echo " -s Skip dependency check."
|
|
|
|
echo " -o Specify deb directory. Default: debs/."
|
|
|
|
exit 1
|
|
|
|
}
|
|
|
|
|
|
|
|
while getopts :a:hdDfiIqso: option; do
|
|
|
|
case "$option" in
|
|
|
|
a) TERMUX_ARCH="$OPTARG";;
|
|
|
|
h) _show_usage;;
|
|
|
|
d) export TERMUX_DEBUG=true;;
|
|
|
|
D) local TERMUX_IS_DISABLED=true;;
|
|
|
|
f) TERMUX_FORCE_BUILD=true;;
|
|
|
|
i) export TERMUX_INSTALL_DEPS=true;;
|
|
|
|
I) export TERMUX_INSTALL_DEPS=true && export TERMUX_NO_CLEAN=true;;
|
|
|
|
q) export TERMUX_QUIET_BUILD=true;;
|
|
|
|
s) export TERMUX_SKIP_DEPCHECK=true;;
|
|
|
|
o) TERMUX_DEBDIR="$(realpath -m $OPTARG)";;
|
|
|
|
?) termux_error_exit "./build-package.sh: illegal option -$OPTARG";;
|
|
|
|
esac
|
|
|
|
done
|
|
|
|
shift $((OPTIND-1))
|
|
|
|
|
|
|
|
if [ "$#" -lt 1 ]; then _show_usage; fi
|
|
|
|
unset -f _show_usage
|
|
|
|
|
|
|
|
while (($# > 0)); do
|
|
|
|
# Following commands must be executed under lock to prevent running
|
|
|
|
# multiple instances of "./build-package.sh".
|
|
|
|
#
|
|
|
|
# To provide sane environment for each package, builds are done
|
|
|
|
# in subshell.
|
|
|
|
(
|
|
|
|
if ! $TERMUX_BUILD_IGNORE_LOCK; then
|
|
|
|
flock -n 5 || termux_error_exit "Another build is already running within same environment."
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Handle 'all' arch:
|
|
|
|
if [ -n "${TERMUX_ARCH+x}" ] && [ "${TERMUX_ARCH}" = 'all' ]; then
|
|
|
|
for arch in 'aarch64' 'arm' 'i686' 'x86_64'; do
|
|
|
|
TERMUX_BUILD_IGNORE_LOCK=true ./build-package.sh ${TERMUX_FORCE_BUILD+-f} \
|
|
|
|
-a $arch ${TERMUX_INSTALL_DEPS+-i} ${TERMUX_IS_DISABLED+-D} ${TERMUX_DEBUG+-d} \
|
|
|
|
${TERMUX_DEBDIR+-o $TERMUX_DEBDIR} "$1"
|
|
|
|
done
|
|
|
|
exit
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Check the package to build:
|
|
|
|
TERMUX_PKG_NAME=$(basename "$1")
|
|
|
|
export TERMUX_SCRIPTDIR
|
|
|
|
TERMUX_SCRIPTDIR=$(cd "$(dirname "$0")"; pwd)
|
|
|
|
if [[ $1 == *"/"* ]]; then
|
|
|
|
# Path to directory which may be outside this repo:
|
|
|
|
if [ ! -d "$1" ]; then termux_error_exit "'$1' seems to be a path but is not a directory"; fi
|
|
|
|
export TERMUX_PKG_BUILDER_DIR
|
|
|
|
TERMUX_PKG_BUILDER_DIR=$(realpath "$1")
|
|
|
|
else
|
|
|
|
# Package name:
|
|
|
|
if [ -n "${TERMUX_IS_DISABLED=""}" ]; then
|
|
|
|
export TERMUX_PKG_BUILDER_DIR=$TERMUX_SCRIPTDIR/disabled-packages/$TERMUX_PKG_NAME
|
|
|
|
else
|
|
|
|
export TERMUX_PKG_BUILDER_DIR=$TERMUX_SCRIPTDIR/packages/$TERMUX_PKG_NAME
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
TERMUX_PKG_BUILDER_SCRIPT=$TERMUX_PKG_BUILDER_DIR/build.sh
|
|
|
|
if test ! -f "$TERMUX_PKG_BUILDER_SCRIPT"; then
|
|
|
|
termux_error_exit "No build.sh script at package dir $TERMUX_PKG_BUILDER_DIR!"
|
|
|
|
fi
|
|
|
|
|
|
|
|
termux_step_setup_variables
|
|
|
|
termux_step_handle_buildarch
|
|
|
|
termux_step_start_build
|
|
|
|
termux_step_extract_package
|
|
|
|
cd "$TERMUX_PKG_SRCDIR"
|
|
|
|
termux_step_post_extract_package
|
|
|
|
termux_step_handle_hostbuild
|
|
|
|
termux_step_setup_toolchain
|
|
|
|
termux_step_patch_package
|
|
|
|
termux_step_replace_guess_scripts
|
|
|
|
cd "$TERMUX_PKG_SRCDIR"
|
|
|
|
termux_step_pre_configure
|
|
|
|
cd "$TERMUX_PKG_BUILDDIR"
|
|
|
|
termux_step_configure
|
|
|
|
cd "$TERMUX_PKG_BUILDDIR"
|
|
|
|
termux_step_post_configure
|
|
|
|
cd "$TERMUX_PKG_BUILDDIR"
|
|
|
|
termux_step_make
|
|
|
|
cd "$TERMUX_PKG_BUILDDIR"
|
|
|
|
termux_step_make_install
|
|
|
|
cd "$TERMUX_PKG_BUILDDIR"
|
|
|
|
termux_step_post_make_install
|
|
|
|
termux_step_install_license
|
|
|
|
cd "$TERMUX_PKG_MASSAGEDIR"
|
|
|
|
termux_step_extract_into_massagedir
|
|
|
|
cd "$TERMUX_PKG_MASSAGEDIR"
|
|
|
|
termux_step_massage
|
|
|
|
cd "$TERMUX_PKG_MASSAGEDIR/$TERMUX_PREFIX"
|
|
|
|
termux_step_post_massage
|
|
|
|
termux_step_create_datatar
|
|
|
|
termux_step_create_debfile
|
|
|
|
termux_step_finish_build
|
|
|
|
) 5< "$TERMUX_BUILD_LOCK_FILE"
|
|
|
|
|
|
|
|
shift 1
|
|
|
|
done
|