Initial push
This commit is contained in:
parent
798619b91c
commit
59f0d218a6
|
@ -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
Load Diff
|
@ -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 have changed in this diff Show More
Loading…
Reference in New Issue