Merge Android 7 changes to master

The master branch is now for Android 7.0 and later. The android-5 branch is maintained for Android 5.x and 6.
This commit is contained in:
Fredrik Fornwall 2019-03-10 19:26:14 +01:00 committed by GitHub
commit 558e604174
59 changed files with 702 additions and 485 deletions

View File

@ -50,3 +50,23 @@ build-x86_64:
<<: *build_job
variables:
TERMUX_ARCH: x86_64
## Submit build packages to repository.
#upload-packages:
# stage: deploy
# only:
# - android-7@xeffyr/termux-packages
# - master@xeffyr/termux-packages
# script:
# - MODIFIED_PACKAGES=$(./scripts/get-modified-packages.sh)
# - |
# if [ -n "$MODIFIED_PACKAGES" ]; then
# ./scripts/package_uploader.sh --path ./termux-packages/debs $MODIFIED_PACKAGES
# else
# exit 0
# fi
# retry:
# max: 2
# when:
# - runner_system_failure
# - unknown_failure

View File

@ -2,10 +2,11 @@ TERMUX_PKG_HOMEPAGE=http://www.brain-dump.org/projects/abduco/
TERMUX_PKG_DESCRIPTION="Clean and simple terminal session manager"
TERMUX_PKG_LICENSE="ISC"
TERMUX_PKG_VERSION=0.6
TERMUX_PKG_REVISION=1
TERMUX_PKG_SRCURL=http://www.brain-dump.org/projects/abduco/abduco-${TERMUX_PKG_VERSION}.tar.gz
TERMUX_PKG_SHA256=c90909e13fa95770b5afc3b59f311b3d3d2fdfae23f9569fa4f96a3e192a35f4
TERMUX_PKG_BUILD_IN_SRC=yes
TERMUX_PKG_DEPENDS="libutil,dvtm"
TERMUX_PKG_DEPENDS="dvtm"
termux_step_pre_configure() {
CFLAGS+=" $CPPFLAGS"

View File

@ -1,18 +0,0 @@
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 const* result = strchr(s, c);
+ return const_cast<char*>((result == NULL) ? (s + strlen(s)) : result);
+}
+#endif
+
// CommandLine::CommandLine - Constructor /*{{{*/
// ---------------------------------------------------------------------
/* */

View File

@ -1,18 +0,0 @@
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 const* result = strchr(s, c);
+ return const_cast<char*>((result == NULL) ? (s + strlen(s)) : result);
+}
+#endif
+
using std::max;
using std::string;

View File

@ -1,10 +1,6 @@
# Disabled due to source download failing.
# using a snapshot tarball because blogc-0.13.0 is not ready for release yet
# (documentation updates pending), but it is already useful and stable enough
TERMUX_PKG_HOMEPAGE=https://blogc.rgm.io/
TERMUX_PKG_DESCRIPTION="A blog compiler"
TERMUX_PKG_LICENSE="BSD 3-Clause"
TERMUX_PKG_VERSION=0.12.0.123.acf1
TERMUX_PKG_REVISION=1
TERMUX_PKG_MAINTAINER="Rafael Martins @rafaelmartins"

View File

@ -0,0 +1,14 @@
diff -uNr busybox-1.29.3/include/platform.h busybox-1.29.3.mod/include/platform.h
--- busybox-1.29.3/include/platform.h 2018-07-02 14:23:06.000000000 +0300
+++ busybox-1.29.3.mod/include/platform.h 2019-02-08 16:01:14.437858554 +0200
@@ -579,10 +579,6 @@
extern char *strcasestr(const char *s, const char *pattern) FAST_FUNC;
#endif
-#ifndef HAVE_STRCHRNUL
-extern char *strchrnul(const char *s, int c) FAST_FUNC;
-#endif
-
#ifndef HAVE_STRSEP
extern char *strsep(char **stringp, const char *delim) FAST_FUNC;
#endif

View File

