0
0
mirror of https://github.com/termux/termux-packages.git synced 2024-12-13 03:00:31 +00:00
2024-08-30 23:44:45 +08:00

188 lines
6.6 KiB
Bash

TERMUX_PKG_HOMEPAGE=https://pypy.org
TERMUX_PKG_DESCRIPTION="A fast, compliant alternative implementation of Python"
TERMUX_PKG_LICENSE="MIT"
TERMUX_PKG_MAINTAINER="@licy183"
_MAJOR_VERSION=2.7
TERMUX_PKG_VERSION="7.3.17"
TERMUX_PKG_SRCURL=(https://downloads.python.org/pypy/pypy$_MAJOR_VERSION-v$TERMUX_PKG_VERSION-src.tar.bz2
https://downloads.python.org/pypy/pypy2.7-v$TERMUX_PKG_VERSION-linux64.tar.bz2
https://downloads.python.org/pypy/pypy2.7-v$TERMUX_PKG_VERSION-linux32.tar.bz2)
TERMUX_PKG_SHA256=(50e06840f4bbde91448080a4118068a89b8fbcae25ff8da1e2bb1402dc9a0346
9f3497f87b3372d17e447369e0016a4bec99a6b4d2a59aba774a25bfe4353474
a3aa0867cc837a34941047ece0fbb6ca190410fae6ad35fae4999d03bf178750)
TERMUX_PKG_AUTO_UPDATE=true
TERMUX_PKG_DEPENDS="gdbm, libandroid-posix-semaphore, libandroid-support, libbz2, libcrypt, libexpat, libffi, liblzma, libsqlite, ncurses, ncurses-ui-libs, openssl, zlib"
TERMUX_PKG_BUILD_DEPENDS="bionic-host, tk, xorgproto"
TERMUX_PKG_RECOMMENDS="clang, make, pkg-config"
TERMUX_PKG_SUGGESTS="pypy-tkinter"
TERMUX_PKG_BUILD_IN_SRC=true
termux_step_post_get_source() {
local p="$TERMUX_PKG_BUILDER_DIR/9999-add-ANDROID_API_LEVEL-for-sysconfigdata.diff"
echo "Applying $(basename "${p}")"
sed 's|@TERMUX_PKG_API_LEVEL@|'"${TERMUX_PKG_API_LEVEL}"'|g' "${p}" \
| patch --silent -p1
sed -e "s|@TERMUX_PREFIX@|${TERMUX_PREFIX}|g" \
"$TERMUX_PKG_BUILDER_DIR"/termux.py.in > \
"$TERMUX_PKG_SRCDIR"/rpython/translator/platform/termux.py
}
termux_step_pre_configure() {
if $TERMUX_ON_DEVICE_BUILD; then
termux_error_exit "Package '$TERMUX_PKG_NAME' is not safe for on-device builds."
fi
}
__setup_host_pypy2() {
if [ "$TERMUX_ARCH_BITS" = "32" ]; then
export PATH="$TERMUX_PKG_SRCDIR/pypy2.7-v$TERMUX_PKG_VERSION-linux32/bin:$PATH"
else
export PATH="$TERMUX_PKG_SRCDIR/pypy2.7-v$TERMUX_PKG_VERSION-linux64/bin:$PATH"
fi
pypy2 -m ensurepip --altinstall --no-default-pip
pypy2 -m pip install cparser cffi
}
__setup_proot() {
mkdir -p "$TERMUX_PKG_CACHEDIR"/proot-bin
termux_download \
https://github.com/proot-me/proot/releases/download/v5.3.0/proot-v5.3.0-x86_64-static \
"$TERMUX_PKG_CACHEDIR"/proot-bin/proot \
d1eb20cb201e6df08d707023efb000623ff7c10d6574839d7bb42d0adba6b4da
chmod +x "$TERMUX_PKG_CACHEDIR"/proot-bin/proot
export PATH="$TERMUX_PKG_CACHEDIR/proot-bin:$PATH"
}
__setup_qemu_static_binaries() {
mkdir -p "$TERMUX_PKG_CACHEDIR"/qemu-static-bin
termux_download \
https://github.com/multiarch/qemu-user-static/releases/download/v7.2.0-1/qemu-aarch64-static \
"$TERMUX_PKG_CACHEDIR"/qemu-static-bin/qemu-aarch64-static \
dce64b2dc6b005485c7aa735a7ea39cb0006bf7e5badc28b324b2cd0c73d883f
termux_download \
https://github.com/multiarch/qemu-user-static/releases/download/v7.2.0-1/qemu-arm-static \
"$TERMUX_PKG_CACHEDIR"/qemu-static-bin/qemu-arm-static \
9f07762a3cd0f8a199cb5471a92402a4765f8e2fcb7fe91a87ee75da9616a806
chmod +x "$TERMUX_PKG_CACHEDIR"/qemu-static-bin/qemu-aarch64-static
chmod +x "$TERMUX_PKG_CACHEDIR"/qemu-static-bin/qemu-arm-static
export PATH="$TERMUX_PKG_CACHEDIR/qemu-static-bin:$PATH"
}
termux_step_configure() {
__setup_host_pypy2
__setup_proot
__setup_qemu_static_binaries
CFLAGS+=" -DBIONIC_IOCTL_NO_SIGNEDNESS_OVERLOAD=1"
# error: incompatible function pointer types passing 'Signed (*)(void *, const char *, XML_Encoding *)' (aka 'long (*)(void *, const char *, XML_Encoding *)') to parameter of type 'XML_UnknownEncodingHandler' (aka 'int (*)(void *, const char *, XML_Encoding *)') [-Wincompatible-function-pointer-types]
CFLAGS+=" -Wno-incompatible-function-pointer-types"
}
termux_step_make() {
mkdir -p "$TERMUX_PKG_SRCDIR"/usession-dir
local HOST_ROOTFS=""
local PROOT_TARGET="proot
-b $HOME
-b $TERMUX_PKG_TMPDIR
-b /proc -b /dev -b /sys
-w $TERMUX_PKG_TMPDIR
-r /
"
# Set qemu-user-static if needed
case "$TERMUX_ARCH" in
"aarch64" | "arm")
PROOT_TARGET+=" -q $TERMUX_PKG_CACHEDIR/qemu-static-bin/qemu-$TERMUX_ARCH-static"
HOST_ROOTFS="/host-rootfs"
;;
*)
;;
esac
# Set arch32 if needed
local SETARCH32=()
if [ "$TERMUX_ARCH_BITS" = "32" ]; then
SETARCH32+=(CC="gcc -m32")
SETARCH32+=("linux32")
fi
# (Cross) Translation
env -i \
-C "$TERMUX_PKG_SRCDIR"/pypy/goal \
PATH="$PATH" \
PYPY_USESSION_DIR="$TERMUX_PKG_SRCDIR/usession-dir" \
PROOT_TARGET="$PROOT_TARGET" \
TARGET_CFLAGS="$CFLAGS $CPPFLAGS" \
TARGET_LDFLAGS="$LDFLAGS" \
TARGET_CC="$CC" \
"${SETARCH32[@]}" \
pypy2 -u ../../rpython/bin/rpython \
--platform=termux-"$TERMUX_ARCH" \
--source --no-compile -Ojit \
targetpypystandalone.py
# Build
cd "$TERMUX_PKG_SRCDIR"/usession-dir
cd "$(ls -C | awk '{print $1}')"/testing_1
make clean
make -j$TERMUX_PKG_MAKE_PROCESSES
# Copy the built files
cp ./pypy-c "$TERMUX_PKG_SRCDIR"/pypy/goal/pypy-c
cp ./libpypy-c.so "$TERMUX_PKG_SRCDIR"/pypy/goal/libpypy-c.so
# Dummy cc and strip
mkdir -p "$TERMUX_PKG_SRCDIR"/dummy-bin
cp "$TERMUX_PKG_BUILDER_DIR"/cc.sh "$TERMUX_PKG_SRCDIR"/dummy-bin/cc
chmod +x "$TERMUX_PKG_SRCDIR"/dummy-bin/cc
ln -sf $(command -v llvm-strip) "$TERMUX_PKG_SRCDIR"/dummy-bin/strip
# Build cffi imports (Cross exec)
$PROOT_TARGET env -i \
PATH="$TERMUX_PKG_SRCDIR/dummy-bin:$PATH" \
HOST_ROOTFS="$HOST_ROOTFS" \
TERMUX_STANDALONE_TOOLCHAIN="$TERMUX_STANDALONE_TOOLCHAIN" \
CCTERMUX_HOST_PLATFORM="$CCTERMUX_HOST_PLATFORM" \
CFLAGS="$CFLAGS $CPPFLAGS" \
LDFLAGS="$LDFLAGS" \
"$TERMUX_PKG_SRCDIR"/pypy/goal/pypy-c \
$TERMUX_PKG_SRCDIR/pypy/tool/release/package.py \
--archive-name=pypy$_MAJOR_VERSION-v$TERMUX_PKG_VERSION \
--targetdir=$TERMUX_PKG_SRCDIR \
--no-embedded-dependencies \
--no-keep-debug
}
termux_step_make_install() {
rm -rf $TERMUX_PREFIX/opt/pypy
unzip -d $TERMUX_PREFIX/opt/ pypy$_MAJOR_VERSION-v$TERMUX_PKG_VERSION.zip
mv $TERMUX_PREFIX/opt/pypy$_MAJOR_VERSION-v$TERMUX_PKG_VERSION $TERMUX_PREFIX/opt/pypy
ln -sfr $TERMUX_PREFIX/opt/pypy/bin/pypy $TERMUX_PREFIX/bin/
ln -sfr $TERMUX_PREFIX/opt/pypy/bin/libpypy-c.so $TERMUX_PREFIX/lib/
}
termux_step_create_debscripts() {
# Pre-rm script to cleanup runtime-generated files.
cat <<- PRERM_EOF > ./prerm
#!$TERMUX_PREFIX/bin/sh
if [ "$TERMUX_PACKAGE_FORMAT" != "pacman" ] && [ "\$1" != "remove" ]; then
exit 0
fi
echo "Deleting files from site-packages..."
rm -Rf $TERMUX_PREFIX/opt/pypy/site-packages/*
echo "Deleting *.pyc..."
find $TERMUX_PREFIX/opt/pypy/lib-python/ | grep -E "(__pycache__|\.pyc|\.pyo$)" | xargs rm -rf
find $TERMUX_PREFIX/opt/pypy/lib_pypy/ | grep -E "(__pycache__|\.pyc|\.pyo$)" | xargs rm -rf
exit 0
PRERM_EOF
chmod 0755 prerm
}