Fredrik Fornwall
10 years ago
663 changed files with 44233 additions and 0 deletions
@ -0,0 +1,26 @@ |
|||
#!/bin/bash |
|||
# build-all.sh - script to build all packages with a build order specified by buildorder.py |
|||
|
|||
set -e -u -o pipefail |
|||
|
|||
BUILDSCRIPT=`dirname $0`/build-package.sh |
|||
BUILDORDER_FILE=$HOME/termux/_buildall/buildorder.txt |
|||
|
|||
if [ -e $BUILDORDER_FILE ]; then |
|||
echo "Continuing with existing buildorder file: $BUILDORDER_FILE" |
|||
else |
|||
rm -Rf $HOME/termux /data/data $HOME/termux/_buildall |
|||
mkdir -p $HOME/termux/_buildall |
|||
./buildorder.py packages > $BUILDORDER_FILE |
|||
fi |
|||
|
|||
exec >> $HOME/termux/_buildall/ALL.out 2>> $HOME/termux/_buildall/ALL.err |
|||
|
|||
for package in `cat $BUILDORDER_FILE`; do |
|||
echo -n "Building $package... " >> $HOME/termux/_buildall/ALL.out |
|||
BUILD_START=`date "+%s"` |
|||
bash -x $BUILDSCRIPT $package > $HOME/termux/_buildall/${package}.out 2> $HOME/termux/_buildall/${package}.err |
|||
BUILD_END=`date "+%s"` |
|||
BUILD_SECONDS=$(( $BUILD_END - $BUILD_START )) |
|||
echo "done in $BUILD_SECONDS" |
|||
done |
@ -0,0 +1,663 @@ |
|||
#!/bin/bash |
|||
|
|||
# Required setup for ubuntu (only tested on 15.04): |
|||
# $ apt install asciidoc automake bison cmake flex gettext libglib2.0-dev help2man libc6-dev-i386 libcurl4-openssl-dev libgdk-pixbuf2.0-dev libncurses5-dev libtool lzip m4 mercurial pkg-config scons texinfo xmlto xutils-dev |
|||
# where libc6-dev-i386 is needed by luajit host part of the build for <sys/cdefs.h> |
|||
# xutils-dev provides 'makedepend' which openssl build uses |
|||
# gettext provides 'msgfmt' which apt build uses |
|||
# libcurl4-openssl-dev is needed by apt build |
|||
# libglib2.0-dev provides 'glib-genmarshal' which glib build uses |
|||
# libgdk-pixbuf2.0-dev provides 'gdk-pixbuf-query-loaders' which librsvg build uses |
|||
# Required setup for mac (not regularly used, and may not build all packages): |
|||
# $ port install asciidoc bison cmake flex gnutar help2man lzip mercurial p5-libwww-perl pkgconfig scons xmlto |
|||
# where Busybox requires that sed is gsed: ln -s /opt/local/bin/gsed /opt/local/bin/sed |
|||
|
|||
set -e -o pipefail -u |
|||
|
|||
if [ "$#" -ne 1 ]; then echo "ERROR: Specify one argument!"; exit 1; fi |
|||
export TERMUX_PKG_NAME=$1 |
|||
export TERMUX_SCRIPTDIR=`cd $(dirname $0); pwd` |
|||
export TERMUX_PKG_BUILDER_DIR=$TERMUX_SCRIPTDIR/packages/$TERMUX_PKG_NAME |
|||
export TERMUX_PKG_BUILDER_SCRIPT=$TERMUX_PKG_BUILDER_DIR/build.sh |
|||
if test ! -f $TERMUX_PKG_BUILDER_SCRIPT; then echo "ERROR: No such package builder: ${TERMUX_PKG_BUILDER_SCRIPT}!"; exit 1; fi |
|||
|
|||
echo "termux - building $1..." |
|||
test -t 1 && printf "\033]0;$1...\007" |
|||
|
|||
# Read settings from .termuxrc if existing |
|||
test -f $HOME/.termuxrc && . $HOME/.termuxrc |
|||
|
|||
# Configurable settings |
|||
: ${NDK:="${HOME}/lib/android-ndk"} |
|||
: ${ANDROID_HOME:="${HOME}/lib/android-sdk"} |
|||
if [ ! -d "$NDK" ]; then echo 'ERROR: $NDK not defined as pointing at a directory - define it pointing at a android NDK installation!'; exit 1; fi |
|||
: ${TERMUX_MAKE_PROCESSES:='4'} |
|||
: ${TERMUX_TOPDIR:="$HOME/termux"} |
|||
: ${TERMUX_ARCH:="arm"} |
|||
: ${TERMUX_HOST_PLATFORM:="${TERMUX_ARCH}-linux-android"} |
|||
if [ $TERMUX_ARCH = "arm" ]; then TERMUX_HOST_PLATFORM="${TERMUX_HOST_PLATFORM}eabi"; fi |
|||
: ${TERMUX_PREFIX:='/data/data/com.termux/files/usr'} |
|||
: ${TERMUX_ANDROID_HOME:='/data/data/com.termux/files/home'} |
|||
: ${TERMUX_DEBUG:=""} |
|||
: ${TERMUX_PROCESS_DEB:=""} |
|||
: ${TERMUX_GCC_VERSION:="4.9"} |
|||
: ${TERMUX_API_LEVEL:="21"} |
|||
: ${TERMUX_STANDALONE_TOOLCHAIN:="$HOME/lib/android-standalone-toolchain-${TERMUX_ARCH}-api${TERMUX_API_LEVEL}-gcc${TERMUX_GCC_VERSION}"} |
|||
: ${TERMUX_ANDROID_BUILD_TOOLS_VERSION:="22.0.1"} |
|||
# We do not put all of build-tools/$TERMUX_ANDROID_BUILD_TOOLS_VERSION/ into PATH |
|||
# to avoid stuff like arm-linux-androideabi-ld there to conflict with ones from |
|||
# the standalone toolchain. |
|||
TERMUX_DX=$ANDROID_HOME/build-tools/$TERMUX_ANDROID_BUILD_TOOLS_VERSION/dx |
|||
|
|||
# We put this after system PATH to avoid picking up toolchain stripped python |
|||
export PATH=$PATH:$TERMUX_STANDALONE_TOOLCHAIN/bin |
|||
|
|||
# Make $TERMUX_TAR and $TERMUX_TOUCH point at gnu versions: |
|||
export TERMUX_TAR="tar" |
|||
test `uname` = "Darwin" && TERMUX_TAR=gnutar |
|||
export TERMUX_TOUCH="touch" |
|||
test `uname` = "Darwin" && TERMUX_TOUCH=gtouch |
|||
|
|||
# Compute NDK version. We remove the first character (the r in e.g. r9d) to get a version number which can be used in packages): |
|||
export TERMUX_NDK_VERSION=`cut -d ' ' -f 1 $NDK/RELEASE.TXT | cut -c 2-` |
|||
|
|||
export prefix=${TERMUX_PREFIX} # prefix is used by some makefiles |
|||
#export ACLOCAL="aclocal -I $TERMUX_PREFIX/share/aclocal" |
|||
export AR=$TERMUX_HOST_PLATFORM-ar |
|||
export AS=${TERMUX_HOST_PLATFORM}-gcc |
|||
export CC=$TERMUX_HOST_PLATFORM-gcc |
|||
export CPP=${TERMUX_HOST_PLATFORM}-cpp |
|||
export CXX=$TERMUX_HOST_PLATFORM-g++ |
|||
export CC_FOR_BUILD=gcc |
|||
export LD=$TERMUX_HOST_PLATFORM-ld |
|||
export OBJDUMP=$TERMUX_HOST_PLATFORM-objdump |
|||
# Setup pkg-config for cross-compiling: |
|||
export PKG_CONFIG=$TERMUX_STANDALONE_TOOLCHAIN/bin/${TERMUX_HOST_PLATFORM}-pkg-config |
|||
export PKG_CONFIG_LIBDIR=$TERMUX_PREFIX/lib/pkgconfig |
|||
export RANLIB=$TERMUX_HOST_PLATFORM-ranlib |
|||
export READELF=$TERMUX_HOST_PLATFORM-readelf |
|||
export STRIP=$TERMUX_HOST_PLATFORM-strip |
|||
|
|||
_SPECSFLAG="-specs=$TERMUX_SCRIPTDIR/termux.spec" |
|||
export CFLAGS="$_SPECSFLAG" |
|||
export LDFLAGS="$_SPECSFLAG -L${TERMUX_PREFIX}/lib" |
|||
|
|||
if [ "$TERMUX_ARCH" = "arm" ]; then |
|||
# For hard support: http://blog.alexrp.com/2014/02/18/android-hard-float-support/ |
|||
# "First, to utilize the hard float ABI, you must either compile every last component of your application |
|||
# as hard float (the -mhard-float GCC/Clang switch), or mark individual functions with the appropriate |
|||
# __attribute__ to indicate the desired ABI. For example, to mark a function so that it’s called with the |
|||
# soft float ABI, stick __attribute__((pcs("aapcs"))) on it. |
|||
# Note that the NDK will link to a libm which uses the aforementioned attribute on all of its functions. |
|||
# This means that if you use libm functions a lot, you’re not likely to get much of a boost in those places. |
|||
# The way to fix this is to add -mhard-float -D_NDK_MATH_NO_SOFTFP=1 to your GCC/Clang command line. Then |
|||
# add -lm_hard to your linker command line (or -Wl,-lm_hard if you just invoke GCC/Clang to link). This will |
|||
# make your application link statically to a libm compiled for the hard float ABI. The only downside of this |
|||
# is that your application will increase somewhat in size." |
|||
CFLAGS+=" -march=armv7-a -mfpu=neon -mhard-float -Wl,--no-warn-mismatch" |
|||
LDFLAGS+=" -march=armv7-a -Wl,--no-warn-mismatch" |
|||
elif [ $TERMUX_ARCH = "i686" ]; then |
|||
# From $NDK/docs/CPU-ARCH-ABIS.html: |
|||
CFLAGS+=" -march=i686 -msse3 -mstackrealign -mfpmath=sse" |
|||
fi |
|||
|
|||
if [ -n "$TERMUX_DEBUG" ]; then |
|||
CFLAGS+=" -g3 -Og -fstack-protector --param ssp-buffer-size=4 -D_FORTIFY_SOURCE=2" |
|||
else |
|||
CFLAGS+=" -Os" |
|||
fi |
|||
|
|||
export CXXFLAGS="$CFLAGS" |
|||
export CPPFLAGS="-I${TERMUX_PREFIX}/include" |
|||
|
|||
export ac_cv_func_getpwent=no |
|||
export ac_cv_func_getpwnam=no |
|||
export ac_cv_func_getpwuid=no |
|||
|
|||
if [ ! -d $TERMUX_STANDALONE_TOOLCHAIN ]; then |
|||
_TERMUX_NDK_TOOLCHAIN_NAME="" |
|||
if [ "arm" = $TERMUX_ARCH ]; then |
|||
_TERMUX_NDK_TOOLCHAIN_NAME="$TERMUX_HOST_PLATFORM" |
|||
elif [ "i686" = $TERMUX_ARCH ]; then |
|||
_TERMUX_NDK_TOOLCHAIN_NAME="x86" |
|||
fi |
|||
bash $NDK/build/tools/make-standalone-toolchain.sh --platform=android-$TERMUX_API_LEVEL --toolchain=${_TERMUX_NDK_TOOLCHAIN_NAME}-${TERMUX_GCC_VERSION} \ |
|||
--install-dir=$TERMUX_STANDALONE_TOOLCHAIN --system=`uname | tr '[:upper:]' '[:lower:]'`-x86_64 |
|||
if [ "arm" = $TERMUX_ARCH ]; then |
|||
# Fix to allow e.g. <bits/c++config.h> to be included: |
|||
cp $TERMUX_STANDALONE_TOOLCHAIN/include/c++/$TERMUX_GCC_VERSION/arm-linux-androideabi/armv7-a/bits/* $TERMUX_STANDALONE_TOOLCHAIN/include/c++/$TERMUX_GCC_VERSION/bits |
|||
fi |
|||
cd $TERMUX_STANDALONE_TOOLCHAIN/sysroot |
|||
for f in $TERMUX_SCRIPTDIR/ndk_patches/*.patch; do |
|||
sed "s%\@TERMUX_PREFIX\@%${TERMUX_PREFIX}%g" $f | \ |
|||
sed "s%\@TERMUX_HOME\@%${TERMUX_ANDROID_HOME}%g" | \ |
|||
patch -p1; |
|||
echo "PATCHING FILE $f done!" |
|||
done |
|||
# sha1.h was removed from android ndk for platforms above 19, but needed by the aapt package |
|||
# JNIHelp.h is also used by aapt |
|||
# sysexits.h is header-only and used by some unix code |
|||
cp $TERMUX_SCRIPTDIR/ndk_patches/{sha1.h,sysexits.h,JNIHelp.h} $TERMUX_STANDALONE_TOOLCHAIN/sysroot/usr/include |
|||
fi |
|||
|
|||
export TERMUX_COMMON_CACHEDIR="$TERMUX_TOPDIR/_cache" |
|||
export TERMUX_COMMON_DEBDIR="$TERMUX_TOPDIR/_deb" |
|||
mkdir -p $TERMUX_COMMON_CACHEDIR $TERMUX_COMMON_DEBDIR |
|||
|
|||
# Get fresh versions of config.sub and config.guess |
|||
for f in config.sub config.guess; do test ! -f $TERMUX_COMMON_CACHEDIR/$f && curl "http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=${f};hb=HEAD" > $TERMUX_COMMON_CACHEDIR/$f; done |
|||
# Have a debian-binary file ready for deb packaging: |
|||
test ! -f $TERMUX_COMMON_CACHEDIR/debian-binary && echo "2.0" > $TERMUX_COMMON_CACHEDIR/debian-binary |
|||
# The host tuple that may be given to --host configure flag, but normally autodetected so not needed explicitly |
|||
TERMUX_HOST_TUPLE=`sh $TERMUX_COMMON_CACHEDIR/config.guess` |
|||
|
|||
TERMUX_PKG_BUILDDIR=$TERMUX_TOPDIR/$TERMUX_PKG_NAME/build |
|||
TERMUX_PKG_CACHEDIR=$TERMUX_TOPDIR/$TERMUX_PKG_NAME/cache |
|||
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_TMPDIR=$TERMUX_TOPDIR/$TERMUX_PKG_NAME/tmp |
|||
TERMUX_PKG_HOSTBUILD_DIR=$TERMUX_TOPDIR/$TERMUX_PKG_NAME/host-build |
|||
TERMUX_PKG_PLATFORM_INDEPENDENT="" |
|||
TERMUX_PKG_NO_DEVELSPLIT="" |
|||
TERMUX_PKG_BUILD_REVISION="0" # http://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Version |
|||
TERMUX_PKG_EXTRA_CONFIGURE_ARGS="" |
|||
TERMUX_PKG_EXTRA_HOSTBUILD_CONFIGURE_ARGS="" |
|||
TERMUX_PKG_EXTRA_MAKE_ARGS="" |
|||
TERMUX_PKG_BUILD_IN_SRC="" |
|||
TERMUX_PKG_RM_AFTER_INSTALL="" |
|||
TERMUX_PKG_DEPENDS="" |
|||
TERMUX_PKG_HOMEPAGE="" |
|||
TERMUX_PKG_DESCRIPTION="FIXME:Add description" |
|||
TERMUX_PKG_FOLDERNAME="" |
|||
TERMUX_PKG_KEEP_STATIC_LIBRARIES="false" |
|||
TERMUX_PKG_KEEP_HEADER_FILES="false" |
|||
TERMUX_PKG_ESSENTIAL="" |
|||
TERMUX_PKG_CONFFILES="" |
|||
# Set if a host build should be done in TERMUX_PKG_HOSTBUILD_DIR: |
|||
TERMUX_PKG_HOSTBUILD="" |
|||
TERMUX_PKG_MAINTAINER="Fredrik Fornwall <fredrik@fornwall.net>" |
|||
|
|||
# Cleanup old state |
|||
rm -Rf $TERMUX_PKG_BUILDDIR $TERMUX_PKG_PACKAGEDIR $TERMUX_PKG_SRCDIR $TERMUX_PKG_TMPDIR $TERMUX_PKG_MASSAGEDIR |
|||
# Ensure folders present (but not $TERMUX_PKG_SRCDIR, it will be created in build) |
|||
mkdir -p $TERMUX_PKG_BUILDDIR $TERMUX_PKG_PACKAGEDIR $TERMUX_PKG_TMPDIR $TERMUX_PKG_CACHEDIR $TERMUX_PKG_MASSAGEDIR $PKG_CONFIG_LIBDIR $TERMUX_PREFIX/{bin,lib,share,tmp} |
|||
|
|||
# If $TERMUX_PREFIX already exists, it may have been built for a different arch |
|||
TERMUX_ARCH_FILE=/data/TERMUX_ARCH |
|||
if [ -f "${TERMUX_ARCH_FILE}" ]; then |
|||
TERMUX_PREVIOUS_ARCH=`cat $TERMUX_ARCH_FILE` |
|||
if [ $TERMUX_PREVIOUS_ARCH != $TERMUX_ARCH ]; then |
|||
TERMUX_DATA_BACKUPDIRS=$TERMUX_TOPDIR/_databackups |
|||
mkdir -p $TERMUX_DATA_BACKUPDIRS |
|||
TERMUX_DATA_PREVIOUS_BACKUPDIR=$TERMUX_DATA_BACKUPDIRS/$TERMUX_PREVIOUS_ARCH |
|||
TERMUX_DATA_CURRENT_BACKUPDIR=$TERMUX_DATA_BACKUPDIRS/$TERMUX_ARCH |
|||
echo "NOTE: Different archs - building for $TERMUX_ARCH, but current $TERMUX_PREVIOUS_ARCH" |
|||
echo " Saving current /data/data to $TERMUX_DATA_PREVIOUS_BACKUPDIR" |
|||
# Save current /data (removing old backup if any) |
|||
if test -e $TERMUX_DATA_PREVIOUS_BACKUPDIR; then |
|||
echo "ERROR: Directory already exists" |
|||
exit 1 |
|||
fi |
|||
mv /data/data $TERMUX_DATA_PREVIOUS_BACKUPDIR |
|||
# Restore new one (if any) |
|||
if [ -d $TERMUX_DATA_CURRENT_BACKUPDIR ]; then |
|||
echo " Restoring old backupdir from $TERMUX_DATA_CURRENT_BACKUPDIR" |
|||
mv $TERMUX_DATA_CURRENT_BACKUPDIR /data/data |
|||
fi |
|||
fi |
|||
fi |
|||
echo $TERMUX_ARCH > $TERMUX_ARCH_FILE |
|||
|
|||
if [ ! -f $PKG_CONFIG ]; then |
|||
echo "Creating pkg-config wrapper..." |
|||
# We use path to host pkg-config to avoid picking up a cross-compiled pkg-config later on |
|||
_HOST_PKGCONFIG=`which pkg-config` |
|||
mkdir -p $TERMUX_STANDALONE_TOOLCHAIN/bin $PKG_CONFIG_LIBDIR |
|||
cat > $PKG_CONFIG <<HERE |
|||
#!/bin/sh |
|||
export PKG_CONFIG_DIR= |
|||
export PKG_CONFIG_LIBDIR=$PKG_CONFIG_LIBDIR |
|||
# export PKG_CONFIG_SYSROOT_DIR=${TERMUX_PREFIX} |
|||
exec $_HOST_PKGCONFIG "\$@" |
|||
HERE |
|||
chmod +x $PKG_CONFIG |
|||
|
|||
# Add a pkg-config file for the system zlib |
|||
cat > $PKG_CONFIG_LIBDIR/zlib.pc <<HERE |
|||
Name: zlib |
|||
Description: zlib compression library |
|||
Version: 1.2.3 |
|||
|
|||
Requires: |
|||
Libs: -L$TERMUX_STANDALONE_TOOLCHAIN/sysroot/usr/lib -lz |
|||
Cflags: -I$TERMUX_STANDALONE_TOOLCHAIN/sysroot/usr/include |
|||
HERE |
|||
sleep 1 # Sleep so that zlib.c get older timestamp then TERMUX_BUILD_TS_FILE. |
|||
fi |
|||
|
|||
TERMUX_ELF_CLEANER=$TERMUX_COMMON_CACHEDIR/termux-elf-cleaner |
|||
if [ ! -f $TERMUX_ELF_CLEANER ]; then |
|||
g++ -std=c++11 -Wall -Wextra -pedantic -Os $TERMUX_SCRIPTDIR/packages/termux-tools/termux-elf-cleaner.cpp -o $TERMUX_ELF_CLEANER |
|||
fi |
|||
|
|||
# Keep track of when build started so we can see what files have been created |
|||
export TERMUX_BUILD_TS_FILE=$TERMUX_PKG_TMPDIR/timestamp_$TERMUX_PKG_NAME |
|||
rm -f $TERMUX_BUILD_TS_FILE && touch $TERMUX_BUILD_TS_FILE |
|||
|
|||
# Run just after sourcing $TERMUX_PKG_BUILDER_SCRIPT |
|||
termux_step_extract_package () { |
|||
if [ -z "${TERMUX_PKG_SRCURL:=""}" ]; then |
|||
mkdir -p $TERMUX_PKG_SRCDIR |
|||
return |
|||
fi |
|||
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 && curl --retry 3 -o $file -L $TERMUX_PKG_SRCURL |
|||
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 |
|||
else |
|||
folder=$TERMUX_PKG_FOLDERNAME |
|||
fi |
|||
rm -Rf $folder |
|||
if [ ${file##*.} = zip ]; then |
|||
unzip $file |
|||
else |
|||
$TERMUX_TAR xf $file |
|||
fi |
|||
mv $folder $TERMUX_PKG_SRCDIR |
|||
} |
|||
|
|||
termux_step_post_extract_package () { |
|||
return |
|||
} |
|||
|
|||
# Perform a host build. Will be called in $TERMUX_PKG_HOSTBUILD_DIR. |
|||
# After termux_step_post_extract_package() and before termux_step_patch_package() |
|||
termux_step_host_build () { |
|||
$TERMUX_PKG_SRCDIR/configure ${TERMUX_PKG_EXTRA_HOSTBUILD_CONFIGURE_ARGS} |
|||
make |
|||
} |
|||
|
|||
# This should not be overridden |
|||
termux_step_patch_package () { |
|||
cd $TERMUX_PKG_SRCDIR |
|||
for patch in $TERMUX_PKG_BUILDER_DIR/*.patch; do |
|||
test -f $patch && sed "s%\@TERMUX_PREFIX\@%${TERMUX_PREFIX}%g" $patch | patch -p1 |
|||
done |
|||
|
|||
find . -name config.sub -exec chmod u+w '{}' \; -exec cp $TERMUX_COMMON_CACHEDIR/config.sub '{}' \; |
|||
find . -name config.guess -exec chmod u+w '{}' \; -exec cp $TERMUX_COMMON_CACHEDIR/config.guess '{}' \; |
|||
} |
|||
|
|||
termux_step_pre_configure () { |
|||
return |
|||
} |
|||
|
|||
termux_step_configure () { |
|||
if [ ! -e $TERMUX_PKG_SRCDIR/configure ]; then |
|||
return |
|||
fi |
|||
|
|||
DISABLE_STATIC="--disable-static" |
|||
if [ "$TERMUX_PKG_EXTRA_CONFIGURE_ARGS" != "${TERMUX_PKG_EXTRA_CONFIGURE_ARGS/--enable-static/}" ]; then |
|||
# Do not --disable-static if package explicitly enables it (e.g. gdb needs enable-static to build) |
|||
DISABLE_STATIC="" |
|||
fi |
|||
|
|||
DISABLE_NLS="--disable-nls" |
|||
if [ "$TERMUX_PKG_EXTRA_CONFIGURE_ARGS" != "${TERMUX_PKG_EXTRA_CONFIGURE_ARGS/--enable-nls/}" ]; then |
|||
# Do not --disable-nls if package explicitly enables it (for gettext itself) |
|||
DISABLE_NLS="" |
|||
fi |
|||
|
|||
ENABLE_SHARED="--enable-shared" |
|||
if [ "$TERMUX_PKG_EXTRA_CONFIGURE_ARGS" != "${TERMUX_PKG_EXTRA_CONFIGURE_ARGS/--disable-shared/}" ]; then |
|||
ENABLE_SHARED="" |
|||
fi |
|||
HOST_FLAG="--host=$TERMUX_HOST_PLATFORM" |
|||
if [ "$TERMUX_PKG_EXTRA_CONFIGURE_ARGS" != "${TERMUX_PKG_EXTRA_CONFIGURE_ARGS/--host=/}" ]; then |
|||
HOST_FLAG="" |
|||
fi |
|||
|
|||
# Some packages provides a $PKG-config script which some configure scripts pickup instead of pkg-config: |
|||
mkdir $TERMUX_PKG_TMPDIR/config-scripts |
|||
for f in $TERMUX_PREFIX/bin/*config; do |
|||
test -f $f && cp $f $TERMUX_PKG_TMPDIR/config-scripts |
|||
done |
|||
set +e +o pipefail |
|||
find $TERMUX_PKG_TMPDIR/config-scripts | xargs file | grep -F " script" | cut -f 1 -d : | xargs sed -i -E "s@^#\!/system/bin/sh@#\!/bin/sh@" |
|||
set -e -o pipefail |
|||
export PATH=$TERMUX_PKG_TMPDIR/config-scripts:$PATH |
|||
|
|||
$TERMUX_PKG_SRCDIR/configure \ |
|||
--disable-dependency-tracking \ |
|||
--prefix=$TERMUX_PREFIX \ |
|||
--disable-rpath --disable-rpath-hack \ |
|||
$HOST_FLAG \ |
|||
$TERMUX_PKG_EXTRA_CONFIGURE_ARGS \ |
|||
$DISABLE_NLS \ |
|||
$ENABLE_SHARED \ |
|||
$DISABLE_STATIC \ |
|||
--libexecdir=$TERMUX_PREFIX/libexec |
|||
} |
|||
|
|||
termux_step_post_configure () { |
|||
return |
|||
} |
|||
|
|||
termux_step_pre_make () { |
|||
return |
|||
} |
|||
|
|||
termux_step_make () { |
|||
if ls *akefile &> /dev/null; then |
|||
if [ -z "$TERMUX_PKG_EXTRA_MAKE_ARGS" ]; then |
|||
make -j $TERMUX_MAKE_PROCESSES |
|||
else |
|||
make -j $TERMUX_MAKE_PROCESSES ${TERMUX_PKG_EXTRA_MAKE_ARGS} |
|||
fi |
|||
fi |
|||
} |
|||
|
|||
termux_step_make_install () { |
|||
if ls *akefile &> /dev/null; then |
|||
: ${TERMUX_PKG_MAKE_INSTALL_TARGET:="install"}: |
|||
# Some packages have problem with parallell install, and it does not buy much, so use -j 1. |
|||
if [ -z "$TERMUX_PKG_EXTRA_MAKE_ARGS" ]; then |
|||
make -j 1 ${TERMUX_PKG_MAKE_INSTALL_TARGET} |
|||
else |
|||
make -j 1 ${TERMUX_PKG_EXTRA_MAKE_ARGS} ${TERMUX_PKG_MAKE_INSTALL_TARGET} |
|||
fi |
|||
fi |
|||
} |
|||
|
|||
termux_step_post_make_install () { |
|||
return |
|||
} |
|||
|
|||
termux_step_extract_into_massagedir () { |
|||
TARBALL_ORIG=$TERMUX_PKG_PACKAGEDIR/${TERMUX_PKG_NAME}_orig.tar.gz |
|||
|
|||
# Build diff tar with what has changed during the build: |
|||
cd $TERMUX_PREFIX |
|||
$TERMUX_TAR -N $TERMUX_BUILD_TS_FILE -czf $TARBALL_ORIG . |
|||
|
|||
# Extract tar in order to massage it |
|||
mkdir -p $TERMUX_PKG_MASSAGEDIR/$TERMUX_PREFIX |
|||
cd $TERMUX_PKG_MASSAGEDIR/$TERMUX_PREFIX |
|||
$TERMUX_TAR xf $TARBALL_ORIG |
|||
} |
|||
|
|||
termux_step_massage () { |
|||
cd $TERMUX_PKG_MASSAGEDIR/$TERMUX_PREFIX |
|||
|
|||
# Remove lib/charset.alias which is installed by gettext-using packages: |
|||
rm -f lib/charset.alias |
|||
# Remove non-english man pages: |
|||
test -d share/man && (cd share/man; for f in `ls | grep -v man`; do rm -Rf $f; done ) |
|||
# Remove info pages and other docs: |
|||
rm -Rf share/info share/doc share/locale |
|||
# Remove old kept libraries (readline): |
|||
find . -name '*.old' -delete |
|||
# .. remove static libraries: |
|||
if [ $TERMUX_PKG_KEEP_STATIC_LIBRARIES = "false" ]; then |
|||
find . -name '*.a' -delete |
|||
find . -name '*.la' -delete |
|||
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) |
|||
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*' |
|||
fi |
|||
# Remove DT_ entries which the android 5.1 linker warns about: |
|||
find . -type f | xargs $TERMUX_ELF_CLEANER |
|||
# Fix shebang paths: |
|||
for file in `find . -type f`; do |
|||
head -c 100 $file | grep -E "^#\!.*\\/bin\\/.*" | grep -q -E -v "^#\! ?\\/system" && sed --follow-symlinks -i -E "s@^#\!(.*)/bin/(.*)@#\!$TERMUX_PREFIX/bin/\2@" $file |
|||
done |
|||
set -e -o pipefail |
|||
|
|||
test ! -z "$TERMUX_PKG_RM_AFTER_INSTALL" && rm -Rf $TERMUX_PKG_RM_AFTER_INSTALL |
|||
|
|||
find . -type d -empty -delete # Remove empty directories |
|||
|
|||
# Sub packages: |
|||
if [ -d include -a -z "${TERMUX_PKG_NO_DEVELSPLIT}" ]; then |
|||
# Add virtual -dev sub package if there are include files: |
|||
_DEVEL_SUBPACKAGE_FILE=$TERMUX_PKG_TMPDIR/${TERMUX_PKG_NAME}-dev.subpackage.sh |
|||
echo TERMUX_SUBPKG_INCLUDE=\"include share/man/man3 lib/pkgconfig share/aclocal\" > $_DEVEL_SUBPACKAGE_FILE |
|||
echo TERMUX_SUBPKG_DESCRIPTION=\"Development files for ${TERMUX_PKG_NAME}\" >> $_DEVEL_SUBPACKAGE_FILE |
|||
echo TERMUX_SUBPKG_DEPENDS=\"$TERMUX_PKG_NAME\" >> $_DEVEL_SUBPACKAGE_FILE |
|||
fi |
|||
# Now build all sub packages |
|||
rm -Rf $TERMUX_TOPDIR/$TERMUX_PKG_NAME/subpackages |
|||
for subpackage in $TERMUX_PKG_BUILDER_DIR/*.subpackage.sh $TERMUX_PKG_TMPDIR/*subpackage.sh; do |
|||
test ! -f $subpackage && continue |
|||
SUB_PKG_NAME=`basename $subpackage .subpackage.sh` |
|||
# Default value is same as main package, but sub package may override: |
|||
TERMUX_SUBPKG_PLATFORM_INDEPENDENT=$TERMUX_PKG_PLATFORM_INDEPENDENT |
|||
echo "$SUB_PKG_NAME => $subpackage" |
|||
SUB_PKG_DIR=$TERMUX_TOPDIR/$TERMUX_PKG_NAME/subpackages/$SUB_PKG_NAME |
|||
TERMUX_SUBPKG_DEPENDS="" |
|||
SUB_PKG_MASSAGE_DIR=$SUB_PKG_DIR/massage/$TERMUX_PREFIX |
|||
SUB_PKG_PACKAGE_DIR=$SUB_PKG_DIR/package |
|||
mkdir -p $SUB_PKG_MASSAGE_DIR $SUB_PKG_PACKAGE_DIR |
|||
|
|||
. $subpackage |
|||
|
|||
for includeset in $TERMUX_SUBPKG_INCLUDE; do |
|||
_INCLUDE_DIRSET=`dirname $includeset` |
|||
test "$_INCLUDE_DIRSET" = "." && _INCLUDE_DIRSET="" |
|||
if [ -e $includeset ]; then |
|||
mkdir -p $SUB_PKG_MASSAGE_DIR/$_INCLUDE_DIRSET |
|||
mv $includeset $SUB_PKG_MASSAGE_DIR/$_INCLUDE_DIRSET |
|||
fi |
|||
done |
|||
|
|||
SUB_PKG_ARCH=$TERMUX_ARCH |
|||
test -n "$TERMUX_SUBPKG_PLATFORM_INDEPENDENT" && SUB_PKG_ARCH=all |
|||
|
|||
cd $SUB_PKG_DIR/massage |
|||
SUB_PKG_INSTALLSIZE=`du -sk . | cut -f 1` |
|||
$TERMUX_TAR --xz -cf $SUB_PKG_PACKAGE_DIR/data.tar.xz . |
|||
|
|||
mkdir -p DEBIAN |
|||
cd DEBIAN |
|||
cat > control <<HERE |
|||
Package: $SUB_PKG_NAME |
|||
Architecture: ${SUB_PKG_ARCH} |
|||
Installed-Size: ${SUB_PKG_INSTALLSIZE} |
|||
Maintainer: $TERMUX_PKG_MAINTAINER |
|||
Version: $TERMUX_PKG_FULLVERSION |
|||
Description: $TERMUX_SUBPKG_DESCRIPTION |
|||
Homepage: $TERMUX_PKG_HOMEPAGE |
|||
HERE |
|||
test ! -z "$TERMUX_SUBPKG_DEPENDS" && echo "Depends: $TERMUX_SUBPKG_DEPENDS" >> control |
|||
$TERMUX_TAR -czf $SUB_PKG_PACKAGE_DIR/control.tar.gz . |
|||
|
|||
# Create the actual .deb file: |
|||
TERMUX_SUBPKG_DEBFILE=$TERMUX_COMMON_DEBDIR/${SUB_PKG_NAME}-${TERMUX_PKG_FULLVERSION}_${SUB_PKG_ARCH}.deb |
|||
ar cr $TERMUX_SUBPKG_DEBFILE \ |
|||
$TERMUX_COMMON_CACHEDIR/debian-binary \ |
|||
$SUB_PKG_PACKAGE_DIR/control.tar.gz \ |
|||
$SUB_PKG_PACKAGE_DIR/data.tar.xz |
|||
if [ "$TERMUX_PROCESS_DEB" != "" ]; then |
|||
$TERMUX_PROCESS_DEB $TERMUX_SUBPKG_DEBFILE |
|||
fi |
|||
|
|||
# Go back to main package: |
|||
cd $TERMUX_PKG_MASSAGEDIR/$TERMUX_PREFIX |
|||
done |
|||
|
|||
# .. remove empty directories (NOTE: keep this last): |
|||
find . -type d -empty -delete |
|||
# Make sure user can read and write all files (problem with dpkg otherwise): |
|||
chmod -R u+rw . |
|||
} |
|||
|
|||
termux_step_post_massage () { |
|||
return |
|||
} |
|||
|
|||
termux_step_create_debscripts () { |
|||
return |
|||
} |
|||
|
|||
source $TERMUX_PKG_BUILDER_SCRIPT |
|||
|
|||
# Compute full version: |
|||
TERMUX_PKG_FULLVERSION=$TERMUX_PKG_VERSION |
|||
if [ "$TERMUX_PKG_BUILD_REVISION" != "0" -o "$TERMUX_PKG_FULLVERSION" != "${TERMUX_PKG_FULLVERSION/-/}" ]; then |
|||
# "0" is the default revision, so only include it if the upstream versions contains "-" itself |
|||
TERMUX_PKG_FULLVERSION+="-$TERMUX_PKG_BUILD_REVISION" |
|||
fi |
|||
|
|||
# Start by extracting the package src into $TERMUX_PKG_SRCURL: |
|||
termux_step_extract_package |
|||
# Optional post processing: |
|||
termux_step_post_extract_package |
|||
|
|||
# Optional host build: |
|||
if [ "x$TERMUX_PKG_HOSTBUILD" != "x" ]; then |
|||
cd $TERMUX_PKG_SRCDIR |
|||
for patch in $TERMUX_PKG_BUILDER_DIR/*.patch.beforehostbuild; do |
|||
test -f $patch && sed "s%\@TERMUX_PREFIX\@%${TERMUX_PREFIX}%g" $patch | patch -p1 |
|||
done |
|||
|
|||
if [ -f "$TERMUX_PKG_HOSTBUILD_DIR/TERMUX_BUILT_FOR_$TERMUX_PKG_VERSION" ]; then |
|||
echo "Using already built host build" |
|||
else |
|||
mkdir -p $TERMUX_PKG_HOSTBUILD_DIR |
|||
cd $TERMUX_PKG_HOSTBUILD_DIR |
|||
|
|||
ORIG_AR=$AR; unset AR |
|||
ORIG_AS=$AS; unset AS |
|||
ORIG_CC=$CC; unset CC |
|||
ORIG_CXX=$CXX; unset CXX |
|||
ORIG_CPP=$CPP; unset CPP |
|||
ORIG_CFLAGS=$CFLAGS; unset CFLAGS |
|||
ORIG_CPPFLAGS=$CPPFLAGS; unset CPPFLAGS |
|||
ORIG_CXXFLAGS=$CXXFLAGS; unset CXXFLAGS |
|||
ORIG_LDFLAGS=$LDFLAGS; unset LDFLAGS |
|||
ORIG_RANLIB=$RANLIB; unset RANLIB |
|||
ORIG_LD=$LD; unset LD |
|||
ORIG_PKG_CONFIG=$PKG_CONFIG; unset PKG_CONFIG |
|||
ORIG_PKG_CONFIG_LIBDIR=$PKG_CONFIG_LIBDIR; unset PKG_CONFIG_LIBDIR |
|||
ORIG_STRIP=$STRIP; unset STRIP |
|||
|
|||
termux_step_host_build |
|||
touch $TERMUX_PKG_HOSTBUILD_DIR/TERMUX_BUILT_FOR_$TERMUX_PKG_VERSION |
|||
|
|||
export AR=$ORIG_AR |
|||
export AS=$ORIG_AS |
|||
export CC=$ORIG_CC |
|||
export CXX=$ORIG_CXX |
|||
export CPP=$ORIG_CPP |
|||
export CFLAGS=$ORIG_CFLAGS |
|||
export CPPFLAGS=$ORIG_CPPFLAGS |
|||
export CXXFLAGS=$ORIG_CXXFLAGS |
|||
export LDFLAGS=$ORIG_LDFLAGS |
|||
export RANLIB=$ORIG_RANLIB |
|||
export LD=$ORIG_LD |
|||
export PKG_CONFIG=$ORIG_PKG_CONFIG |
|||
export PKG_CONFIG_LIBDIR=$ORIG_PKG_CONFIG_LIBDIR |
|||
export STRIP=$ORIG_STRIP |
|||
fi |
|||
fi |
|||
|
|||
if [ "$TERMUX_PKG_DEPENDS" != "${TERMUX_PKG_DEPENDS/libandroid-support/}" ]; then |
|||
# If using the android support library, link to it and include its headers as system headers: |
|||
export CPPFLAGS="$CPPFLAGS -isystem $TERMUX_PREFIX/include/libandroid-support" |
|||
export LDFLAGS="$LDFLAGS -landroid-support" |
|||
fi |
|||
|
|||
if [ -n "$TERMUX_PKG_BUILD_IN_SRC" ]; then |
|||
echo "Building in src due to TERMUX_PKG_BUILD_IN_SRC being set" >> $TERMUX_PKG_BUILDDIR/BUILDING_IN_SRC.txt |
|||
TERMUX_PKG_BUILDDIR=$TERMUX_PKG_SRCDIR |
|||
fi |
|||
|
|||
cd $TERMUX_PKG_BUILDDIR |
|||
termux_step_patch_package |
|||
cd $TERMUX_PKG_BUILDDIR |
|||
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_pre_make |
|||
cd $TERMUX_PKG_BUILDDIR |
|||
termux_step_make |
|||
cd $TERMUX_PKG_BUILDDIR |
|||
termux_step_make_install |
|||
cd $TERMUX_PKG_BUILDDIR |
|||
termux_step_post_make_install |
|||
cd $TERMUX_PKG_MASSAGEDIR |
|||
termux_step_extract_into_massagedir |
|||
termux_step_massage |
|||
termux_step_post_massage |
|||
|
|||
# Create data tarball containing files to package: |
|||
cd $TERMUX_PKG_MASSAGEDIR |
|||
if [ "`find . -type f`" = "" ]; then |
|||
echo "ERROR: No files in package" |
|||
exit 1 |
|||
fi |
|||
$TERMUX_TAR --xz -cf $TERMUX_PKG_PACKAGEDIR/data.tar.xz . |
|||
|
|||
# Get install size. This will be written as the "Installed-Size" deb field so is measured in 1024-byte blocks: |
|||
TERMUX_PKG_INSTALLSIZE=`du -sk . | cut -f 1` |
|||
|
|||
# Create deb package: |
|||
# NOTE: From here on TERMUX_ARCH is set to "all" if TERMUX_PKG_PLATFORM_INDEPENDENT is set by the package |
|||
test -n "$TERMUX_PKG_PLATFORM_INDEPENDENT" && TERMUX_ARCH=all |
|||
|
|||
cd $TERMUX_PKG_MASSAGEDIR |
|||
|
|||
mkdir -p DEBIAN |
|||
cat > DEBIAN/control <<HERE |
|||
Package: $TERMUX_PKG_NAME |
|||
Architecture: ${TERMUX_ARCH} |
|||
Installed-Size: ${TERMUX_PKG_INSTALLSIZE} |
|||
Maintainer: $TERMUX_PKG_MAINTAINER |
|||
Version: $TERMUX_PKG_FULLVERSION |
|||
Description: $TERMUX_PKG_DESCRIPTION |
|||
Homepage: $TERMUX_PKG_HOMEPAGE |
|||
HERE |
|||
test ! -z "$TERMUX_PKG_DEPENDS" && echo "Depends: $TERMUX_PKG_DEPENDS" >> DEBIAN/control |
|||
test ! -z "$TERMUX_PKG_ESSENTIAL" && echo "Essential: yes" >> 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 |
|||
# Allow packages to create arbitrary control files: |
|||
cd DEBIAN |
|||
termux_step_create_debscripts |
|||
|
|||
# Create control.tar.gz |
|||
$TERMUX_TAR -czf $TERMUX_PKG_PACKAGEDIR/control.tar.gz . |
|||
# In the .deb ar file there should be a file "debian-binary" with "2.0" as the content: |
|||
TERMUX_PKG_DEBFILE=$TERMUX_COMMON_DEBDIR/${TERMUX_PKG_NAME}-${TERMUX_PKG_FULLVERSION}_${TERMUX_ARCH}.deb |
|||
# Create the actual .deb file: |
|||
ar cr $TERMUX_PKG_DEBFILE \ |
|||
$TERMUX_COMMON_CACHEDIR/debian-binary \ |
|||
$TERMUX_PKG_PACKAGEDIR/control.tar.gz \ |
|||
$TERMUX_PKG_PACKAGEDIR/data.tar.xz |
|||
|
|||
if [ "$TERMUX_PROCESS_DEB" != "" ]; then |
|||
$TERMUX_PROCESS_DEB $TERMUX_PKG_DEBFILE |
|||
fi |
|||
|
|||
echo "termux - build of '$1' done" |
|||
test -t 1 && printf "\033]0;$1 - DONE\007" |
|||
exit 0 |
@ -0,0 +1,88 @@ |
|||
#!/usr/bin/env python3 |
|||
# buildorder.py - script to generate a build order respecting package dependencies |
|||
|
|||
import os, sys |
|||
|
|||
def die(msg): |
|||
print('ERROR: ' + msg) |
|||
sys.exit(1) |
|||
|
|||
if len(sys.argv) != 2: die("Supply path to packages directory as first and only argument") |
|||
packages_dir = sys.argv[1] |
|||
if not os.path.isdir(packages_dir): die(packages_dir + ' is not a directory') |
|||
|
|||
class DebianPackage: |
|||
def __init__(self, name): |
|||
self.name = name |
|||
self.remaining_dependencies = set() # String |
|||
self.sub_packages = set() # String |
|||
self.prerequisite_for = set() # Packages that needs this package |
|||
|
|||
all_packages = [] # List of all DebianPackage:s |
|||
packages_map = {} # Mapping from package name to DebianPackage (if subpackage, mapping from subpackage name to parent package) |
|||
|
|||
for subdir_name in sorted(os.listdir(packages_dir)): |
|||
subdir_path = packages_dir + '/' + subdir_name |
|||
if os.path.exists(subdir_path + '/BROKEN.txt'): continue |
|||
build_sh_path = subdir_path + '/build.sh' |
|||
|
|||
this_package = DebianPackage(subdir_name) |
|||
all_packages.append(this_package) |
|||
packages_map[this_package.name] = this_package |
|||
|
|||
if not os.path.isfile(build_sh_path): die('The directory ' + subdir_name + ' does not contain build.sh') |
|||
with open(build_sh_path) as build_sh_file: |
|||
for line in build_sh_file: |
|||
if line.startswith('TERMUX_PKG_DEPENDS='): |
|||
deps_comma_separated = line[(line.index('=')+2):(len(line)-2)] |
|||
for dep in deps_comma_separated.split(','): |
|||
dep = dep.strip() |
|||
this_package.remaining_dependencies.add(dep) |
|||
for file_in_subdir_name in sorted(os.listdir(subdir_path)): |
|||
if file_in_subdir_name.endswith('.subpackage.sh'): |
|||
subpackage_name = file_in_subdir_name[0:-len(".subpackage.sh"):] |
|||
this_package.sub_packages.add(subpackage_name) |
|||
packages_map[subpackage_name] = this_package |
|||
with open(subdir_path + '/' + file_in_subdir_name) as subpackage_sh_file: |
|||
for line in subpackage_sh_file: |
|||
if line.startswith('TERMUX_SUBPKG_DEPENDS='): |
|||
deps_comma_separated = line[(line.index('=')+2):(len(line)-2)] |
|||
for dep in deps_comma_separated.split(','): |
|||
dep = dep.strip() |
|||
this_package.remaining_dependencies.add(dep) |
|||
this_package.remaining_dependencies.discard(this_package.name) # Do not depend on itself |
|||
this_package.remaining_dependencies.difference_update(this_package.sub_packages) # Do not depend on any sub package |
|||
|
|||
for package in all_packages: |
|||
for remaining in package.remaining_dependencies: |
|||
if not remaining in packages_map: die('Package ' + package.name + ' depends on non-existing package "' + remaining + '"') |
|||
packages_map[remaining].prerequisite_for.add(package) |
|||
|
|||
# List of all DebianPackage:s without dependencies |
|||
packages_without_deps = [p for p in all_packages if not p.remaining_dependencies] |
|||
if not packages_without_deps: die('No package without dependency - where to start?') |
|||
|
|||
# Sort alphabetically, but with libandroid-support first (since dependency on libandroid-support |
|||
# does not need to be declared explicitly, so anything might in theory depend on it to build): |
|||
packages_without_deps.sort(key=lambda p: 'aaaa' if p.name == 'libandroid-support' else p.name, reverse=True) |
|||
|
|||
# Topological sorting |
|||
build_order = [] |
|||
while packages_without_deps: |
|||
pkg = packages_without_deps.pop() |
|||
build_order.append(pkg) |
|||
for other_package in pkg.prerequisite_for: |
|||
other_package.remaining_dependencies.discard(pkg.name) # Remove this package |
|||
other_package.remaining_dependencies.difference_update(pkg.sub_packages) # .. and all its subpackages |
|||
if not other_package.remaining_dependencies: |
|||
# Check if the other package is ready to build now |
|||
packages_without_deps.append(other_package) |
|||
|
|||
if len(all_packages) != len(build_order): |
|||
print("ERROR: Cycle exists. Remaining: "); |
|||
for pkg in all_packages: |
|||
if pkg not in build_order: print(pkg.name) |
|||
sys.exit(1) |
|||
|
|||
for pkg in build_order: print(pkg.name) |
|||
|
@ -0,0 +1,9 @@ |
|||
#!/bin/sh |
|||
# check-pie.sh - script to detect non-PIE binaries (which does not work on Android) |
|||
|
|||
cd /data/data/com.termux/files/usr/bin/ |
|||
for file in *; do |
|||
if readelf -h $file 2>/dev/null | grep -q 'Type:[[:space:]]*EXEC'; then |
|||
echo $file |
|||
fi |
|||
done |
@ -0,0 +1,16 @@ |
|||
#!/usr/bin/env bash |
|||
# check-versions.sh - script to open packages in a browser for checking their versions |
|||
|
|||
OPEN=xdg-open |
|||
if [ `uname` = Darwin ]; then OPEN=open; fi |
|||
|
|||
# Run each package in separate process since we include their environment variables: |
|||
for path in packages/*; do |
|||
( |
|||
pkg=`basename $path` |
|||
. $path/build.sh |
|||
echo -n "$pkg - $TERMUX_PKG_VERSION - press Return to check homepage" |
|||
read |
|||
$OPEN $TERMUX_PKG_HOMEPAGE |
|||
) |
|||
done |
@ -0,0 +1,5 @@ |
|||
#!/bin/sh |
|||
# clean-rebuild-all.sh - clean everything and rebuild |
|||
|
|||
rm -Rf /data/data $HOME/termux $HOME/lib/android-standalone-toolchain-* |
|||
bash -x build-all.sh |
@ -0,0 +1,3 @@ |
|||
#!/bin/sh |
|||
|
|||
android update sdk --all --no-https --no-ui --filter build-tools-22.0.1,android-21 |
@ -0,0 +1,9 @@ |
|||
#!/usr/bin/env bash |
|||
# list-packages.sh - tool to list all package with home pages and descriptions |
|||
|
|||
for path in packages/*; do ( |
|||
pkg=`basename $path` |
|||
. $path/build.sh |
|||
echo "$pkg($TERMUX_PKG_VERSION): $TERMUX_PKG_HOMEPAGE" |
|||
echo " $TERMUX_PKG_DESCRIPTION" |
|||
) done |
@ -0,0 +1,120 @@ |
|||
/*
|
|||
* Copyright (C) 2007 The Android Open Source Project |
|||
* |
|||
* Licensed under the Apache License, Version 2.0 (the "License"); |
|||
* you may not use this file except in compliance with the License. |
|||
* You may obtain a copy of the License at |
|||
* |
|||
* http://www.apache.org/licenses/LICENSE-2.0
|
|||
* |
|||
* Unless required by applicable law or agreed to in writing, software |
|||
* distributed under the License is distributed on an "AS IS" BASIS, |
|||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|||
* See the License for the specific language governing permissions and |
|||
* limitations under the License. |
|||
*/ |
|||
|
|||
/*
|
|||
* JNI helper functions. |
|||
* |
|||
* This file may be included by C or C++ code, which is trouble because jni.h |
|||
* uses different typedefs for JNIEnv in each language. |
|||
*/ |
|||
#ifndef _NATIVEHELPER_JNIHELP_H |
|||
#define _NATIVEHELPER_JNIHELP_H |
|||
|
|||
#include "jni.h" |
|||
#include "utils/Log.h" |
|||
|
|||
#ifndef NELEM |
|||
# define NELEM(x) ((int) (sizeof(x) / sizeof((x)[0]))) |
|||
#endif |
|||
|
|||
#ifdef __cplusplus |
|||
extern "C" { |
|||
#endif |
|||
|
|||
/*
|
|||
* Register one or more native methods with a particular class. |
|||
*/ |
|||
int jniRegisterNativeMethods(C_JNIEnv* env, const char* className, |
|||
const JNINativeMethod* gMethods, int numMethods); |
|||
|
|||
/*
|
|||
* Throw an exception with the specified class and an optional message. |
|||
* The "className" argument will be passed directly to FindClass, which |
|||
* takes strings with slashes (e.g. "java/lang/Object"). |
|||
* |
|||
* Returns 0 on success, nonzero if something failed (e.g. the exception |
|||
* class couldn't be found). |
|||
* |
|||
* Currently aborts the VM if it can't throw the exception. |
|||
*/ |
|||
int jniThrowException(C_JNIEnv* env, const char* className, const char* msg); |
|||
|
|||
/*
|
|||
* Throw a java.lang.RuntimeException, with an optional message. |
|||
*/ |
|||
int jniThrowRuntimeException(JNIEnv* env, const char* msg); |
|||
|
|||
/*
|
|||
* Throw a java.io.IOException, generating the message from errno. |
|||
*/ |
|||
int jniThrowIOException(C_JNIEnv* env, int errnum); |
|||
|
|||
/*
|
|||
* Create a java.io.FileDescriptor given an integer fd |
|||
*/ |
|||
jobject jniCreateFileDescriptor(C_JNIEnv* env, int fd); |
|||
|
|||
/*
|
|||
* Get an int file descriptor from a java.io.FileDescriptor |
|||
*/ |
|||
int jniGetFDFromFileDescriptor(C_JNIEnv* env, jobject fileDescriptor); |
|||
|
|||
/*
|
|||
* Set an int file descriptor to a java.io.FileDescriptor |
|||
*/ |
|||
void jniSetFileDescriptorOfFD(C_JNIEnv* env, jobject fileDescriptor, int value); |
|||
|
|||
#ifdef __cplusplus |
|||
} |
|||
#endif |
|||
|
|||
|
|||
/*
|
|||
* For C++ code, we provide inlines that map to the C functions. g++ always |
|||
* inlines these, even on non-optimized builds. |
|||
*/ |
|||
#if defined(__cplusplus) && !defined(JNI_FORCE_C) |
|||
inline int jniRegisterNativeMethods(JNIEnv* env, const char* className, |
|||
const JNINativeMethod* gMethods, int numMethods) |
|||
{ |
|||
return jniRegisterNativeMethods(&env->functions, className, gMethods, |
|||
numMethods); |
|||
} |
|||
inline int jniThrowException(JNIEnv* env, const char* className, |
|||
const char* msg) |
|||
{ |
|||
return jniThrowException(&env->functions, className, msg); |
|||
} |
|||
inline int jniThrowIOException(JNIEnv* env, int errnum) |
|||
{ |
|||
return jniThrowIOException(&env->functions, errnum); |
|||
} |
|||
inline jobject jniCreateFileDescriptor(JNIEnv* env, int fd) |
|||
{ |
|||
return jniCreateFileDescriptor(&env->functions, fd); |
|||
} |
|||
inline int jniGetFDFromFileDescriptor(JNIEnv* env, jobject fileDescriptor) |
|||
{ |
|||
return jniGetFDFromFileDescriptor(&env->functions, fileDescriptor); |
|||
} |
|||
inline void jniSetFileDescriptorOfFD(JNIEnv* env, jobject fileDescriptor, |
|||
int value) |
|||
{ |
|||
return jniSetFileDescriptorOfFD(&env->functions, fileDescriptor, value); |
|||
} |
|||
#endif |
|||
|
|||
#endif /*_NATIVEHELPER_JNIHELP_H*/ |
@ -0,0 +1,111 @@ |
|||
Add <arpa/ftp.h> for some ftp defines which some packages needs. |
|||
|
|||
diff -Nur /Users/fornwall/lib/android-ndk/platforms/android-18/arch-arm/usr/include/arpa/ftp.h ./usr/include/arpa/ftp.h
|
|||
--- /Users/fornwall/lib/android-ndk/platforms/android-18/arch-arm/usr/include/arpa/ftp.h 1970-01-01 01:00:00.000000000 +0100
|
|||
+++ ./usr/include/arpa/ftp.h 2014-02-07 02:07:52.000000000 +0100
|
|||
@@ -0,0 +1,105 @@
|
|||
+/*
|
|||
+ * Copyright (c) 1983, 1989, 1993
|
|||
+ * The Regents of the University of California. All rights reserved.
|
|||
+ *
|
|||
+ * Redistribution and use in source and binary forms, with or without
|
|||
+ * modification, are permitted provided that the following conditions
|
|||
+ * are met:
|
|||
+ * 1. Redistributions of source code must retain the above copyright
|
|||
+ * notice, this list of conditions and the following disclaimer.
|
|||
+ * 2. Redistributions in binary form must reproduce the above copyright
|
|||
+ * notice, this list of conditions and the following disclaimer in the
|
|||
+ * documentation and/or other materials provided with the distribution.
|
|||
+ * 4. Neither the name of the University nor the names of its contributors
|
|||
+ * may be used to endorse or promote products derived from this software
|
|||
+ * without specific prior written permission.
|
|||
+ *
|
|||
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
|||
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|||
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|||
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
|||
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|||
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|||
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|||
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|||
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|||
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|||
+ * SUCH DAMAGE.
|
|||
+ *
|
|||
+ * @(#)ftp.h 8.1 (Berkeley) 6/2/93
|
|||
+ */
|
|||
+
|
|||
+#ifndef _ARPA_FTP_H
|
|||
+#define _ARPA_FTP_H 1
|
|||
+
|
|||
+/* Definitions for FTP; see RFC-765. */
|
|||
+
|
|||
+/*
|
|||
+ * Reply codes.
|
|||
+ */
|
|||
+#define PRELIM 1 /* positive preliminary */
|
|||
+#define COMPLETE 2 /* positive completion */
|
|||
+#define CONTINUE 3 /* positive intermediate */
|
|||
+#define TRANSIENT 4 /* transient negative completion */
|
|||
+#define ERROR 5 /* permanent negative completion */
|
|||
+
|
|||
+/*
|
|||
+ * Type codes
|
|||
+ */
|
|||
+#define TYPE_A 1 /* ASCII */
|
|||
+#define TYPE_E 2 /* EBCDIC */
|
|||
+#define TYPE_I 3 /* image */
|
|||
+#define TYPE_L 4 /* local byte size */
|
|||
+
|
|||
+#ifdef FTP_NAMES
|
|||
+char *typenames[] = {"0", "ASCII", "EBCDIC", "Image", "Local" };
|
|||
+#endif
|
|||
+
|
|||
+/*
|
|||
+ * Form codes
|
|||
+ */
|
|||
+#define FORM_N 1 /* non-print */
|
|||
+#define FORM_T 2 /* telnet format effectors */
|
|||
+#define FORM_C 3 /* carriage control (ASA) */
|
|||
+#ifdef FTP_NAMES
|
|||
+char *formnames[] = {"0", "Nonprint", "Telnet", "Carriage-control" };
|
|||
+#endif
|
|||
+
|
|||
+/*
|
|||
+ * Structure codes
|
|||
+ */
|
|||
+#define STRU_F 1 /* file (no record structure) */
|
|||
+#define STRU_R 2 /* record structure */
|
|||
+#define STRU_P 3 /* page structure */
|
|||
+#ifdef FTP_NAMES
|
|||
+char *strunames[] = {"0", "File", "Record", "Page" };
|
|||
+#endif
|
|||
+
|
|||
+/*
|
|||
+ * Mode types
|
|||
+ */
|
|||
+#define MODE_S 1 /* stream */
|
|||
+#define MODE_B 2 /* block */
|
|||
+#define MODE_C 3 /* compressed */
|
|||
+#ifdef FTP_NAMES
|
|||
+char *modenames[] = {"0", "Stream", "Block", "Compressed" };
|
|||
+#endif
|
|||
+
|
|||
+/*
|
|||
+ * Record Tokens
|
|||
+ */
|
|||
+#define REC_ESC '\377' /* Record-mode Escape */
|
|||
+#define REC_EOR '\001' /* Record-mode End-of-Record */
|
|||
+#define REC_EOF '\002' /* Record-mode End-of-File */
|
|||
+
|
|||
+/*
|
|||
+ * Block Header
|
|||
+ */
|
|||
+#define BLK_EOR 0x80 /* Block is End-of-Record */
|
|||
+#define BLK_EOF 0x40 /* Block is End-of-File */
|
|||
+#define BLK_ERRORS 0x20 /* Block is suspected of containing errors */
|
|||
+#define BLK_RESTART 0x10 /* Block is Restart Marker */
|
|||
+
|
|||
+#define BLK_BYTECOUNT 2 /* Bytes in this block */
|
|||
+
|
|||
+#endif /* arpa/ftp.h */
|
@ -0,0 +1,88 @@ |
|||
The <arpa/tftp.h> header is needed by inetutils. |
|||
|
|||
diff -N -a -u -r /home/fornwall/lib/android-ndk/platforms/android-21/arch-arm/usr/include/arpa/tftp.h ./usr/include/arpa/tftp.h
|
|||
--- /home/fornwall/lib/android-ndk/platforms/android-21/arch-arm/usr/include/arpa/tftp.h 1969-12-31 19:00:00.000000000 -0500
|
|||
+++ ./usr/include/arpa/tftp.h 2015-05-12 15:40:31.648145474 -0400
|
|||
@@ -0,0 +1,82 @@
|
|||
+/*
|
|||
+ * Copyright (c) 1983, 1993
|
|||
+ * The Regents of the University of California. All rights reserved.
|
|||
+ *
|
|||
+ * Redistribution and use in source and binary forms, with or without
|
|||
+ * modification, are permitted provided that the following conditions
|
|||
+ * are met:
|
|||
+ * 1. Redistributions of source code must retain the above copyright
|
|||
+ * notice, this list of conditions and the following disclaimer.
|
|||
+ * 2. Redistributions in binary form must reproduce the above copyright
|
|||
+ * notice, this list of conditions and the following disclaimer in the
|
|||
+ * documentation and/or other materials provided with the distribution.
|
|||
+ * 4. Neither the name of the University nor the names of its contributors
|
|||
+ * may be used to endorse or promote products derived from this software
|
|||
+ * without specific prior written permission.
|
|||
+ *
|
|||
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
|||
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|||
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|||
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
|||
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|||
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|||
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|||
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|||
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|||
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|||
+ * SUCH DAMAGE.
|
|||
+ *
|
|||
+ * @(#)tftp.h 8.1 (Berkeley) 6/2/93
|
|||
+ */
|
|||
+
|
|||
+#ifndef _ARPA_TFTP_H
|
|||
+#define _ARPA_TFTP_H 1
|
|||
+
|
|||
+/*
|
|||
+ * Trivial File Transfer Protocol (IEN-133)
|
|||
+ */
|
|||
+#define SEGSIZE 512 /* data segment size */
|
|||
+
|
|||
+/*
|
|||
+ * Packet types.
|
|||
+ */
|
|||
+#define RRQ 01 /* read request */
|
|||
+#define WRQ 02 /* write request */
|
|||
+#define DATA 03 /* data packet */
|
|||
+#define ACK 04 /* acknowledgement */
|
|||
+#define ERROR 05 /* error code */
|
|||
+
|
|||
+struct tftphdr {
|
|||
+ short th_opcode; /* packet type */
|
|||
+ union {
|
|||
+ char tu_padding[3]; /* sizeof() compat */
|
|||
+ struct {
|
|||
+ union {
|
|||
+ unsigned short tu_block; /* block # */
|
|||
+ short tu_code; /* error code */
|
|||
+ } __attribute__ ((__packed__)) th_u3;
|
|||
+ char tu_data[0]; /* data or error string */
|
|||
+ } __attribute__ ((__packed__)) th_u2;
|
|||
+ char tu_stuff[0]; /* request packet stuff */
|
|||
+ } __attribute__ ((__packed__)) th_u1;
|
|||
+} __attribute__ ((__packed__));
|
|||
+
|
|||
+#define th_block th_u1.th_u2.th_u3.tu_block
|
|||
+#define th_code th_u1.th_u2.th_u3.tu_code
|
|||
+#define th_stuff th_u1.tu_stuff
|
|||
+#define th_data th_u1.th_u2.tu_data
|
|||
+#define th_msg th_u1.th_u2.tu_data
|
|||
+
|
|||
+/*
|
|||
+ * Error codes.
|
|||
+ */
|
|||
+#define EUNDEF 0 /* not defined */
|
|||
+#define ENOTFOUND 1 /* file not found */
|
|||
+#define EACCESS 2 /* access violation */
|
|||
+#define ENOSPACE 3 /* disk full or allocation exceeded */
|
|||
+#define EBADOP 4 /* illegal TFTP operation */
|
|||
+#define EBADID 5 /* unknown transfer ID */
|
|||
+#define EEXISTS 6 /* file already exists */
|
|||
+#define ENOUSER 7 /* no such user */
|
|||
+
|
|||
+#endif /* arpa/tftp.h */
|
@ -0,0 +1,17 @@ |
|||
Avoid defining constants which causes at least dpkg build to think that |
|||
sync_file_range(2) is available - which it is not. |
|||
|
|||
diff -u -r /home/fornwall/lib/android-ndk/platforms/android-21/arch-arm/usr/include/fcntl.h ./usr/include/fcntl.h
|
|||
--- /home/fornwall/lib/android-ndk/platforms/android-21/arch-arm/usr/include/fcntl.h 2014-10-14 22:53:49.000000000 -0400
|
|||
+++ ./usr/include/fcntl.h 2014-12-16 05:51:38.371338608 -0500
|
|||
@@ -59,10 +59,6 @@
|
|||
#define SPLICE_F_MORE 4 |
|||
#define SPLICE_F_GIFT 8 |
|||
|
|||
-#define SYNC_FILE_RANGE_WAIT_BEFORE 1
|
|||
-#define SYNC_FILE_RANGE_WRITE 2
|
|||
-#define SYNC_FILE_RANGE_WAIT_AFTER 4
|
|||
-
|
|||
extern int creat(const char*, mode_t); |
|||
extern int creat64(const char*, mode_t); |
|||
extern int fallocate64(int, int, off64_t, off64_t); |
@ -0,0 +1,24 @@ |
|||
diff -u -r /home/fornwall/lib/android-ndk/platforms/android-21/arch-arm/usr/include/grp.h ./usr/include/grp.h
|
|||
--- /home/fornwall/lib/android-ndk/platforms/android-21/arch-arm/usr/include/grp.h 2014-10-14 22:53:49.000000000 -0400
|
|||
+++ ./usr/include/grp.h 2014-12-14 15:33:15.715243224 -0500
|
|||
@@ -54,13 +54,13 @@
|
|||
struct group *getgrgid(gid_t); |
|||
struct group *getgrnam(const char *); |
|||
#if __POSIX_VISIBLE >= 200112 || __XPG_VISIBLE |
|||
-struct group *getgrent(void);
|
|||
-void setgrent(void);
|
|||
-void endgrent(void);
|
|||
-int getgrgid_r(gid_t, struct group *, char *,
|
|||
- size_t, struct group **);
|
|||
-int getgrnam_r(const char *, struct group *, char *,
|
|||
- size_t, struct group **);
|
|||
+static struct group *getgrent(void) { return 0; }
|
|||
+static void setgrent(void) {}
|
|||
+static void endgrent(void) {}
|
|||
+static int getgrgid_r(gid_t gid, struct group * grp, char * buf,
|
|||
+ size_t buflen, struct group ** result) { *result = 0; return 0; }
|
|||
+static int getgrnam_r(const char * name, struct group * grp, char * buf,
|
|||
+ size_t buflen, struct group ** result) { *result = 0; return 0; }
|
|||
#endif |
|||
|
|||
int getgrouplist (const char *user, gid_t group, |
@ -0,0 +1,18 @@ |
|||
http://pubs.opengroup.org/onlinepubs/009695399/basedefs/netinet/in.h.html: |
|||
|
|||
"The <netinet/in.h> header shall define the following types: |
|||
in_port_t |
|||
Equivalent to the type uint16_t as defined in <inttypes.h>" |
|||
|
|||
diff -u -r /home/fornwall/lib/android-ndk/platforms/android-19/arch-arm/usr/include/netinet/in.h ./usr/include/netinet/in.h
|
|||
--- /home/fornwall/lib/android-ndk/platforms/android-19/arch-arm/usr/include/netinet/in.h 2012-08-21 07:23:12.000000000 +0200
|
|||
+++ ./usr/include/netinet/in.h 2014-07-06 04:31:37.563233271 +0200
|
|||
@@ -41,6 +41,8 @@
|
|||
|
|||
#define INET_ADDRSTRLEN 16 |
|||
|
|||
+typedef uint16_t in_port_t;
|
|||
+
|
|||
extern int bindresvport (int sd, struct sockaddr_in *sin); |
|||
|
|||
static const struct in6_addr in6addr_any = IN6ADDR_ANY_INIT; |
@ -0,0 +1,47 @@ |
|||
diff -u -r /home/fornwall/lib/android-ndk/platforms/android-19/arch-arm/usr/include/pwd.h ./usr/include/pwd.h
|
|||
--- /home/fornwall/lib/android-ndk/platforms/android-19/arch-arm/usr/include/pwd.h 2012-08-21 07:23:12.000000000 +0200
|
|||
+++ ./usr/include/pwd.h 2014-07-06 04:39:02.731221101 +0200
|
|||
@@ -114,6 +114,43 @@
|
|||
struct passwd* getpwnam(const char*); |
|||
struct passwd* getpwuid(uid_t); |
|||
|
|||
+extern char *realpath(const char *path, char *resolved_path);
|
|||
+extern void free(void *ptr);
|
|||
+extern void *memcpy(void *dest, const void *src, size_t n);
|
|||
+extern size_t strlen(const char *s);
|
|||
+
|
|||
+static void android_setup_pwd(struct passwd* pw) {
|
|||
+ static char realpath_buffer[255];
|
|||
+ size_t allocated_realpath_len;
|
|||
+ char* allocated_realpath = realpath("@TERMUX_HOME@/.termux/shell", NULL);
|
|||
+ if (allocated_realpath == NULL || (allocated_realpath_len = strlen(allocated_realpath)) >= sizeof(realpath_buffer)) {
|
|||
+ pw->pw_shell = "@TERMUX_PREFIX@/bin/ash";
|
|||
+ } else {
|
|||
+ memcpy(realpath_buffer, allocated_realpath, allocated_realpath_len);
|
|||
+ realpath_buffer[allocated_realpath_len] = 0;
|
|||
+ pw->pw_shell = realpath_buffer;
|
|||
+ }
|
|||
+ free(allocated_realpath);
|
|||
+ pw->pw_dir = "@TERMUX_HOME@";
|
|||
+ pw->pw_passwd = "*";
|
|||
+}
|
|||
+
|
|||
+static struct passwd* android_polyfill_getpwuid(uid_t t) {
|
|||
+ struct passwd* pw = getpwuid(t);
|
|||
+ if (pw == NULL) return NULL;
|
|||
+ android_setup_pwd(pw);
|
|||
+ return pw;
|
|||
+}
|
|||
+
|
|||
+static struct passwd* android_polyfill_getpwnam(const char* name) {
|
|||
+ struct passwd* pw = getpwnam(name);
|
|||
+ if (pw == NULL) return NULL;
|
|||
+ android_setup_pwd(pw);
|
|||
+ return pw;
|
|||
+}
|
|||
+
|
|||
+#define getpwnam android_polyfill_getpwnam
|
|||
+#define getpwuid android_polyfill_getpwuid
|
|||
void endpwent(void); |
|||
|
|||
#if 0 /* MISSING FROM BIONIC */ |
@ -0,0 +1,13 @@ |
|||
Fix problem where <linux/route.h> needed <sys/socket.h> to compile. |
|||
|
|||
diff -u -r /Users/fornwall/lib/android-ndk/platforms/android-21/arch-arm/usr/include/linux/route.h ./usr/include/linux/route.h
|
|||
--- /Users/fornwall/lib/android-ndk/platforms/android-21/arch-arm/usr/include/linux/route.h 2014-10-15 04:53:49.000000000 +0200
|
|||
+++ ./usr/include/linux/route.h 2014-12-14 20:10:13.000000000 +0100
|
|||
@@ -18,6 +18,7 @@
|
|||
****************************************************************************/ |
|||
#ifndef _LINUX_ROUTE_H |
|||
#define _LINUX_ROUTE_H |
|||
+#include <sys/socket.h> /* for struct sockaddr */
|
|||
#include <linux/if.h> |
|||
#include <linux/compiler.h> |
|||
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ |
@ -0,0 +1,31 @@ |
|||
/* $NetBSD: sha1.h,v 1.13 2005/12/26 18:41:36 perry Exp $ */ |
|||
|
|||
/*
|
|||
* SHA-1 in C |
|||
* By Steve Reid <steve@edmweb.com> |
|||
* 100% Public Domain |
|||
*/ |
|||
|
|||
#ifndef _SYS_SHA1_H_ |
|||
#define _SYS_SHA1_H_ |
|||
|
|||
#include <sys/cdefs.h> |
|||
#include <sys/types.h> |
|||
|
|||
#define SHA1_DIGEST_LENGTH 20 |
|||
#define SHA1_DIGEST_STRING_LENGTH 41 |
|||
|
|||
typedef struct { |
|||
uint32_t state[5]; |
|||
uint32_t count[2]; |
|||
u_char buffer[64]; |
|||
} SHA1_CTX; |
|||
|
|||
__BEGIN_DECLS |
|||
void SHA1Transform(uint32_t[5], const u_char[64]); |
|||
void SHA1Init(SHA1_CTX *); |
|||
void SHA1Update(SHA1_CTX *, const u_char *, u_int); |
|||
void SHA1Final(u_char[SHA1_DIGEST_LENGTH], SHA1_CTX *); |
|||
__END_DECLS |
|||
|
|||
#endif /* _SYS_SHA1_H_ */ |
@ -0,0 +1,22 @@ |
|||
diff -u -r /home/fornwall/lib/android-ndk/platforms/android-21/arch-arm/usr/include/stdio.h ./usr/include/stdio.h
|
|||
--- /home/fornwall/lib/android-ndk/platforms/android-21/arch-arm/usr/include/stdio.h 2014-10-14 22:53:49.000000000 -0400
|
|||
+++ ./usr/include/stdio.h 2014-12-14 15:11:46.007242332 -0500
|
|||
@@ -193,7 +193,7 @@
|
|||
|
|||
/* System V/ANSI C; this is the wrong way to do this, do *not* use these. */ |
|||
#if __BSD_VISIBLE || __XPG_VISIBLE |
|||
-#define P_tmpdir "/tmp/"
|
|||
+#define P_tmpdir "@TERMUX_PREFIX@/tmp/"
|
|||
#endif |
|||
#define L_tmpnam 1024 /* XXX must be == PATH_MAX */ |
|||
#define TMP_MAX 308915776 |
|||
@@ -371,6 +371,9 @@
|
|||
#define fwopen(cookie, fn) funopen(cookie, 0, fn, 0, 0) |
|||
#endif /* __BSD_VISIBLE */ |
|||
|
|||
+/* Needed by gnulibs freading() */
|
|||
+#define __sferror(p) (((p)->_flags & __SERR) != 0)
|
|||
+
|
|||
#if defined(__BIONIC_FORTIFY) |
|||
|
|||
__BEGIN_DECLS |
@ -0,0 +1,18 @@ |
|||
diff -u -r /home/fornwall/lib/android-ndk/platforms/android-21/arch-arm/usr/include/string.h ./usr/include/string.h
|
|||
--- /home/fornwall/lib/android-ndk/platforms/android-21/arch-arm/usr/include/string.h 2014-12-02 22:38:31.000000000 -0500
|
|||
+++ ./usr/include/string.h 2015-05-08 23:00:18.591924680 -0400
|
|||
@@ -289,6 +289,14 @@
|
|||
|
|||
#endif /* defined(__BIONIC_FORTIFY) */ |
|||
|
|||
+/* Termux: Patched support for GNU extension function mempcpy(3): */
|
|||
+#if defined(_GNU_SOURCE) && defined(TERMUX_EXPOSE_MEMPCPY)
|
|||
+static void* mempcpy(void* dest, void const* src, size_t n)
|
|||
+{
|
|||
+ return memcpy(dest, src, n) + n;
|
|||
+}
|
|||
+#endif
|
|||
+
|
|||
__END_DECLS |
|||
|
|||
#endif /* _STRING_H_ */ |
@ -0,0 +1,5 @@ |
|||
diff -Nur /Users/fornwall/lib/android-ndk/platforms/android-18/arch-arm/usr/include/sys/fcntl.h ./usr/include/sys/fcntl.h
|
|||
--- /Users/fornwall/lib/android-ndk/platforms/android-18/arch-arm/usr/include/sys/fcntl.h 1970-01-01 01:00:00.000000000 +0100
|
|||
+++ ./usr/include/sys/fcntl.h 2014-01-27 08:44:34.000000000 +0100
|
|||
@@ -0,0 +1 @@
|
|||
+#include <fcntl.h>
|
@ -0,0 +1,11 @@ |
|||
diff -u -r /home/fornwall/lib/android-ndk/platforms/android-21/arch-arm/usr/include/sys/wait.h ./usr/include/sys/wait.h
|
|||
--- /home/fornwall/lib/android-ndk/platforms/android-21/arch-arm/usr/include/sys/wait.h 2014-10-14 22:53:49.000000000 -0400
|
|||
+++ ./usr/include/sys/wait.h 2015-05-15 18:28:58.428331748 -0400
|
|||
@@ -44,6 +44,7 @@
|
|||
#define WIFEXITED(s) (WTERMSIG(s) == 0) |
|||
#define WIFSTOPPED(s) (WTERMSIG(s) == 0x7f) |
|||
#define WIFSIGNALED(s) (WTERMSIG((s)+1) >= 2) |
|||
+#define WIFCONTINUED(x) (WIFSTOPPED(x) && WSTOPSIG(x) == 0x13)
|
|||
|
|||
extern pid_t wait(int *); |
|||
extern pid_t waitpid(pid_t, int *, int); |
@ -0,0 +1,114 @@ |
|||
/*
|
|||
* Copyright (c) 1987, 1993 |
|||
* The Regents of the University of California. All rights reserved. |
|||
* |
|||
* Redistribution and use in source and binary forms, with or without |
|||
* modification, are permitted provided that the following conditions |
|||
* are met: |
|||
* 1. Redistributions of source code must retain the above copyright |
|||
* notice, this list of conditions and the following disclaimer. |
|||
* 2. Redistributions in binary form must reproduce the above copyright |
|||
* notice, this list of conditions and the following disclaimer in the |
|||
* documentation and/or other materials provided with the distribution. |
|||
* 4. Neither the name of the University nor the names of its contributors |
|||
* may be used to endorse or promote products derived from this software |
|||
* without specific prior written permission. |
|||
* |
|||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND |
|||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
|||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
|||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
|||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
|||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
|||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
|||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
|||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
|||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
|||
* SUCH DAMAGE. |
|||
* |
|||
* @(#)sysexits.h 8.1 (Berkeley) 6/2/93 |
|||
*/ |
|||
|
|||
#ifndef _SYSEXITS_H |
|||
#define _SYSEXITS_H 1 |
|||
|
|||
/*
|
|||
* SYSEXITS.H -- Exit status codes for system programs. |
|||
* |
|||
* This include file attempts to categorize possible error |
|||
* exit statuses for system programs, notably delivermail |
|||
* and the Berkeley network. |
|||
* |
|||
* Error numbers begin at EX__BASE to reduce the possibility of |
|||
* clashing with other exit statuses that random programs may |
|||
* already return. The meaning of the codes is approximately |
|||
* as follows: |
|||
* |
|||
* EX_USAGE -- The command was used incorrectly, e.g., with |
|||
* the wrong number of arguments, a bad flag, a bad |
|||
* syntax in a parameter, or whatever. |
|||
* EX_DATAERR -- The input data was incorrect in some way. |
|||
* This should only be used for user's data & not |
|||
* system files. |
|||
* EX_NOINPUT -- An input file (not a system file) did not |
|||
* exist or was not readable. This could also include |
|||
* errors like "No message" to a mailer (if it cared |
|||
* to catch it). |
|||
* EX_NOUSER -- The user specified did not exist. This might |
|||
* be used for mail addresses or remote logins. |
|||
* EX_NOHOST -- The host specified did not exist. This is used |
|||
* in mail addresses or network requests. |
|||
* EX_UNAVAILABLE -- A service is unavailable. This can occur |
|||
* if a support program or file does not exist. This |
|||
* can also be used as a catchall message when something |
|||
* you wanted to do doesn't work, but you don't know |
|||
* why. |
|||
* EX_SOFTWARE -- An internal software error has been detected. |
|||
* This should be limited to non-operating system related |
|||
* errors as possible. |
|||
* EX_OSERR -- An operating system error has been detected. |
|||
* This is intended to be used for such things as "cannot |
|||
* fork", "cannot create pipe", or the like. It includes |
|||
* things like getuid returning a user that does not |
|||
* exist in the passwd file. |
|||
* EX_OSFILE -- Some system file (e.g., /etc/passwd, /etc/utmp, |
|||
* etc.) does not exist, cannot be opened, or has some |
|||
* sort of error (e.g., syntax error). |
|||
* EX_CANTCREAT -- A (user specified) output file cannot be |
|||
* created. |
|||
* EX_IOERR -- An error occurred while doing I/O on some file. |
|||
* EX_TEMPFAIL -- temporary failure, indicating something that |
|||
* is not really an error. In sendmail, this means |
|||
* that a mailer (e.g.) could not create a connection, |
|||
* and the request should be reattempted later. |
|||
* EX_PROTOCOL -- the remote system returned something that |
|||
* was "not possible" during a protocol exchange. |
|||
* EX_NOPERM -- You did not have sufficient permission to |
|||
* perform the operation. This is not intended for |
|||
* file system problems, which should use NOINPUT or |
|||
* CANTCREAT, but rather for higher level permissions. |
|||
*/ |
|||
|
|||
#define EX_OK 0 /* successful termination */ |
|||
|
|||
#define EX__BASE 64 /* base value for error messages */ |
|||
|
|||
#define EX_USAGE 64 /* command line usage error */ |
|||
#define EX_DATAERR 65 /* data format error */ |
|||
#define EX_NOINPUT 66 /* cannot open input */ |
|||
#define EX_NOUSER 67 /* addressee unknown */ |
|||
#define EX_NOHOST 68 /* host name unknown */ |
|||
#define EX_UNAVAILABLE 69 /* service unavailable */ |
|||
#define EX_SOFTWARE 70 /* internal software error */ |
|||
#define EX_OSERR 71 /* system error (e.g., can't fork) */ |
|||
#define EX_OSFILE 72 /* critical OS file missing */ |
|||
#define EX_CANTCREAT 73 /* can't create (user) output file */ |
|||
#define EX_IOERR 74 /* input/output error */ |
|||
#define EX_TEMPFAIL 75 /* temp failure; user is invited to retry */ |
|||
#define EX_PROTOCOL 76 /* remote error in protocol */ |
|||
#define EX_NOPERM 77 /* permission denied */ |
|||
#define EX_CONFIG 78 /* configuration error */ |
|||
|
|||
#define EX__MAX 78 /* maximum listed value */ |
|||
|
|||
#endif /* sysexits.h */ |
@ -0,0 +1,78 @@ |
|||
diff -Nur /Users/fornwall/lib/android-ndk/platforms/android-18/arch-arm/usr/include/syslog.h ./usr/include/syslog.h
|
|||
--- /Users/fornwall/lib/android-ndk/platforms/android-18/arch-arm/usr/include/syslog.h 2012-08-21 07:23:12.000000000 +0200
|
|||
+++ ./usr/include/syslog.h 2014-01-29 17:51:55.000000000 +0100
|
|||
@@ -31,6 +31,8 @@
|
|||
#include <stdio.h> |
|||
#include <sys/cdefs.h> |
|||
#include <stdarg.h> |
|||
+#include <android/log.h> /* for __android_log_vprint() */
|
|||
+#include <unistd.h> /* for getpid() */
|
|||
|
|||
__BEGIN_DECLS |
|||
|
|||
@@ -111,6 +112,65 @@
|
|||
extern void syslog_r(int, struct syslog_data *, const char *, ...); |
|||
extern void vsyslog_r(int, struct syslog_data *, const char *, va_list); |
|||
|
|||
+extern /*const*/ char* __progname;
|
|||
+static void android_polyfill_openlog(const char* a, int b, int c) {
|
|||
+ (void) a;
|
|||
+ (void) b;
|
|||
+ (void) c;
|
|||
+}
|
|||
+static void android_polyfill_closelog() {}
|
|||
+
|
|||
+static void android_polyfill_vsyslog(int syslog_priority, char const* format, va_list ap)
|
|||
+{
|
|||
+ android_LogPriority a = ANDROID_LOG_FATAL;
|
|||
+ switch (syslog_priority) {
|
|||
+ case LOG_INFO : a = ANDROID_LOG_SILENT ; break;
|
|||
+ case LOG_EMERG : a = ANDROID_LOG_FATAL ; break;
|
|||
+ case LOG_ERR : a = ANDROID_LOG_ERROR ; break;
|
|||
+ case LOG_WARNING : a = ANDROID_LOG_WARN ; break;
|
|||
+ case LOG_DEBUG : a = ANDROID_LOG_VERBOSE ; break;
|
|||
+ }
|
|||
+ char* syslog_text;
|
|||
+ if (vasprintf(&syslog_text, format, ap) == -1) {
|
|||
+ __android_log_vprint(a, "syslog", format, ap);
|
|||
+ return;
|
|||
+ }
|
|||
+ __android_log_print(a, "syslog", "%s - %s", __progname, syslog_text);
|
|||
+ free(syslog_text);
|
|||
+}
|
|||
+
|
|||
+static void android_polyfill_syslog(int priority, const char* format, ...)
|
|||
+{
|
|||
+ va_list myargs;
|
|||
+ va_start(myargs, format);
|
|||
+ android_polyfill_vsyslog(priority, format, myargs);
|
|||
+ va_end(myargs);
|
|||
+}
|
|||
+
|
|||
+static void android_polyfill_syslog_r(int syslog_priority, struct syslog_data* d, const char* format, ...)
|
|||
+{
|
|||
+ (void) d;
|
|||
+ va_list myargs;
|
|||
+ va_start(myargs, format);
|
|||
+ android_polyfill_vsyslog(syslog_priority, format, myargs);
|
|||
+ va_end(myargs);
|
|||
+}
|
|||
+
|
|||
+static void android_polyfill_vsyslog_r(int syslog_priority, struct syslog_data* d, const char* fmt, va_list ap)
|
|||
+{
|
|||
+ (void) d;
|
|||
+ android_polyfill_vsyslog(syslog_priority, fmt, ap);
|
|||
+}
|
|||
+
|
|||
+#define openlog android_polyfill_openlog
|
|||
+#define closelog android_polyfill_closelog
|
|||
+
|
|||
+#define syslog android_polyfill_syslog
|
|||
+#define syslog_r android_polyfill_syslog_r
|
|||
+
|
|||
+#define vsyslog android_polyfill_vsyslog
|
|||
+#define vsyslog_r android_polyfill_vsyslog_r
|
|||
+
|
|||
__END_DECLS |
|||
|
|||
#endif /* _SYSLOG_H */ |
@ -0,0 +1,12 @@ |
|||
diff -u -r /home/fornwall/lib/android-ndk/platforms/android-21/arch-arm/usr/include/termios.h ./usr/include/termios.h
|
|||
--- /home/fornwall/lib/android-ndk/platforms/android-21/arch-arm/usr/include/termios.h 2014-10-14 22:53:49.000000000 -0400
|
|||
+++ ./usr/include/termios.h 2015-05-15 18:23:49.264331535 -0400
|
|||
@@ -49,6 +49,8 @@
|
|||
int tcsendbreak(int, int); |
|||
int tcsetattr(int, int, const struct termios*); |
|||
|
|||
+#define _POSIX_VDISABLE 0
|
|||
+
|
|||
__END_DECLS |
|||
|
|||
#endif /* _TERMIOS_H_ */ |
@ -0,0 +1,55 @@ |
|||
diff -u -r /home/fornwall/lib/android-ndk/platforms/android-19/arch-arm/usr/include/unistd.h ./usr/include/unistd.h
|
|||
--- /home/fornwall/lib/android-ndk/platforms/android-19/arch-arm/usr/include/unistd.h 2012-08-21 07:23:12.000000000 +0200
|
|||
+++ ./usr/include/unistd.h 2014-07-09 09:55:58.443639544 +0200
|
|||
@@ -35,6 +35,7 @@
|
|||
#include <sys/sysconf.h> |
|||
#include <linux/capability.h> |
|||
#include <pathconf.h> |
|||
+#include <asm/unistd.h>
|
|||
|
|||
__BEGIN_DECLS |
|||
|
|||
@@ -166,6 +174,43 @@
|
|||
extern char* ttyname(int); |
|||
extern int ttyname_r(int, char*, size_t); |
|||
|
|||
+/* start android polyfill of ttyname(3) and ttyname_r(3) */
|
|||
+#define ttyname(a) android_polyfill_ttyname(a)
|
|||
+#define ttyname_r(a, b, c) android_polyfill_ttyname_r(a, b, c)
|
|||
+
|
|||
+static int android_polyfill_ttyname_r(int fd, char* buf, size_t buflen)
|
|||
+{
|
|||
+ char symlink_path[32] = "/proc/self/fd/";
|
|||
+ ssize_t siz;
|
|||
+
|
|||
+ if (!isatty(fd)) return -1;
|
|||
+
|
|||
+ /* Would like to do sprintf(symlink_path, "/proc/self/fd/%d", fd), but stdio.h may not be included. */
|
|||
+ int shifter = fd;
|
|||
+ char* p = symlink_path + 14;
|
|||
+ do {
|
|||
+ p++;
|
|||
+ shifter = shifter / 10;
|
|||
+ } while(shifter);
|
|||
+ *p = '\0';
|
|||
+ do {
|
|||
+ *--p = (fd % 10) + '0';
|
|||
+ fd = fd / 10;
|
|||
+ } while (fd);
|
|||
+
|
|||
+ siz = readlink(symlink_path, buf, buflen);
|
|||
+ if (siz < 0 || siz == buflen) return -1;
|
|||
+ buf[siz] = '\0';
|
|||
+ return 0;
|
|||
+}
|
|||
+
|
|||
+static char* android_polyfill_ttyname(int fd)
|
|||
+{
|
|||
+ static char buf[32];
|
|||
+ return (ttyname_r(fd, buf, sizeof(buf)) == 0) ? buf : NULL;
|
|||
+}
|
|||
+/* end android polyfill of ttyname(3) and ttyname_r(3) */
|
|||
+
|
|||
extern int acct(const char* filepath); |
|||
|
|||
static __inline__ int getpagesize(void) { |
@ -0,0 +1,18 @@ |
|||
Needed for binutils on x86. |
|||
|
|||
diff -u -r /home/fornwall/lib/android-ndk/platforms/android-21/arch-x86/usr/include/sys/user.h ./usr/include/sys/user.h
|
|||
--- /home/fornwall/lib/android-ndk/platforms/android-21/arch-x86/usr/include/sys/user.h 2014-12-01 19:05:05.000000000 -0500
|
|||
+++ ./usr/include/sys/user.h 2014-12-23 10:31:31.343768553 -0500
|
|||
@@ -99,6 +99,12 @@
|
|||
int u_debugreg[8]; |
|||
}; |
|||
|
|||
+/* http://osxr.org/android/source/bionic/libc/kernel/arch-x86/asm/user_32.h#0089 */
|
|||
+#define NBPG PAGE_SIZE
|
|||
+#define UPAGES 1
|
|||
+#define HOST_TEXT_START_ADDR (u.start_code)
|
|||
+#define HOST_STACK_END_ADDR (u.start_stack + u.u_ssize * NBPG)
|
|||
+
|
|||
#elif defined(__x86_64__) |
|||
|
|||
struct user_fpregs_struct { |
@ -0,0 +1,93 @@ |
|||
TERMUX_PKG_HOMEPAGE=https://android.googlesource.com/platform/system/core/+/android-4.4.4_r2/libutils |
|||
TERMUX_PKG_DESCRIPTION="Android Asset Packaging Tool" |
|||
TERMUX_PKG_VERSION=5.1.0 |
|||
TERMUX_PKG_BUILD_IN_SRC=yes |
|||
TERMUX_PKG_DEPENDS="libexpat, libpng, libgnustl" |
|||
|
|||
termux_step_make_install () { |
|||
local _TAGNAME=${TERMUX_PKG_VERSION}_r1 |
|||
|
|||
LIBCUTILS_TARFILE=$TERMUX_PKG_CACHEDIR/libcutils_${_TAGNAME}.tar.gz |
|||
LIBUTILS_TARFILE=$TERMUX_PKG_CACHEDIR/libutils_${_TAGNAME}.tar.gz |
|||
ANDROIDFW_TARFILE=$TERMUX_PKG_CACHEDIR/androidfw_${_TAGNAME}.tar.gz |
|||
AAPT_TARFILE=$TERMUX_PKG_CACHEDIR/aapt_${_TAGNAME}.tar.gz |
|||
LIBZIPARCHIVE_TARFILE=$TERMUX_PKG_CACHEDIR/libziparchive_${_TAGNAME}.tar.gz |
|||
ZIPALIGN_TARFILE=$TERMUX_PKG_CACHEDIR/zipalign_${_TAGNAME}.tar.gz |
|||
|
|||
test ! -f $LIBCUTILS_TARFILE && curl -o $LIBCUTILS_TARFILE "https://android.googlesource.com/platform/system/core/+archive/android-$_TAGNAME/libcutils.tar.gz" |
|||
test ! -f $LIBUTILS_TARFILE && curl -o $LIBUTILS_TARFILE "https://android.googlesource.com/platform/system/core/+archive/android-$_TAGNAME/libutils.tar.gz" |
|||
test ! -f $ANDROIDFW_TARFILE && curl -o $ANDROIDFW_TARFILE "https://android.googlesource.com/platform/frameworks/base/+archive/android-$_TAGNAME/libs/androidfw.tar.gz" |
|||
test ! -f $AAPT_TARFILE && curl -o $AAPT_TARFILE "https://android.googlesource.com/platform/frameworks/base/+archive/android-$_TAGNAME/tools/aapt.tar.gz" |
|||
test ! -f $ZIPALIGN_TARFILE && curl -o $ZIPALIGN_TARFILE "https://android.googlesource.com/platform/build.git/+archive/android-$_TAGNAME/tools/zipalign.tar.gz" |
|||
test ! -f $LIBZIPARCHIVE_TARFILE && curl -o $LIBZIPARCHIVE_TARFILE "https://android.googlesource.com/platform/system/core/+archive/android-$_TAGNAME/libziparchive.tar.gz" |
|||
|
|||
# https://android.googlesource.com/platform/system/core/+/android-4.4.4_r2/include/cutils/ |
|||
LIBCUTILS_INCLUDE_TARFILE=$TERMUX_PKG_CACHEDIR/libcutils_include_${_TAGNAME}.tar.gz |
|||
test ! -f $LIBCUTILS_INCLUDE_TARFILE && curl -o $LIBCUTILS_INCLUDE_TARFILE \ |
|||
"https://android.googlesource.com/platform/system/core/+archive/android-$_TAGNAME/include/cutils.tar.gz" |
|||
# https://android.googlesource.com/platform/system/core/+/android-4.4.4_r2/include/utils/ |
|||
LIBUTILS_INCLUDE_TARFILE=$TERMUX_PKG_CACHEDIR/libutils_include_${_TAGNAME}.tar.gz |
|||
test ! -f $LIBUTILS_INCLUDE_TARFILE && curl -o $LIBUTILS_INCLUDE_TARFILE \ |
|||
"https://android.googlesource.com/platform/system/core/+archive/android-$_TAGNAME/include/utils.tar.gz" |
|||
# https://android.googlesource.com/platform/frameworks/base/+/android-4.4.4_r2/include/androidfw/ |
|||
ANDROIDFW_INCLUDE_TARFILE=$TERMUX_PKG_CACHEDIR/androidfw_include_${_TAGNAME}.tar.gz |
|||
test ! -f $ANDROIDFW_INCLUDE_TARFILE && curl -o $ANDROIDFW_INCLUDE_TARFILE \ |
|||
"https://android.googlesource.com/platform/frameworks/base/+archive/android-$_TAGNAME/include/androidfw.tar.gz" |
|||
LIBZIPARCHIVE_INCLUDE_TARFILE=$TERMUX_PKG_CACHEDIR/libziparchive_include_${_TAGNAME}.tar.gz |
|||
test ! -f $LIBZIPARCHIVE_INCLUDE_TARFILE && curl -o $LIBZIPARCHIVE_INCLUDE_TARFILE \ |
|||
"https://android.googlesource.com/platform/system/core/+archive/android-$_TAGNAME/include/ziparchive.tar.gz" |
|||
|
|||
mkdir -p include/{cutils,utils,androidfw,log,system,ziparchive} libcutils libutils androidfw aapt zipalign ziparchive |
|||
|
|||
(cd include/cutils; tar xf $LIBCUTILS_INCLUDE_TARFILE) |
|||
(cd include/utils; tar xf $LIBUTILS_INCLUDE_TARFILE; rm CallStack.h; touch CallStack.h) |
|||
(cd include/androidfw; tar xf $ANDROIDFW_INCLUDE_TARFILE) |
|||
(cd include/ziparchive; tar xf $LIBZIPARCHIVE_INCLUDE_TARFILE) |
|||
touch include/system/graphics.h |
|||
cp $TERMUX_PKG_BUILDER_DIR/log.h include/log/ |
|||
cp $TERMUX_PKG_BUILDER_DIR/thread_defs.h include/system/ |
|||
# to satisfy <libexpat/expat.h> include: |
|||
ln -s "$TERMUX_PREFIX/include" include/libexpat |
|||
|
|||
cd libcutils |
|||
tar xf $LIBCUTILS_TARFILE |
|||
rm trace.c dlmalloc_stubs.c ashmem-host.c |
|||
|
|||
cd ../libutils |
|||
tar xf $LIBUTILS_TARFILE |
|||
rm CallStack.cpp ProcessCallStack.cpp Trace.cpp |
|||
perl -p -i -e 's/__android_log_print\(mPriority, mLogTag,/printf(/' Printer.cpp |
|||
|
|||
cd ../androidfw |
|||
tar xf $ANDROIDFW_TARFILE |
|||
rm BackupData.cpp BackupHelpers.cpp CursorWindow.cpp |
|||
|
|||
cd ../ziparchive |
|||
tar xf $LIBZIPARCHIVE_TARFILE |
|||
rm zip_archive_test.cc |
|||
|
|||
# png_set_expand_gray_1_2_4_to_8(png_ptr) is the newer name instead of png_set_gray_1_2_4_to_8(png_ptr): |
|||
# libpng no longer defines "#define png_sizeof(x) (sizeof (x))" |
|||
# -include <zlib.h> since png.h no longer includes zlib.h |
|||
COMPILE_FLAGS="$CC $CFLAGS \ |
|||
-DANDROID_SMP=1 \ |
|||
-DHAVE_ENDIAN_H=1 -DHAVE_POSIX_FILEMAP=1 -DHAVE_OFF64_T=1 -DHAVE_SYS_SOCKET_H=1 -DHAVE_PTHREADS=1 \ |
|||
-DNDEBUG=1 \ |
|||
-Dpng_set_gray_1_2_4_to_8=png_set_expand_gray_1_2_4_to_8 -Dpng_sizeof=sizeof -include zlib.h \ |
|||
-I $TERMUX_PKG_SRCDIR/include \ |
|||
-I $TERMUX_PREFIX/include \ |
|||
$LDFLAGS \ |
|||
-lm -lz -lpng -lexpat -lgnustl_shared \ |
|||
../libcutils/*.c ../ziparchive/*.cc ../libutils/*.cpp ../androidfw/*.cpp *.cpp" |
|||
|
|||
cd ../aapt |
|||
tar xf $AAPT_TARFILE |
|||
rm printapk.cpp |
|||
perl -p -i -e 's/png_ptr->io_ptr/png_get_io_ptr(png_ptr)/' Images.cpp |
|||
$COMPILE_FLAGS *.c -o $TERMUX_PREFIX/bin/aapt |
|||
|
|||
# zipalign needs "zopfli/deflate.h", so disable for now: |
|||
#cd ../zipalign |
|||
#tar xf $ZIPALIGN_TARFILE |
|||
#$COMPILE_FLAGS -o $TERMUX_PREFIX/bin/zipalign |
|||
} |
@ -0,0 +1,31 @@ |
|||
#include <stdio.h> |
|||
#include <time.h> |
|||
#include <unistd.h> |
|||
#include <android/log.h> |
|||
|
|||
/* https://android.googlesource.com/platform/system/core/+/android-4.4.4_r2/include/log/log.h */ |
|||
|
|||
#define QUOTEME_(x) #x |
|||
#define QUOTEME(x) QUOTEME_(x) |
|||
|
|||
#define ALOGV(...) printf("VERBOSE (" __FILE__ ":" QUOTEME(__LINE__) "): " __VA_ARGS__) |
|||
#define ALOGD(...) printf("DEBUG (" __FILE__ ":" QUOTEME(__LINE__) "): " __VA_ARGS__) |
|||
#define ALOGI(...) printf("INFO (" __FILE__ ":" QUOTEME(__LINE__) "): " __VA_ARGS__) |
|||
#define ALOGW(...) printf("WARNING (" __FILE__ ":" QUOTEME(__LINE__) "): " __VA_ARGS__) |
|||
#define ALOGE(...) printf("ERROR (" __FILE__ ":" QUOTEME(__LINE__) "): " __VA_ARGS__) |
|||
|
|||
#define HAL_PRIORITY_URGENT_DISPLAY ANDROID_LOG_INFO |
|||
|
|||
#define LOG_FATAL_IF(...) |
|||
#define LOG_ALWAYS_FATAL(...) |
|||
#define LOG_ALWAYS_FATAL_IF(...) |
|||
#define LOG_PRI(...) |
|||
|
|||
#define ALOGW_IF(...) |
|||
|
|||
#define android_printAssert(cond, tag, fmt...) |
|||
#define ALOG_ASSERT(...) |
|||
|
|||
#define CONDITION(cond) (__builtin_expect((cond)!=0, 0)) |
|||
|
|||
#define OS_PATH_SEPARATOR '/' |
@ -0,0 +1,78 @@ |
|||
/*
|
|||
* Copyright (C) 2013 The Android Open Source Project |
|||
* |
|||
* Licensed under the Apache License, Version 2.0 (the "License"); |
|||
* you may not use this file except in compliance with the License. |
|||
* You may obtain a copy of the License at |
|||
* |
|||
* http://www.apache.org/licenses/LICENSE-2.0
|
|||
* |
|||
* Unless required by applicable law or agreed to in writing, software |
|||
* distributed under the License is distributed on an "AS IS" BASIS, |
|||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|||
* See the License for the specific language governing permissions and |
|||
* limitations under the License. |
|||
*/ |
|||
|
|||
#ifndef ANDROID_THREAD_DEFS_H |
|||
#define ANDROID_THREAD_DEFS_H |
|||
|
|||
/* FREDRIK */ |
|||
/* #include "graphics.h" */ |
|||
|
|||
#if defined(__cplusplus) |
|||
extern "C" { |
|||
#endif |
|||
|
|||
enum { |
|||
/*
|
|||
* *********************************************** |
|||
* ** Keep in sync with android.os.Process.java ** |
|||
* *********************************************** |
|||
* |
|||
* This maps directly to the "nice" priorities we use in Android. |
|||
* A thread priority should be chosen inverse-proportionally to |
|||
* the amount of work the thread is expected to do. The more work |
|||
* a thread will do, the less favorable priority it should get so that |
|||
* it doesn't starve the system. Threads not behaving properly might |
|||
* be "punished" by the kernel. |
|||
* Use the levels below when appropriate. Intermediate values are |
|||
* acceptable, preferably use the {MORE|LESS}_FAVORABLE constants below. |
|||
*/ |
|||
ANDROID_PRIORITY_LOWEST = 19, |
|||
|
|||
/* use for background tasks */ |
|||
ANDROID_PRIORITY_BACKGROUND = 10, |
|||
|
|||
/* most threads run at normal priority */ |
|||
ANDROID_PRIORITY_NORMAL = 0, |
|||
|
|||
/* threads currently running a UI that the user is interacting with */ |
|||
ANDROID_PRIORITY_FOREGROUND = -2, |
|||
|
|||
/* the main UI thread has a slightly more favorable priority */ |
|||
ANDROID_PRIORITY_DISPLAY = -4, |
|||
|
|||
/* ui service treads might want to run at a urgent display (uncommon) */ |
|||
ANDROID_PRIORITY_URGENT_DISPLAY = ANDROID_PRIORITY_DISPLAY /* FREDRIK */, |
|||
|
|||
/* all normal audio threads */ |
|||
ANDROID_PRIORITY_AUDIO = -16, |
|||
|
|||
/* service audio threads (uncommon) */ |
|||
ANDROID_PRIORITY_URGENT_AUDIO = -19, |
|||
|
|||
/* should never be used in practice. regular process might not
|
|||
* be allowed to use this level */ |
|||
ANDROID_PRIORITY_HIGHEST = -20, |
|||
|
|||
ANDROID_PRIORITY_DEFAULT = ANDROID_PRIORITY_NORMAL, |
|||
ANDROID_PRIORITY_MORE_FAVORABLE = -1, |
|||
ANDROID_PRIORITY_LESS_FAVORABLE = +1, |
|||
}; |
|||
|
|||
#if defined(__cplusplus) |
|||
} |
|||
#endif |
|||
|
|||
#endif /* ANDROID_THREAD_DEFS_H */ |
@ -0,0 +1,9 @@ |
|||
TERMUX_PKG_VERSION=3.5.1 |
|||
TERMUX_PKG_SRCURL=http://rephial.org/downloads/3.5/angband-v${TERMUX_PKG_VERSION}.tar.gz |
|||
TERMUX_PKG_FOLDERNAME=angband-$TERMUX_PKG_VERSION |
|||
TERMUX_PKG_HOMEPAGE=http://rephial.org/ |
|||
TERMUX_PKG_DESCRIPTION="Dungeon exploration game where you play an adventurer seeking riches, fighting monsters and preparing for a final battle with Morgoth, the Lord of Darkness" |
|||
TERMUX_PKG_DEPENDS="libandroid-support, ncurses" |
|||
TERMUX_PKG_BUILD_IN_SRC=yes |
|||
TERMUX_PKG_EXTRA_CONFIGURE_ARGS="--without-x --bindir=$TERMUX_PREFIX/bin --sysconfdir=$TERMUX_PREFIX/share/angband" |
|||
TERMUX_PKG_RM_AFTER_INSTALL="share/angband/xtra" |
@ -0,0 +1,26 @@ |
|||
diff -u -r ../angband-v3.5.0/configure ./configure
|
|||
--- ../angband-v3.5.0/configure 2013-12-24 16:56:55.000000000 +0100
|
|||
+++ ./configure 2014-03-10 01:27:04.085884186 +0100
|
|||
@@ -4879,18 +4879,18 @@
|
|||
if test x$ncurses_exec_prefix != x ; then |
|||
ncurses_args="$ncurses_args --exec-prefix=$ncurses_exec_prefix" |
|||
if test x${NCURSES_CONFIG+set} != xset ; then |
|||
- NCURSES_CONFIG=$ncurses_exec_prefix/bin/ncursesw5-config
|
|||
+ NCURSES_CONFIG=$ncurses_exec_prefix/bin/ncursesw6-config
|
|||
fi |
|||
fi |
|||
if test x$ncurses_prefix != x ; then |
|||
ncurses_args="$ncurses_args --prefix=$ncurses_prefix" |
|||
if test x${NCURSES_CONFIG+set} != xset ; then |
|||
- NCURSES_CONFIG=$ncurses_prefix/bin/ncursesw5-config
|
|||
+ NCURSES_CONFIG=$ncurses_prefix/bin/ncursesw6-config
|
|||
fi |
|||
fi |
|||
|
|||
- # Extract the first word of "ncursesw5-config", so it can be a program name with args.
|
|||
-set dummy ncursesw5-config; ac_word=$2
|
|||
+ # Extract the first word of "ncursesw6-config", so it can be a program name with args.
|
|||
+set dummy ncursesw6-config; ac_word=$2
|
|||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 |
|||
$as_echo_n "checking for $ac_word... " >&6; } |
|||
if ${ac_cv_path_NCURSES_CONFIG+:} false; then : |
@ -0,0 +1,28 @@ |
|||
diff -u -r ../angband-v3.5.0/src/main.c ./src/main.c
|
|||
--- ../angband-v3.5.0/src/main.c 2013-12-24 16:56:52.000000000 +0100
|
|||
+++ ./src/main.c 2014-02-06 03:15:12.000000000 +0100
|
|||
@@ -23,8 +23,10 @@
|
|||
#include "savefile.h" |
|||
|
|||
/* locale junk */ |
|||
+#ifndef __ANDROID__
|
|||
#include "locale.h" |
|||
#include "langinfo.h" |
|||
+#endif
|
|||
|
|||
/* |
|||
* Some machines have a "main()" function in their "main-xxx.c" file, |
|||
@@ -555,11 +557,13 @@
|
|||
if (mstr) |
|||
ANGBAND_SYS = mstr; |
|||
|
|||
+#ifndef __ANDROID__
|
|||
if (setlocale(LC_CTYPE, "")) { |
|||
/* Require UTF-8 */ |
|||
if (strcmp(nl_langinfo(CODESET), "UTF-8") != 0) |
|||
quit("Angband requires UTF-8 support"); |
|||
} |
|||
+#endif
|
|||
|
|||
/* Try the modules in the order specified by modules[] */ |
|||
for (i = 0; i < (int)N_ELEMENTS(modules); i++) |
@ -0,0 +1,81 @@ |
|||
#!@TERMUX_PREFIX@/bin/sh |
|||
|
|||
# Licensed to the Apache Software Foundation (ASF) under one or more |
|||
# contributor license agreements. See the NOTICE file distributed with |
|||
# this work for additional information regarding copyright ownership. |
|||
# The ASF licenses this file to You under the Apache License, Version 2.0 |
|||
# (the "License"); you may not use this file except in compliance with |
|||
# the License. You may obtain a copy of the License at |
|||
# |
|||
# http://www.apache.org/licenses/LICENSE-2.0 |
|||
# |
|||
# Unless required by applicable law or agreed to in writing, software |
|||
# distributed under the License is distributed on an "AS IS" BASIS, |
|||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|||
# See the License for the specific language governing permissions and |
|||
# limitations under the License. |
|||
|
|||
set -e -u |
|||
|
|||
# Extract launch and ant arguments, (see details below). |
|||
ant_exec_args= |
|||
no_config=false |
|||
ant_exec_debug=false |
|||
show_help=false |
|||
for arg in "$@" ; do |
|||
if [ "$arg" = "--noconfig" ] ; then |
|||
no_config=true |
|||
elif [ "$arg" = "--execdebug" ] ; then |
|||
ant_exec_debug=true |
|||
elif [ my"$arg" = my"--h" -o my"$arg" = my"--help" ] ; then |
|||
show_help=true |
|||
ant_exec_args="$ant_exec_args -h" |
|||
else |
|||
if [ my"$arg" = my"-h" -o my"$arg" = my"-help" ] ; then |
|||
show_help=true |
|||
fi |
|||
ant_exec_args="$ant_exec_args \"$arg\"" |
|||
fi |
|||
done |
|||
|
|||
if [ -z "$ANT_HOME" ]; then |
|||
ANT_HOME=@TERMUX_PREFIX@/share/ant |
|||
fi |
|||
|
|||
if ! $no_config ; then |
|||
if [ -f "$HOME/.ant/ant.conf" ] ; then |
|||
. $HOME/.ant/ant.conf |
|||
fi |
|||
if [ -f "$HOME/.antrc" ] ; then |
|||
. "$HOME/.antrc" |
|||
fi |
|||
fi |
|||
|
|||
ANT_LIB="${ANT_HOME}/lib" |
|||
|
|||
if [ -z "$LOCALCLASSPATH" ] ; then |
|||
LOCALCLASSPATH=$ANT_LIB/ant-launcher.jar |
|||
else |
|||
LOCALCLASSPATH=$ANT_LIB/ant-launcher.jar:$LOCALCLASSPATH |
|||
fi |
|||
|
|||
# Show script help if requested |
|||
if $show_help ; then |
|||
echo $0 '[script options] [options] [target [target2 [target3] ..]]' |
|||
echo 'Script Options:' |
|||
echo ' --help, --h print this message and ant help' |
|||
echo ' --noconfig suppress sourcing of /etc/ant.conf,' |
|||
echo ' $HOME/.ant/ant.conf, and $HOME/.antrc' |
|||
echo ' configuration files' |
|||
echo ' --execdebug print ant exec line generated by this' |
|||
echo ' launch script' |
|||
echo ' ' |
|||
fi |
|||
|
|||
# Execute ant using eval/exec to preserve spaces in paths, java options, and ant args |
|||
ant_sys_opts= |
|||
ant_exec_command="exec dalvikvm $ANT_OPTS -classpath \"$LOCALCLASSPATH\" -Dant.home=\"$ANT_HOME\" -Dant.library.dir=\"$ANT_LIB\" $ant_sys_opts org.apache.tools.ant.launch.Launcher $ANT_ARGS -cp \"$CLASSPATH\"" |
|||
if $ant_exec_debug ; then |
|||
echo $ant_exec_command $ant_exec_args |
|||
fi |
|||
eval $ant_exec_command "$ant_exec_args" |
@ -0,0 +1,21 @@ |
|||
TERMUX_PKG_HOMEPAGE=http://ant.apache.org/ |
|||
TERMUX_PKG_DESCRIPTION="Java based build tool like make" |
|||
TERMUX_PKG_VERSION=1.9.5 |
|||
TERMUX_PKG_SRCURL=http://apache.mirrors.spacedump.net//ant/binaries/apache-ant-${TERMUX_PKG_VERSION}-bin.tar.bz2 |
|||
TERMUX_PKG_FOLDERNAME=apache-ant-${TERMUX_PKG_VERSION} |
|||
TERMUX_PKG_BUILD_IN_SRC=yes |
|||
TERMUX_PKG_PLATFORM_INDEPENDENT=true |
|||
|
|||
termux_step_make_install () { |
|||
mkdir -p $TERMUX_PREFIX/share/ant/lib |
|||
|
|||
for jar in ant ant-launcher; do |
|||
$TERMUX_DX \ |
|||
--dex \ |
|||
--output=$TERMUX_PREFIX/share/ant/lib/${jar}.jar \ |
|||
lib/${jar}.jar |
|||
done |
|||
|
|||
install $TERMUX_PKG_BUILDER_DIR/ant $TERMUX_PREFIX/bin/ant |
|||
perl -p -i -e "s%\@TERMUX_PREFIX\@%${TERMUX_PREFIX}%g" $TERMUX_PREFIX/bin/ant |
|||
} |
@ -0,0 +1,7 @@ |
|||
TERMUX_PKG_VERSION=1.5.4 |
|||
TERMUX_PKG_DEPENDS="apr, libexpat" |
|||
TERMUX_PKG_HOMEPAGE=https://apr.apache.org/ |
|||
TERMUX_PKG_DESCRIPTION="Apache Portable Runtime - library providing a predictable and consistent interface to underlying platform-specific implementations" |
|||
TERMUX_PKG_SRCURL=http://apache.mirrors.spacedump.net/apr/apr-util-${TERMUX_PKG_VERSION}.tar.bz2 |
|||
TERMUX_PKG_EXTRA_CONFIGURE_ARGS="--with-apr=$TERMUX_PREFIX --without-sqlite3" |
|||
TERMUX_PKG_RM_AFTER_INSTALL="bin/apu-1-config lib/aprutil.exp" |
@ -0,0 +1,15 @@ |
|||
diff -u -r ../apr-1.5.2/Makefile.in ./Makefile.in
|
|||
--- ../apr-1.5.2/Makefile.in 2014-04-25 06:51:11.000000000 -0400
|
|||
+++ ./Makefile.in 2015-05-03 19:04:44.159616097 -0400
|
|||
@@ -134,8 +134,9 @@
|
|||
$(APR_MKDIR) tools |
|||
$(LT_COMPILE) |
|||
|
|||
-tools/gen_test_char@EXEEXT@: $(OBJECTS_gen_test_char)
|
|||
- $(LINK_PROG) $(OBJECTS_gen_test_char) $(ALL_LIBS)
|
|||
+tools/gen_test_char@EXEEXT@: tools/gen_test_char.c
|
|||
+ $(CC_FOR_BUILD) -DCROSS_COMPILE -o $@ $<
|
|||
+
|
|||
|
|||
include/private/apr_escape_test_char.h: tools/gen_test_char@EXEEXT@ |
|||
$(APR_MKDIR) include/private |
@ -0,0 +1,7 @@ |
|||
TERMUX_PKG_VERSION=1.5.2 |
|||
TERMUX_PKG_SRCURL=http://archive.apache.org/dist/apr/apr-${TERMUX_PKG_VERSION}.tar.bz2 |
|||
TERMUX_PKG_HOMEPAGE=https://apr.apache.org/ |
|||
TERMUX_PKG_DESCRIPTION="Apache Portable Runtime - library providing a predictable and consistent interface to underlying platform-specific implementations" |
|||
TERMUX_PKG_BUILD_IN_SRC="yes" |
|||
TERMUX_PKG_EXTRA_CONFIGURE_ARGS="--with-installbuilddir=$TERMUX_PKG_TMPDIR ac_cv_file__dev_zero=yes ac_cv_func_setpgrp_void=yes apr_cv_process_shared_works=no apr_cv_tcp_nodelay_with_cork=yes ac_cv_sizeof_struct_iovec=8" |
|||
TERMUX_PKG_RM_AFTER_INSTALL="bin/apr-1-config lib/apr.exp" |
@ -0,0 +1,11 @@ |
|||
diff -u -r ../upstream.git/Makefile ./Makefile
|
|||
--- ../upstream.git/Makefile 2013-12-07 14:12:14.000000000 +0100
|
|||
+++ ./Makefile 2014-05-03 23:46:58.870093099 +0200
|
|||
@@ -21,7 +21,6 @@
|
|||
$(MAKE) -C dselect $@ |
|||
$(MAKE) -C doc $@ |
|||
$(MAKE) -C po $@ |
|||
- $(MAKE) -C test $@
|
|||
|
|||
all headers library clean veryclean binary program doc manpages debiandoc test update-po: startup dirs |
|||
|
@ -0,0 +1,35 @@ |
|||
diff -u -r ../upstream.git/cmdline/apt-get.cc ./cmdline/apt-get.cc
|
|||
--- ../upstream.git/cmdline/apt-get.cc 2014-03-14 09:05:18.000000000 +0100
|
|||
+++ ./cmdline/apt-get.cc 2014-04-15 21:01:01.072700439 +0200
|
|||
@@ -79,8 +79,11 @@
|
|||
#include <sys/ioctl.h> |
|||
#include <sys/stat.h> |
|||
#include <sys/statfs.h> |
|||
-#include <sys/statvfs.h>
|
|||
+#ifndef __ANDROID__
|
|||
+# include <sys/statvfs.h>
|
|||
+#endif
|
|||
#include <sys/wait.h> |
|||
+#include <termios.h>
|
|||
#include <unistd.h> |
|||
#include <algorithm> |
|||
#include <fstream> |
|||
@@ -854,14 +857,14 @@
|
|||
unsigned long long DebBytes = Fetcher.TotalNeeded(); |
|||
|
|||
// Check for enough free space |
|||
- struct statvfs Buf;
|
|||
+ struct statfs Buf;
|
|||
string OutputDir = "."; |
|||
- if (statvfs(OutputDir.c_str(),&Buf) != 0) {
|
|||
+ if (statfs(OutputDir.c_str(),&Buf) != 0) {
|
|||
if (errno == EOVERFLOW) |
|||
- return _error->WarningE("statvfs",_("Couldn't determine free space in %s"),
|
|||
+ return _error->WarningE("statfs",_("Couldn't determine free space in %s"),
|
|||
OutputDir.c_str()); |
|||
else |
|||
- return _error->Errno("statvfs",_("Couldn't determine free space in %s"),
|
|||
+ return _error->Errno("statfs",_("Couldn't determine free space in %s"),
|
|||
OutputDir.c_str()); |
|||
} else if (unsigned(Buf.f_bfree) < (FetchBytes - FetchPBytes)/Buf.f_bsize) |
|||
{ |
@ -0,0 +1,46 @@ |
|||
diff -u -r ../upstream.git/cmdline/apt-key.in ./cmdline/apt-key.in
|
|||
--- ../upstream.git/cmdline/apt-key.in 2014-04-25 13:39:00.000000000 +0200
|
|||
+++ ./cmdline/apt-key.in 2014-06-03 11:55:07.623749140 +0200
|
|||
@@ -40,10 +40,7 @@
|
|||
TMP_KEYRING=${APT_DIR}/var/lib/apt/keyrings/maybe-import-keyring.gpg |
|||
|
|||
requires_root() { |
|||
- if [ "$(id -u)" -ne 0 ]; then
|
|||
- echo >&1 "ERROR: This command can only be used by root."
|
|||
- exit 1
|
|||
- fi
|
|||
+ # We do not require root
|
|||
} |
|||
|
|||
# gpg defaults to mode 0600 for new keyrings. Create one with 0644 instead. |
|||
@@ -216,11 +213,11 @@
|
|||
remove_key_from_keyring "$FORCED_KEYRING" "$1" |
|||
else |
|||
# otherwise all known keyrings are up for inspection |
|||
- local TRUSTEDFILE="/etc/apt/trusted.gpg"
|
|||
+ local TRUSTEDFILE="@TERMUX_PREFIX@/etc/apt/trusted.gpg"
|
|||
eval $(apt-config shell TRUSTEDFILE Apt::GPGV::TrustedKeyring) |
|||
eval $(apt-config shell TRUSTEDFILE Dir::Etc::Trusted/f) |
|||
remove_key_from_keyring "$TRUSTEDFILE" "$1" |
|||
- TRUSTEDPARTS="/etc/apt/trusted.gpg.d"
|
|||
+ TRUSTEDPARTS="@TERMUX_PREFIX@/etc/apt/trusted.gpg.d"
|
|||
eval $(apt-config shell TRUSTEDPARTS Dir::Etc::TrustedParts/d) |
|||
if [ -d "$TRUSTEDPARTS" ]; then |
|||
for trusted in $(run-parts --list "$TRUSTEDPARTS" --regex '^.*\.gpg$'); do |
|||
@@ -278,14 +275,14 @@
|
|||
done |
|||
|
|||
if [ -z "$TRUSTEDFILE" ]; then |
|||
- TRUSTEDFILE="/etc/apt/trusted.gpg"
|
|||
+ TRUSTEDFILE="@TERMUX_PREFIX@/etc/apt/trusted.gpg"
|
|||
eval $(apt-config shell TRUSTEDFILE Apt::GPGV::TrustedKeyring) |
|||
eval $(apt-config shell TRUSTEDFILE Dir::Etc::Trusted/f) |
|||
if [ -r "$TRUSTEDFILE" ]; then |
|||
GPG="$GPG --keyring $TRUSTEDFILE" |
|||
fi |
|||
GPG="$GPG --primary-keyring $TRUSTEDFILE" |
|||
- TRUSTEDPARTS="/etc/apt/trusted.gpg.d"
|
|||
+ TRUSTEDPARTS="@TERMUX_PREFIX@/etc/apt/trusted.gpg.d"
|
|||
eval $(apt-config shell TRUSTEDPARTS Dir::Etc::TrustedParts/d) |
|||
if [ -d "$TRUSTEDPARTS" ]; then |
|||
# strip / suffix as gpg will double-slash in that case (#665411) |
@ -0,0 +1,26 @@ |
|||
diff -u -r ../upstream.git/apt-pkg/init.cc ./apt-pkg/init.cc
|
|||
--- ../upstream.git/apt-pkg/init.cc 2014-05-05 14:01:59.000000000 +0200
|
|||
+++ ./apt-pkg/init.cc 2014-06-04 13:57:49.848604233 +0200
|
|||
@@ -44,7 +44,8 @@
|
|||
Cnf.Set("APT::Build-Essential::", "build-essential"); |
|||
Cnf.CndSet("APT::Install-Recommends", true); |
|||
Cnf.CndSet("APT::Install-Suggests", false); |
|||
- Cnf.CndSet("Dir","/");
|
|||
+ Cnf.CndSet("Dir","@TERMUX_PREFIX@/");
|
|||
+ Cnf.CndSet("Acquire::Languages", "none");
|
|||
|
|||
// State |
|||
Cnf.CndSet("Dir::State","var/lib/apt/"); |
|||
@@ -71,9 +72,9 @@
|
|||
Cnf.CndSet("Dir::Etc::preferencesparts","preferences.d"); |
|||
Cnf.CndSet("Dir::Etc::trusted", "trusted.gpg"); |
|||
Cnf.CndSet("Dir::Etc::trustedparts","trusted.gpg.d"); |
|||
- Cnf.CndSet("Dir::Bin::methods","/usr/lib/apt/methods");
|
|||
- Cnf.CndSet("Dir::Bin::solvers::","/usr/lib/apt/solvers");
|
|||
- Cnf.CndSet("Dir::Media::MountPath","/media/apt");
|
|||
+ Cnf.CndSet("Dir::Bin::methods","lib/apt/methods");
|
|||
+ Cnf.CndSet("Dir::Bin::solvers::","lib/apt/solvers");
|
|||
+ Cnf.CndSet("Dir::Media::MountPath","media/apt");
|
|||
|
|||
// State |
|||
Cnf.CndSet("Dir::Log","var/log/apt"); |
@ -0,0 +1,12 @@ |
|||
diff -u -r ../apt-0.9.16.1/apt-pkg/makefile ./apt-pkg/makefile
|
|||
--- ../apt-0.9.16.1/apt-pkg/makefile 2014-03-15 17:59:06.000000000 +0100
|
|||
+++ ./apt-pkg/makefile 2014-03-25 01:26:00.600685588 +0100
|
|||
@@ -14,7 +14,7 @@
|
|||
LIBRARY=apt-pkg |
|||
MAJOR=$(LIBAPTPKG_MAJOR) |
|||
MINOR=$(LIBAPTPKG_RELEASE) |
|||
-SLIBS=$(PTHREADLIB) $(INTLLIBS) -lutil -ldl
|
|||
+SLIBS=$(PTHREADLIB) $(INTLLIBS) -ldl
|
|||
ifeq ($(HAVE_ZLIB),yes) |
|||
SLIBS+= -lz |
|||
endif |
@ -0,0 +1,3 @@ |
|||
TERMUX_SUBPKG_INCLUDE="lib/apt/methods/https" |
|||
TERMUX_SUBPKG_DESCRIPTION="Https download support for APT" |
|||
TERMUX_SUBPKG_DEPENDS="apt, libcurl" |
@ -0,0 +1,32 @@ |
|||
diff -u -r ../upstream.git/apt-pkg/aptconfiguration.cc ./apt-pkg/aptconfiguration.cc
|
|||
--- ../upstream.git/apt-pkg/aptconfiguration.cc 2014-04-25 13:39:00.000000000 +0200
|
|||
+++ ./apt-pkg/aptconfiguration.cc 2014-06-03 11:39:43.931774391 +0200
|
|||
@@ -193,7 +193,7 @@
|
|||
// get the environment language codes: LC_MESSAGES (and later LANGUAGE) |
|||
// we extract both, a long and a short code and then we will |
|||
// check if we actually need both (rare) or if the short is enough |
|||
- string const envMsg = string(Locale == 0 ? std::setlocale(LC_MESSAGES, NULL) : *Locale);
|
|||
+ string const envMsg = "en_US.UTF-8"; // string(Locale == 0 ? std::setlocale(LC_MESSAGES, NULL) : *Locale);
|
|||
size_t const lenShort = (envMsg.find('_') != string::npos) ? envMsg.find('_') : 2; |
|||
size_t const lenLong = (envMsg.find_first_of(".@") != string::npos) ? envMsg.find_first_of(".@") : (lenShort + 3); |
|||
|
|||
@@ -405,8 +405,8 @@
|
|||
// setDefaultConfigurationForCompressors /*{{{*/ |
|||
void Configuration::setDefaultConfigurationForCompressors() { |
|||
// Set default application paths to check for optional compression types |
|||
- _config->CndSet("Dir::Bin::bzip2", "/bin/bzip2");
|
|||
- _config->CndSet("Dir::Bin::xz", "/usr/bin/xz");
|
|||
+ _config->CndSet("Dir::Bin::bzip2", "bin/bzip2");
|
|||
+ _config->CndSet("Dir::Bin::xz", "bin/xz");
|
|||
if (FileExists(_config->FindFile("Dir::Bin::xz")) == true) { |
|||
_config->Set("Dir::Bin::lzma", _config->FindFile("Dir::Bin::xz")); |
|||
_config->Set("APT::Compressor::lzma::Binary", "xz"); |
|||
@@ -419,7 +419,7 @@
|
|||
_config->Set("APT::Compressor::lzma::UncompressArg::", "-d"); |
|||
} |
|||
} else { |
|||
- _config->CndSet("Dir::Bin::lzma", "/usr/bin/lzma");
|
|||
+ _config->CndSet("Dir::Bin::lzma", "bin/lzma");
|
|||
if (_config->Exists("APT::Compressor::lzma::CompressArg") == false) { |
|||
_config->Set("APT::Compressor::lzma::CompressArg::", "--suffix="); |
|||
_config->Set("APT::Compressor::lzma::CompressArg::", "-9"); |
@ -0,0 +1,47 @@ |
|||
TERMUX_PKG_HOMEPAGE=https://packages.debian.org/apt |
|||
TERMUX_PKG_DESCRIPTION="Front-end for the dpkg package manager" |
|||
TERMUX_PKG_DEPENDS="libbz2, liblzma, libgnustl, dpkg, gnupg" |
|||
TERMUX_PKG_VERSION=1.0.9.10 |
|||
TERMUX_PKG_SRCURL=http://ftp.debian.org/debian/pool/main/a/apt/apt_${TERMUX_PKG_VERSION}.tar.xz |
|||
TERMUX_PKG_EXTRA_CONFIGURE_ARGS="--host=${TERMUX_ARCH}-linux --disable-rpath acl_cv_rpath=$TERMUX_PREFIX/lib gt_cv_func_CFPreferencesCopyAppValue=no gt_cv_func_CFLocaleCopyCurrent=no ac_cv_c_bigendian=no --no-create" |
|||
TERMUX_PKG_FOLDERNAME=apt-${TERMUX_PKG_VERSION} |
|||
TERMUX_PKG_ESSENTIAL=yes |
|||
|
|||
# $NDK/docs/STANDALONE-TOOLCHAIN.html: "If you use the GNU libstdc++, you will need to explicitly link with libsupc++ if you use these features" |
|||
export LDFLAGS="$LDFLAGS -lgnustl_shared" # -lsupc++" |
|||
|
|||
termux_step_pre_configure () { |
|||
cp $TERMUX_COMMON_CACHEDIR/config.{guess,sub} $TERMUX_PKG_SRCDIR/buildlib |
|||
perl -p -i -e "s/TERMUX_ARCH/$TERMUX_ARCH/" $TERMUX_PKG_SRCDIR/configure |
|||
} |
|||
|
|||
termux_step_post_configure () { |
|||
# This is needed to generate makefile, but does not work due to configure arguments not being remembered |
|||
./config.status |
|||
} |
|||
|
|||
termux_step_make () { |
|||
unset CC |
|||
unset CFLAGS |
|||
unset LDFLAGS |
|||
unset CXX |
|||
unset CXXFLAGS |
|||
make |
|||
} |
|||
|
|||
termux_step_make_install () { |
|||
cp $TERMUX_PKG_BUILDDIR/bin/apt{,-get,-cache,-config,-key} $TERMUX_PREFIX/bin/ |
|||
cp $TERMUX_PKG_BUILDDIR/bin/libapt-{pkg.so.4.12,private.so.0.0} $TERMUX_PREFIX/lib/ |
|||
(cd $TERMUX_PREFIX/lib; rm -f libapt-pkg.so; ln -s libapt-pkg.so.4.12 libapt-pkg.so) # used by python-apt |
|||
mkdir -p $TERMUX_PREFIX/lib/apt/methods $TERMUX_PREFIX/share/man/man{5,8} |
|||
cp $TERMUX_PKG_BUILDDIR/docs/apt{,-cache,-get}.8 $TERMUX_PREFIX/share/man/man8/ |
|||
cp $TERMUX_PKG_BUILDDIR/docs/{apt.conf,sources.list}.5 $TERMUX_PREFIX/share/man/man5/ |
|||
cp $TERMUX_PKG_BUILDDIR/bin/methods/{copy,file,gpgv,gzip,http,https} $TERMUX_PREFIX/lib/apt/methods |
|||
(cd $TERMUX_PREFIX/lib/apt/methods; ln -f -s gzip bzip2) |
|||
|
|||
mkdir -p $TERMUX_PREFIX/etc/apt |
|||
printf "# The main termux repository:\ndeb [arch=all,${TERMUX_ARCH}] http://apt.termux.com stable main\n" > $TERMUX_PREFIX/etc/apt/sources.list |
|||
|
|||
# The trusted.gpg was created with "apt-key add public-key.key": |
|||
cp $TERMUX_PKG_BUILDER_DIR/trusted.gpg $TERMUX_PREFIX/etc/apt/ |
|||
} |
@ -0,0 +1,44 @@ |
|||
diff -u -r ../apt-0.9.16.1/apt-pkg/contrib/cdromutl.cc ./apt-pkg/contrib/cdromutl.cc
|
|||
--- ../apt-0.9.16.1/apt-pkg/contrib/cdromutl.cc 2014-03-15 17:26:21.000000000 +0100
|
|||
+++ ./apt-pkg/contrib/cdromutl.cc 2014-03-25 00:58:55.948730001 +0100
|
|||
@@ -24,7 +24,6 @@
|
|||
#include <iostream> |
|||
#include <string> |
|||
#include <vector> |
|||
-#include <sys/statvfs.h>
|
|||
#include <dirent.h> |
|||
#include <fcntl.h> |
|||
#include <sys/stat.h> |
|||
@@ -239,6 +238,7 @@
|
|||
closedir(D); |
|||
|
|||
// Some stats from the fsys |
|||
+#ifndef __ANDROID__
|
|||
if (_config->FindB("Debug::identcdrom",false) == false) |
|||
{ |
|||
struct statvfs Buf; |
|||
@@ -258,6 +258,7 @@
|
|||
} |
|||
else |
|||
sprintf(S,"-%u.debug",Version); |
|||
+#endif
|
|||
|
|||
Res = Hash.Result().Value() + S; |
|||
return true; |
|||
@@ -266,6 +267,7 @@
|
|||
// FindMountPointForDevice - Find mountpoint for the given device /*{{{*/ |
|||
string FindMountPointForDevice(const char *devnode) |
|||
{ |
|||
+#ifndef __ANDROID__
|
|||
// this is the order that mount uses as well |
|||
std::vector<std::string> const mounts = _config->FindVector("Dir::state::MountPoints", "/etc/mtab,/proc/mount"); |
|||
|
|||
@@ -290,7 +292,7 @@
|
|||
} |
|||
fclose(f); |
|||
} |
|||
-
|
|||
+#endif
|
|||
return string(); |
|||
} |
|||
/*}}}*/ |
@ -0,0 +1,18 @@ |
|||
diff -u -r ../apt-0.9.16.1/apt-pkg/contrib/cmndline.cc ./apt-pkg/contrib/cmndline.cc
|
|||
--- ../apt-0.9.16.1/apt-pkg/contrib/cmndline.cc 2014-03-15 17:23:45.000000000 +0100
|
|||
+++ ./apt-pkg/contrib/cmndline.cc 2014-03-25 01:10:30.764711007 +0100
|
|||
@@ -27,6 +27,14 @@
|
|||
/*}}}*/ |
|||
using namespace std; |
|||
|
|||
+#if defined(__ANDROID__)
|
|||
+static char* strchrnul(char const* s, int c)
|
|||
+{
|
|||
+ char* result = strchr(s, c);
|
|||
+ return (result == NULL) ? const_cast<char*>(s + strlen(s)) : result;
|
|||
+}
|
|||
+#endif
|
|||
+
|
|||
// CommandLine::CommandLine - Constructor /*{{{*/ |
|||
// --------------------------------------------------------------------- |
|||
/* */ |
@ -0,0 +1,15 @@ |
|||
diff -u -r ../upstream.git/configure.ac ./configure.ac
|
|||
--- ../upstream.git/configure.ac 2014-06-18 14:12:32.000000000 +0200
|
|||
+++ ./configure.ac 2014-06-18 23:18:51.219899072 +0200
|
|||
@@ -89,11 +89,6 @@
|
|||
AC_MSG_ERROR([failed: I need CURL due https support]), |
|||
) |
|||
|
|||
-AC_LANG_PUSH([C++])
|
|||
-AC_CHECK_HEADER(gtest/gtest.h,,
|
|||
- AC_MSG_ERROR([failed: I need gtest to build tests]),
|
|||
-)
|
|||
-AC_LANG_POP([C++])
|
|||
|
|||
|
|||
AC_SUBST(BDBLIB) |
@ -0,0 +1,24 @@ |
|||
diff -u -r ../upstream.git/configure ./configure
|
|||
--- ../upstream.git/configure 2014-06-18 14:12:34.000000000 +0200
|
|||
+++ ./configure 2014-06-18 23:09:25.315914542 +0200
|
|||
@@ -4807,11 +4807,6 @@
|
|||
|
|||
|
|||
ac_fn_cxx_check_header_mongrel "$LINENO" "gtest/gtest.h" "ac_cv_header_gtest_gtest_h" "$ac_includes_default" |
|||
-if test "x$ac_cv_header_gtest_gtest_h" = xyes; then :
|
|||
-
|
|||
-else
|
|||
- as_fn_error $? "failed: I need gtest to build tests" "$LINENO" 5
|
|||
-fi
|
|||
|
|||
|
|||
ac_ext=c |
|||
@@ -4986,7 +4981,7 @@
|
|||
|
|||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking debian architecture" >&5 |
|||
$as_echo_n "checking debian architecture... " >&6; } |
|||
-archset="`dpkg-architecture -qDEB_HOST_ARCH`"
|
|||
+archset=TERMUX_ARCH
|
|||
if test "x$archset" = "x"; then |
|||
as_fn_error $? "failed: use --host= or output from dpkg-architecture" "$LINENO" 5 |
|||
fi |
@ -0,0 +1,12 @@ |
|||
diff -u -r ../apt-0.9.16.1/methods/connect.cc ./methods/connect.cc
|
|||
--- ../apt-0.9.16.1/methods/connect.cc 2014-03-15 17:23:45.000000000 +0100
|
|||
+++ ./methods/connect.cc 2014-03-25 01:30:10.924678745 +0100
|
|||
@@ -111,7 +111,7 @@
|
|||
|
|||
// Check the socket for an error condition |
|||
unsigned int Err; |
|||
- unsigned int Len = sizeof(Err);
|
|||
+ socklen_t Len = sizeof(Err);
|
|||
if (getsockopt(Fd,SOL_SOCKET,SO_ERROR,&Err,&Len) != 0) |
|||
return _error->Errno("getsockopt",_("Failed")); |
|||
|
@ -0,0 +1,27 @@ |
|||
diff -u -r ../upstream.git/apt-pkg/deb/debrecords.cc ./apt-pkg/deb/debrecords.cc
|
|||
--- ../upstream.git/apt-pkg/deb/debrecords.cc 2014-04-25 13:39:00.000000000 +0200
|
|||
+++ ./apt-pkg/deb/debrecords.cc 2014-07-01 16:47:41.913835586 +0200
|
|||
@@ -22,7 +22,9 @@
|
|||
#include <algorithm> |
|||
#include <string> |
|||
#include <vector> |
|||
+#ifndef __ANDROID__
|
|||
#include <langinfo.h> |
|||
+#endif
|
|||
/*}}}*/ |
|||
|
|||
using std::string; |
|||
@@ -151,11 +153,13 @@
|
|||
orig = Section.FindS(string("Description-").append(*l).c_str()); |
|||
} |
|||
|
|||
+#ifndef __ANDROID__
|
|||
char const * const codeset = nl_langinfo(CODESET); |
|||
if (strcmp(codeset,"UTF-8") != 0) { |
|||
UTF8ToCodeset(codeset, orig, &dest); |
|||
orig = dest; |
|||
} |
|||
+#endif
|
|||
|
|||
return orig; |
|||
} |
@ -0,0 +1,18 @@ |
|||
diff -u -r ../apt-0.9.16.1/apt-pkg/deb/debsrcrecords.cc ./apt-pkg/deb/debsrcrecords.cc
|
|||
--- ../apt-0.9.16.1/apt-pkg/deb/debsrcrecords.cc 2014-03-15 17:23:45.000000000 +0100
|
|||
+++ ./apt-pkg/deb/debsrcrecords.cc 2014-03-25 01:23:30.652689687 +0100
|
|||
@@ -26,6 +26,14 @@
|
|||
#include <string> |
|||
#include <vector> |
|||
/*}}}*/ |
|||
+#if defined(__ANDROID__)
|
|||
+static char* strchrnul(char const* s, int c)
|
|||
+{
|
|||
+ char* result = strchr(s, c);
|
|||
+ return (result == NULL) ? const_cast<char*>(s + strlen(s)) : result;
|
|||
+}
|
|||
+#endif
|
|||
+
|
|||
|
|||
using std::max; |
|||
using std::string; |
@ -0,0 +1,26 @@ |
|||
diff -u -r ../apt-0.9.16.1/apt-pkg/deb/debsystem.cc ./apt-pkg/deb/debsystem.cc
|
|||
--- ../apt-0.9.16.1/apt-pkg/deb/debsystem.cc 2014-03-15 17:23:45.000000000 +0100
|
|||
+++ ./apt-pkg/deb/debsystem.cc 2014-03-27 13:39:56.648378401 +0100
|
|||
@@ -187,8 +187,8 @@
|
|||
which is yet to be determined. The functions in pkgcachegen should |
|||
be the only users of these */ |
|||
Cnf.CndSet("Dir::State::extended_states", "extended_states"); |
|||
- Cnf.CndSet("Dir::State::status","/var/lib/dpkg/status");
|
|||
- Cnf.CndSet("Dir::Bin::dpkg","/usr/bin/dpkg");
|
|||
+ Cnf.CndSet("Dir::State::status","@TERMUX_PREFIX@/var/lib/dpkg/status");
|
|||
+ Cnf.CndSet("Dir::Bin::dpkg","@TERMUX_PREFIX@/bin/dpkg");
|
|||
|
|||
if (d->StatusFile) { |
|||
delete d->StatusFile; |
|||
@@ -216,9 +216,9 @@
|
|||
signed debSystem::Score(Configuration const &Cnf) |
|||
{ |
|||
signed Score = 0; |
|||
- if (FileExists(Cnf.FindFile("Dir::State::status","/var/lib/dpkg/status")) == true)
|
|||
+ if (FileExists(Cnf.FindFile("Dir::State::status","@TERMUX_PREFIX@/var/lib/dpkg/status")) == true)
|
|||
Score += 10; |
|||
- if (FileExists(Cnf.FindFile("Dir::Bin::dpkg","/usr/bin/dpkg")) == true)
|
|||
+ if (FileExists(Cnf.FindFile("Dir::Bin::dpkg","@TERMUX_PREFIX@/bin/dpkg")) == true)
|
|||
Score += 10; |
|||
if (FileExists("/etc/debian_version") == true) |
|||
Score += 10; |
@ -0,0 +1,26 @@ |
|||
diff -u -r ../apt-1.0.9.4/apt-pkg/deb/dpkgpm.cc ./apt-pkg/deb/dpkgpm.cc
|
|||
--- ../apt-1.0.9.4/apt-pkg/deb/dpkgpm.cc 2014-12-03 10:06:58.000000000 -0500
|
|||
+++ ./apt-pkg/deb/dpkgpm.cc 2014-12-07 07:17:09.210804305 -0500
|
|||
@@ -27,7 +27,9 @@
|
|||
#include <errno.h> |
|||
#include <fcntl.h> |
|||
#include <grp.h> |
|||
-#include <pty.h>
|
|||
+#ifndef __ANDROID__
|
|||
+# include <pty.h>
|
|||
+#endif
|
|||
#include <pwd.h> |
|||
#include <signal.h> |
|||
#include <stddef.h> |
|||
@@ -1075,7 +1077,11 @@
|
|||
|
|||
_error->PushToStack(); |
|||
|
|||
+#ifdef __ANDROID__
|
|||
+ d->master = open("/dev/ptmx", O_RDWR | O_NOCTTY);
|
|||
+# else
|
|||
d->master = posix_openpt(O_RDWR | O_NOCTTY); |
|||
+#endif
|
|||
if (d->master == -1) |
|||
_error->Errno("posix_openpt", _("Can not write log (%s)"), _("Is /dev/pts mounted?")); |
|||
else if (unlockpt(d->master) == -1) |
@ -0,0 +1,67 @@ |
|||
diff -u -r ../upstream.git/apt-pkg/contrib/fileutl.cc ./apt-pkg/contrib/fileutl.cc
|
|||
--- ../upstream.git/apt-pkg/contrib/fileutl.cc 2014-05-05 14:01:59.000000000 +0200
|
|||
+++ ./apt-pkg/contrib/fileutl.cc 2014-06-06 00:09:17.233239376 +0200
|
|||
@@ -46,7 +46,9 @@
|
|||
#include <dirent.h> |
|||
#include <signal.h> |
|||
#include <errno.h> |
|||
+#ifndef __ANDROID__
|
|||
#include <glob.h> |
|||
+#endif
|
|||
|
|||
#include <set> |
|||
#include <algorithm> |
|||
@@ -93,7 +95,7 @@
|
|||
_exit(100); |
|||
} |
|||
|
|||
- if (chdir("/tmp/") != 0)
|
|||
+ if (chdir("@TERMUX_PREFIX@/tmp/") != 0)
|
|||
_exit(100); |
|||
|
|||
unsigned int Count = 1; |
|||
@@ -1883,7 +1885,11 @@
|
|||
FileFdErrno("read","Unable to read original size of gzipped file"); |
|||
return 0; |
|||
} |
|||
+#ifdef __ANDROID__
|
|||
+ size = letoh32(size);
|
|||
+#else
|
|||
size = le32toh(size); |
|||
+#endif
|
|||
|
|||
if (lseek(iFd, oldPos, SEEK_SET) < 0) |
|||
{ |
|||
@@ -1998,6 +2004,7 @@
|
|||
std::vector<std::string> Glob(std::string const &pattern, int flags) |
|||
{ |
|||
std::vector<std::string> result; |
|||
+#ifndef __ANDROID__
|
|||
glob_t globbuf; |
|||
int glob_res; |
|||
unsigned int i; |
|||
@@ -2017,6 +2024,7 @@
|
|||
result.push_back(string(globbuf.gl_pathv[i])); |
|||
|
|||
globfree(&globbuf); |
|||
+#endif
|
|||
return result; |
|||
} |
|||
/*}}}*/ |
|||
@@ -2025,15 +2033,10 @@
|
|||
{ |
|||
const char *tmpdir = getenv("TMPDIR"); |
|||
|
|||
-#ifdef P_tmpdir
|
|||
- if (!tmpdir)
|
|||
- tmpdir = P_tmpdir;
|
|||
-#endif
|
|||
-
|
|||
// check that tmpdir is set and exists |
|||
struct stat st; |
|||
if (!tmpdir || strlen(tmpdir) == 0 || stat(tmpdir, &st) != 0) |
|||
- tmpdir = "/tmp";
|
|||
+ tmpdir = "@TERMUX_PREFIX@/tmp";
|
|||
|
|||
return string(tmpdir); |
|||
} |
@ -0,0 +1,12 @@ |
|||
diff -u -r ../apt-0.9.16.1/methods/ftp.cc ./methods/ftp.cc
|
|||
--- ../apt-0.9.16.1/methods/ftp.cc 2014-03-15 17:23:45.000000000 +0100
|
|||
+++ ./methods/ftp.cc 2014-03-25 01:31:05.464677254 +0100
|
|||
@@ -711,7 +711,7 @@
|
|||
if (WaitFd(DataFd,true,TimeOut) == false) |
|||
return _error->Error(_("Could not connect data socket, connection timed out")); |
|||
unsigned int Err; |
|||
- unsigned int Len = sizeof(Err);
|
|||
+ socklen_t Len = sizeof(Err);
|
|||
if (getsockopt(DataFd,SOL_SOCKET,SO_ERROR,&Err,&Len) != 0) |
|||
return _error->Errno("getsockopt",_("Failed")); |
|||
if (Err != 0) |
@ -0,0 +1,12 @@ |
|||
diff -u -r ../upstream.git/apt-pkg/contrib/gpgv.cc ./apt-pkg/contrib/gpgv.cc
|
|||
--- ../upstream.git/apt-pkg/contrib/gpgv.cc 2014-04-25 13:39:00.000000000 +0200
|
|||
+++ ./apt-pkg/contrib/gpgv.cc 2014-06-06 00:18:13.209224724 +0200
|
|||
@@ -43,7 +84,7 @@
|
|||
int const &statusfd, int fd[2]) |
|||
{ |
|||
#define EINTERNAL 111 |
|||
- std::string const gpgvpath = _config->Find("Dir::Bin::gpg", "/usr/bin/gpgv");
|
|||
+ std::string const gpgvpath = _config->Find("Dir::Bin::gpg", "@TERMUX_PREFIX@/bin/gpgv");
|
|||
// FIXME: remove support for deprecated APT::GPGV setting |
|||
std::string const trustedFile = _config->Find("APT::GPGV::TrustedKeyring", _config->FindFile("Dir::Etc::Trusted")); |
|||
std::string const trustedPath = _config->FindDir("Dir::Etc::TrustedParts"); |
@ -0,0 +1,11 @@ |
|||
diff -u -r ../apt-0.9.16.1/apt-pkg/install-progress.cc ./apt-pkg/install-progress.cc
|
|||
--- ../apt-0.9.16.1/apt-pkg/install-progress.cc 2014-03-15 17:23:45.000000000 +0100
|
|||
+++ ./apt-pkg/install-progress.cc 2014-03-25 01:16:03.436701913 +0100
|
|||
@@ -15,6 +15,7 @@
|
|||
#include <fcntl.h> |
|||
#include <algorithm> |
|||
#include <stdio.h> |
|||
+#include <termios.h>
|
|||
|
|||
#include <apti18n.h> |
|||
|
@ -0,0 +1,19 @@ |
|||
diff -u -r ../apt-0.9.16.1/apt-pkg/contrib/netrc.cc ./apt-pkg/contrib/netrc.cc
|
|||
--- ../apt-0.9.16.1/apt-pkg/contrib/netrc.cc 2014-03-15 17:23:45.000000000 +0100
|
|||
+++ ./apt-pkg/contrib/netrc.cc 2014-03-25 01:01:34.692725662 +0100
|
|||
@@ -84,6 +84,7 @@
|
|||
int state_our_login = false; /* With specific_login, |
|||
found *our* login name */ |
|||
|
|||
+#ifndef __ANDROID__
|
|||
while (!done && getline(&netrcbuffer, &netrcbuffer_size, file) != -1) { |
|||
tok = strtok_r (netrcbuffer, " \t\n", &tok_buf); |
|||
while (!done && tok) { |
|||
@@ -142,6 +143,7 @@
|
|||
tok = strtok_r (NULL, " \t\n", &tok_buf); |
|||
} /* while(tok) */ |
|||
} /* while getline() */ |
|||
+#endif
|
|||
|
|||
free(netrcbuffer); |
|||
fclose(file); |
@ -0,0 +1,12 @@ |
|||
diff -u -r ../upstream.git/buildlib/configure.mak ./buildlib/configure.mak
|
|||
--- ../upstream.git/buildlib/configure.mak 2013-12-07 14:12:14.000000000 +0100
|
|||
+++ ./buildlib/configure.mak 2014-03-11 15:33:01.000000000 +0100
|
|||
@@ -55,7 +55,7 @@
|
|||
aclocal -I buildlib |
|||
|
|||
$(BUILDDIR)/config.status: configure |
|||
- /usr/bin/test -e $(BUILDDIR) || mkdir $(BUILDDIR)
|
|||
+ test -e $(BUILDDIR) || mkdir $(BUILDDIR)
|
|||
(HERE=`pwd`; cd $(BUILDDIR) && $$HERE/configure) |
|||
|
|||
$(addprefix $(BUILDDIR)/,$(CONVERTED)): $(BUILDDIR)/config.status |
@ -0,0 +1,33 @@ |
|||
diff -u -r ../upstream.git/apt-private/private-install.cc ./apt-private/private-install.cc
|
|||
--- ../upstream.git/apt-private/private-install.cc 2014-03-14 09:05:18.000000000 +0100
|
|||
+++ ./apt-private/private-install.cc 2014-04-15 20:58:34.416703941 +0200
|
|||
@@ -24,7 +24,9 @@
|
|||
#include <stdlib.h> |
|||
#include <string.h> |
|||
#include <sys/statfs.h> |
|||
-#include <sys/statvfs.h>
|
|||
+#ifndef __ANDROID__
|
|||
+# include <sys/statvfs.h>
|
|||
+#endif
|
|||
#include <algorithm> |
|||
#include <iostream> |
|||
#include <set> |
|||
@@ -179,14 +181,14 @@
|
|||
if (_config->FindB("APT::Get::Print-URIs") == false && |
|||
_config->FindB("APT::Get::Download",true) == true) |
|||
{ |
|||
- struct statvfs Buf;
|
|||
+ struct statfs Buf;
|
|||
std::string OutputDir = _config->FindDir("Dir::Cache::Archives"); |
|||
- if (statvfs(OutputDir.c_str(),&Buf) != 0) {
|
|||
+ if (statfs(OutputDir.c_str(),&Buf) != 0) {
|
|||
if (errno == EOVERFLOW) |
|||
- return _error->WarningE("statvfs",_("Couldn't determine free space in %s"),
|
|||
+ return _error->WarningE("statfs",_("Couldn't determine free space in %s"),
|
|||
OutputDir.c_str()); |
|||
else |
|||
- return _error->Errno("statvfs",_("Couldn't determine free space in %s"),
|
|||
+ return _error->Errno("statfs",_("Couldn't determine free space in %s"),
|
|||
OutputDir.c_str()); |
|||
} else if (unsigned(Buf.f_bfree) < (FetchBytes - FetchPBytes)/Buf.f_bsize) |
|||
{ |
@ -0,0 +1,25 @@ |
|||
diff -u -r ../upstream.git/apt-private/private-output.cc ./apt-private/private-output.cc
|
|||
--- ../upstream.git/apt-private/private-output.cc 2014-06-10 15:24:50.000000000 +0200
|
|||
+++ ./apt-private/private-output.cc 2014-06-15 02:40:10.539223656 +0200
|
|||
@@ -20,7 +20,11 @@
|
|||
#include <string.h> |
|||
#include <iomanip> |
|||
#include <iostream> |
|||
-#include <langinfo.h>
|
|||
+#ifdef __ANDROID__
|
|||
+# include <termios.h>
|
|||
+# else
|
|||
+# include <langinfo.h>
|
|||
+#endif
|
|||
#include <unistd.h> |
|||
#include <signal.h> |
|||
#include <sys/ioctl.h> |
|||
@@ -764,7 +768,7 @@
|
|||
regex_t Pattern; |
|||
int Res; |
|||
|
|||
- Res = regcomp(&Pattern, nl_langinfo(YESEXPR),
|
|||
+ Res = regcomp(&Pattern, "^[yY]",
|
|||
REG_EXTENDED|REG_ICASE|REG_NOSUB); |
|||
|
|||
if (Res != 0) { |
@ -0,0 +1,65 @@ |
|||
diff -u -r ../upstream.git/apt-pkg/contrib/strutl.cc ./apt-pkg/contrib/strutl.cc
|
|||
--- ../upstream.git/apt-pkg/contrib/strutl.cc 2014-06-18 13:17:17.000000000 +0200
|
|||
+++ ./apt-pkg/contrib/strutl.cc 2014-07-01 16:49:25.305832759 +0200
|
|||
@@ -35,7 +35,9 @@
|
|||
#include <regex.h> |
|||
#include <errno.h> |
|||
#include <stdarg.h> |
|||
+#ifndef __ANDROID__
|
|||
#include <iconv.h> |
|||
+#endif
|
|||
|
|||
#include <apti18n.h> |
|||
/*}}}*/ |
|||
@@ -68,6 +70,7 @@
|
|||
// UTF8ToCodeset - Convert some UTF-8 string for some codeset /*{{{*/ |
|||
// --------------------------------------------------------------------- |
|||
/* This is handy to use before display some information for enduser */ |
|||
+#ifndef __ANDROID__
|
|||
bool UTF8ToCodeset(const char *codeset, const string &orig, string *dest) |
|||
{ |
|||
iconv_t cd; |
|||
@@ -134,6 +137,7 @@
|
|||
|
|||
return true; |
|||
} |
|||
+#endif
|
|||
/*}}}*/ |
|||
// strstrip - Remove white space from the front and back of a string /*{{{*/ |
|||
// --------------------------------------------------------------------- |
|||
@@ -375,13 +379,13 @@
|
|||
{ |
|||
if (ASize < 100 && I != 0) |
|||
{ |
|||
- sprintf(S,"%'.1f %c",ASize,Ext[I]);
|
|||
+ sprintf(S,"%.1f %c",ASize,Ext[I]);
|
|||
break; |
|||
} |
|||
|
|||
if (ASize < 10000) |
|||
{ |
|||
- sprintf(S,"%'.0f %c",ASize,Ext[I]);
|
|||
+ sprintf(S,"%.0f %c",ASize,Ext[I]);
|
|||
break; |
|||
} |
|||
ASize /= 1000.0; |
|||
@@ -909,14 +913,16 @@
|
|||
setlocale (LC_ALL,"C"); |
|||
bool const invalid = |
|||
// Sun, 06 Nov 1994 08:49:37 GMT ; RFC 822, updated by RFC 1123 |
|||
- (strptime(str, "%a, %d %b %Y %H:%M:%S %Z", &Tm) == NULL &&
|
|||
+ (strptime(str, "%a, %d %b %Y %H:%M:%S", &Tm) == NULL &&
|
|||
// Sunday, 06-Nov-94 08:49:37 GMT ; RFC 850, obsoleted by RFC 1036 |
|||
- strptime(str, "%A, %d-%b-%y %H:%M:%S %Z", &Tm) == NULL &&
|
|||
+ strptime(str, "%A, %d-%b-%y %H:%M:%S", &Tm) == NULL &&
|
|||
// Sun Nov 6 08:49:37 1994 ; ANSI C's asctime() format |
|||
strptime(str, "%a %b %d %H:%M:%S %Y", &Tm) == NULL); |
|||
setlocale (LC_ALL,""); |
|||
- if (invalid == true)
|
|||
+ if (invalid == true) {
|
|||
+ if (str != NULL && strlen(str) > 1) printf("Invalid time str '%s'\n", str);
|
|||
return false; |
|||
+ }
|
|||
|
|||
time = timegm(&Tm); |
|||
return true; |
@ -0,0 +1,12 @@ |
|||
diff -u -r ../apt-0.9.16.1/test/interactive-helper/makefile ./test/interactive-helper/makefile
|
|||
--- ../apt-0.9.16.1/test/interactive-helper/makefile 2014-01-05 20:06:21.000000000 +0100
|
|||
+++ ./test/interactive-helper/makefile 2014-03-25 01:33:54.600672630 +0100
|
|||
@@ -41,7 +41,7 @@
|
|||
|
|||
# Program for testing udevcdrom |
|||
PROGRAM=aptwebserver |
|||
-SLIBS = -lapt-pkg -lpthread
|
|||
+SLIBS = -lapt-pkg
|
|||
LIB_MAKES = apt-pkg/makefile |
|||
SOURCE = aptwebserver.cc |
|||
include $(PROGRAM_H) |
Binary file not shown.
@ -0,0 +1,16 @@ |
|||
diff -u -r ../upstream.git/vendor/ubuntu/apt-vendor.ent ./vendor/ubuntu/apt-vendor.ent
|
|||
--- ../upstream.git/vendor/ubuntu/apt-vendor.ent 2014-04-25 13:39:00.000000000 +0200
|
|||
+++ ./vendor/ubuntu/apt-vendor.ent 2014-06-03 11:53:11.535752314 +0200
|
|||
@@ -1,7 +1,7 @@
|
|||
<!-- details about the keys used by the distribution --> |
|||
-<!ENTITY keyring-distro "Ubuntu">
|
|||
-<!ENTITY keyring-package "<package>ubuntu-keyring</package>">
|
|||
-<!ENTITY keyring-filename "<filename>/usr/share/keyrings/ubuntu-archive-keyring.gpg</filename>">
|
|||
-<!ENTITY keyring-removed-filename "<filename>/usr/share/keyrings/ubuntu-archive-removed-keys.gpg</filename>">
|
|||
-<!ENTITY keyring-master-filename "/usr/share/keyrings/ubuntu-master-keyring.gpg">
|
|||
+<!ENTITY keyring-distro "Termux">
|
|||
+<!ENTITY keyring-package "<package>termux-keyring</package>">
|
|||
+<!ENTITY keyring-filename "<filename>@TERMUX_PREFIX@/share/keyrings/termux-archive-keyring.gpg</filename>">
|
|||
+<!ENTITY keyring-removed-filename "<filename>@TERMUX_PREFIX@/share/keyrings/termux-archive-removed-keys.gpg</filename>">
|
|||
+<!ENTITY keyring-master-filename "@TERMUX_PREFIX@/share/keyrings/termux-master-keyring.gpg">
|
|||
<!ENTITY keyring-uri "http://archive.ubuntu.com/ubuntu/project/ubuntu-archive-keyring.gpg"> |
@ -0,0 +1,57 @@ |
|||
diff -u -r ../aria2-1.18.8/src/Makefile.in ./src/Makefile.in
|
|||
--- ../aria2-1.18.8/src/Makefile.in 2014-09-11 12:24:36.000000000 -0400
|
|||
+++ ./src/Makefile.in 2014-12-21 13:24:10.507656196 -0500
|
|||
@@ -84,11 +84,6 @@
|
|||
bin_PROGRAMS = aria2c$(EXEEXT) |
|||
@ANDROID_TRUE@am__append_1 = android/android.c |
|||
|
|||
-# Android NDK R8e does not provide ftruncate64. Use assembly code from
|
|||
-# android source code and link it.
|
|||
-@ANDROID_ARM_TRUE@am__append_2 = android/arm-ftruncate64.S
|
|||
-@ANDROID_MIPS_TRUE@am__append_3 = android/mips-ftruncate64.S
|
|||
-@ANDROID_X86_TRUE@am__append_4 = android/x86-ftruncate64.S android/x86-asm.h
|
|||
@MINGW_BUILD_TRUE@am__append_5 = WinConsoleFile.cc WinConsoleFile.h |
|||
@ENABLE_WEBSOCKET_TRUE@am__append_6 = \ |
|||
@ENABLE_WEBSOCKET_TRUE@ WebSocketInteractionCommand.cc WebSocketInteractionCommand.h\ |
|||
@@ -602,8 +597,6 @@
|
|||
XmlRpcRequestParserController.cc \ |
|||
XmlRpcRequestParserController.h OpenedFileCounter.cc \ |
|||
OpenedFileCounter.h android/android.c \ |
|||
- android/arm-ftruncate64.S android/mips-ftruncate64.S \
|
|||
- android/x86-ftruncate64.S android/x86-asm.h WinConsoleFile.cc \
|
|||
WinConsoleFile.h WebSocketInteractionCommand.cc \ |
|||
WebSocketInteractionCommand.h WebSocketResponseCommand.cc \ |
|||
WebSocketResponseCommand.h WebSocketSession.cc \ |
|||
@@ -801,9 +794,6 @@
|
|||
KeepRunningCommand.cc KeepRunningCommand.h |
|||
am__dirstamp = $(am__leading_dot)dirstamp |
|||
@ANDROID_TRUE@am__objects_1 = android/android.lo |
|||
-@ANDROID_ARM_TRUE@am__objects_2 = android/arm-ftruncate64.lo
|
|||
-@ANDROID_MIPS_TRUE@am__objects_3 = android/mips-ftruncate64.lo
|
|||
-@ANDROID_X86_TRUE@am__objects_4 = android/x86-ftruncate64.lo
|
|||
@MINGW_BUILD_TRUE@am__objects_5 = WinConsoleFile.lo |
|||
@ENABLE_WEBSOCKET_TRUE@am__objects_6 = WebSocketInteractionCommand.lo \ |
|||
@ENABLE_WEBSOCKET_TRUE@ WebSocketResponseCommand.lo \ |
|||
@@ -1708,12 +1698,6 @@
|
|||
@: > android/$(DEPDIR)/$(am__dirstamp) |
|||
android/android.lo: android/$(am__dirstamp) \ |
|||
android/$(DEPDIR)/$(am__dirstamp) |
|||
-android/arm-ftruncate64.lo: android/$(am__dirstamp) \
|
|||
- android/$(DEPDIR)/$(am__dirstamp)
|
|||
-android/mips-ftruncate64.lo: android/$(am__dirstamp) \
|
|||
- android/$(DEPDIR)/$(am__dirstamp)
|
|||
-android/x86-ftruncate64.lo: android/$(am__dirstamp) \
|
|||
- android/$(DEPDIR)/$(am__dirstamp)
|
|||
|
|||
libaria2.la: $(libaria2_la_OBJECTS) $(libaria2_la_DEPENDENCIES) $(EXTRA_libaria2_la_DEPENDENCIES) |
|||
$(AM_V_CXXLD)$(CXXLINK) $(am_libaria2_la_rpath) $(libaria2_la_OBJECTS) $(libaria2_la_LIBADD) $(LIBS) |
|||
@@ -2199,9 +2183,6 @@
|
|||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/version_usage.Plo@am__quote@ |
|||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wallclock.Plo@am__quote@ |
|||
@AMDEP_TRUE@@am__include@ @am__quote@android/$(DEPDIR)/android.Plo@am__quote@ |
|||
-@AMDEP_TRUE@@am__include@ @am__quote@android/$(DEPDIR)/arm-ftruncate64.Plo@am__quote@
|
|||
-@AMDEP_TRUE@@am__include@ @am__quote@android/$(DEPDIR)/mips-ftruncate64.Plo@am__quote@
|
|||
-@AMDEP_TRUE@@am__include@ @am__quote@android/$(DEPDIR)/x86-ftruncate64.Plo@am__quote@
|
|||
|
|||
.S.o: |
|||
@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ |
@ -0,0 +1,12 @@ |
|||
diff -u -r ../aria2-1.18.8/src/a2io.h ./src/a2io.h
|
|||
--- ../aria2-1.18.8/src/a2io.h 2014-09-11 12:24:10.000000000 -0400
|
|||
+++ ./src/a2io.h 2014-12-21 13:11:23.147655665 -0500
|
|||
@@ -149,7 +149,7 @@
|
|||
# define a2fstat(fd, buf) fstat64(fd, buf) |
|||
// # define a2ftell(fd): No ftell64 and not used in aria2 |
|||
# define a2_struct_stat struct stat |
|||
-# define a2stat(path, buf) stat64(path, buf)
|
|||
+# define a2stat(path, buf) stat(path, buf)
|
|||
# define a2mkdir(path, openMode) mkdir(path, openMode) |
|||
# define a2utimbuf utimbuf |
|||
# define a2utime(path, times) ::utime(path, times) |
@ -0,0 +1,9 @@ |
|||
TERMUX_PKG_HOMEPAGE=http://aria2.sourceforge.net/ |
|||
TERMUX_PKG_DESCRIPTION="Multi-protocol & multi-source command-line download utility supporting HTTP/HTTPS, FTP, BitTorrent and Metalink" |
|||
TERMUX_PKG_VERSION=1.19.0 |
|||
TERMUX_PKG_SRCURL=http://downloads.sourceforge.net/project/aria2/stable/aria2-${TERMUX_PKG_VERSION}/aria2-${TERMUX_PKG_VERSION}.tar.xz |
|||
TERMUX_PKG_DEPENDS="c-ares, openssl, libxml2, libgnustl" |
|||
# sqlite3 is only used for loading cookies from firefox or chrome: |
|||
TERMUX_PKG_EXTRA_CONFIGURE_ARGS="--with-openssl --without-gnutls --without-libuv --without-sqlite3 ac_cv_search_getaddrinfo=no ac_cv_func_getaddrinfo=yes ac_cv_func_gettimeofday=yes ac_cv_func_sleep=yes ac_cv_func_usleep=yes ac_cv_func_basename=yes" |
|||
|
|||
export CXXFLAGS="$CXXFLAGS -lgnustl_shared" |
@ -0,0 +1,12 @@ |
|||
diff -u -r ../autoconf-2.69/lib/Autom4te/General.pm ./lib/Autom4te/General.pm
|
|||
--- ../autoconf-2.69/lib/Autom4te/General.pm 2012-04-24 16:44:15.000000000 -0400
|
|||
+++ ./lib/Autom4te/General.pm 2015-05-17 16:11:45.492445577 -0400
|
|||
@@ -300,7 +300,7 @@
|
|||
sub mktmpdir ($) |
|||
{ |
|||
my ($signature) = @_; |
|||
- my $TMPDIR = $ENV{'TMPDIR'} || '/tmp';
|
|||
+ my $TMPDIR = $ENV{'TMPDIR'} || '@TERMUX_PREFIX@/tmp';
|
|||
my $quoted_tmpdir = shell_quote ($TMPDIR); |
|||
|
|||
# If mktemp supports dirs, use it. |
@ -0,0 +1,15 @@ |
|||
TERMUX_PKG_HOMEPAGE=http://www.gnu.org/software/autoconf/autoconf.html |
|||
TERMUX_PKG_DESCRIPTION="Creator of shell scripts to configure source code packages" |
|||
TERMUX_PKG_VERSION=2.69 |
|||
TERMUX_PKG_SRCURL=http://ftp.gnu.org/gnu/autoconf/autoconf-${TERMUX_PKG_VERSION}.tar.xz |
|||
TERMUX_PKG_DEPENDS="m4, make, perl" |
|||
|
|||
termux_step_post_extract_package () { |
|||
cd $TERMUX_PKG_SRCDIR |
|||
perl -p -i -e "s|/bin/sh|$TERMUX_PREFIX/bin/sh|" lib/*/*.m4 |
|||
} |
|||
|
|||
termux_step_post_massage () { |
|||
perl -p -i -e "s|/usr/bin/m4|$TERMUX_PREFIX/bin/m4|" bin/* |
|||
perl -p -i -e "s|CONFIG_SHELL-/bin/sh|CONFIG_SHELL-$TERMUX_PREFIX/bin/sh|" bin/autoconf |
|||
} |
@ -0,0 +1,5 @@ |
|||
TERMUX_PKG_HOMEPAGE=http://www.gnu.org/software/automake/ |
|||
TERMUX_PKG_DESCRIPTION="Tool for automatically generating Makefile.in files" |
|||
TERMUX_PKG_VERSION=1.15 |
|||
TERMUX_PKG_SRCURL=http://ftp.gnu.org/gnu/automake/automake-${TERMUX_PKG_VERSION}.tar.xz |
|||
TERMUX_PKG_DEPENDS="autoconf" |
@ -0,0 +1,12 @@ |
|||
diff -u -r ../bash-4.2/lib/readline/complete.c ./lib/readline/complete.c
|
|||
--- ../bash-4.2/lib/readline/complete.c 2011-01-16 21:32:57.000000000 +0100
|
|||
+++ ./lib/readline/complete.c 2014-01-13 12:28:56.338866643 +0100
|
|||
@@ -2021,7 +2021,7 @@
|
|||
const char *text; |
|||
int state; |
|||
{ |
|||
-#if defined (__WIN32__) || defined (__OPENNT)
|
|||
+#if defined (__WIN32__) || defined (__OPENNT) || defined (__ANDROID__)
|
|||
return (char *)NULL; |
|||
#else /* !__WIN32__ && !__OPENNT) */ |
|||
static char *username = (char *)NULL; |
@ -0,0 +1,19 @@ |
|||
TERMUX_PKG_HOMEPAGE=http://www.gnu.org/software/bash/ |
|||
TERMUX_PKG_DESCRIPTION="A sh-compatible shell that incorporates useful features from the Korn shell (ksh) and C shell (csh)" |
|||
TERMUX_PKG_DEPENDS="ncurses, readline, libandroid-support" |
|||
_MAIN_VERSION=4.3 |
|||
_PATCH_VERSION=39 |
|||
TERMUX_PKG_VERSION=${_MAIN_VERSION}.${_PATCH_VERSION} |
|||
TERMUX_PKG_SRCURL=http://ftp.gnu.org/gnu/bash/bash-${_MAIN_VERSION}.tar.gz |
|||
TERMUX_PKG_EXTRA_CONFIGURE_ARGS="--enable-multibyte --without-bash-malloc --with-installed-readline ac_cv_header_grp_h=no ac_cv_header_pwd_h=no ac_cv_rl_version=6.3" |
|||
|
|||
TERMUX_PKG_RM_AFTER_INSTALL="share/man/man1/bashbug.1 bin/bashbug" |
|||
|
|||
termux_step_pre_configure () { |
|||
cd $TERMUX_PKG_SRCDIR |
|||
for patch_number in `seq -f '%03g' ${_PATCH_VERSION}`; do |
|||
PATCHFILE=$TERMUX_PKG_CACHEDIR/bash_patch_${patch_number}.patch |
|||
test ! -f $PATCHFILE && curl "http://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-$patch_number" > $PATCHFILE |
|||
patch -p0 -i $PATCHFILE |
|||
done |
|||
} |
@ -0,0 +1,13 @@ |
|||
diff -u -r ../bash-4.2/shell.c ./shell.c
|
|||
--- ../bash-4.2/shell.c 2011-01-02 22:04:51.000000000 +0100
|
|||
+++ ./shell.c 2014-02-11 11:20:46.000000000 +0100
|
|||
@@ -1654,7 +1654,9 @@
|
|||
current_user.shell = savestring ("/bin/sh"); |
|||
current_user.home_dir = savestring ("/"); |
|||
} |
|||
+#ifndef __ANDROID__
|
|||
endpwent (); |
|||
+#endif
|
|||
} |
|||
} |
|||
|
@ -0,0 +1,15 @@ |
|||
--- ../bash-4.2/pathnames.h.in 2009-01-04 20:32:40.000000000 +0100
|
|||
+++ ./pathnames.h.in 2014-02-04 18:34:17.000000000 +0100
|
|||
@@ -22,10 +22,10 @@
|
|||
#define _PATHNAMES_H_ |
|||
|
|||
/* The default file for hostname completion. */ |
|||
-#define DEFAULT_HOSTS_FILE "/etc/hosts"
|
|||
+#define DEFAULT_HOSTS_FILE "@TERMUX_PREFIX@/etc/hosts"
|
|||
|
|||
/* The default login shell startup file. */ |
|||
-#define SYS_PROFILE "/etc/profile"
|
|||
+#define SYS_PROFILE "@TERMUX_PREFIX@/etc/profile"
|
|||
|
|||
/* The default location of the bash debugger initialization/startup file. */ |
|||
#define DEBUGGER_START_FILE "@DEBUGGER_START_FILE@" |
@ -0,0 +1,39 @@ |
|||
diff -u -r ../bash-4.2/lib/readline/complete.c ./lib/readline/complete.c |
|||
--- ../bash-4.2/lib/readline/complete.c 2011-01-16 21:32:57.000000000 +0100 |
|||
+++ ./lib/readline/complete.c 2014-01-13 12:28:56.338866643 +0100 |
|||
@@ -2021,7 +2021,7 @@ |
|||
const char *text; |
|||
int state; |
|||
{ |
|||
-#if defined (__WIN32__) || defined (__OPENNT) |
|||
+#if defined (__WIN32__) || defined (__OPENNT) || defined (__ANDROID__) |
|||
return (char *)NULL; |
|||
#else /* !__WIN32__ && !__OPENNT) */ |
|||
static char *username = (char *)NULL; |
|||
diff -u -r ../bash-4.2/shell.c ./shell.c |
|||
--- ../bash-4.2/shell.c 2011-01-02 22:04:51.000000000 +0100 |
|||
+++ ./shell.c 2014-01-13 12:43:01.070846472 +0100 |
|||
@@ -1638,6 +1638,7 @@ |
|||
/* Don't fetch this more than once. */ |
|||
if (current_user.user_name == 0) |
|||
{ |
|||
+#ifndef __ANDROID__ |
|||
entry = getpwuid (current_user.uid); |
|||
if (entry) |
|||
{ |
|||
@@ -1649,12 +1650,15 @@ |
|||
} |
|||
else |
|||
{ |
|||
+#endif |
|||
current_user.user_name = _("I have no name!"); |
|||
current_user.user_name = savestring (current_user.user_name); |
|||
current_user.shell = savestring ("/bin/sh"); |
|||
current_user.home_dir = savestring ("/"); |
|||
+#ifndef __ANDROID__ |
|||
} |
|||
endpwent (); |
|||
+#endif |
|||
} |
|||
} |
|||
|
@ -0,0 +1,13 @@ |
|||
Fix breakage on android-21 due "conflicting type for '__errno'" |
|||
|
|||
diff -u -r ../bash-4.3/y.tab.c ./y.tab.c
|
|||
--- ../bash-4.3/y.tab.c 2014-02-11 10:57:47.000000000 -0500
|
|||
+++ ./y.tab.c 2014-12-16 05:39:58.047338124 -0500
|
|||
@@ -280,7 +280,6 @@
|
|||
extern int bash_input_fd_changed; |
|||
#endif |
|||
|
|||
-extern int errno;
|
|||
/* **************************************************************** */ |
|||
/* */ |
|||
/* "Forward" declarations */ |
@ -0,0 +1,6 @@ |
|||
TERMUX_PKG_HOMEPAGE=http://www.gnu.org/software/bc/ |
|||
TERMUX_PKG_DESCRIPTION="Arbitrary precision numeric processing language" |
|||
TERMUX_PKG_VERSION=1.06.95 |
|||
TERMUX_PKG_SRCURL=http://alpha.gnu.org/gnu/bc/bc-${TERMUX_PKG_VERSION}.tar.bz2 |
|||
TERMUX_PKG_DEPENDS="readline,flex" |
|||
TERMUX_PKG_EXTRA_CONFIGURE_ARGS="--with-readline --mandir=$TERMUX_PREFIX/share/man" |
@ -0,0 +1,13 @@ |
|||
diff -u -r ../binutils-2.24/bfd/archive.c ./bfd/archive.c
|
|||
--- ../binutils-2.24/bfd/archive.c 2013-11-04 16:33:37.000000000 +0100
|
|||
+++ ./bfd/archive.c 2014-01-01 14:44:49.000000000 +0100
|
|||
@@ -1880,7 +1880,8 @@
|
|||
{ |
|||
/* Assume we just "made" the member, and fake it. */ |
|||
struct bfd_in_memory *bim = (struct bfd_in_memory *) member->iostream; |
|||
- time (&status.st_mtime);
|
|||
+ /* termux diff: explicit cast */
|
|||
+ time ((time_t*) &status.st_mtime);
|
|||
status.st_uid = getuid (); |
|||
status.st_gid = getgid (); |
|||
status.st_mode = 0644; |
@ -0,0 +1,11 @@ |
|||
TERMUX_PKG_VERSION=2.25 |
|||
TERMUX_PKG_HOMEPAGE=http://www.gnu.org/software/binutils/ |
|||
TERMUX_PKG_DESCRIPTION="Collection of binary tools, the main ones being ld, the GNU linker, and as, the GNU assembler" |
|||
TERMUX_PKG_SRCURL=http://ftp.gnu.org/gnu/binutils/binutils-${TERMUX_PKG_VERSION}.tar.gz |
|||
# TERMUX_PKG_EXTRA_CONFIGURE_ARGS="--enable-gold" |
|||
TERMUX_PKG_EXTRA_MAKE_ARGS="tooldir=$TERMUX_PREFIX" |
|||
TERMUX_PKG_RM_AFTER_INSTALL="share/man/man1/windmc.1 share/man/man1/windres.1 bin/ld.bfd" |
|||
|
|||
termux_step_post_make_install () { |
|||
cp $TERMUX_PKG_BUILDER_DIR/ldd $TERMUX_PREFIX/bin/ldd |
|||
} |
@ -0,0 +1,12 @@ |
|||
diff -u -r ../binutils-2.24/gold/layout.cc ./gold/layout.cc
|
|||
--- ../binutils-2.24/gold/layout.cc 2013-11-04 16:33:39.000000000 +0100
|
|||
+++ ./gold/layout.cc 2014-02-12 18:03:07.000000000 +0100
|
|||
@@ -3031,7 +3031,7 @@
|
|||
gold_error(_("/dev/urandom: read failed: %s"), strerror(errno)); |
|||
else if (static_cast<size_t>(got) != uuidsz) |
|||
gold_error(_("/dev/urandom: expected %zu bytes, got %zd bytes"), |
|||
- uuidsz, got);
|
|||
+ uuidsz, (signed size_t) got);
|
|||
} |
|||
|
|||
desc.assign(buffer, uuidsz); |
@ -0,0 +1,12 @@ |
|||
diff -u -r ../binutils-2.24/gold/fileread.cc ./gold/fileread.cc
|
|||
--- ../binutils-2.24/gold/fileread.cc 2013-11-04 16:33:39.000000000 +0100
|
|||
+++ ./gold/fileread.cc 2014-02-12 18:00:06.000000000 +0100
|
|||
@@ -686,7 +686,7 @@
|
|||
if (got != want) |
|||
gold_fatal(_("%s: file too short: read only %zd of %zd bytes at %lld"), |
|||
this->filename().c_str(), |
|||
- got, want, static_cast<long long>(base + first_offset));
|
|||
+ (signed size_t) got, (signed size_t) want, static_cast<long long>(base + first_offset));
|
|||
} |
|||
|
|||
// Portable IOV_MAX. |
@ -0,0 +1,3 @@ |
|||
#!/system/bin/sh |
|||
|
|||
objdump -p $@ | grep NEEDED | cut -d ' ' -f 18 |
@ -0,0 +1,18 @@ |
|||
diff -u -r ../binutils-2.24/ld/ldmain.c ./ld/ldmain.c
|
|||
--- ../binutils-2.24/ld/ldmain.c 2013-11-08 11:13:48.000000000 +0100
|
|||
+++ ./ld/ldmain.c 2014-06-18 08:16:53.945378483 +0200
|
|||
@@ -263,7 +263,13 @@
|
|||
config.text_read_only = TRUE; |
|||
link_info.disable_target_specific_optimizations = -1; |
|||
|
|||
- command_line.warn_mismatch = TRUE;
|
|||
+ command_line.warn_mismatch =
|
|||
+#if defined(__ANDROID__) && defined(__arm__)
|
|||
+ /* --no-warn-mismatch is needed to suppress linker errors about not all functions using VFP register to pass arguments: */
|
|||
+ FALSE;
|
|||
+# else
|
|||
+ TRUE;
|
|||
+#endif
|
|||
command_line.warn_search_mismatch = TRUE; |
|||
command_line.check_section_addresses = -1; |
|||
|
@ -0,0 +1,12 @@ |
|||
diff -r -u ../binutils-2.24/ld/configure.tgt ./ld/configure.tgt
|
|||
--- ../binutils-2.24/ld/configure.tgt 2013-11-26 12:37:33.000000000 +0100
|
|||
+++ ./ld/configure.tgt 2014-02-12 18:06:26.000000000 +0100
|
|||
@@ -769,7 +769,7 @@
|
|||
|
|||
esac |
|||
|
|||
-NATIVE_LIB_DIRS='/usr/local/lib /lib /usr/lib'
|
|||
+NATIVE_LIB_DIRS='/system/lib'
|
|||
case "${target}" in |
|||
|
|||
*-*-dragonfly*) |
@ -0,0 +1,7 @@ |
|||
TERMUX_PKG_HOMEPAGE=http://www.gnu.org/software/bison/ |
|||
TERMUX_PKG_DESCRIPTION="General-purpose parser generator" |
|||
TERMUX_PKG_VERSION=3.0.4 |
|||
TERMUX_PKG_SRCURL=http://ftp.gnu.org/gnu/bison/bison-${TERMUX_PKG_VERSION}.tar.xz |
|||
TERMUX_PKG_BUILD_IN_SRC=yes |
|||
TERMUX_PKG_EXTRA_CONFIGURE_ARGS="ac_cv_func_malloc_0_nonnull=yes ac_cv_func_realloc_0_nonnull=yes" |
|||
TERMUX_PKG_HOSTBUILD=true |
@ -0,0 +1,19 @@ |
|||
TERMUX_PKG_VERSION=1.7.4 |
|||
TERMUX_PKG_HOMEPAGE=https://sites.google.com/site/broguegame/ |
|||
TERMUX_PKG_DESCRIPTION="Roguelike dungeon crawling game" |
|||
TERMUX_PKG_DEPENDS="ncurses" |
|||
TERMUX_PKG_SRCURL=https://sites.google.com/site/broguegame/brogue-${TERMUX_PKG_VERSION}-linux-i386.tbz2 |
|||
TERMUX_PKG_EXTRA_MAKE_ARGS="curses" |
|||
TERMUX_PKG_BUILD_IN_SRC=yes |
|||
TERMUX_PKG_FOLDERNAME=brogue-${TERMUX_PKG_VERSION} |
|||
|
|||
CC="$CC $CFLAGS $CPPFLAGS $LDFLAGS" |
|||
|
|||
#termux_step_configure () { |
|||
# Tarball has an extra level of folders. |
|||
#TERMUX_PKG_BUILDDIR=$TERMUX_PKG_SRCDIR/brogue-${TERMUX_PKG_VERSION} |
|||
#} |
|||
|
|||
termux_step_make_install () { |
|||
cp bin/brogue $TERMUX_PREFIX/bin |
|||
} |
@ -0,0 +1,28 @@ |
|||
In Android the <sys/timeb.h> header and associated ftime(3) has been |
|||
removed in android-21 since it is deprecated and removed from POSIX. |
|||
|
|||
diff -u -r ../brogue-1.7.4/src/platform/curses-platform.c ./src/platform/curses-platform.c
|
|||
--- ../brogue-1.7.4/src/platform/curses-platform.c 2014-07-03 15:19:10.000000000 -0400
|
|||
+++ ./src/platform/curses-platform.c 2014-12-20 03:47:20.303572495 -0500
|
|||
@@ -3,7 +3,7 @@
|
|||
#include <string.h> |
|||
#include <time.h> |
|||
#include "term.h" |
|||
-#include <sys/timeb.h>
|
|||
+#include <sys/time.h>
|
|||
#include <stdint.h> |
|||
#include <signal.h> |
|||
#include "platform.h" |
|||
@@ -109,9 +109,9 @@
|
|||
#define PAUSE_BETWEEN_EVENT_POLLING 34//17 |
|||
|
|||
static uint32_t getTime() { |
|||
- struct timeb time;
|
|||
- ftime(&time);
|
|||
- return 1000 * time.time + time.millitm;
|
|||
+ struct timeval tv;
|
|||
+ gettimeofday(&tv, NULL);
|
|||
+ return 1000 * tv.tv_sec + tv.tv_usec / 1000;
|
|||
} |
|||
|
|||
static boolean curses_pauseForMilliseconds(short milliseconds) { |
@ -0,0 +1,12 @@ |
|||
--- ../brogue-linux-1.7.3/brogue-1.7.3/Makefile 2013-09-11 07:38:48.000000000 +0200
|
|||
+++ ./Makefile 2014-01-28 07:57:06.000000000 +0100
|
|||
@@ -81,7 +81,7 @@
|
|||
.PHONY : clean both curses tcod tar |
|||
|
|||
bin/brogue : ${DEPENDENCIES} ${BROGUEFILES} |
|||
- $(CC) -O2 -march=i586 -o bin/brogue ${BROGUEFILES} ${LIBRARIES} -Wl,-rpath,.
|
|||
+ $(CC) -o bin/brogue ${BROGUEFILES} ${LIBRARIES} -Wl,-rpath,.
|
|||
|
|||
clean : |
|||
rm -f src/brogue/*.o src/platform/*.o bin/brogue |
|||
|
@ -0,0 +1,12 @@ |
|||
diff -u -r ../busybox-1.22.1/shell/ash.c ./shell/ash.c
|
|||
--- ../busybox-1.22.1/shell/ash.c 2014-01-20 03:38:10.000000000 +0100
|
|||
+++ ./shell/ash.c 2014-01-20 08:47:37.000000000 +0100
|
|||
@@ -13225,7 +13225,7 @@
|
|||
const char *hp; |
|||
|
|||
state = 1; |
|||
- read_profile("/etc/profile");
|
|||
+ read_profile("@TERMUX_PREFIX@/etc/profile");
|
|||
state1: |
|||
state = 2; |
|||
hp = lookupvar("HOME"); |
@ -0,0 +1,41 @@ |
|||
TERMUX_PKG_HOMEPAGE=http://www.busybox.net/ |
|||
TERMUX_PKG_DESCRIPTION="Tiny versions of many common UNIX utilities into a single small executable" |
|||
TERMUX_PKG_ESSENTIAL=yes |
|||
TERMUX_PKG_VERSION=1.23.2 |
|||
TERMUX_PKG_SRCURL=http://www.busybox.net/downloads/busybox-${TERMUX_PKG_VERSION}.tar.bz2 |
|||
TERMUX_PKG_BUILD_IN_SRC=yes |
|||
|
|||
# NOTE: sed on mac does not work for building busybox, install gsed and symlink sed => gsed |
|||
|
|||
CFLAGS+=" -llog -DTERMUX_EXPOSE_MEMPCPY=1" # Android system liblog.so for syslog |
|||
|
|||
termux_step_configure () { |
|||
# Bug in gold linker with busybox in android r10e: |
|||
# https://sourceware.org/ml/binutils/2015-02/msg00386.html |
|||
CFLAGS+=" -fuse-ld=bfd" |
|||
LD+=.bfd |
|||
|
|||
cp $TERMUX_PKG_BUILDER_DIR/busybox.config .config |
|||
echo "CONFIG_SYSROOT=\"$TERMUX_STANDALONE_TOOLCHAIN/sysroot\"" >> .config |
|||
echo "CONFIG_PREFIX=\"$TERMUX_PREFIX\"" >> .config |
|||
echo "CONFIG_CROSS_COMPILER_PREFIX=\"${TERMUX_HOST_PLATFORM}-\"" >> .config |
|||
echo "CONFIG_FEATURE_CROND_DIR=\"$TERMUX_PREFIX/var/spool/cron\"" >> .config |
|||
make oldconfig |
|||
} |
|||
|
|||
termux_step_post_make_install () { |
|||
# Create symlinks in $PREFIX/bin/applets to $PREFIX/bin/busybox |
|||
rm -Rf $TERMUX_PREFIX/bin/applets |
|||
mkdir -p $TERMUX_PREFIX/bin/applets |
|||
cd $TERMUX_PREFIX/bin/applets |
|||
for f in `cat $TERMUX_PKG_SRCDIR/busybox.links`; do ln -s ../busybox `basename $f`; done |
|||
|
|||
cd $TERMUX_PREFIX/bin |
|||
rm -f ash |
|||
ln busybox ash |
|||
|
|||
# Install busybox man page |
|||
mkdir -p $TERMUX_PREFIX/share/man/man1 |
|||
cp $TERMUX_PKG_SRCDIR/docs/busybox.1 $TERMUX_PREFIX/share/man/man1 |
|||
} |
|||
|
File diff suppressed because it is too large
@ -0,0 +1,15 @@ |
|||
diff -u -r ../busybox-1.22.1/libbb/change_identity.c ./libbb/change_identity.c
|
|||
--- ../busybox-1.22.1/libbb/change_identity.c 2014-01-09 19:15:44.000000000 +0100
|
|||
+++ ./libbb/change_identity.c 2014-07-01 09:57:10.000000000 +0200
|
|||
@@ -33,9 +33,11 @@
|
|||
/* Become the user and group(s) specified by PW. */ |
|||
void FAST_FUNC change_identity(const struct passwd *pw) |
|||
{ |
|||
+#ifndef __ANDROID__
|
|||
if (initgroups(pw->pw_name, pw->pw_gid) == -1) |
|||
bb_perror_msg_and_die("can't set groups"); |
|||
endgrent(); /* helps to close a fd used internally by libc */ |
|||
xsetgid(pw->pw_gid); |
|||
xsetuid(pw->pw_uid); |
|||
+#endif
|
|||
} |
@ -0,0 +1,28 @@ |
|||
diff -u -r ../busybox-1.23.1/miscutils/crond.c ./miscutils/crond.c
|
|||
--- ../busybox-1.23.1/miscutils/crond.c 2015-01-27 03:48:58.000000000 -0500
|
|||
+++ ./miscutils/crond.c 2015-02-06 16:43:24.238473247 -0500
|
|||
@@ -415,7 +415,7 @@
|
|||
|
|||
maxLines = (strcmp(fileName, "root") == 0) ? 65535 : MAXLINES; |
|||
|
|||
- if (fstat(fileno(parser->fp), &sbuf) == 0 && sbuf.st_uid == DAEMON_UID) {
|
|||
+ if (fstat(fileno(parser->fp), &sbuf) == 0) {
|
|||
CronFile *file = xzalloc(sizeof(CronFile)); |
|||
CronLine **pline; |
|||
int n; |
|||
@@ -571,6 +571,7 @@
|
|||
|
|||
static void set_env_vars(struct passwd *pas, const char *shell) |
|||
{ |
|||
+#ifndef __ANDROID__
|
|||
/* POSIX requires crond to set up at least HOME, LOGNAME, PATH, SHELL. |
|||
* We assume crond inherited suitable PATH. |
|||
*/ |
|||
@@ -585,6 +586,7 @@
|
|||
xsetenv("HOME", pas->pw_dir); |
|||
xsetenv("SHELL", shell); |
|||
#endif |
|||
+#endif
|
|||
} |
|||
|
|||
static void change_user(struct passwd *pas) |
@ -0,0 +1,16 @@ |
|||
diff -u -r ../busybox-1.22.1/miscutils/crontab.c ./miscutils/crontab.c
|
|||
--- ../busybox-1.22.1/miscutils/crontab.c 2014-01-09 19:15:44.000000000 +0100
|
|||
+++ ./miscutils/crontab.c 2014-07-01 09:47:30.000000000 +0200
|
|||
@@ -40,10 +40,12 @@
|
|||
|
|||
/* CHILD - change user and run editor */ |
|||
/* initgroups, setgid, setuid */ |
|||
+#ifndef __ANDROID__
|
|||
change_identity(pas); |
|||
setup_environment(pas->pw_shell, |
|||
SETUP_ENV_CHANGEENV | SETUP_ENV_TO_TMP, |
|||
pas); |
|||
+#endif
|
|||
ptr = getenv("VISUAL"); |
|||
if (!ptr) { |
|||
ptr = getenv("EDITOR"); |
@ -0,0 +1,146 @@ |
|||
diff -u -r ../busybox-1.22.1/archival/dpkg.c ./archival/dpkg.c
|
|||
--- ../busybox-1.22.1/archival/dpkg.c 2014-01-09 19:15:44.000000000 +0100
|
|||
+++ ./archival/dpkg.c 2014-01-20 08:52:03.000000000 +0100
|
|||
@@ -813,8 +813,8 @@
|
|||
/* This could do with a cleanup */ |
|||
static void write_status_file(deb_file_t **deb_file) |
|||
{ |
|||
- FILE *old_status_file = xfopen_for_read("/var/lib/dpkg/status");
|
|||
- FILE *new_status_file = xfopen_for_write("/var/lib/dpkg/status.udeb");
|
|||
+ FILE *old_status_file = xfopen_for_read("@TERMUX_PREFIX@/var/lib/dpkg/status");
|
|||
+ FILE *new_status_file = xfopen_for_write("@TERMUX_PREFIX@/var/lib/dpkg/status.udeb");
|
|||
char *package_name; |
|||
char *status_from_file; |
|||
char *control_buffer = NULL; |
|||
@@ -942,7 +942,7 @@
|
|||
fclose(new_status_file); |
|||
|
|||
/* Create a separate backfile to dpkg */ |
|||
- if (rename("/var/lib/dpkg/status", "/var/lib/dpkg/status.udeb.bak") == -1) {
|
|||
+ if (rename("@TERMUX_PREFIX@/var/lib/dpkg/status", "@TERMUX_PREFIX@/var/lib/dpkg/status.udeb.bak") == -1) {
|
|||
if (errno != ENOENT) |
|||
bb_error_msg_and_die("can't create backup status file"); |
|||
/* Its ok if renaming the status file fails because status |
|||
@@ -950,7 +950,7 @@
|
|||
bb_error_msg("no status file found, creating new one"); |
|||
} |
|||
|
|||
- xrename("/var/lib/dpkg/status.udeb", "/var/lib/dpkg/status");
|
|||
+ xrename("@TERMUX_PREFIX@/var/lib/dpkg/status.udeb", "@TERMUX_PREFIX@/var/lib/dpkg/status");
|
|||
} |
|||
|
|||
/* This function returns TRUE if the given package can satisfy a |
|||
@@ -1242,7 +1242,7 @@
|
|||
char *script_path; |
|||
int result; |
|||
|
|||
- script_path = xasprintf("/var/lib/dpkg/info/%s.%s", package_name, script_type);
|
|||
+ script_path = xasprintf("@TERMUX_PREFIX@/var/lib/dpkg/info/%s.%s", package_name, script_type);
|
|||
|
|||
/* If the file doesnt exist is isnt fatal */ |
|||
result = access(script_path, F_OK) ? EXIT_SUCCESS : system(script_path); |
|||
@@ -1295,7 +1295,7 @@
|
|||
/* Create a list of all /var/lib/dpkg/info/<package> files */ |
|||
remove_files = xzalloc(sizeof(all_control_files) + sizeof(char*)); |
|||
while (i < ARRAY_SIZE(all_control_files)) { |
|||
- remove_files[i] = xasprintf("/var/lib/dpkg/info/%s.%s",
|
|||
+ remove_files[i] = xasprintf("@TERMUX_PREFIX@/var/lib/dpkg/info/%s.%s",
|
|||
package_name, all_control_files[i]); |
|||
i++; |
|||
} |
|||
@@ -1366,8 +1366,8 @@
|
|||
const int package_name_length = strlen(package_name); |
|||
char **remove_files; |
|||
char **exclude_files; |
|||
- char list_name[package_name_length + 25];
|
|||
- char conffile_name[package_name_length + 30];
|
|||
+ char list_name[package_name_length + 100];
|
|||
+ char conffile_name[package_name_length + 100];
|
|||
|
|||
if (noisy) |
|||
printf("Removing %s (%s)...\n", package_name, package_version); |
|||
@@ -1376,10 +1376,10 @@
|
|||
run_package_script_or_die(package_name, "prerm"); |
|||
|
|||
/* Create a list of files to remove, and a separate list of those to keep */ |
|||
- sprintf(list_name, "/var/lib/dpkg/info/%s.%s", package_name, "list");
|
|||
+ sprintf(list_name, "@TERMUX_PREFIX@/var/lib/dpkg/info/%s.%s", package_name, "list");
|
|||
remove_files = create_list(list_name); |
|||
|
|||
- sprintf(conffile_name, "/var/lib/dpkg/info/%s.%s", package_name, "conffiles");
|
|||
+ sprintf(conffile_name, "@TERMUX_PREFIX@/var/lib/dpkg/info/%s.%s", package_name, "conffiles");
|
|||
exclude_files = create_list(conffile_name); |
|||
|
|||
/* Some directories can't be removed straight away, so do multiple passes */ |
|||
@@ -1391,7 +1391,7 @@
|
|||
/* Create a list of files in /var/lib/dpkg/info/<package>.* to keep */ |
|||
exclude_files = xzalloc(sizeof(exclude_files[0]) * 3); |
|||
exclude_files[0] = xstrdup(conffile_name); |
|||
- exclude_files[1] = xasprintf("/var/lib/dpkg/info/%s.%s", package_name, "postrm");
|
|||
+ exclude_files[1] = xasprintf("@TERMUX_PREFIX@/var/lib/dpkg/info/%s.%s", package_name, "postrm");
|
|||
|
|||
/* Create a list of all /var/lib/dpkg/info/<package> files */ |
|||
remove_files = all_control_list(package_name); |
|||
@@ -1416,7 +1416,7 @@
|
|||
const unsigned status_num = search_status_hashtable(package_name); |
|||
char **remove_files; |
|||
char **exclude_files; |
|||
- char list_name[strlen(package_name) + 25];
|
|||
+ char list_name[strlen(package_name) + 100];
|
|||
|
|||
printf("Purging %s (%s)...\n", package_name, package_version); |
|||
|
|||
@@ -1424,7 +1424,7 @@
|
|||
run_package_script_or_die(package_name, "prerm"); |
|||
|
|||
/* Create a list of files to remove */ |
|||
- sprintf(list_name, "/var/lib/dpkg/info/%s.%s", package_name, "list");
|
|||
+ sprintf(list_name, "@TERMUX_PREFIX@/var/lib/dpkg/info/%s.%s", package_name, "list");
|
|||
remove_files = create_list(list_name); |
|||
|
|||
/* Some directories cant be removed straight away, so do multiple passes */ |
|||
@@ -1437,7 +1437,7 @@
|
|||
|
|||
/* Delete all of them except the postrm script */ |
|||
exclude_files = xzalloc(sizeof(exclude_files[0]) * 2); |
|||
- exclude_files[0] = xasprintf("/var/lib/dpkg/info/%s.%s", package_name, "postrm");
|
|||
+ exclude_files[0] = xasprintf("@TERMUX_PREFIX@/var/lib/dpkg/info/%s.%s", package_name, "postrm");
|
|||
remove_file_array(remove_files, exclude_files); |
|||
free_array(exclude_files); |
|||
|
|||
@@ -1528,7 +1528,7 @@
|
|||
FILE *fp; |
|||
char *filename, *line; |
|||
|
|||
- filename = xasprintf("/var/lib/dpkg/info/%s.%s", package_name, control_name);
|
|||
+ filename = xasprintf("@TERMUX_PREFIX@/var/lib/dpkg/info/%s.%s", package_name, control_name);
|
|||
fp = fopen_for_read(filename); |
|||
free(filename); |
|||
if (fp != NULL) { |
|||
@@ -1648,7 +1648,7 @@
|
|||
} |
|||
|
|||
/* Extract control.tar.gz to /var/lib/dpkg/info/<package>.filename */ |
|||
- info_prefix = xasprintf("/var/lib/dpkg/info/%s.%s", package_name, "");
|
|||
+ info_prefix = xasprintf("@TERMUX_PREFIX@/var/lib/dpkg/info/%s.%s", package_name, "");
|
|||
archive_handle = init_archive_deb_ar(deb_file->filename); |
|||
init_archive_deb_control(archive_handle); |
|||
|
|||
@@ -1688,7 +1688,7 @@
|
|||
unpack_ar_archive(archive_handle); |
|||
|
|||
/* Create the list file */ |
|||
- list_filename = xasprintf("/var/lib/dpkg/info/%s.%s", package_name, "list");
|
|||
+ list_filename = xasprintf("@TERMUX_PREFIX@/var/lib/dpkg/info/%s.%s", package_name, "list");
|
|||
out_stream = xfopen_for_write(list_filename); |
|||
archive_handle->dpkg__sub_archive->passed = llist_rev(archive_handle->dpkg__sub_archive->passed); |
|||
while (archive_handle->dpkg__sub_archive->passed) { |
|||
@@ -1782,7 +1782,7 @@
|
|||
} |
|||
|
|||
/* puts("(Reading database ... xxxxx files and directories installed.)"); */ |
|||
- index_status_file("/var/lib/dpkg/status");
|
|||
+ index_status_file("@TERMUX_PREFIX@/var/lib/dpkg/status");
|
|||
|
|||
/* if the list action was given print the installed packages and exit */ |
|||
if (opt & OPT_list_installed) { |
@ -0,0 +1,17 @@ |
|||
We disable security, because chroot() does not work with our non-root usage. |
|||
|
|||
With chdir() it's unsafe as a general network service, |
|||
but can be used for bootstrapping on a local network. |
|||
|
|||
diff -u -r ../busybox-1.23.1/networking/ftpd.c ./networking/ftpd.c
|
|||
--- ../busybox-1.23.1/networking/ftpd.c 2015-01-27 03:51:46.000000000 -0500
|
|||
+++ ./networking/ftpd.c 2015-02-06 16:38:33.202473045 -0500
|
|||
@@ -1230,7 +1230,7 @@
|
|||
G.root_fd = xopen("/", O_RDONLY | O_DIRECTORY); |
|||
close_on_exec_on(G.root_fd); |
|||
#endif |
|||
- xchroot(argv[0]);
|
|||
+ xchdir(argv[0]);
|
|||
} |
|||
|
|||
/* RFC-959 Section 5.1 |
@ -0,0 +1,39 @@ |
|||
diff -u -r ../busybox-1.22.1/networking/httpd.c ./networking/httpd.c
|
|||
--- ../busybox-1.22.1/networking/httpd.c 2014-01-09 19:15:44.000000000 +0100
|
|||
+++ ./networking/httpd.c 2014-01-20 08:47:37.000000000 +0100
|
|||
@@ -112,7 +112,7 @@
|
|||
//usage: "\n -i Inetd mode" |
|||
//usage: "\n -f Don't daemonize" |
|||
//usage: "\n -v[v] Verbose" |
|||
-//usage: "\n -p [IP:]PORT Bind to IP:PORT (default *:80)"
|
|||
+//usage: "\n -p [IP:]PORT Bind to IP:PORT (default *:8080)"
|
|||
//usage: IF_FEATURE_HTTPD_SETUID( |
|||
//usage: "\n -u USER[:GRP] Set uid/gid after binding to port") |
|||
//usage: IF_FEATURE_HTTPD_BASIC_AUTH( |
|||
@@ -371,7 +371,7 @@
|
|||
SET_PTR_TO_GLOBALS(xzalloc(sizeof(G))); \ |
|||
IF_FEATURE_HTTPD_BASIC_AUTH(g_realm = "Web Server Authentication";) \ |
|||
IF_FEATURE_HTTPD_RANGES(range_start = -1;) \ |
|||
- bind_addr_or_port = "80"; \
|
|||
+ bind_addr_or_port = "8080"; \
|
|||
index_page = index_html; \ |
|||
file_size = -1; \ |
|||
} while (0) |
|||
@@ -887,7 +887,7 @@
|
|||
if (!errno && n && n <= 0xffff) |
|||
n = create_and_bind_stream_or_die(NULL, n); |
|||
else |
|||
- n = create_and_bind_stream_or_die(bind_addr_or_port, 80);
|
|||
+ n = create_and_bind_stream_or_die(bind_addr_or_port, 8080);
|
|||
xlisten(n, 9); |
|||
return n; |
|||
} |
|||
@@ -2245,7 +2245,7 @@
|
|||
proxy_fd = socket(AF_INET, SOCK_STREAM, 0); |
|||
if (proxy_fd < 0) |
|||
send_headers_and_exit(HTTP_INTERNAL_SERVER_ERROR); |
|||
- lsa = host2sockaddr(proxy_entry->host_port, 80);
|
|||
+ lsa = host2sockaddr(proxy_entry->host_port, 8080);
|
|||
if (lsa == NULL) |
|||
send_headers_and_exit(HTTP_INTERNAL_SERVER_ERROR); |
|||
if (connect(proxy_fd, &lsa->u.sa, lsa->len) < 0) |
@ -0,0 +1,35 @@ |
|||
diff -u -r ../busybox-1.22.1/networking/libiproute/iplink.c ./networking/libiproute/iplink.c
|
|||
--- ../busybox-1.22.1/networking/libiproute/iplink.c 2014-01-09 19:15:44.000000000 +0100
|
|||
+++ ./networking/libiproute/iplink.c 2014-01-20 08:47:37.000000000 +0100
|
|||
@@ -11,6 +11,31 @@
|
|||
#include <netinet/if_ether.h> |
|||
|
|||
#include <linux/if_vlan.h> |
|||
+#ifdef __ANDROID__
|
|||
+enum {
|
|||
+ IFLA_INFO_UNSPEC,
|
|||
+ IFLA_INFO_KIND,
|
|||
+ IFLA_INFO_DATA,
|
|||
+ IFLA_INFO_XSTATS,
|
|||
+ __IFLA_INFO_MAX,
|
|||
+};
|
|||
+
|
|||
+#define IFLA_INFO_MAX (__IFLA_INFO_MAX - 1)
|
|||
+enum {
|
|||
+ IFLA_VLAN_UNSPEC,
|
|||
+ IFLA_VLAN_ID,
|
|||
+ IFLA_VLAN_FLAGS,
|
|||
+ IFLA_VLAN_EGRESS_QOS,
|
|||
+ IFLA_VLAN_INGRESS_QOS,
|
|||
+ IFLA_VLAN_PROTOCOL,
|
|||
+ __IFLA_VLAN_MAX,
|
|||
+};
|
|||
+#define IFLA_VLAN_MAX (__IFLA_VLAN_MAX - 1)
|
|||
+struct ifla_vlan_flags {
|
|||
+ __u32 flags;
|
|||
+ __u32 mask;
|
|||
+};
|
|||
+#endif
|
|||
#include "ip_common.h" /* #include "libbb.h" is inside */ |
|||
#include "rt_names.h" |
|||
#include "utils.h" |
Some files were not shown because too many files changed in this diff
Loading…
Reference in new issue