fi
# Compute standalone toolchain dir, bitness of arch and name of host platform:
-TERMUX_STANDALONE_TOOLCHAIN="$TERMUX_TOPDIR/_lib/android-standalone-toolchain-${TERMUX_ARCH}-ndk${TERMUX_NDK_VERSION}-api${TERMUX_API_LEVEL}-"
+TERMUX_STANDALONE_TOOLCHAIN="$TERMUX_TOPDIR/_lib/toolchain-${TERMUX_ARCH}-ndk${TERMUX_NDK_VERSION}-api${TERMUX_API_LEVEL}-"
if [ "$TERMUX_CLANG" = "" ]; then
TERMUX_STANDALONE_TOOLCHAIN+="gcc4.9"
else
TERMUX_STANDALONE_TOOLCHAIN+="clang38"
fi
+# Bump the below version if a change is made in toolchain setup, to ensure
+# that everyone gets an updated toolchain:
+TERMUX_STANDALONE_TOOLCHAIN+="-v1"
+
if [ "x86_64" = $TERMUX_ARCH -o "aarch64" = $TERMUX_ARCH ]; then
TERMUX_ARCH_BITS=64
else
test `uname` = "Darwin" && TERMUX_TOUCH=gtouch
export prefix=${TERMUX_PREFIX} # prefix is used by some makefiles
-#export ACLOCAL="aclocal -I $TERMUX_PREFIX/share/aclocal"
+export PREFIX=${TERMUX_PREFIX} # PREFIX is used by some makefiles
+
export AR=$TERMUX_HOST_PLATFORM-ar
if [ "$TERMUX_CLANG" = "" ]; then
export AS=${TERMUX_HOST_PLATFORM}-gcc
mv $_TERMUX_TOOLCHAIN_TMPDIR $TERMUX_STANDALONE_TOOLCHAIN
fi
+if [ ! -f $TERMUX_PREFIX/lib/libstdc++.so ]; then
+ # Setup libgnustl_shared.so in $PREFIX/lib and libstdc++.so as a symlink to it,
+ # so that other C++ using packages links to it instead of the default android
+ # C++ library which does not support exceptions or STL:
+ # https://developer.android.com/ndk/guides/cpp-support.html
+ # We do however want to avoid installing this, to avoid problems # where e.g.
+ # libm.so on some i686 devices links against libstdc++.so.
+ # The libgnustl_shared.so library will be packaged in the libgnustl package
+ # which is part of the base Termux installation.
+ mkdir -p $TERMUX_PREFIX/lib
+ cd $TERMUX_PREFIX/lib
+ _STL_LIBFILE=$TERMUX_STANDALONE_TOOLCHAIN/${TERMUX_HOST_PLATFORM}/lib/libgnustl_shared.so
+ if [ $TERMUX_ARCH = arm ]; then
+ _STL_LIBFILE=$TERMUX_STANDALONE_TOOLCHAIN/${TERMUX_HOST_PLATFORM}/lib/armv7-a/libgnustl_shared.so
+ elif [ $TERMUX_ARCH = x86_64 ]; then
+ _STL_LIBFILE=$TERMUX_STANDALONE_TOOLCHAIN/${TERMUX_HOST_PLATFORM}/lib64/libgnustl_shared.so
+ fi
+ cp $_STL_LIBFILE .
+ ln -f -s libgnustl_shared.so libstdc++.so
+fi
+
export TERMUX_COMMON_CACHEDIR="$TERMUX_TOPDIR/_cache"
export TERMUX_DEBDIR="$TERMUX_SCRIPTDIR/debs"
mkdir -p $TERMUX_COMMON_CACHEDIR $TERMUX_DEBDIR
TERMUX_PKG_MASSAGEDIR=$TERMUX_TOPDIR/$TERMUX_PKG_NAME/massage
TERMUX_PKG_PACKAGEDIR=$TERMUX_TOPDIR/$TERMUX_PKG_NAME/package
TERMUX_PKG_SRCDIR=$TERMUX_TOPDIR/$TERMUX_PKG_NAME/src
+TERMUX_PKG_SHA256=""
TERMUX_PKG_TMPDIR=$TERMUX_TOPDIR/$TERMUX_PKG_NAME/tmp
TERMUX_PKG_HOSTBUILD_DIR=$TERMUX_TOPDIR/$TERMUX_PKG_NAME/host-build
TERMUX_PKG_PLATFORM_INDEPENDENT=""
TERMUX_PKG_KEEP_HEADER_FILES="false"
TERMUX_PKG_ESSENTIAL=""
TERMUX_PKG_CONFLICTS="" # https://www.debian.org/doc/debian-policy/ch-relationships.html#s-conflicts
+TERMUX_PKG_REPLACES=""
TERMUX_PKG_CONFFILES=""
TERMUX_PKG_INCLUDE_IN_DEVPACKAGE=""
TERMUX_PKG_DEVPACKAGE_DEPENDS=""
mkdir -p $TERMUX_PKG_BUILDDIR $TERMUX_PKG_PACKAGEDIR $TERMUX_PKG_TMPDIR $TERMUX_PKG_CACHEDIR $TERMUX_PKG_MASSAGEDIR $PKG_CONFIG_LIBDIR $TERMUX_PREFIX/{bin,etc,lib,libexec,share,tmp,include}
termux_download() {
- URL="$1"
- DESTINATION="$2"
-
- TMPFILE=`mktemp $TERMUX_PKG_TMPDIR/download.XXXXXXXXX`
- for i in 1 2 3; do
- if curl -L --fail --retry 2 -o "$TMPFILE" "$URL"; then
- mv "$TMPFILE" "$DESTINATION"
- return
- else
- echo "Download of $1 failed (attempt $i/3)" 1>&2
- sleep 6
- fi
- done
- echo "Failed to download $1 - exiting" 1>&2
- exit 1
+ URL="$1"
+ DESTINATION="$2"
+
+ TMPFILE=`mktemp $TERMUX_PKG_TMPDIR/download.$TERMUX_PKG_NAME.XXXXXXXXX`
+ echo "Downloading ${URL}"
+ for i in 1 2 3 4 5 6; do
+ if curl -L --fail --retry 2 -o "$TMPFILE" "$URL"; then
+ if [ $# = 3 ]; then
+ # Optional checksum argument:
+ echo $3 "$TMPFILE" | sha256sum --check --strict --quiet
+ else
+ echo "Note: No checksum of file"
+ sha256sum $TMPFILE
+ fi
+ mv "$TMPFILE" "$DESTINATION"
+ return
+ else
+ echo "Download of $1 failed (attempt $i/3)" 1>&2
+ sleep 45
+ fi
+ done
+
+ echo "Failed to download $1 - exiting" 1>&2
+ exit 1
}
# Get fresh versions of config.sub and config.guess
cd $TERMUX_PKG_TMPDIR
filename=`basename $TERMUX_PKG_SRCURL`
file=$TERMUX_PKG_CACHEDIR/$filename
- # Set "TERMUX_PKG_NO_SRC_CACHE=yes" in package to never cache packages, such as in git builds:
- test -n ${TERMUX_PKG_NO_SRC_CACHE-""} -o ! -f $file && termux_download $TERMUX_PKG_SRCURL $file
+ test ! -f $file && termux_download $TERMUX_PKG_SRCURL $file $TERMUX_PKG_SHA256
+
if [ "x$TERMUX_PKG_FOLDERNAME" = "x" ]; then
folder=`basename $filename .tar.bz2` && folder=`basename $folder .tar.gz` && folder=`basename $folder .tar.xz` && folder=`basename $folder .tar.lz` && folder=`basename $folder .tgz` && folder=`basename $folder .zip`
folder=`echo $folder | sed 's/_/-/'` # dpkg uses _ in tar filename, but - in folder
fi
rm -Rf $folder
if [ ${file##*.} = zip ]; then
- unzip $file
+ unzip -q $file
else
$TERMUX_TAR xf $file
fi
# .. move over sbin to bin
for file in sbin/*; do if test -f $file; then mv $file bin/; fi; done
- # file(1) may fail for certain unusual files, so disable pipefail
- set +e +o pipefail
- # Remove world permissions and add write permissions:
- find . -exec chmod u+w,o-rwx \{\} \;
- # .. strip binaries (setting them as writeable first)
+ # Remove world permissions and add write permissions.
+ # The -f flag is used to suppress warnings about dangling symlinks (such
+ # as ones to /system/... which may not exist on the build machine):
+ find . -exec chmod -f u+w,o-rwx \{\} \;
if [ "$TERMUX_DEBUG" = "" ]; then
- find . -type f | xargs file | grep -E "(executable|shared object)" | grep ELF | cut -f 1 -d : | xargs $STRIP --strip-unneeded --preserve-dates -R '.gnu.version*'
+ # Strip binaries. file(1) may fail for certain unusual files, so disable pipefail.
+ set +e +o pipefail
+ find . -type f | xargs -r file | grep -E "(executable|shared object)" | grep ELF | cut -f 1 -d : | \
+ xargs -r $STRIP --strip-unneeded --preserve-dates -R '.gnu.version*'
+ set -e -o pipefail
+ # Remove DT_ entries which the android 5.1 linker warns about:
+ find . -type f -print0 | xargs -r -0 $TERMUX_ELF_CLEANER
fi
# Fix shebang paths:
for file in `find -L . -type f`; do
head -c 100 $file | grep -E "^#\!.*\\/bin\\/.*" | grep -q -E -v "^#\! ?\\/system" && sed --follow-symlinks -i -E "1 s@^#\!(.*)/bin/(.*)@#\!$TERMUX_PREFIX/bin/\2@" $file
done
- set -e -o pipefail
- # Remove DT_ entries which the android 5.1 linker warns about:
- if [ "$TERMUX_DEBUG" = "" ]; then
- find . -type f -print0 | xargs -0 $TERMUX_ELF_CLEANER
- fi
test ! -z "$TERMUX_PKG_RM_AFTER_INSTALL" && rm -Rf $TERMUX_PKG_RM_AFTER_INSTALL
exit 1
fi
- local TERMUX_GO_VERSION=go1.6.2
+ local TERMUX_GO_VERSION=go1.7
local TERMUX_GO_PLATFORM=linux-amd64
test `uname` = "Darwin" && TERMUX_GO_PLATFORM=darwin-amd64
test ! -z "$TERMUX_PKG_DEPENDS" && echo "Depends: $TERMUX_PKG_DEPENDS" >> DEBIAN/control
test ! -z "$TERMUX_PKG_ESSENTIAL" && echo "Essential: yes" >> DEBIAN/control
test ! -z "$TERMUX_PKG_CONFLICTS" && echo "Conflicts: $TERMUX_PKG_CONFLICTS" >> DEBIAN/control
+test ! -z "$TERMUX_PKG_REPLACES" && echo "Replaces: $TERMUX_PKG_REPLACES" >> DEBIAN/control
# Create DEBIAN/conffiles (see https://www.debian.org/doc/debian-policy/ap-pkg-conffiles.html):
for f in $TERMUX_PKG_CONFFILES; do echo $TERMUX_PREFIX/$f >> DEBIAN/conffiles; done