@ -0,0 +1,19 @@
diff -uNr busybox-1.29.3/libbb/platform.c busybox-1.29.3.mod/libbb/platform.c
--- busybox-1.29.3/libbb/platform.c 2018-07-02 14:23:06.000000000 +0300
+++ busybox-1.29.3.mod/libbb/platform.c 2019-02-08 16:10:54.101961593 +0200
@@ -8,15 +8,6 @@
*/
#include "libbb.h"
-#ifndef HAVE_STRCHRNUL
-char* FAST_FUNC strchrnul(const char *s, int c)
-{
- while (*s != '\0' && *s != c)
- s++;
- return (char*)s;
-}
-#endif
-
#ifndef HAVE_USLEEP
int FAST_FUNC usleep(unsigned usec)
{

View File

@ -1,9 +1,9 @@
TERMUX_PKG_HOMEPAGE=https://cgdb.github.io/
TERMUX_PKG_DESCRIPTION="A lightweight curses (terminal-based) interface to the GNU Debugger (GDB)"
TERMUX_PKG_LICENSE="GPL-2.0"
TERMUX_PKG_DEPENDS="ncurses,readline,gdb,libutil"
TERMUX_PKG_DEPENDS="ncurses, readline, gdb"
TERMUX_PKG_VERSION=0.7.0
TERMUX_PKG_REVISION=5
TERMUX_PKG_REVISION=6
TERMUX_PKG_SRCURL=https://cgdb.me/files/cgdb-${TERMUX_PKG_VERSION}.tar.gz
TERMUX_PKG_SHA256=bf7a9264668db3f9342591b08b2cc3bbb08e235ba2372877b4650b70c6fb5423
TERMUX_PKG_BUILD_IN_SRC="yes"

View File

@ -2,10 +2,10 @@ TERMUX_PKG_HOMEPAGE=https://matt.ucc.asn.au/dropbear/dropbear.html
TERMUX_PKG_DESCRIPTION="Small SSH server and client"
TERMUX_PKG_LICENSE="BSD"
TERMUX_PKG_VERSION=2018.76
TERMUX_PKG_REVISION=5
TERMUX_PKG_REVISION=6
TERMUX_PKG_SRCURL=https://matt.ucc.asn.au/dropbear/releases/dropbear-${TERMUX_PKG_VERSION}.tar.bz2
TERMUX_PKG_SHA256=f2fb9167eca8cf93456a5fc1d4faf709902a3ab70dd44e352f3acbc3ffdaea65
TERMUX_PKG_DEPENDS="libutil,termux-auth"
TERMUX_PKG_DEPENDS="termux-auth"
TERMUX_PKG_CONFLICTS="openssh"
TERMUX_PKG_BUILD_IN_SRC="yes"

View File

@ -2,11 +2,11 @@ TERMUX_PKG_HOMEPAGE=https://github.com/martanne/dvtm
TERMUX_PKG_DESCRIPTION="Terminal tiling window manager"
TERMUX_PKG_LICENSE="MIT"
TERMUX_PKG_VERSION=0.15
TERMUX_PKG_REVISION=1
TERMUX_PKG_REVISION=2
TERMUX_PKG_SRCURL=https://github.com/martanne/dvtm/archive/v${TERMUX_PKG_VERSION}.tar.gz
TERMUX_PKG_SHA256=496eada13d8abaa8d772279746f78b0c6fed11b560599490f3e70ebc21197bf0
TERMUX_PKG_BUILD_IN_SRC=yes
TERMUX_PKG_DEPENDS="libutil, ncurses"
TERMUX_PKG_DEPENDS="ncurses"
termux_step_pre_configure() {
CFLAGS+=" $CPPFLAGS"

View File

@ -1,75 +0,0 @@
TERMUX_PKG_HOMEPAGE=http://www.eclipse.org/jdt/core/
TERMUX_PKG_DESCRIPTION="Eclipse Compiler for Java, for android 5 and 6"
TERMUX_PKG_LICENSE="EPL-2.0"
TERMUX_PKG_VERSION=4.6.2
local _date=201611241400
TERMUX_PKG_REVISION=1
TERMUX_PKG_SHA256=9953dc2be829732e1b939106a71de018f660891220dbca559a5c7bff84883e51
TERMUX_PKG_SRCURL=http://archive.eclipse.org/eclipse/downloads/drops${TERMUX_PKG_VERSION:0:1}/R-$TERMUX_PKG_VERSION-$_date/ecj-$TERMUX_PKG_VERSION.jar
TERMUX_PKG_PLATFORM_INDEPENDENT=true
TERMUX_PKG_CONFLICTS="ecj"
termux_step_extract_package() {
mkdir $TERMUX_PKG_SRCDIR
}
termux_step_make() {
local RAW_JAR=$TERMUX_PKG_CACHEDIR/ecj-${TERMUX_PKG_VERSION}.jar
termux_download $TERMUX_PKG_SRCURL \
$RAW_JAR \
$TERMUX_PKG_SHA256
mkdir -p $TERMUX_PREFIX/share/{dex,java}
$TERMUX_D8 \
--classpath $ANDROID_HOME/platforms/android-$TERMUX_PKG_API_LEVEL/android.jar \
--release \
--min-api 21 \
--output $TERMUX_PKG_TMPDIR \
$RAW_JAR
# Package classes.dex into jar:
cd $TERMUX_PKG_TMPDIR
jar cf ecj.jar classes.dex
# Add needed properties file to jar file:
jar xf $RAW_JAR org/eclipse/jdt/internal/compiler/batch/messages.properties
jar uf ecj.jar org/eclipse/jdt/internal/compiler/batch/messages.properties
jar xf $RAW_JAR org/eclipse/jdt/internal/compiler/problem/messages.properties
jar uf ecj.jar org/eclipse/jdt/internal/compiler/problem/messages.properties
jar xf $RAW_JAR org/eclipse/jdt/internal/compiler/messages.properties
jar uf ecj.jar org/eclipse/jdt/internal/compiler/messages.properties
jar xf $RAW_JAR org/eclipse/jdt/internal/compiler/parser/readableNames.props
jar uf ecj.jar org/eclipse/jdt/internal/compiler/parser/readableNames.props
for i in $(seq 1 24); do
jar xf $RAW_JAR org/eclipse/jdt/internal/compiler/parser/parser$i.rsc
jar uf ecj.jar org/eclipse/jdt/internal/compiler/parser/parser$i.rsc
done
# Move into place:
mv ecj.jar $TERMUX_PREFIX/share/dex/ecj.jar
rm -rf android-jar
mkdir android-jar
cd android-jar
# We need the android classes for JDT to compile against.
cp $ANDROID_HOME/platforms/android-28/android.jar .
unzip -q android.jar
rm -Rf android.jar resources.arsc res assets
jar cfM android.jar .
cp $TERMUX_PKG_TMPDIR/android-jar/android.jar $TERMUX_PREFIX/share/java/android.jar
# Bundle in an android.jar from an older API also, for those who want to
# build apps that run on older Android versions.
rm -Rf ./*
cp $ANDROID_HOME/platforms/android-21/android.jar android.jar
unzip -q android.jar
rm -Rf android.jar resources.arsc res assets
jar cfM android-21.jar .
cp $TERMUX_PKG_TMPDIR/android-jar/android-21.jar $TERMUX_PREFIX/share/java/
rm -Rf $TERMUX_PREFIX/bin/javac
install $TERMUX_PKG_BUILDER_DIR/ecj $TERMUX_PREFIX/bin/ecj
perl -p -i -e "s%\@TERMUX_PREFIX\@%${TERMUX_PREFIX}%g" $TERMUX_PREFIX/bin/ecj
install $TERMUX_PKG_BUILDER_DIR/ecj-21 $TERMUX_PREFIX/bin/ecj-21
perl -p -i -e "s%\@TERMUX_PREFIX\@%${TERMUX_PREFIX}%g" $TERMUX_PREFIX/bin/ecj-21
}

11
packages/ecj4.6/ecj vendored
View File

@ -1,11 +0,0 @@
#!/bin/sh
# -proc:none to disable annotation processing.
# -7 for java 1.7 compatibility.
dalvikvm -Xmx256m \
-cp @TERMUX_PREFIX@/share/dex/ecj.jar \
org.eclipse.jdt.internal.compiler.batch.Main \
-proc:none \
-7 \
-cp @TERMUX_PREFIX@/share/java/android.jar \
"$@"

View File

@ -1,11 +0,0 @@
#!/bin/sh
# -proc:none to disable annotation processing.
# -7 for java 1.7 compatibility.
dalvikvm -Xmx256m \
-cp @TERMUX_PREFIX@/share/dex/ecj.jar \
org.eclipse.jdt.internal.compiler.batch.Main \
-proc:none \
-7 \
-cp @TERMUX_PREFIX@/share/java/android-21.jar \
"$@"

View File

@ -2,9 +2,10 @@ TERMUX_PKG_HOMEPAGE=https://www.erlang.org/
TERMUX_PKG_DESCRIPTION="General-purpose concurrent functional programming language"
TERMUX_PKG_LICENSE="Apache-2.0"
TERMUX_PKG_VERSION=21.2.5
TERMUX_PKG_REVISION=1
TERMUX_PKG_SHA256=3ff578ab020a714be25d6787b81938df016db375692d4126a28f1303e6e9c165
TERMUX_PKG_SRCURL=https://github.com/erlang/otp/archive/OTP-$TERMUX_PKG_VERSION.tar.gz
TERMUX_PKG_DEPENDS="openssl, ncurses, libutil"
TERMUX_PKG_DEPENDS="openssl, ncurses"
TERMUX_PKG_HOSTBUILD="yes"
TERMUX_PKG_BUILD_IN_SRC="yes"
TERMUX_PKG_EXTRA_CONFIGURE_ARGS="--without-javac --with-ssl=${TERMUX_PREFIX} --with-termcap"

View File

@ -2,9 +2,10 @@ TERMUX_PKG_HOMEPAGE=https://core.tcl.tk/expect/index
TERMUX_PKG_DESCRIPTION="Tool for automating interactive terminal applications"
TERMUX_PKG_LICENSE="Public Domain"
TERMUX_PKG_VERSION=5.45.4
TERMUX_PKG_REVISION=1
TERMUX_PKG_SHA256=49a7da83b0bdd9f46d04a04deec19c7767bb9a323e40c4781f89caf760b92c34
TERMUX_PKG_SRCURL=http://downloads.sourceforge.net/project/expect/Expect/${TERMUX_PKG_VERSION}/expect${TERMUX_PKG_VERSION}.tar.gz
TERMUX_PKG_DEPENDS="libutil, tcl"
TERMUX_PKG_DEPENDS="tcl"
termux_step_pre_configure() {
autoconf

View File

@ -1,9 +1,9 @@
TERMUX_PKG_HOMEPAGE=https://www.fossil-scm.org
TERMUX_PKG_DESCRIPTION="DSCM with built-in wiki, http interface and server, tickets database"
TERMUX_PKG_LICENSE="BSD 2-Clause"
TERMUX_PKG_API_LEVEL=23
TERMUX_PKG_MAINTAINER="Vishal Biswas @vishalbiswas"
TERMUX_PKG_VERSION=2.8
TERMUX_PKG_REVISION=1
TERMUX_PKG_SHA256=6a32bec73de26ff5cc8bbb0b7b45360f4e4145931fd215ed91414ed190b3715d
TERMUX_PKG_SRCURL=https://www.fossil-scm.org/index.html/uv/fossil-src-${TERMUX_PKG_VERSION}.tar.gz
TERMUX_PKG_DEPENDS="libsqlite, openssl"

View File

@ -2,6 +2,7 @@ TERMUX_PKG_HOMEPAGE=https://gstreamer.freedesktop.org/
TERMUX_PKG_DESCRIPTION="GStreamer base plug-ins"
TERMUX_PKG_LICENSE="LGPL-2.0"
TERMUX_PKG_VERSION=1.14.4
TERMUX_PKG_REVISION=1
TERMUX_PKG_SHA256=ca6139490e48863e7706d870ff4e8ac9f417b56f3b9e4b3ce490c13b09a77461
TERMUX_PKG_SRCURL=https://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-${TERMUX_PKG_VERSION}.tar.xz
TERMUX_PKG_DEPENDS="gstreamer, libjpeg-turbo, libopus, libpng, libvorbis"
@ -10,34 +11,3 @@ TERMUX_PKG_EXTRA_CONFIGURE_ARGS="
--disable-examples
--disable-pango
"
termux_step_post_make_install() {
for BINARY in gst-play-1.0 gst-discoverer-1.0 gst-device-monitor-1.0
do
echo $BINARY
local LIBEXEC_BINARY=$TERMUX_PREFIX/libexec/$BINARY
local BIN_BINARY=$TERMUX_PREFIX/bin/$BINARY
local LIB_PATH=/system/lib
local VENDOR_LIB_PATH=/system/vendor/lib
if [ ! "$TERMUX_ARCH_BITS" == "32" ]
then
LIB_PATH+=64
VENDOR_LIB_PATH+=64
fi
mv $BIN_BINARY $LIBEXEC_BINARY
local FFMPEG_LIBS="" lib
for lib in avcodec avfilter avformat avutil postproc swresample swscale; do
if [ -n "$FFMPEG_LIBS" ]; then FFMPEG_LIBS+=":"; fi
FFMPEG_LIBS+="$TERMUX_PREFIX/lib/lib${lib}.so"
done
cat << EOF > $BIN_BINARY
#!/bin/sh
export LD_PRELOAD=$FFMPEG_LIBS
# Avoid linker errors due to libOpenSLES.so:
LD_LIBRARY_PATH=$LIB_PATH:$VENDOR_LIB_PATH:$TERMUX_PREFIX/lib exec $LIBEXEC_BINARY "\$@"
EOF
chmod +x $BIN_BINARY
done
}

View File

@ -2,6 +2,7 @@ TERMUX_PKG_HOMEPAGE=https://gstreamer.freedesktop.org/
TERMUX_PKG_DESCRIPTION="Open source multimedia framework"
TERMUX_PKG_LICENSE="LGPL-2.0"
TERMUX_PKG_VERSION=1.14.4
TERMUX_PKG_REVISION=1
TERMUX_PKG_SHA256=f94f6696c5f05a3b3a9183e39c5f5c0b779f75a04c0efa497e7920afa985ffc7
TERMUX_PKG_SRCURL=https://gstreamer.freedesktop.org/src/gstreamer/gstreamer-${TERMUX_PKG_VERSION}.tar.xz
TERMUX_PKG_DEPENDS="glib"
@ -16,27 +17,3 @@ TERMUX_PKG_EXTRA_CONFIGURE_ARGS="
GLIB_GENMARSHAL=/usr/bin/glib-genmarshal
GLIB_MKENUMS=/usr/bin/glib-mkenums
"
termux_step_post_make_install() {
for BINARY in gst-inspect-1.0 gst-stats-1.0 gst-typefind-1.0 gst-launch-1.0
do
echo $BINARY
local LIBEXEC_BINARY=$TERMUX_PREFIX/libexec/$BINARY
local BIN_BINARY=$TERMUX_PREFIX/bin/$BINARY
local LIB_PATH=/system/lib
if [ ! "$TERMUX_ARCH_BITS" == "32" ]
then
LIB_PATH+=64
fi
mv $BIN_BINARY $LIBEXEC_BINARY
cat << EOF > $BIN_BINARY
#!/bin/sh
# Avoid linker errors due to libOpenSLES.so:
LD_LIBRARY_PATH=/system/lib64/:$TERMUX_PREFIX/lib exec $LIBEXEC_BINARY "\$@"
EOF
chmod +x $BIN_BINARY
done
}

View File

@ -2,13 +2,9 @@ TERMUX_PKG_HOMEPAGE=http://md5deep.sourceforge.net/
TERMUX_PKG_DESCRIPTION="Programs to compute hashsums of arbitrary number of files recursively"
TERMUX_PKG_LICENSE="GPL-2.0"
TERMUX_PKG_VERSION=4.4
TERMUX_PKG_REVISION=3
TERMUX_PKG_REVISION=4
TERMUX_PKG_SRCURL=https://github.com/jessek/hashdeep/archive/v$TERMUX_PKG_VERSION.tar.gz
TERMUX_PKG_SHA256=ad78d42142f9a74fe8ec0c61bc78d6588a528cbb9aede9440f50b6ff477f3a7f
if [ "$TERMUX_ARCH_BITS" = 32 ]; then
# hashdeep requires 64-bit off_t.
TERMUX_PKG_API_LEVEL=24
fi
termux_step_pre_configure() {
sh bootstrap.sh

View File

@ -15,7 +15,6 @@ TERMUX_PKG_EXTRA_CONFIGURE_ARGS="
--with-lzma
--disable-openmp
ac_cv_func_ftime=no
ac_cv_header_complex_h=no
"
TERMUX_PKG_RM_AFTER_INSTALL="
bin/Magick-config

View File

@ -2,10 +2,10 @@ TERMUX_PKG_HOMEPAGE=https://www.gnu.org/software/inetutils/
TERMUX_PKG_DESCRIPTION="Collection of common network programs"
TERMUX_PKG_LICENSE="GPL-3.0"
TERMUX_PKG_VERSION=1.9.4
TERMUX_PKG_REVISION=6
TERMUX_PKG_REVISION=7
TERMUX_PKG_SRCURL=https://mirrors.kernel.org/gnu/inetutils/inetutils-${TERMUX_PKG_VERSION}.tar.xz
TERMUX_PKG_SHA256=849d96f136effdef69548a940e3e0ec0624fc0c81265296987986a0dd36ded37
TERMUX_PKG_DEPENDS="readline, libutil"
TERMUX_PKG_DEPENDS="readline"
# These are old cruft / not suited for android
# (we --disable-traceroute as it requires root
# in favour of tracepath, which sets up traceroute

View File

@ -1,9 +1,10 @@
TERMUX_PKG_HOMEPAGE=http://joe-editor.sourceforge.net
TERMUX_PKG_DESCRIPTION="Wordstar like text editor"
TERMUX_PKG_LICENSE="GPL-2.0"
TERMUX_PKG_DEPENDS="ncurses, libutil"
TERMUX_PKG_DEPENDS="ncurses"
TERMUX_PKG_CONFLICTS="jupp"
TERMUX_PKG_VERSION=4.6
TERMUX_PKG_REVISION=1
TERMUX_PKG_SHA256=495a0a61f26404070fe8a719d80406dc7f337623788e445b92a9f6de512ab9de
TERMUX_PKG_SRCURL=https://sourceforge.net/projects/joe-editor/files/JOE%20sources/joe-${TERMUX_PKG_VERSION}/joe-${TERMUX_PKG_VERSION}.tar.gz
TERMUX_PKG_EXTRA_CONFIGURE_ARGS="--disable-termcap"

View File

@ -2,9 +2,10 @@ TERMUX_PKG_HOMEPAGE=https://www.mirbsd.org/jupp.htm
TERMUX_PKG_DESCRIPTION="User friendly full screen text editor"
TERMUX_PKG_LICENSE="GPL-2.0"
TERMUX_PKG_MAINTAINER="Dominik George @Natureshadow"
TERMUX_PKG_DEPENDS="ncurses, libutil"
TERMUX_PKG_DEPENDS="ncurses"
TERMUX_PKG_CONFLICTS="joe"
TERMUX_PKG_VERSION=3.1jupp38
TERMUX_PKG_REVISION=1
TERMUX_PKG_SHA256=c5cbe3f97683f6e513f611a60531feefb9b877f8cea4c6e9087b48631f69ed40
TERMUX_PKG_SRCURL=http://www.mirbsd.org/MirOS/dist/jupp/joe-${TERMUX_PKG_VERSION}.tgz
TERMUX_PKG_EXTRA_CONFIGURE_ARGS="

View File

@ -2,10 +2,10 @@ TERMUX_PKG_HOMEPAGE=https://web.mit.edu/kerberos
TERMUX_PKG_DESCRIPTION="The Kerberos network authentication system"
TERMUX_PKG_LICENSE="MIT"
TERMUX_PKG_VERSION=1.16.2
TERMUX_PKG_REVISION=1
TERMUX_PKG_REVISION=2
TERMUX_PKG_SHA256=9f721e1fe593c219174740c71de514c7228a97d23eb7be7597b2ae14e487f027
TERMUX_PKG_SRCURL=https://fossies.org/linux/misc/krb5-$TERMUX_PKG_VERSION.tar.gz
TERMUX_PKG_DEPENDS="libandroid-support, libandroid-glob, readline, openssl, libutil, libdb"
TERMUX_PKG_DEPENDS="libandroid-support, libandroid-glob, readline, openssl, libdb"
TERMUX_PKG_MAINTAINER="Vishal Biswas @vishalbiswas"
TERMUX_PKG_CONFFILES="etc/krb5.conf var/krb5kdc/kdc.conf"
TERMUX_PKG_EXTRA_CONFIGURE_ARGS="--with-readline

View File

@ -2,7 +2,7 @@ TERMUX_PKG_HOMEPAGE=https://lftp.tech/
TERMUX_PKG_DESCRIPTION="FTP/HTTP client and file transfer program"
TERMUX_PKG_LICENSE="GPL-3.0"
TERMUX_PKG_VERSION=4.8.4
TERMUX_PKG_REVISION=3
TERMUX_PKG_REVISION=4
TERMUX_PKG_SHA256=4ebc271e9e5cea84a683375a0f7e91086e5dac90c5d51bb3f169f75386107a62
TERMUX_PKG_SRCURL=https://lftp.tech/ftp/lftp-${TERMUX_PKG_VERSION}.tar.xz
# (1) Android has dn_expand, but lftp assumes that dn_skipname then exists, which it does not on android.
@ -13,7 +13,7 @@ ac_cv_func_dn_expand=no
--with-expat=$TERMUX_PREFIX
--with-readline=$TERMUX_PREFIX
"
TERMUX_PKG_DEPENDS="libexpat, openssl, readline, libutil, libidn2"
TERMUX_PKG_DEPENDS="libexpat, openssl, readline, libidn2"
TERMUX_PKG_BUILD_DEPENDS="ncurses-dev"
termux_step_pre_configure() {

View File

@ -1,26 +0,0 @@
diff -u -r ../elfutils-0.168/config.h.in ./config.h.in
--- ../elfutils-0.168/config.h.in 2016-12-28 10:33:20.000000000 +0100
+++ ./config.h.in 2017-07-09 23:32:21.305290105 +0200
@@ -1,4 +1,7 @@
/* config.h.in. Generated from configure.ac by autoheader. */
+#include <libgen.h> /* for basename(3) */
+#include <stdio_ext.h> /* for fputc_unlocked(3) */
+#define DL_CALL_FCT(f, args) ((*(f)) args)
/* Building with -fsanitize=undefined or not */
#undef CHECK_UNDEFINED
@@ -117,4 +120,14 @@
/* Define for large files, on AIX-style hosts. */
#undef _LARGE_FILES
+#ifdef __ANDROID__
+# ifndef ANDROID_MEMPCPY
+# define ANDROID_MEMPCPY 1
+static __inline__ void* mempcpy(void* dest, void const* src, size_t n)
+{
+ return memcpy(dest, src, n) + n;
+}
+# endif
+#endif
+
#include <eu-config.h>

View File

@ -1,11 +0,0 @@
TERMUX_PKG_HOMEPAGE=https://refspecs.linuxbase.org/LSB_2.1.0/LSB-generic/LSB-generic/libutil.html
TERMUX_PKG_DESCRIPTION="Library with terminal functions"
TERMUX_PKG_LICENSE="NCSA" # same as ndk-sysroot
TERMUX_PKG_VERSION=0.4
TERMUX_PKG_BUILD_IN_SRC=yes
termux_step_make_install() {
CPPFLAGS+=" -std=c11 -Wall -Werror"
$CC $CPPFLAGS $CFLAGS -c -fPIC $TERMUX_PKG_BUILDER_DIR/pty.c -o pty.o
$CC -shared -fPIC $LDFLAGS -o $TERMUX_PREFIX/lib/libutil.so pty.o
}

View File

@ -1,68 +0,0 @@
#include <fcntl.h>
#include <sys/ioctl.h>
#include <sys/param.h>
#include <sys/types.h>
#include <stdlib.h>
#include <termios.h>
#include <unistd.h>
int openpty(int* amaster, int* aslave, char* name, const struct termios* termp, const struct winsize* winp)
{
char buf[512];
int master = open("/dev/ptmx", O_RDWR);
if (master == -1) return -1;
if (grantpt(master) || unlockpt(master) || ptsname_r(master, buf, sizeof buf)) goto fail;
int slave = open(buf, O_RDWR | O_NOCTTY);
if (slave == -1) goto fail;
/* XXX Should we ignore errors here? */
if (termp) tcsetattr(slave, TCSAFLUSH, termp);
if (winp) ioctl(slave, TIOCSWINSZ, winp);
*amaster = master;
*aslave = slave;
if (name != NULL) strcpy(name, buf);
return 0;
fail:
close(master);
return -1;
}
int login_tty(int fd)
{
setsid();
if (ioctl(fd, TIOCSCTTY, NULL) == -1) return -1;
dup2(fd, 0);
dup2(fd, 1);
dup2(fd, 2);
if (fd > 2) close(fd);
return 0;
}
int forkpty(int* amaster, char* name, const struct termios* termp, const struct winsize* winp)
{
int master, slave;
if (openpty(&master, &slave, name, termp, winp) == -1) {
return -1;
}
int pid;
switch (pid = fork()) {
case -1:
return -1;
case 0:
close(master);
if (login_tty(slave)) _exit(1);
return 0;
default:
*amaster = master;
close (slave);
return pid;
}
}

View File

@ -1,14 +1,14 @@
TERMUX_PKG_HOMEPAGE=https://luarocks.org/
TERMUX_PKG_DESCRIPTION="Deployment and management system for Lua modules"
TERMUX_PKG_LICENSE="BSD"
TERMUX_PKG_VERSION=2.4.4
TERMUX_PKG_REVISION=1
TERMUX_PKG_SHA256=3938df33de33752ff2c526e604410af3dceb4b7ff06a770bc4a240de80a1f934
TERMUX_PKG_VERSION=3.0.4
TERMUX_PKG_SRCURL=https://luarocks.org/releases/luarocks-${TERMUX_PKG_VERSION}.tar.gz
TERMUX_PKG_SHA256=1236a307ca5c556c4fed9fdbd35a7e0e80ccf063024becc8c3bf212f37ff0edf
TERMUX_PKG_DEPENDS="curl, lua"
TERMUX_PKG_BUILD_DEPENDS="liblua-dev"
TERMUX_PKG_BUILD_IN_SRC=yes
TERMUX_PKG_PLATFORM_INDEPENDENT=yes
TERMUX_PKG_EXTRA_MAKE_ARGS="LUA=/usr/bin/lua"
termux_step_configure() {
./configure --prefix=$TERMUX_PREFIX \

View File

@ -1,30 +1,40 @@
diff -u -r ../luarocks-2.4.3/configure ./configure
--- ../luarocks-2.4.3/configure 2017-09-13 01:46:14.000000000 +0200
+++ ./configure 2017-10-14 23:43:39.753730578 +0200
@@ -305,26 +305,6 @@
--- ./configure.orig 2019-03-10 15:10:39.226464224 +0100
+++ ./configure 2019-03-10 15:13:22.879796367 +0100
@@ -377,37 +377,6 @@
}
fi
done
-if [ "$lua_interp_found" != "yes" ]
-then
- [ "$LUA_VERSION_SET" ] && { interp="Lua $LUA_VERSION" ;} || { interp="Lua" ;}
- [ "$LUA_DIR_SET" -o "$LUA_BINDIR_SET" ] && { where="$LUA_BINDIR" ;} || { where="\$PATH" ;}
- echo "$interp interpreter not found in $where"
- die "You may want to use the flags --with-lua, --with-lua-bin and/or --lua-suffix. See --help."
- if [ "$LUA_VERSION_SET" ]
- then
- interp="Lua $LUA_VERSION"
- else
- interp="Lua"
- fi
- if [ "$LUA_DIR_SET" ] || [ "$LUA_BINDIR_SET" ]
- then
- where="$LUA_BINDIR"
- else
- where="\$PATH"
- fi
- echo "$(RED $interp interpreter not found) in $where"
- echo "You may want to use the flags $(BOLD --with-lua), $(BOLD --with-lua-bin) and/or $(BOLD --lua-version)"
- die "Run $(BOLD ./configure --help) for details."
-fi
-
-if [ "$LUA_VERSION_SET" = "yes" ]
-then
- echo_n "Checking if $LUA_BINDIR/lua$LUA_SUFFIX is Lua version $LUA_VERSION... "
- if detect_lua_version "$LUA_BINDIR/lua$LUA_SUFFIX"
- echo_n "Checking if $LUA_BINDIR/$LUA_INTERPRETER is Lua version $LUA_VERSION... "
- if detect_lua_version "$LUA_BINDIR/$LUA_INTERPRETER"
- then
- echo "yes"
- else
- echo "no"
- die "You may want to use the flags --with-lua, --with-lua-bin and/or --lua-suffix. See --help."
- die "You may want to use the flags --with-lua, --with-lua-bin and/or --lua-version. See --help."
- fi
-fi
-
if [ "$LUA_INCDIR_SET" != "yes" ]
then
LUA_INCDIR="$LUA_DIR/include"
# ----------------------------------------
# Additional checks
# ----------------------------------------

View File

@ -1,12 +1,11 @@
diff -u -r ../luarocks-2.4.0/src/luarocks/fs/lua.lua ./src/luarocks/fs/lua.lua
--- ../luarocks-2.4.0/src/luarocks/fs/lua.lua 2016-09-08 14:39:09.000000000 -0400
+++ ./src/luarocks/fs/lua.lua 2016-09-26 09:13:06.062435573 -0400
@@ -781,7 +781,7 @@
assert(type(name) == "string")
name = dir.normalize(name)
--- ./src/luarocks/fs/lua.lua.orig 2019-03-10 15:14:28.333129223 +0100
+++ ./src/luarocks/fs/lua.lua 2019-03-10 15:32:29.349788026 +0100
@@ -961,7 +961,7 @@
assert(type(name_pattern) == "string")
name_pattern = dir.normalize(name_pattern)
- return posix.mkdtemp((os.getenv("TMPDIR") or "/tmp") .. "/luarocks_" .. name:gsub(dir.separator, "_") .. "-XXXXXX")
+ return posix.mkdtemp((os.getenv("TMPDIR") or "@TERMUX_PREFIX@/tmp") .. "/luarocks_" .. name:gsub(dir.separator, "_") .. "-XXXXXX")
- return posix.mkdtemp((os.getenv("TMPDIR") or "/tmp") .. "/luarocks_" .. name_pattern:gsub("/", "_") .. "-XXXXXX")
+ return posix.mkdtemp((os.getenv("TMPDIR") or "@TERMUX_PREFIX@/tmp") .. "/luarocks_" .. name_pattern:gsub("/", "_") .. "-XXXXXX")
end
end
end -- if posix.mkdtemp

View File

@ -1,17 +0,0 @@
--- ../cfg.lua.orig 2018-05-25 06:56:17.183526289 +0000
+++ ./src/luarocks/cfg.lua 2018-05-25 06:57:25.695490218 +0000
@@ -517,10 +517,10 @@
defaults.lib_extension = "so"
defaults.external_lib_extension = "so"
defaults.obj_extension = "o"
- defaults.external_deps_dirs = { "/usr/local", "/usr" }
- defaults.variables.LUA_BINDIR = site_config.LUA_BINDIR or "/usr/local/bin"
- defaults.variables.LUA_INCDIR = site_config.LUA_INCDIR or "/usr/local/include"
- defaults.variables.LUA_LIBDIR = site_config.LUA_LIBDIR or "/usr/local/lib"
+ defaults.external_deps_dirs = { "@TERMUX_PREFIX@/local", "@TERMUX_PREFIX@" }
+ defaults.variables.LUA_BINDIR = site_config.LUA_BINDIR or "@TERMUX_PREFIX@/local/bin"
+ defaults.variables.LUA_INCDIR = site_config.LUA_INCDIR or "@TERMUX_PREFIX@/local/include"
+ defaults.variables.LUA_LIBDIR = site_config.LUA_LIBDIR or "@TERMUX_PREFIX@/local/lib"
defaults.variables.CFLAGS = "-O2"
defaults.cmake_generator = "Unix Makefiles"
defaults.variables.CC = "gcc"

View File

@ -0,0 +1,11 @@
--- ./src/luarocks/core/cfg.lua~ 2018-10-30 18:31:40.000000000 +0100
+++ ./src/luarocks/core/cfg.lua 2019-03-10 16:33:24.676428404 +0100
@@ -358,7 +358,7 @@
defaults.static_lib_extension = "a"
defaults.external_lib_extension = "so"
defaults.obj_extension = "o"
- defaults.external_deps_dirs = { "/usr/local", "/usr", "/" }
+ defaults.external_deps_dirs = { "@TERMUX_PREFIX@/local", "@TERMUX_PREFIX@" }
defaults.variables.CFLAGS = "-O2"
defaults.cmake_generator = "Unix Makefiles"
defaults.variables.CC = "gcc"

View File

@ -1,12 +1,11 @@
diff -u -r ../luarocks-2.4.0/src/luarocks/fs/unix/tools.lua ./src/luarocks/fs/unix/tools.lua
--- ../luarocks-2.4.0/src/luarocks/fs/unix/tools.lua 2016-09-08 14:39:09.000000000 -0400
+++ ./src/luarocks/fs/unix/tools.lua 2016-09-26 09:19:08.200979160 -0400
@@ -224,7 +224,7 @@
assert(type(name) == "string")
name = dir.normalize(name)
--- ./src/luarocks/fs/unix/tools.lua.orig 2019-03-10 16:35:27.583094191 +0100
+++ ./src/luarocks/fs/unix/tools.lua 2019-03-10 16:36:17.913093843 +0100
@@ -300,7 +300,7 @@
assert(type(name_pattern) == "string")
name_pattern = dir.normalize(name_pattern)
- local template = (os.getenv("TMPDIR") or "/tmp") .. "/luarocks_" .. name:gsub(dir.separator, "_") .. "-XXXXXX"
+ local template = (os.getenv("TMPDIR") or "@TERMUX_PREFIX@/tmp") .. "/luarocks_" .. name:gsub(dir.separator, "_") .. "-XXXXXX"
- local template = (os.getenv("TMPDIR") or "/tmp") .. "/luarocks_" .. name_pattern:gsub("/", "_") .. "-XXXXXX"
+ local template = (os.getenv("TMPDIR") or "@TERMUX_PREFIX@/tmp") .. "/luarocks_" .. name_pattern:gsub("/", "_") .. "-XXXXXX"
local pipe = io.popen(vars.MKTEMP.." -d "..fs.Q(template))
local dirname = pipe:read("*l")
pipe:close()

View File

@ -2,10 +2,10 @@ TERMUX_PKG_HOMEPAGE=https://mosh.org
TERMUX_PKG_DESCRIPTION="Mobile shell that supports roaming and intelligent local echo"
TERMUX_PKG_LICENSE="GPL-3.0"
TERMUX_PKG_VERSION=1.3.2
TERMUX_PKG_REVISION=10
TERMUX_PKG_REVISION=12
TERMUX_PKG_SHA256=da600573dfa827d88ce114e0fed30210689381bbdcff543c931e4d6a2e851216
TERMUX_PKG_SRCURL=https://github.com/mobile-shell/mosh/releases/download/mosh-${TERMUX_PKG_VERSION}/mosh-${TERMUX_PKG_VERSION}.tar.gz
TERMUX_PKG_DEPENDS="libandroid-support, libprotobuf, ncurses, openssl, openssh, libutil"
TERMUX_PKG_DEPENDS="libandroid-support, libprotobuf, ncurses, openssl, openssh"
termux_step_pre_configure() {
export PROTOC=$TERMUX_TOPDIR/libprotobuf/host-build/src/protoc
@ -17,7 +17,6 @@ termux_step_post_make_install() {
mv mosh mosh.pl
$CXX $CXXFLAGS $LDFLAGS \
-isystem $TERMUX_PREFIX/include \
-lutil \
-DPACKAGE_VERSION=\"$TERMUX_PKG_VERSION\" \
-std=c++11 -Wall -Wextra -Werror \
$TERMUX_PKG_BUILDER_DIR/mosh.cc -o mosh

View File

@ -2,7 +2,7 @@ TERMUX_PKG_HOMEPAGE=https://mpv.io/
TERMUX_PKG_DESCRIPTION="Command-line media player"
TERMUX_PKG_LICENSE="GPL-3.0"
TERMUX_PKG_VERSION=0.29.1
TERMUX_PKG_REVISION=1
TERMUX_PKG_REVISION=2
TERMUX_PKG_SHA256=f9f9d461d1990f9728660b4ccb0e8cb5dce29ccaa6af567bec481b79291ca623
TERMUX_PKG_SRCURL=https://github.com/mpv-player/mpv/archive/v${TERMUX_PKG_VERSION}.tar.gz
TERMUX_PKG_DEPENDS="ffmpeg, openal-soft, libandroid-support, libandroid-glob, libpulseaudio"
@ -36,33 +36,4 @@ termux_step_make_install() {
# Use opensles audio out be default:
mkdir -p $TERMUX_PREFIX/etc/mpv
cp $TERMUX_PKG_BUILDER_DIR/mpv.conf $TERMUX_PREFIX/etc/mpv/mpv.conf
# Try to work around OpenSL ES library clashes:
# Linking against libOpenSLES causes indirect linkage against
# libskia.so, which links against the platform libjpeg.so and
# libpng.so, which are not compatible with the Termux ones.
#
# On Android N also liblzma seems to conflict.
mkdir -p $TERMUX_PREFIX/libexec
mv $TERMUX_PREFIX/bin/mpv $TERMUX_PREFIX/libexec
local SYSTEM_LIBFOLDER=lib64
if [ $TERMUX_ARCH_BITS = 32 ]; then SYSTEM_LIBFOLDER=lib; fi
echo "#!/bin/sh" > $TERMUX_PREFIX/bin/mpv
# Work around issues on devices having ffmpeg libraries
# in a system vendor dir, reported by live_the_dream on #termux:
local FFMPEG_LIBS="" lib
for lib in avcodec avfilter avformat avutil postproc swresample swscale; do
if [ -n "$FFMPEG_LIBS" ]; then FFMPEG_LIBS+=":"; fi
FFMPEG_LIBS+="$TERMUX_PREFIX/lib/lib${lib}.so"
done
echo "export LD_PRELOAD=$FFMPEG_LIBS" >> $TERMUX_PREFIX/bin/mpv
# /system/vendor/lib(64) needed for libqc-opt.so on
# a xperia z5 c, reported by BrainDamage on #termux:
echo "LD_LIBRARY_PATH=/system/$SYSTEM_LIBFOLDER:/system/vendor/$SYSTEM_LIBFOLDER:$TERMUX_PREFIX/lib exec $TERMUX_PREFIX/libexec/mpv \"\$@\"" >> $TERMUX_PREFIX/bin/mpv
chmod +x $TERMUX_PREFIX/bin/mpv
}

View File

@ -1,8 +1,8 @@
TERMUX_PKG_HOMEPAGE=https://marlam.de/msmtp/
TERMUX_PKG_DESCRIPTION="Lightweight SMTP client"
TERMUX_PKG_LICENSE="GPL-3.0"
TERMUX_PKG_API_LEVEL=23
TERMUX_PKG_VERSION=1.8.3
TERMUX_PKG_REVISION=1
TERMUX_PKG_SHA256=3cb2eefd33d048f0f82de100ef39a494e44fd1485e376ead31f733d2f36b92b4
TERMUX_PKG_SRCURL=https://marlam.de/msmtp/releases/msmtp-$TERMUX_PKG_VERSION.tar.xz
TERMUX_PKG_DEPENDS="openssl, libidn2"

View File

@ -2,10 +2,10 @@ TERMUX_PKG_HOMEPAGE=https://neovim.io/
TERMUX_PKG_DESCRIPTION="Ambitious Vim-fork focused on extensibility and agility (nvim)"
TERMUX_PKG_LICENSE="Apache-2.0"
TERMUX_PKG_VERSION=0.3.4
TERMUX_PKG_REVISION=1
TERMUX_PKG_REVISION=2
TERMUX_PKG_SHA256=a641108bdebfaf319844ed46b1bf35d6f7c30ef5aeadeb29ba06e19c3274bc0e
TERMUX_PKG_SRCURL=https://github.com/neovim/neovim/archive/v${TERMUX_PKG_VERSION}.tar.gz
TERMUX_PKG_DEPENDS="libuv, libmsgpack, libandroid-support, libvterm, libtermkey, libutil, liblua, libunibilium"
TERMUX_PKG_DEPENDS="libuv, libmsgpack, libandroid-support, libvterm, libtermkey, liblua, libunibilium"
TERMUX_PKG_HOSTBUILD=true
TERMUX_PKG_EXTRA_CONFIGURE_ARGS="
-DENABLE_JEMALLOC=OFF

View File

@ -1,9 +1,8 @@
TERMUX_PKG_HOMEPAGE=https://newsboat.org/
TERMUX_PKG_DESCRIPTION="RSS/Atom feed reader for the text console"
TERMUX_PKG_LICENSE="MIT"
TERMUX_PKG_API_LEVEL=24
TERMUX_PKG_VERSION=2.14.1
TERMUX_PKG_REVISION=2
TERMUX_PKG_REVISION=3
TERMUX_PKG_SHA256=4bd0d3b1901a3fc7e0ef73b800587c28181a57b175c36b547dbd84636330df66
TERMUX_PKG_SRCURL=https://newsboat.org/releases/${TERMUX_PKG_VERSION}/newsboat-${TERMUX_PKG_VERSION}.tar.xz
TERMUX_PKG_DEPENDS="libandroid-support, libandroid-glob, json-c, libsqlite, libcurl, libxml2, stfl, ncurses, openssl"

View File

@ -2,10 +2,10 @@ TERMUX_PKG_HOMEPAGE=https://www.openssh.com/
TERMUX_PKG_DESCRIPTION="Secure shell for logging into a remote machine"
TERMUX_PKG_LICENSE="BSD"
TERMUX_PKG_VERSION=7.9p1
TERMUX_PKG_REVISION=5
TERMUX_PKG_REVISION=6
TERMUX_PKG_SHA256=6b4b3ba2253d84ed3771c8050728d597c91cfce898713beb7b64a305b6f11aad
TERMUX_PKG_SRCURL=https://fastly.cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-${TERMUX_PKG_VERSION}.tar.gz
TERMUX_PKG_DEPENDS="libandroid-support, ldns, openssl, libedit, libutil, termux-auth, krb5"
TERMUX_PKG_DEPENDS="libandroid-support, ldns, openssl, libedit, termux-auth, krb5"
TERMUX_PKG_CONFLICTS="dropbear"
# --disable-strip to prevent host "install" command to use "-s", which won't work for target binaries:
TERMUX_PKG_EXTRA_CONFIGURE_ARGS="

View File

@ -1,23 +1,8 @@
TERMUX_PKG_HOMEPAGE=https://github.com/termux/play-audio
TERMUX_PKG_DESCRIPTION="Simple commandline audio player for Android"
TERMUX_PKG_DESCRIPTION="Simple command line audio player for Android"
TERMUX_PKG_LICENSE="Apache-2.0"
TERMUX_PKG_VERSION=0.5
TERMUX_PKG_REVISION=2
TERMUX_PKG_REVISION=3
TERMUX_PKG_SHA256=e114123c4b337cddb1d4aa6c3287574d8c81b2dc4b3abc07ce21616fa14f9e82
TERMUX_PKG_SRCURL=https://github.com/termux/play-audio/archive/v${TERMUX_PKG_VERSION}.tar.gz
TERMUX_PKG_BUILD_IN_SRC=yes
termux_step_post_make_install() {
local LIBEXEC_BINARY=$TERMUX_PREFIX/libexec/play-audio
local BIN_BINARY=$TERMUX_PREFIX/bin/play-audio
mv $BIN_BINARY $LIBEXEC_BINARY
cat << EOF > $BIN_BINARY
#!/bin/sh
# Avoid linker errors due to libOpenSLES.so:
LD_PRELOAD=$TERMUX_PREFIX/lib/libc++_shared.so LD_LIBRARY_PATH= exec $LIBEXEC_BINARY "\$@"
EOF
chmod +x $BIN_BINARY
}

View File

@ -1,12 +1,12 @@
TERMUX_PKG_HOMEPAGE=https://python.org/
TERMUX_PKG_DESCRIPTION="Python 3 programming language intended to enable clear programs"
TERMUX_PKG_LICENSE="PythonPL"
TERMUX_PKG_DEPENDS="libandroid-support, ncurses, readline, libffi, openssl, libutil, libbz2, libsqlite, gdbm, ncurses-ui-libs, libcrypt, liblzma"
TERMUX_PKG_DEPENDS="libandroid-support, ncurses, readline, libffi, openssl, libbz2, libsqlite, gdbm, ncurses-ui-libs, libcrypt, liblzma"
# Python.h includes crypt.h:
TERMUX_PKG_DEVPACKAGE_DEPENDS="libcrypt-dev"
_MAJOR_VERSION=3.7
TERMUX_PKG_VERSION=${_MAJOR_VERSION}.2
TERMUX_PKG_REVISION=2
TERMUX_PKG_REVISION=3
TERMUX_PKG_SHA256=d83fe8ce51b1bb48bbcf0550fd265b9a75cdfdfa93f916f9e700aef8444bf1bb
TERMUX_PKG_SRCURL=https://www.python.org/ftp/python/${TERMUX_PKG_VERSION}/Python-${TERMUX_PKG_VERSION}.tar.xz

View File

@ -5,13 +5,14 @@ TERMUX_PKG_LICENSE="PythonPL"
# openssl for ensurepip.
# libbz2 for the bz2 module.
# ncurses-ui-libs for the curses.panel module.
TERMUX_PKG_DEPENDS="libandroid-support, ncurses, readline, libffi, openssl, libutil, libbz2, libsqlite, gdbm, ncurses-ui-libs, libcrypt"
TERMUX_PKG_DEPENDS="libandroid-support, ncurses, readline, libffi, openssl, libbz2, libsqlite, gdbm, ncurses-ui-libs, libcrypt"
# Python.h includes crypt.h:
TERMUX_PKG_DEVPACKAGE_DEPENDS="libcrypt-dev"
TERMUX_PKG_HOSTBUILD=true
_MAJOR_VERSION=2.7
TERMUX_PKG_VERSION=${_MAJOR_VERSION}.16
TERMUX_PKG_REVISION=1
TERMUX_PKG_SHA256=f222ef602647eecb6853681156d32de4450a2c39f4de93bd5b20235f2e660ed7
TERMUX_PKG_SRCURL=https://www.python.org/ftp/python/${TERMUX_PKG_VERSION}/Python-${TERMUX_PKG_VERSION}.tar.xz

View File

@ -3,11 +3,11 @@ TERMUX_PKG_DESCRIPTION="Dynamic programming language with a focus on simplicity
TERMUX_PKG_LICENSE="BSD 2-Clause"
_MAJOR_VERSION=2.6
TERMUX_PKG_VERSION=${_MAJOR_VERSION}.1
TERMUX_PKG_REVISION=2
TERMUX_PKG_REVISION=3
TERMUX_PKG_SHA256=47b629808e9fd44ce1f760cdf3ed14875fc9b19d4f334e82e2cf25cb2898f2f2
TERMUX_PKG_SRCURL=https://cache.ruby-lang.org/pub/ruby/${_MAJOR_VERSION}/ruby-${TERMUX_PKG_VERSION}.tar.xz
# libbffi is used by the fiddle extension module:
TERMUX_PKG_DEPENDS="libandroid-support, libffi, libgmp, readline, openssl, libutil, libyaml"
TERMUX_PKG_DEPENDS="libandroid-support, libffi, libgmp, readline, openssl, libyaml"
# Needed to fix compilation on android:
TERMUX_PKG_EXTRA_CONFIGURE_ARGS="ac_cv_func_setgroups=no ac_cv_func_setresuid=no ac_cv_func_setreuid=no --enable-rubygems"
# The gdbm module seems to be very little used:

View File

@ -2,10 +2,10 @@ TERMUX_PKG_HOMEPAGE=https://www.gnu.org/software/screen/
TERMUX_PKG_DESCRIPTION="Terminal multiplexer with VT100/ANSI terminal emulation"
TERMUX_PKG_LICENSE="GPL-2.0"
TERMUX_PKG_VERSION=4.6.2
TERMUX_PKG_REVISION=1
TERMUX_PKG_REVISION=2
TERMUX_PKG_SHA256=1b6922520e6a0ce5e28768d620b0f640a6631397f95ccb043b70b91bb503fa3a
TERMUX_PKG_SRCURL=https://mirrors.kernel.org/gnu/screen/screen-${TERMUX_PKG_VERSION}.tar.gz
TERMUX_PKG_DEPENDS="ncurses, libcrypt, libutil"
TERMUX_PKG_DEPENDS="ncurses, libcrypt"
TERMUX_PKG_EXTRA_CONFIGURE_ARGS="
--disable-socket-dir
--enable-colors256

View File

@ -1,9 +1,9 @@
TERMUX_PKG_HOMEPAGE=http://www.dest-unreach.org/socat/
TERMUX_PKG_DESCRIPTION="Relay for bidirectional data transfer between two independent data channels"
TERMUX_PKG_LICENSE="GPL-2.0"
TERMUX_PKG_DEPENDS="openssl, readline, libutil"
TERMUX_PKG_DEPENDS="openssl, readline"
TERMUX_PKG_VERSION=1.7.3.2
TERMUX_PKG_REVISION=3
TERMUX_PKG_REVISION=4
TERMUX_PKG_SRCURL=http://www.dest-unreach.org/socat/download/socat-${TERMUX_PKG_VERSION}.tar.gz
TERMUX_PKG_SHA256=ce3efc17e3e544876ebce7cd6c85b3c279fda057b2857fcaaf67b9ab8bdaf034
TERMUX_PKG_EXTRA_CONFIGURE_ARGS="ac_header_resolv_h=no ac_cv_c_compiler_gnu=yes ac_compiler_gnu=yes" # sc_cv_sys_crdly_shift=9 sc_cv_sys_csize_shift=4 sc_cv_sys_tabdly_shift=11"

View File

@ -2,9 +2,10 @@ TERMUX_PKG_HOMEPAGE=https://www.stunnel.org/
TERMUX_PKG_DESCRIPTION="Socket wrapper which can provide TLS support to ordinary applications"
TERMUX_PKG_LICENSE="GPL-2.0"
TERMUX_PKG_VERSION=5.50
TERMUX_PKG_REVISION=1
TERMUX_PKG_SHA256=951d92502908b852a297bd9308568f7c36598670b84286d3e05d4a3a550c0149
TERMUX_PKG_SRCURL=https://www.stunnel.org/downloads/stunnel-${TERMUX_PKG_VERSION}.tar.gz
TERMUX_PKG_DEPENDS="openssl, libutil"
TERMUX_PKG_DEPENDS="openssl"
TERMUX_PKG_EXTRA_CONFIGURE_ARGS="--disable-shared --with-ssl=$TERMUX_PREFIX --disable-fips"
TERMUX_PKG_RM_AFTER_INSTALL="bin/stunnel3 share/man/man8/stunnel.*.8"

View File

@ -1,30 +0,0 @@
mkfifoat() is available in Android only after API 23. We can't use tar's
implementation of mkfifioat() since it will use tar's implementation of
mknodat(). This will cause infinite recursion in file gnu/at-func.c and
segfault.
Snippet of backtrace:
....
#9 0x000000555559819c in mknodat (fd=-100, file=0x7fb7c90050 "sda", mode=25008, dev=2048) at /home/builder/.termux-build/tar/src/gnu/at-func.c:75
#10 0x000000555559819c in mknodat (fd=-100, file=0x7fb7c90050 "sda", mode=25008, dev=2048) at /home/builder/.termux-build/tar/src/gnu/at-func.c:75
#11 0x000000555559819c in mknodat (fd=-100, file=0x7fb7c90050 "sda", mode=25008, dev=2048) at /home/builder/.termux-build/tar/src/gnu/at-func.c:75
#12 0x000000555559819c in mknodat (fd=-100, file=0x7fb7c90050 "sda", mode=25008, dev=2048) at /home/builder/.termux-build/tar/src/gnu/at-func.c:75
#13 0x000000555556a9d4 in extract_node (file_name=0x7fb7c90050 "sda", typeflag=52) at /home/builder/.termux-build/tar/src/src/extract.c:1447
#14 0x0000005555568f38 in extract_archive () at /home/builder/.termux-build/tar/src/src/extract.c:1709
....
diff -uNr tar-1.30/src/extract.c tar-1.30.mod/src/extract.c
--- tar-1.30/src/extract.c 2017-12-16 23:23:12.000000000 +0200
+++ tar-1.30.mod/src/extract.c 2017-12-25 14:31:31.541886176 +0200
@@ -42,6 +42,11 @@
# define fchown(fd, uid, gid) (errno = ENOSYS, -1)
#endif
+static int
+mkfifoat(int fd, const char* path, mode_t mode) {
+ return mknodat(fd, path, (mode & ~S_IFMT) | S_IFIFO, 0);
+}
+
/* Return true if an error number ERR means the system call is
supported in this case. */
static bool

View File

@ -2,10 +2,11 @@ TERMUX_PKG_HOMEPAGE=http://tintin.sourceforge.net
TERMUX_PKG_DESCRIPTION="Classic text-based MUD client"
TERMUX_PKG_LICENSE="GPL-2.0"
TERMUX_PKG_VERSION=2.01.7
TERMUX_PKG_REVISION=1
TERMUX_PKG_SHA256=fb7c8970855aa57f23bff7859ced0a63f0644f220037d2deb083d6ee2f41760c
TERMUX_PKG_SRCURL=https://downloads.sourceforge.net/project/tintin/TinTin%2B%2B%20Source%20Code/${TERMUX_PKG_VERSION:0:4}/tintin-${TERMUX_PKG_VERSION}.tar.gz
TERMUX_PKG_EXTRA_CONFIGURE_ARGS="ac_cv_file__dev_ptmx=no"
TERMUX_PKG_DEPENDS="pcre, libgnutls, libutil"
TERMUX_PKG_DEPENDS="pcre, libgnutls"
TERMUX_PKG_BUILD_IN_SRC=yes
termux_step_post_extract_package() {

View File

@ -2,10 +2,10 @@ TERMUX_PKG_HOMEPAGE=https://tmate.io
TERMUX_PKG_DESCRIPTION="Terminal multiplexer with instant terminal sharing"
TERMUX_PKG_LICENSE="BSD"
TERMUX_PKG_VERSION=2.2.1
TERMUX_PKG_REVISION=1
TERMUX_PKG_REVISION=2
TERMUX_PKG_SRCURL=https://github.com/tmate-io/tmate/archive/${TERMUX_PKG_VERSION}.tar.gz
TERMUX_PKG_SHA256=d9c2ac59f42e65aac5f500f0548ea8056fd79c9c5285e5af324d833e2a84c305
TERMUX_PKG_DEPENDS="libandroid-support, libevent, libmsgpack, libssh, libutil, ncurses"
TERMUX_PKG_DEPENDS="libandroid-support, libevent, libmsgpack, libssh, ncurses"
termux_step_pre_configure() {
CFLAGS+=" -DIOV_MAX=1024"

View File

@ -2,9 +2,9 @@ TERMUX_PKG_HOMEPAGE=https://tmux.github.io/
TERMUX_PKG_DESCRIPTION="Terminal multiplexer"
TERMUX_PKG_LICENSE="BSD"
# Link against libandroid-support for wcwidth(), see https://github.com/termux/termux-packages/issues/224
TERMUX_PKG_DEPENDS="ncurses, libevent, libutil, libandroid-support, libandroid-glob"
TERMUX_PKG_DEPENDS="ncurses, libevent, libandroid-support, libandroid-glob"
TERMUX_PKG_VERSION=2.8
TERMUX_PKG_REVISION=2
TERMUX_PKG_REVISION=3
TERMUX_PKG_SHA256=7f6bf335634fafecff878d78de389562ea7f73a7367f268b66d37ea13617a2ba
TERMUX_PKG_SRCURL=https://github.com/tmux/tmux/releases/download/${TERMUX_PKG_VERSION}/tmux-${TERMUX_PKG_VERSION}.tar.gz
TERMUX_PKG_BUILD_IN_SRC=yes

View File

@ -2,9 +2,10 @@ TERMUX_PKG_HOMEPAGE=https://tsl0922.github.io/ttyd/
TERMUX_PKG_DESCRIPTION="Command-line tool for sharing terminal over the web"
TERMUX_PKG_LICENSE="MIT"
TERMUX_PKG_VERSION=1.4.2
TERMUX_PKG_REVISION=1
TERMUX_PKG_SHA256=ff1a66b418df6cd741868a8ea84f69cd63f15e52e3fa117641ec57d3c37a1315
TERMUX_PKG_SRCURL=https://github.com/tsl0922/ttyd/archive/$TERMUX_PKG_VERSION.tar.gz
TERMUX_PKG_DEPENDS="json-c, libwebsockets, libutil"
TERMUX_PKG_DEPENDS="json-c, libwebsockets"
TERMUX_PKG_EXTRA_CONFIGURE_ARGS="-DCMAKE_XXD=$TERMUX_PKG_TMPDIR/xxd"
termux_step_pre_configure() {

View File

@ -2,10 +2,10 @@ TERMUX_PKG_HOMEPAGE=https://en.wikipedia.org/wiki/Util-linux
TERMUX_PKG_DESCRIPTION="Miscellaneous system utilities"
TERMUX_PKG_LICENSE="GPL-2.0"
TERMUX_PKG_VERSION=2.33.1
TERMUX_PKG_REVISION=1
TERMUX_PKG_REVISION=2
TERMUX_PKG_SHA256=c14bd9f3b6e1792b90db87696e87ec643f9d63efa0a424f092a5a6b2f2dbef21
TERMUX_PKG_SRCURL=https://www.kernel.org/pub/linux/utils/util-linux/v${TERMUX_PKG_VERSION:0:4}/util-linux-${TERMUX_PKG_VERSION}.tar.xz
TERMUX_PKG_DEPENDS="ncurses, libutil, libcrypt"
TERMUX_PKG_DEPENDS="ncurses, libcrypt"
TERMUX_PKG_EXTRA_CONFIGURE_ARGS="
ac_cv_func_setns=yes
ac_cv_func_unshare=yes

View File

@ -1,8 +1,8 @@
TERMUX_PKG_HOMEPAGE=https://vifm.info/
TERMUX_PKG_DESCRIPTION="File manager with vi like keybindings"
TERMUX_PKG_LICENSE="GPL-2.0"
TERMUX_PKG_API_LEVEL=24
TERMUX_PKG_VERSION=0.10
TERMUX_PKG_REVISION=1
TERMUX_PKG_SHA256=e5681c9e560e23d9deeec3b5b12e0ccad82612d9592c00407f3dd75cf5066548
TERMUX_PKG_SRCURL=https://github.com/vifm/vifm/archive/v${TERMUX_PKG_VERSION}.tar.gz
TERMUX_PKG_DEPENDS="ncurses, file"

View File

@ -5,6 +5,7 @@ termux_step_extract_into_massagedir() {
cd $TERMUX_PREFIX
tar -N "$TERMUX_BUILD_TS_FILE" \
--exclude='lib/libc++_shared.so' --exclude='lib/libstdc++.so' \
--exclude='lib/libutil.so' \
-czf "$TARBALL_ORIG" .
# Extract tar in order to massage it

View File

@ -24,9 +24,8 @@ termux_step_setup_toolchain() {
export READELF=$TERMUX_HOST_PLATFORM-readelf
export STRIP=$TERMUX_HOST_PLATFORM-strip
# Android 7 started to support DT_RUNPATH (but not DT_RPATH), so we may want
# LDFLAGS+="-Wl,-rpath=$TERMUX_PREFIX/lib -Wl,--enable-new-dtags"
# and no longer remove DT_RUNPATH in termux-elf-cleaner.
# Android 7 started to support DT_RUNPATH (but not DT_RPATH).
LDFLAGS+=" -Wl,-rpath=$TERMUX_PREFIX/lib -Wl,--enable-new-dtags"
if [ "$TERMUX_ARCH" = "arm" ]; then
# https://developer.android.com/ndk/guides/standalone_toolchain.html#abi_compatibility:
@ -156,6 +155,13 @@ termux_step_setup_toolchain() {
mv $_TERMUX_TOOLCHAIN_TMPDIR $TERMUX_STANDALONE_TOOLCHAIN
fi
# On Android 7, libutil functionality is provided by libc.
# But many programs still may search for libutil.
if [ ! -f $TERMUX_PREFIX/lib/libutil.so ]; then
mkdir -p "$TERMUX_PREFIX/lib"
echo 'INPUT(-lc)' > $TERMUX_PREFIX/lib/libutil.so
fi
local _STL_LIBFILE_NAME=libc++_shared.so
if [ ! -f $TERMUX_PREFIX/lib/libstdc++.so ]; then
# Setup libc++_shared.so in $PREFIX/lib and libstdc++.so as a link to it,

View File

@ -7,7 +7,7 @@ termux_step_setup_variables() {
: "${TERMUX_PREFIX:="/data/data/com.termux/files/usr"}"
: "${TERMUX_ANDROID_HOME:="/data/data/com.termux/files/home"}"
: "${TERMUX_DEBUG:=""}"
: "${TERMUX_PKG_API_LEVEL:="21"}"
: "${TERMUX_PKG_API_LEVEL:="24"}"
: "${TERMUX_NO_CLEAN:="false"}"
: "${TERMUX_QUIET_BUILD:="false"}"
: "${TERMUX_DEBDIR:="${TERMUX_SCRIPTDIR}/debs"}"
@ -18,7 +18,7 @@ termux_step_setup_variables() {
: "${TERMUX_PACKAGES_DIRECTORIES:="packages"}"
if [ -z ${TERMUX_REPO_URL+x} ]; then
TERMUX_REPO_URL=(https://termux.net)
TERMUX_REPO_URL=(https://dl.bintray.com/termux/termux-packages-24)
# TERMUX_REPO_URL=(https://termux.net https://grimler.se https://dl.bintray.com/xeffyr/unstable-packages)
fi
if [ -z ${TERMUX_REPO_DISTRIBUTION+x} ]; then

522
scripts/package_uploader.sh Executable file
View File

@ -0,0 +1,522 @@
#!/bin/bash
##
## Package uploader for Bintray.
##
## Leonid Plyushch <leonid.plyushch@gmail.com> (C) 2019
##
## This program is free software: you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation, either version 3 of the License, or
## (at your option) any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
## GNU General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with this program. If not, see <http://www.gnu.org/licenses/>.
##
set -e
TERMUX_PACKAGES_BASEDIR=$(realpath "$(dirname "$0")/../")
if [ ! -d "$TERMUX_PACKAGES_BASEDIR/packages" ]; then
echo "[!] Cannot find directory 'packages'." >&2
exit 1
fi
# In this variable a package metadata will be stored.
declare -gA PACKAGE_METADATA
# Initialize default configuration.
DEBFILES_DIR_PATH="$TERMUX_PACKAGES_BASEDIR/debs"
PACKAGE_DELETE_MODE=false
KEEP_OLD_VERSION=false
# Bintray-specific configuration.
BINTRAY_REPO_NAME="termux-packages-24"
BINTRAY_REPO_GITHUB="termux/termux-packages"
BINTRAY_REPO_DISTRIBUTION="stable"
BINTRAY_REPO_COMPONENT="main"
# Bintray credentials that should be set as external environment
# variables by user.
: "${BINTRAY_USERNAME:=""}"
: "${BINTRAY_API_KEY:=""}"
: "${BINTRAY_GPG_SUBJECT:=""}"
: "${BINTRAY_GPG_PASSPHRASE:=""}"
# If BINTRAY_GPG_SUBJECT is not specified, then signing will be
# done with gpg key of subject '$BINTRAY_USERNAME'.
if [ -z "$BINTRAY_GPG_SUBJECT" ]; then
BINTRAY_GPG_SUBJECT="$BINTRAY_USERNAME"
fi
# Packages are built and uploaded for Termux organisation.
BINTRAY_SUBJECT="termux"
###################################################################
json_metadata_dump() {
local pkg_licenses
SAVEIFS=$IFS; IFS=",";
for license in ${PACKAGE_METADATA['LICENSES']}; do
pkg_licenses+="\"$(echo "${license}" | sed -r 's/^\s*(\S+(\s+\S+)*)\s*$/\1/')\","
done
pkg_licenses=${pkg_licenses%%,}; IFS=$SAVEIFS;
cat << EOF
{
"name": "${PACKAGE_METADATA['NAME']}",
"desc": "${PACKAGE_METADATA['DESCRIPTION']}",
"version": "${PACKAGE_METADATA['VERSION_FULL']}",
"licenses": [${pkg_licenses}],
"vcs_url": "https://github.com/${BINTRAY_REPO_GITHUB}",
"website_url": "${PACKAGE_METADATA['WEBSITE_URL']}",
"issue_tracker_url": "https://github.com/${BINTRAY_REPO_GITHUB}/issues",
"github_repo": "${BINTRAY_REPO_GITHUB}",
"public_download_numbers": "true",
"public_stats": "false"
}
EOF
}
delete_package() {
local package_name=$1
local curl_response
local http_status_code
local api_response_message
echo -n "[@] Deleting published package '$package_name' from remote... " >&2
curl_response=$(
curl \
--silent \
--user "${BINTRAY_USERNAME}:${BINTRAY_API_KEY}" \
--request DELETE \
--write-out "|%{http_code}" \
"https://api.bintray.com/packages/${BINTRAY_SUBJECT}/${BINTRAY_REPO_NAME}/${package_name}"
)
http_status_code=$(echo "$curl_response" | cut -d'|' -f2)
api_response_message=$(echo "$curl_response" | cut -d'|' -f1 | jq -r .message)
case "$http_status_code" in
200)
echo "done" >&2
;;
404)
echo "no-need" >&2
;;
*)
echo "failure" >&2
echo "[!] $api_response_message" >&2
exit 1
;;
esac
}
upload_package() {
local package_name=$1
local http_status_code
local api_response_message
declare -A debfiles_catalog
for arch in all aarch64 arm i686 x86_64; do
# Regular package.
debfiles_catalog["${package_name}_${PACKAGE_METADATA['VERSION_FULL']}_${arch}.deb"]=${arch}
# Development package.
debfiles_catalog["${package_name}-dev_${PACKAGE_METADATA['VERSION_FULL']}_${arch}.deb"]=${arch}
# Discover subpackages.
for file in $(find "$TERMUX_PACKAGES_BASEDIR/packages/$package_name/" -maxdepth 1 -type f -iname \*.subpackage.sh | sort); do
file=$(basename "$file")
debfiles_catalog["${file%%.subpackage.sh}_${PACKAGE_METADATA['VERSION_FULL']}_${arch}.deb"]=${arch}
done
unset debfiles
done
# Filter out nonexistent files.
for item in "${!debfiles_catalog[@]}"; do
if [ ! -f "$DEBFILES_DIR_PATH/$item" ]; then
unset debfiles_catalog["$item"]
fi
done
# Verify that our catalog is not empty.
if [ ${#debfiles_catalog[@]} -eq 0 ]; then
echo "[!] No *.deb files to upload." >&2
exit 1
fi
if ! $KEEP_OLD_VERSION; then
# Delete entry for package (with all related debfiles).
delete_package "$package_name"
fi
# Create new entry for package.
echo -n "[@] Creating entry for version '${PACKAGE_METADATA['VERSION_FULL']}' of package '$package_name'... " >&2
curl_response=$(
curl \
--silent \
--user "${BINTRAY_USERNAME}:${BINTRAY_API_KEY}" \
--request POST \
--header "Content-Type: application/json" \
--data "$(json_metadata_dump)" \
--write-out "|%{http_code}" \
"https://api.bintray.com/packages/${BINTRAY_SUBJECT}/${BINTRAY_REPO_NAME}"
)
http_status_code=$(echo "$curl_response" | cut -d'|' -f2)
api_response_message=$(echo "$curl_response" | cut -d'|' -f1 | jq -r .message)
case "$http_status_code" in
201)
echo "done" >&2
;;
409)
echo "no-need" >&2
;;
*)
echo "failure" >&2
echo "[!] $api_response_message" >&2
exit 1
;;
esac
for item in "${!debfiles_catalog[@]}"; do
local package_arch=${debfiles_catalog[$item]}
echo -n "[*] Uploading '$item'... " >&2
curl_response=$(
curl \
--silent \
--user "${BINTRAY_USERNAME}:${BINTRAY_API_KEY}" \
--request PUT \
--header "X-Bintray-Debian-Distribution: $BINTRAY_REPO_DISTRIBUTION" \
--header "X-Bintray-Debian-Component: $BINTRAY_REPO_COMPONENT" \
--header "X-Bintray-Debian-Architecture: $package_arch" \
--header "X-Bintray-Package: ${package_name}" \
--header "X-Bintray-Version: ${PACKAGE_METADATA['VERSION_FULL']}" \
--upload-file "$DEBFILES_DIR_PATH/$item" \
--write-out "|%{http_code}" \
"https://api.bintray.com/content/${BINTRAY_SUBJECT}/${BINTRAY_REPO_NAME}/${package_arch}/${item}"
)
http_status_code=$(echo "$curl_response" | cut -d'|' -f2)
api_response_message=$(echo "$curl_response" | cut -d'|' -f1 | jq -r .message)
case "$http_status_code" in
201)
echo "done" >&2
;;
409)
echo "unchanged" >&2
;;
*)
echo "failure" >&2
echo "[!] $api_response_message" >&2
exit 1
;;
esac
done
# Publishing package only after uploading all it's files. This will prevent
# spawning multiple metadata-generation jobs and will allow to sign metadata
# with maintainer's key.
echo -n "[@] Publishing package '$package_name'... " >&2
curl_response=$(
curl \
--silent \
--user "${BINTRAY_USERNAME}:${BINTRAY_API_KEY}" \
--request POST \
--header "Content-Type: application/json" \
--data "{\"subject\":\"${BINTRAY_GPG_SUBJECT}\",\"passphrase\":\"$BINTRAY_GPG_PASSPHRASE\"}" \
--write-out "|%{http_code}" \
"https://api.bintray.com/content/${BINTRAY_SUBJECT}/${BINTRAY_REPO_NAME}/${package_name}/${PACKAGE_METADATA['VERSION_FULL']}/publish"
)
http_status_code=$(echo "$curl_response" | cut -d'|' -f2)
api_response_message=$(echo "$curl_response" | cut -d'|' -f1 | jq -r .message)
case "$http_status_code" in
200)
echo "done" >&2
;;
*)
echo "failure" >&2
echo "[!] $api_response_message" >&2
exit 1
;;
esac
}
extract_variable_from_buildsh() {
local extracted_value
local variable_name
variable_name=$1
extracted_value=$(
set -o noglob
# When sourcing external code, do not expose variables
# with sensitive information.
unset BINTRAY_API_KEY
unset BINTRAY_GPG_PASSPHRASE
unset BINTRAY_GPG_SUBJECT
unset BINTRAY_SUBJECT
unset BINTRAY_USERNAME
[ -e "$TERMUX_PACKAGES_BASEDIR/scripts/properties.sh" ] && . "$TERMUX_PACKAGES_BASEDIR/scripts/properties.sh"
. "$TERMUX_PACKAGES_BASEDIR/packages/$package_name/build.sh"
echo "${!variable_name}"
set +o noglob
)
echo "$extracted_value"
}
process_packages() {
local package_name
local buildsh_path
for package_name in "$@"; do
buildsh_path="$TERMUX_PACKAGES_BASEDIR/packages/$package_name/build.sh"
if [ -f "$buildsh_path" ]; then
PACKAGE_METADATA["NAME"]="$package_name"
PACKAGE_METADATA["LICENSES"]=$(extract_variable_from_buildsh "TERMUX_PKG_LICENSE" "$buildsh_path")
if [ -z "${PACKAGE_METADATA['LICENSES']}" ]; then
echo "[!] Mandatory field 'TERMUX_PKG_LICENSE' of package '$package_name' is empty." >&2
exit 1
fi
PACKAGE_METADATA["DESCRIPTION"]=$(extract_variable_from_buildsh "TERMUX_PKG_DESCRIPTION" "$buildsh_path")
if [ -z "${PACKAGE_METADATA['DESCRIPTION']}" ]; then
echo "[!] Mandatory field 'TERMUX_PKG_DESCRIPTION' of package '$package_name' is empty." >&2
exit 1
fi
PACKAGE_METADATA["WEBSITE_URL"]=$(extract_variable_from_buildsh "TERMUX_PKG_HOMEPAGE" "$buildsh_path")
if [ -z "${PACKAGE_METADATA['WEBSITE_URL']}" ]; then
echo "[!] Mandatory field 'TERMUX_PKG_HOMEPAGE' of package '$package_name' is empty." >&2
exit 1
fi
PACKAGE_METADATA["VERSION"]=$(extract_variable_from_buildsh "TERMUX_PKG_VERSION" "$buildsh_path")
if [ -z "${PACKAGE_METADATA['VERSION']}" ]; then
echo "[!] Mandatory field 'TERMUX_PKG_VERSION' of package '$package_name' is empty." >&2
exit 1
fi
PACKAGE_METADATA["REVISION"]=$(extract_variable_from_buildsh "TERMUX_PKG_REVISION" "$buildsh_path")
if [ -n "${PACKAGE_METADATA['REVISION']}" ]; then
PACKAGE_METADATA["VERSION_FULL"]="${PACKAGE_METADATA['VERSION']}-${PACKAGE_METADATA['REVISION']}"
else
if [ "${PACKAGE_METADATA['VERSION']}" != "${PACKAGE_METADATA['VERSION']/-/}" ]; then
PACKAGE_METADATA["VERSION_FULL"]="${PACKAGE_METADATA['VERSION']}-0"
else
PACKAGE_METADATA["VERSION_FULL"]="${PACKAGE_METADATA['VERSION']}"
fi
fi
else
echo "[!] Cannot find 'build.sh' for package '$package_name'." >&2
exit 1
fi
if $PACKAGE_DELETE_MODE; then
delete_package "$package_name"
else
upload_package "$package_name"
fi
done
# In deletion mode we need to do metadata recalculation separately
# to ensure that it will be signed with maintainer's key.
if $PACKAGE_DELETE_MODE; then
local curl_response
local http_status_code
local api_response_message
echo -n "[@] Requesting metadata recalculation... " >&2
curl_response=$(
curl \
--silent \
--user "${BINTRAY_USERNAME}:${BINTRAY_API_KEY}" \
--request POST \
--header "Content-Type: application/json" \
--data "{\"subject\":\"${BINTRAY_GPG_SUBJECT}\",\"passphrase\":\"$BINTRAY_GPG_PASSPHRASE\"}" \
--write-out "|%{http_code}" \
"https://api.bintray.com/calc_metadata/${BINTRAY_SUBJECT}/${BINTRAY_REPO_NAME}/"
)
http_status_code=$(echo "$curl_response" | cut -d'|' -f2)
api_response_message=$(echo "$curl_response" | cut -d'|' -f1 | jq -r .message)
case "$http_status_code" in
202)
echo "done" >&2
;;
*)
echo "failure" >&2
echo "[!] $api_response_message" >&2
;;
esac
fi
}
show_usage() {
{
echo
echo "Usage: package_uploader.sh [OPTIONS] [package name] ..."
echo
echo "A command line client for Bintray designed for managing"
echo "Termux *.deb packages."
echo
echo "=========================================================="
echo
echo "Primarily indended to be used by Gitlab CI for automatic"
echo "package uploads but it can be used for manual uploads too."
echo
echo "By default, this script will create a new version entries"
echo "for specified packages and upload *.deb files for each of"
echo "created entries."
echo
echo "Note that if version entry already exists, it will be"
echo "deleted with all associated *.deb files to prevent file"
echo "name collisions and wasting of available space."
echo
echo "If such behaviour is unwanted, use option '-k' which will"
echo "not touch available versions."
echo
echo "Before using this script, check that you have all"
echo "necessary credentials for accessing repository."
echo
echo "Credentials are specified via environment variables:"
echo
echo " BINTRAY_USERNAME - User name."
echo " BINTRAY_API_KEY - User's API key."
echo " BINTRAY_GPG_SUBJECT - Owner of GPG key."
echo " BINTRAY_GPG_PASSPHRASE - GPG key passphrase."
echo
echo "=========================================================="
echo
echo "Options:"
echo
echo " -d, --delete Completely delete the selected"
echo " packages from the repository instead"
echo " of uploading."
echo
echo " -h, --help Print this help."
echo
echo " -k, --keep-old Prevent deletion of previous versions"
echo " when submitting package. Useful when"
echo " doing uploads within same package"
echo " versions or just to make downgrading"
echo " possible."
echo
echo " -p, --path [path] Specify a directory containing *.deb"
echo " files ready for uploading."
echo " Default is './debs'."
echo
echo "=========================================================="
} >&2
}
###################################################################
while getopts ":-:hdkp:" opt; do
case "$opt" in
-)
case "$OPTARG" in
delete)
PACKAGE_DELETE_MODE=true
;;
help)
show_usage
exit 0
;;
path)
DEBFILES_DIR_PATH="${!OPTIND}"
OPTIND=$((OPTIND + 1))
if [ -z "$DEBFILES_DIR_PATH" ]; then
echo "[!] Option '--${OPTARG}' requires argument." >&2
show_usage
exit 1
fi
if [ ! -d "$DEBFILES_DIR_PATH" ]; then
echo "[!] Directory '$DEBFILES_DIR_PATH' is not exist." >&2
show_usage
exit 1
fi
;;
keep-old)
KEEP_OLD_VERSION=true
;;
*)
echo "[!] Invalid option '$OPTARG'." >&2
show_usage
exit 1
;;
esac
;;
d)
PACKAGE_DELETE_MODE=true
;;
h)
show_usage
exit 0
;;
k)
KEEP_OLD_VERSION=true
;;
p)
DEBFILES_DIR_PATH="${OPTARG}"
if [ ! -d "$DEBFILES_DIR_PATH" ]; then
echo "[!] Directory '$DEBFILES_DIR_PATH' is not exist." >&2
show_usage
exit 1
fi
;;
*)
echo "[!] Invalid option '-${OPTARG}'." >&2
show_usage
exit 1
;;
esac
done
shift $((OPTIND - 1))
if [ $# -gt 0 ]; then
# These variables should never be changed.
readonly DEBFILES_DIR_PATH
readonly PACKAGE_DELETE_MODE
readonly TERMUX_PACKAGES_BASEDIR
# Without Bintray credentials this script is useless.
if [ -z "$BINTRAY_USERNAME" ]; then
echo "[!] Variable 'BINTRAY_USERNAME' is not set." >&2
exit 1
fi
if [ -z "$BINTRAY_API_KEY" ]; then
echo "[!] Variable 'BINTRAY_API_KEY' is not set." >&2
exit 1
fi
if [ -z "$BINTRAY_GPG_SUBJECT" ]; then
echo "[!] Variable 'BINTRAY_GPG_SUBJECT' is not set." >&2
exit 1
fi
process_packages "$@"
exit 0
else
echo "[!] No packages specified." >&2
show_usage
exit 1
fi