termux_error_exit "Unsupported arch: $TERMUX_ARCH"
fi
- local TERMUX_GO_VERSION=go1.8.3
+ local TERMUX_GO_VERSION=go1.9.2
local TERMUX_GO_PLATFORM=linux-amd64
local TERMUX_BUILDGO_FOLDER=$TERMUX_COMMON_CACHEDIR/${TERMUX_GO_VERSION}
rm -Rf "$TERMUX_COMMON_CACHEDIR/go" "$TERMUX_BUILDGO_FOLDER"
termux_download https://storage.googleapis.com/golang/${TERMUX_GO_VERSION}.${TERMUX_GO_PLATFORM}.tar.gz \
"$TERMUX_BUILDGO_TAR" \
- 1862f4c3d3907e59b04a757cfda0ea7aa9ef39274af99a784f5be843c80c6772
+ de874549d9a8d8d8062be05808509c09a88a248e77ec14eb77453530829ac02b
( cd "$TERMUX_COMMON_CACHEDIR"; tar xf "$TERMUX_BUILDGO_TAR"; mv go "$TERMUX_BUILDGO_FOLDER"; rm "$TERMUX_BUILDGO_TAR" )
}
-# Utility function for cmake-built packages to setup a current ninja.
+# Utility function to setup a current ninja build system.
termux_setup_ninja() {
- local NINJA_VERSION=1.7.2
+ local NINJA_VERSION=1.8.2
local NINJA_FOLDER=$TERMUX_COMMON_CACHEDIR/ninja-$NINJA_VERSION
if [ ! -x $NINJA_FOLDER/ninja ]; then
mkdir -p $NINJA_FOLDER
local NINJA_ZIP_FILE=$TERMUX_PKG_TMPDIR/ninja-$NINJA_VERSION.zip
termux_download https://github.com/ninja-build/ninja/releases/download/v$NINJA_VERSION/ninja-linux.zip \
$NINJA_ZIP_FILE \
- 38fa8cfb9c1632a5cdf7a32fe1a7c5aa89e96c1d492c28624f4cc018e68458b9
+ d2fea9ff33b3ef353161ed906f260d565ca55b8ca0568fa07b1d2cab90a84a07
unzip $NINJA_ZIP_FILE -d $NINJA_FOLDER
fi
export PATH=$NINJA_FOLDER:$PATH
}
-# Utility function for cmake-built packages to setup a current meson.
+# Utility function to setup a current meson build system.
termux_setup_meson() {
termux_setup_ninja
- local MESON_VERSION=0.41.2
+ local MESON_VERSION=0.43.0
local MESON_FOLDER=$TERMUX_COMMON_CACHEDIR/meson-$MESON_VERSION
if [ ! -d "$MESON_FOLDER" ]; then
local MESON_TAR_NAME=meson-$MESON_VERSION.tar.gz
termux_download \
https://github.com/mesonbuild/meson/releases/download/$MESON_VERSION/meson-$MESON_VERSION.tar.gz \
$MESON_TAR_FILE \
- 074dd24fd068be0893e2e45bcc35c919d8e12777e9d6a7efdf72d4dc300867ca
+ c513eca90e0d70bf14cd1eaafea2fa91cf40a73326a7ff61f08a005048057340
tar xf "$MESON_TAR_FILE" -C "$TERMUX_COMMON_CACHEDIR"
(cd $MESON_FOLDER && patch -p1 < $TERMUX_SCRIPTDIR/scripts/meson-android.patch)
fi
TERMUX_MESON="$MESON_FOLDER/meson.py"
- TERMUX_MESON_CROSSFILE=$TERMUX_COMMON_CACHEDIR/meson-crossfile-$TERMUX_ARCH-v1.txt
+ TERMUX_MESON_CROSSFILE=$TERMUX_COMMON_CACHEDIR/meson-crossfile-$TERMUX_ARCH-v2.txt
if [ ! -f $TERMUX_MESON_CROSSFILE ]; then
local MESON_CPU MESON_CPU_FAMILY
if [ $TERMUX_ARCH = "arm" ]; then
c = '$CC'
cpp = '$CXX'
ld = '$LD'
- pkg-config = '$PKG_CONFIG'
+ pkgconfig = '$PKG_CONFIG'
strip = '$STRIP'
[properties]
needs_exe_wrapper = true
fi
}
-# Utility function for cmake-built packages to setup a current cmake.
+# Utility function to setup a current cmake build system
termux_setup_cmake() {
local TERMUX_CMAKE_MAJORVESION=3.9
- local TERMUX_CMAKE_MINORVERSION=1
+ local TERMUX_CMAKE_MINORVERSION=5
local TERMUX_CMAKE_VERSION=$TERMUX_CMAKE_MAJORVESION.$TERMUX_CMAKE_MINORVERSION
local TERMUX_CMAKE_TARNAME=cmake-${TERMUX_CMAKE_VERSION}-Linux-x86_64.tar.gz
local TERMUX_CMAKE_TARFILE=$TERMUX_PKG_TMPDIR/$TERMUX_CMAKE_TARNAME
if [ ! -d "$TERMUX_CMAKE_FOLDER" ]; then
termux_download https://cmake.org/files/v$TERMUX_CMAKE_MAJORVESION/$TERMUX_CMAKE_TARNAME \
"$TERMUX_CMAKE_TARFILE" \
- ecbaf72981ccd09d9dade6d580cf1213eef15ef95a675dd9d4f0d693f134644f
+ bbe7e2ea703835661bb92fedd485d62dc587ee36daaedaa0a7bebcbf937a1cea
rm -Rf "$TERMUX_PKG_TMPDIR/cmake-${TERMUX_CMAKE_VERSION}-Linux-x86_64"
tar xf "$TERMUX_CMAKE_TARFILE" -C "$TERMUX_PKG_TMPDIR"
mv "$TERMUX_PKG_TMPDIR/cmake-${TERMUX_CMAKE_VERSION}-Linux-x86_64" \
# Handle command-line arguments:
_show_usage () {
- echo "Usage: ./build-package.sh [-a ARCH] [-d] [-D] PACKAGE"
+ echo "Usage: ./build-package.sh [-a ARCH] [-d] [-D] [-f] [-q] [-s] PACKAGE"
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 " -q Quiet build"
echo " -s Skip dependency check."
exit 1
}
- while getopts :a:hdDfs option; do
+ while getopts :a:hdDfqs option; do
case "$option" in
a) TERMUX_ARCH="$OPTARG";;
h) _show_usage;;
d) TERMUX_DEBUG=true;;
D) local TERMUX_IS_DISABLED=true;;
f) TERMUX_FORCE_BUILD=true;;
+ q) export TERMUX_QUIET_BUILD=true;;
s) export TERMUX_SKIP_DEPCHECK=true;;
?) termux_error_exit "./build-package.sh: illegal option -$OPTARG";;
esac
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")
- # Skip depcheck for external package:
- TERMUX_SKIP_DEPCHECK=true
else
# Package name:
if [ -n "${TERMUX_IS_DISABLED=""}" ]; then
TERMUX_PKG_BUILD_DEPENDS=""
TERMUX_PKG_HOMEPAGE=""
TERMUX_PKG_DESCRIPTION="FIXME:Add description"
- TERMUX_PKG_FOLDERNAME=""
TERMUX_PKG_KEEP_STATIC_LIBRARIES="false"
TERMUX_PKG_ESSENTIAL=""
TERMUX_PKG_CONFLICTS="" # https://www.debian.org/doc/debian-policy/ch-relationships.html#s-conflicts
TERMUX_STANDALONE_TOOLCHAIN="$TERMUX_TOPDIR/_lib/${TERMUX_NDK_VERSION}-${TERMUX_ARCH}-${TERMUX_PKG_API_LEVEL}"
# Bump the below version if a change is made in toolchain setup to ensure
# that everyone gets an updated toolchain:
- TERMUX_STANDALONE_TOOLCHAIN+="-v11"
+ TERMUX_STANDALONE_TOOLCHAIN+="-v14"
if [ -n "${TERMUX_PKG_BLACKLISTED_ARCHES:=""}" ] && [ "$TERMUX_PKG_BLACKLISTED_ARCHES" != "${TERMUX_PKG_BLACKLISTED_ARCHES/$TERMUX_ARCH/}" ]; then
echo "Skipping building $TERMUX_PKG_NAME for arch $TERMUX_ARCH"
if [ -z "${TERMUX_SKIP_DEPCHECK:=""}" ]; then
local p TERMUX_ALL_DEPS
- TERMUX_ALL_DEPS=$(./scripts/buildorder.py "$TERMUX_PKG_NAME")
+ TERMUX_ALL_DEPS=$(./scripts/buildorder.py "$TERMUX_PKG_BUILDER_DIR")
for p in $TERMUX_ALL_DEPS; do
- if [ "$p" != "$TERMUX_PKG_NAME" ]; then
- echo "Building dependency $p if necessary..."
- ./build-package.sh -a $TERMUX_ARCH -s "$p"
- fi
+ echo "Building dependency $p if necessary..."
+ ./build-package.sh -a $TERMUX_ARCH -s "$p"
done
fi
termux_download \
https://raw.githubusercontent.com/termux/termux-elf-cleaner/v$TERMUX_ELF_CLEANER_VERSION/termux-elf-cleaner.cpp \
$TERMUX_ELF_CLEANER_SRC \
- 11a38372f4d0e36b7556382c7ecffecae35cee8b68daaee2dbee025f758e17ee
+ 62c3cf9813756a1b262108fbc39684c5cfd3f9a69b376276bb1ac6af138f5fa2
if [ "$TERMUX_ELF_CLEANER_SRC" -nt "$TERMUX_ELF_CLEANER" ]; then
g++ -std=c++11 -Wall -Wextra -pedantic -Os "$TERMUX_ELF_CLEANER_SRC" -o "$TERMUX_ELF_CLEANER"
fi
local file="$TERMUX_PKG_CACHEDIR/$filename"
termux_download "$TERMUX_PKG_SRCURL" "$file" "$TERMUX_PKG_SHA256"
- if [ "x$TERMUX_PKG_FOLDERNAME" = "x" ]; then
- folder="${filename%%.t*}" && folder="${folder%%.zip}"
- folder="${folder/_/-}" # dpkg uses _ in tar filename, but - in folder
- else
- folder=$TERMUX_PKG_FOLDERNAME
- fi
- rm -Rf $folder
+ local folder
+ set +o pipefail
if [ "${file##*.}" = zip ]; then
+ folder=`unzip -qql "$file" | head -n1 | tr -s ' ' | cut -d' ' -f5-`
+ rm -Rf $folder
unzip -q "$file"
else
+ folder=`tar tf "$file" | head -1 | sed 's/^.\///' | sed -e 's/\/.*//'`
+ rm -Rf $folder
tar xf "$file"
fi
+ set -o pipefail
mv $folder "$TERMUX_PKG_SRCDIR"
}
if [ -n "$TERMUX_DEBUG" ]; then
CFLAGS+=" -g3 -O1 -fstack-protector --param ssp-buffer-size=4 -D_FORTIFY_SOURCE=2"
else
- CFLAGS+=" -Os"
+ if [ "$TERMUX_PKG_CLANG" = "no" ]; then
+ CFLAGS+=" -Os"
+ else
+ if [ "$TERMUX_PKG_NAME" = "ruby" -a "$TERMUX_ARCH" = arm ]; then
+ # This exception is to avoid a broken ruby on 32-bit arm
+ # with NDK r15c and ruby 2.4.2 - see #1520.
+ CFLAGS+=" -O1"
+ else
+ # -Oz seems good for clang, see https://github.com/android-ndk/ndk/issues/133
+ CFLAGS+=" -Oz"
+ fi
+ fi
fi
export CXXFLAGS="$CFLAGS"
# elf.h: Taken from glibc since the elf.h in the NDK is lacking.
# sysexits.h: Header-only and used by a few programs.
# ifaddrs.h: Added in android-24 unified headers, use a inline implementation for now.
- cp "$TERMUX_SCRIPTDIR"/ndk-patches/{elf.h,sysexits.h,ifaddrs.h} usr/include
+ cp "$TERMUX_SCRIPTDIR"/ndk-patches/{elf.h,sysexits.h,ifaddrs.h,libintl.h} usr/include
# Remove <sys/shm.h> from the NDK in favour of that from the libandroid-shmem.
# Also remove <sys/sem.h> as it doesn't work for non-root.
if [ "$TERMUX_PKG_EXTRA_CONFIGURE_ARGS" != "${TERMUX_PKG_EXTRA_CONFIGURE_ARGS/--libexecdir=/}" ]; then
LIBEXEC_FLAG=""
fi
+ QUIET_BUILD=
+ if [ ! -z ${TERMUX_QUIET_BUILD+x} ]; then
+ QUIET_BUILD="--enable-silent-rules"
+ fi
# Some packages provides a $PKG-config script which some configure scripts pickup instead of pkg-config:
mkdir "$TERMUX_PKG_TMPDIR/config-scripts"
$DISABLE_NLS \
$ENABLE_SHARED \
$DISABLE_STATIC \
- $LIBEXEC_FLAG
+ $LIBEXEC_FLAG \
+ $QUIET_BUILD
}
termux_step_configure_cmake () {