diff --git a/.github/workflows/build-bootstraps.yml b/.github/workflows/build-bootstraps.yml index 71a177f..1a6c944 100644 --- a/.github/workflows/build-bootstraps.yml +++ b/.github/workflows/build-bootstraps.yml @@ -26,20 +26,21 @@ jobs: sudo apt-get install -y autopoint - name: Clone repository - uses: actions/checkout@v4 + uses: actions/checkout@v7 with: fetch-depth: 1 - name: Get packages from termux-packages - uses: actions/checkout@v4 + uses: actions/checkout@v7 with: path: termux-packages repository: termux/termux-packages - ref: 'acf1df1e90034ce0100ac54726ae56792bf56859' + ref: "23d530425344010b73b0392ab66b041e8f65e34b" - name: Setup java - uses: actions/setup-java@v1 + uses: actions/setup-java@v5 with: + distribution: temurin java-version: 17 - name: Setup environment @@ -48,22 +49,27 @@ jobs: sudo chown $USER:$USER /data mv *.sh termux-packages/scripts/ mv termux-packages/* . + patch -p1 < patches/properties.patch for package in patches/*; do - cp -r $package packages; + [ -d "$package" ] || continue + cp -r "$package" packages done find packages/git -type f -name "*subpackage*" -exec rm {} + find packages/libxml2 -type f -name "*python*" -exec rm {} + + find packages/ruby -type f \( -name 'process.c.patch' -o -name 'yjit-src-*.patch' -o -name 'lib-rubygems-install_update_options.rb.patch' \) -exec rm {} + sudo mkdir -p /home/builder && mv ./* /home/builder - name: Create bootstrap archive working-directory: /home/builder + env: + TERMUX_JAVA_HOME: ${{ env.JAVA_HOME }} run: | ./clean.sh ./scripts/setup-android-sdk.sh ./scripts/build-bootstraps.sh --android10 --architectures ${{ matrix.target_arch }} - name: Store bootstrap - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: ruby-${{ matrix.target_arch }} path: "/home/builder/*.zip" @@ -74,12 +80,12 @@ jobs: if: github.ref == 'refs/heads/main' && github.event.inputs.release == 'true' && startsWith(github.event.inputs.tag, 'v') steps: - name: Clone repository - uses: actions/checkout@v4 + uses: actions/checkout@v7 with: fetch-depth: 0 - name: Fetch bootstrap archives - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v8 with: path: ./ merge-multiple: true @@ -90,7 +96,7 @@ jobs: git push --tags - name: Publish bootstrap zips to GitHub release - uses: termux/upload-release-action@v4.1.0 + uses: termux/upload-release-action@v5.0.0 with: file: "*.zip" file_glob: true @@ -103,19 +109,20 @@ jobs: runs-on: ubuntu-latest steps: - name: Clone repository - uses: actions/checkout@v4 + uses: actions/checkout@v7 with: fetch-depth: 1 - name: Fetch bootstrap archives - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v8 with: merge-multiple: true path: ./ - name: Setup java - uses: actions/setup-java@v1 + uses: actions/setup-java@v5 with: + distribution: temurin java-version: 17 - name: Build apk @@ -126,7 +133,7 @@ jobs: ./gradlew assembleDebug - name: Store generated APK file - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: termux-app path: ./termux-app/app/build/outputs/apk/debug/*.apk diff --git a/build-bootstraps.sh b/build-bootstraps.sh index c535a1c..971aea0 100755 --- a/build-bootstraps.sh +++ b/build-bootstraps.sh @@ -9,23 +9,23 @@ # apps without having to publish an apt repo first. # Usage: run "build-bootstrap.sh --help" # -# Adapted from: https://github.com/termux/termux-packages/blob/acf1df1e90034ce0100ac54726ae56792bf56859/scripts/build-bootstraps.sh -version=0.1.0 +# Adapted from: https://github.com/termux/termux-packages/blob/23d530425344010b73b0392ab66b041e8f65e34b/scripts/build-bootstraps.sh +version=0.2.0 set -e -TERMUX_SCRIPTDIR=$(realpath "$(dirname "$0")/../") -. $(dirname "$(realpath "$0")")/properties.sh +export TERMUX_SCRIPTDIR +TERMUX_SCRIPTDIR=$(realpath "$(dirname "$(realpath "$0")")/../") +: "${TERMUX_TOPDIR:="$HOME/.termux-build"}" +# shellcheck source=/dev/null +. "${TERMUX_SCRIPTDIR}/scripts/properties.sh" +# shellcheck source=/dev/null +. "${TERMUX_SCRIPTDIR}/scripts/build/termux_step_handle_buildarch.sh" BOOTSTRAP_TMPDIR=$(mktemp -d "${TMPDIR:-/tmp}/ruby-tmp.XXXXXXXX") -# By default, bootstrap archives are compatible with Android >=7.0 -# and <10. BOOTSTRAP_ANDROID10_COMPATIBLE=false -# By default, bootstrap archives will be built for all architectures -# supported by Termux application. -# Override with option '--architectures'. TERMUX_DEFAULT_ARCHITECTURES=("aarch64" "arm" "i686" "x86_64") TERMUX_ARCHITECTURES=("${TERMUX_DEFAULT_ARCHITECTURES[@]}") @@ -36,21 +36,11 @@ TERMUX_BUILT_PACKAGES_DIRECTORY="/data/data/.built-packages" IGNORE_BUILD_SCRIPT_NOT_FOUND_ERROR=1 FORCE_BUILD_PACKAGES=0 -# A list of packages to build declare -a PACKAGES=() - -# A list of non-essential packages to build. -# By default it is empty, but can be filled with option '--add'. declare -a ADDITIONAL_PACKAGES=() - -# A list of already extracted packages declare -a EXTRACTED_PACKAGES=() - -# A list of options to pass to build-package.sh declare -a BUILD_PACKAGE_OPTIONS=() -# Check for some important utilities that may not be available for -# some reason. for cmd in ar awk curl grep gzip find sed tar xargs xz zip; do if [ -z "$(command -v $cmd)" ]; then echo "[!] Utility '$cmd' is not available in PATH." @@ -58,45 +48,33 @@ for cmd in ar awk curl grep gzip find sed tar xargs xz zip; do fi done -# Build deb files for package and its dependencies deb from source for arch build_package() { - local return_value - - local package_arch="$1" + local TERMUX_ARCH="$1" local package_name="$2" - local build_output - # Build package from source - # stderr will be redirected to stdout and both will be captured into variable and printed on screen cd "$TERMUX_PACKAGES_DIRECTORY" echo $'\n\n\n'"[*] Building '$package_name'..." exec 99>&1 - build_output="$("$TERMUX_PACKAGES_DIRECTORY"/build-package.sh "${BUILD_PACKAGE_OPTIONS[@]}" -a "$package_arch" "$package_name" 2>&1 | tee >(cat - >&99); exit ${PIPESTATUS[0]})"; + build_output="$("$TERMUX_PACKAGES_DIRECTORY"/build-package.sh "${BUILD_PACKAGE_OPTIONS[@]}" -a "$TERMUX_ARCH" "$package_name" 2>&1 | tee >(cat - >&99); exit ${PIPESTATUS[0]})" return_value=$? echo "[*] Building '$package_name' exited with exit code $return_value" exec 99>&- if [ $return_value -ne 0 ]; then - echo "Failed to build package '$package_name' for arch '$package_arch'" 1>&2 - - # Dependency packages may not have a build.sh, so we ignore the error. - # A better way should be implemented to validate if its actually a dependency - # and not a required package itself, by removing dependencies from PACKAGES array. + echo "Failed to build package '$package_name' for arch '$TERMUX_ARCH'" 1>&2 if [[ $IGNORE_BUILD_SCRIPT_NOT_FOUND_ERROR == "1" ]] && [[ "$build_output" == *"No build.sh script at package dir"* ]]; then echo "Ignoring error 'No build.sh script at package dir'" 1>&2 return 0 fi fi - return $return_value - } -# Extract *.deb files to the bootstrap root. extract_debs() { - + local package_arch="$1" local current_package_name + local current_package_arch local data_archive local control_archive local package_tmpdir @@ -116,15 +94,28 @@ extract_debs() { fi for deb in *.deb; do - - current_package_name="$(echo "$deb" | sed -E 's/^([^_]+).*/\1/' )" + current_package_name="$(echo "$deb" | sed -E 's/^([^_]+).*/\1/')" + current_package_arch="$(echo "$deb" | sed -E 's/.*_(aarch64|all|arm|i686|x86_64)\.deb$/\1/')" echo "current_package_name: '$current_package_name'" + echo "current_package_arch: '$current_package_arch'" + + if [[ "$current_package_arch" != "$package_arch" ]] && [[ "$current_package_arch" != "all" ]]; then + echo "[*] Skipping incompatible package '$deb' for target '$package_arch'..." + continue + fi if [[ "$current_package_name" == *"-static" ]]; then echo "[*] Skipping static package '$deb'..." continue fi + case "$current_package_name" in + python|python-*|doxygen|tk|tcl|libicu|icu|libsqlite|sqlite|ttf-*|git-gui|git-gitk|gitk|git-svn|xorgproto|libx11|libx11-*|libxcb|libxcb-*|libxau|libxdmcp|libxext|libxrender|libxft|libxfixes|libxi|libxt|libsm|libice|util-macros|fontconfig|freetype|pixman|harfbuzz|libcairo|glib) + echo "[*] Skipping build-only package '$deb'..." + continue + ;; + esac + if [[ " ${EXTRACTED_PACKAGES[*]} " == *" $current_package_name "* ]]; then echo "[*] Skipping already extracted package '$current_package_name'..." continue @@ -137,10 +128,10 @@ extract_debs() { rm -rf "$package_tmpdir"/* echo "[*] Extracting '$deb'..." - (cd "$package_tmpdir" + ( + cd "$package_tmpdir" ar x "$TERMUX_BUILT_DEBS_DIRECTORY/$deb" - # data.tar may have extension different from .xz if [ -f "./data.tar.xz" ]; then data_archive="data.tar.xz" elif [ -f "./data.tar.gz" ]; then @@ -150,7 +141,6 @@ extract_debs() { return 1 fi - # Do same for control.tar. if [ -f "./control.tar.xz" ]; then control_archive="control.tar.xz" elif [ -f "./control.tar.gz" ]; then @@ -160,18 +150,14 @@ extract_debs() { return 1 fi - # Extract files. tar xf "$data_archive" -C "$BOOTSTRAP_ROOTFS" if ! ${BOOTSTRAP_ANDROID10_COMPATIBLE}; then - # Register extracted files. tar tf "$data_archive" | sed -E -e 's@^\./@/@' -e 's@^/$@/.@' -e 's@^([^./])@/\1@' > "${BOOTSTRAP_ROOTFS}/${TERMUX_PREFIX}/var/lib/dpkg/info/${current_package_name}.list" - # Generate checksums (md5). tar xf "$data_archive" find data -type f -print0 | xargs -0 -r md5sum | sed 's@^\.$@@g' > "${BOOTSTRAP_ROOTFS}/${TERMUX_PREFIX}/var/lib/dpkg/info/${current_package_name}.md5sums" - # Extract metadata. tar xf "$control_archive" { cat control @@ -179,7 +165,6 @@ extract_debs() { echo } >> "${BOOTSTRAP_ROOTFS}/${TERMUX_PREFIX}/var/lib/dpkg/status" - # Additional data: conffiles & scripts for file in conffiles postinst postrm preinst prerm; do if [ -f "${PWD}/${file}" ]; then cp "$file" "${BOOTSTRAP_ROOTFS}/${TERMUX_PREFIX}/var/lib/dpkg/info/${current_package_name}.${file}" @@ -188,16 +173,13 @@ extract_debs() { fi ) done - } -# Final stage: generate bootstrap archive and place it to current -# working directory. -# Information about symlinks is stored in file SYMLINKS.txt. create_bootstrap_archive() { - echo $'\n\n\n'"[*] Creating 'ruby-${1}.zip'..." - (cd "${BOOTSTRAP_ROOTFS}/${TERMUX_PREFIX}" + ( + cd "${BOOTSTRAP_ROOTFS}/${TERMUX_PREFIX}" + # Keep size down (same as historical jekyllex bootstraps). rm -rf ./share/man rm -rf ./share/doc rm -rf ./share/info @@ -206,9 +188,10 @@ create_bootstrap_archive() { rm -rf ./share/tabset rm -rf ./share/aclocal rm -rf ./share/terminfo + rm -rf ./share/fonts ./share/git-gui ./share/gitk ./share/gitweb ./share/xcb ./share/perl5 + rm -rf ./include/unicode ./include/X11 ./lib/tcl8 ./lib/tcl8.6 ./lib/icu + rm -f ./bin/gitk ./bin/git-cvsserver ./bin/git-shell ./bin/sqlite3 - # Do not store symlinks in bootstrap archive. - # Instead, put all information to SYMLINKS.txt while read -r -d '' link; do echo "$(readlink "$link")←${link}" >> SYMLINKS.txt rm -f "$link" @@ -218,93 +201,56 @@ create_bootstrap_archive() { ) mv -f "${BOOTSTRAP_TMPDIR}/ruby-${1}.zip" "$TERMUX_PACKAGES_DIRECTORY/" - echo "[*] Finished successfully (${1})." - } set_build_bootstrap_traps() { - - #set traps for the build_bootstrap_trap itself trap 'build_bootstrap_trap' EXIT trap 'build_bootstrap_trap TERM' TERM trap 'build_bootstrap_trap INT' INT trap 'build_bootstrap_trap HUP' HUP trap 'build_bootstrap_trap QUIT' QUIT - return 0 - } build_bootstrap_trap() { - local build_bootstrap_trap_exit_code=$? trap - EXIT - [ -h "$TERMUX_BUILT_PACKAGES_DIRECTORY" ] && rm -f "$TERMUX_BUILT_PACKAGES_DIRECTORY" [ -d "$BOOTSTRAP_TMPDIR" ] && rm -rf "$BOOTSTRAP_TMPDIR" - - [ -n "$1" ] && trap - "$1"; exit $build_bootstrap_trap_exit_code - + [ -n "$1" ] && trap - "$1" + exit $build_bootstrap_trap_exit_code } show_usage() { - - cat <<'HELP_EOF' - -build-bootstraps.sh is a script to build bootstrap archives for the -termux-app from local package sources instead of debs published in -apt repo like done by generate-bootstrap.sh. It allows bootstrap archives -to be easily built for (forked) termux apps without having to publish -an apt repo first. - + cat <<'HELP_EOF' +build-bootstraps.sh builds JekyllEx ruby bootstraps from a termux-packages tree. Usage: build-bootstraps.sh [command_options] +Options: + [ -h | --help ] Display this help + [ -f ] Force rebuild packages + [ --android10 ] Android 10+ / APK packaging layout + [ -a | --add ] Extra packages (comma-separated) + [ --architectures ] Architectures (comma-separated) -Available command_options: - [ -h | --help ] Display this help screen - [ -f ] Force build even if packages have already been built. - [ --android10 ] - Generate bootstrap archives for Android 10+ for - apk packaging system. - [ -a | --add ] - Additional packages to include into bootstrap archive. - Multiple packages should be passed as comma-separated list. - [ --architectures ] - Override default list of architectures for which bootstrap - archives will be created. Multiple architectures should be - passed as comma-separated list. - - -The package name/prefix that the bootstrap is built for is defined by -TERMUX_APP_PACKAGE in 'scrips/properties.sh'. It defaults to 'com.termux'. -If package name is changed, make sure to run -`./scripts/run-docker.sh ./clean.sh` or pass '-f' to force rebuild of packages. - -### Examples +TERMUX_APP_PACKAGE must be xyz.jekyllex. +NDK r29+ links 16 KB-aligned ELFs by default (Termux toolchain_29). -Build default bootstrap archives for all supported archs: -./scripts/run-docker.sh ./scripts/build-bootstraps.sh &> build.log - -Build default bootstrap archive for aarch64 arch only: -./scripts/run-docker.sh ./scripts/build-bootstraps.sh --architectures aarch64 &> build.log - -Build bootstrap archive with additionall openssh package for aarch64 arch only: -./scripts/run-docker.sh ./scripts/build-bootstraps.sh --architectures aarch64 --add openssh &> build.log +Examples: + ./scripts/build-bootstraps.sh --android10 --architectures aarch64 + ./scripts/build-bootstraps.sh --android10 -f HELP_EOF -echo $'\n'"TERMUX_APP_PACKAGE: \"$TERMUX_APP_PACKAGE\"" -echo "TERMUX_PREFIX: \"${TERMUX_PREFIX[*]}\"" -echo "TERMUX_ARCHITECTURES: \"${TERMUX_ARCHITECTURES[*]}\"" - + echo $'\n'"TERMUX_APP_PACKAGE: \"${TERMUX_APP_PACKAGE:-}\"" + echo "TERMUX_PREFIX: \"${TERMUX_PREFIX:-}\"" + echo "TERMUX_NDK_VERSION: \"${TERMUX_NDK_VERSION:-}\"" + echo "TERMUX_ARCHITECTURES: \"${TERMUX_ARCHITECTURES[*]}\"" } main() { - - local return_value - while (($# > 0)); do case "$1" in -h|--help) @@ -356,27 +302,25 @@ main() { set_build_bootstrap_traps - for package_arch in "${TERMUX_ARCHITECTURES[@]}"; do - if [[ " ${TERMUX_DEFAULT_ARCHITECTURES[*]} " != *" $package_arch "* ]]; then - echo "Unsupported architecture '$package_arch' for in architectures list: '${TERMUX_ARCHITECTURES[*]}'" 1>&2 + for TERMUX_ARCH in "${TERMUX_ARCHITECTURES[@]}"; do + if [[ " ${TERMUX_DEFAULT_ARCHITECTURES[*]} " != *" $TERMUX_ARCH "* ]]; then + echo "Unsupported architecture '$TERMUX_ARCH' for in architectures list: '${TERMUX_ARCHITECTURES[*]}'" 1>&2 echo "Supported architectures: '${TERMUX_DEFAULT_ARCHITECTURES[*]}'" 1>&2 return 1 fi done - for package_arch in "${TERMUX_ARCHITECTURES[@]}"; do + echo "[*] NDK ${TERMUX_NDK_VERSION} (16 KB page-size alignment is NDK r28+ default)" - # The termux_step_finish_build stores package version in .built-packages directory, but - # its not arch independent. So instead we create an arch specific one and symlink it - # to the .built-packages directory so that users can easily switch arches without having - # to rebuild packages - TERMUX_BUILT_PACKAGES_DIRECTORY_FOR_ARCH="$TERMUX_BUILT_PACKAGES_DIRECTORY-$package_arch" + for TERMUX_ARCH in "${TERMUX_ARCHITECTURES[@]}"; do + termux_step_handle_buildarch + + TERMUX_BUILT_PACKAGES_DIRECTORY_FOR_ARCH="$TERMUX_BUILT_PACKAGES_DIRECTORY-$TERMUX_ARCH" mkdir -p "$TERMUX_BUILT_PACKAGES_DIRECTORY_FOR_ARCH" if [ -f "$TERMUX_BUILT_PACKAGES_DIRECTORY" ] || [ -d "$TERMUX_BUILT_PACKAGES_DIRECTORY" ]; then rm -rf "$TERMUX_BUILT_PACKAGES_DIRECTORY" fi - ln -sf "$TERMUX_BUILT_PACKAGES_DIRECTORY_FOR_ARCH" "$TERMUX_BUILT_PACKAGES_DIRECTORY" if [[ $FORCE_BUILD_PACKAGES == "1" ]]; then @@ -384,10 +328,9 @@ main() { rm -f "$TERMUX_BUILT_DEBS_DIRECTORY"/* fi - BOOTSTRAP_ROOTFS="$BOOTSTRAP_TMPDIR/rootfs-${package_arch}" - BOOTSTRAP_PKGDIR="$BOOTSTRAP_TMPDIR/packages-${package_arch}" + BOOTSTRAP_ROOTFS="$BOOTSTRAP_TMPDIR/rootfs-${TERMUX_ARCH}" + BOOTSTRAP_PKGDIR="$BOOTSTRAP_TMPDIR/packages-${TERMUX_ARCH}" - # Create initial directories for $TERMUX_PREFIX if ! ${BOOTSTRAP_ANDROID10_COMPATIBLE}; then mkdir -p "${BOOTSTRAP_ROOTFS}/${TERMUX_PREFIX}/etc/apt/apt.conf.d" mkdir -p "${BOOTSTRAP_ROOTFS}/${TERMUX_PREFIX}/etc/apt/preferences.d" @@ -403,7 +346,7 @@ main() { PACKAGES=() EXTRACTED_PACKAGES=() - # Core JekyllEx utilities. + # JekyllEx bootstrap packages (same set as prior releases). PACKAGES+=("coreutils") PACKAGES+=("libxslt") PACKAGES+=("libxml2") @@ -412,7 +355,6 @@ main() { PACKAGES+=("git") PACKAGES+=("zip") - # Handle additional packages. for add_pkg in "${ADDITIONAL_PACKAGES[@]}"; do if [[ " ${PACKAGES[*]} " != *" $add_pkg "* ]]; then PACKAGES+=("$add_pkg") @@ -420,21 +362,15 @@ main() { done unset add_pkg - # Build packages. for package_name in "${PACKAGES[@]}"; do set +e - build_package "$package_arch" "$package_name" || return $? + build_package "$TERMUX_ARCH" "$package_name" || return $? set -e done - # Extract all debs. - extract_debs || return $? - - # Create bootstrap archive. - create_bootstrap_archive "$package_arch" || return $? - + extract_debs "$TERMUX_ARCH" || return $? + create_bootstrap_archive "$TERMUX_ARCH" || return $? done - } main "$@" diff --git a/patches/git/build.sh b/patches/git/build.sh index c6e5e89..ab53650 100755 --- a/patches/git/build.sh +++ b/patches/git/build.sh @@ -1,18 +1,13 @@ TERMUX_PKG_HOMEPAGE=https://git-scm.com/ TERMUX_PKG_DESCRIPTION="Fast, scalable, distributed revision control system" TERMUX_PKG_LICENSE="GPL-2.0" -TERMUX_PKG_MAINTAINER="@termux" -TERMUX_PKG_VERSION="2.46.0" +TERMUX_PKG_MAINTAINER="Joshua Kahn " +TERMUX_PKG_VERSION="2.55.0" TERMUX_PKG_SRCURL=https://mirrors.kernel.org/pub/software/scm/git/git-${TERMUX_PKG_VERSION}.tar.xz -TERMUX_PKG_SHA256=7f123462a28b7ca3ebe2607485f7168554c2b10dfc155c7ec46300666ac27f95 +TERMUX_PKG_SHA256=457fdb04dc8728e007d4688695e6912e6f680727920f2a40bf11eacc17505357 TERMUX_PKG_AUTO_UPDATE=true -# removed libexpat, pcre2 TERMUX_PKG_DEPENDS="libcurl, libiconv, less, openssl, zlib" -# TERMUX_PKG_RECOMMENDS="openssh" -# TERMUX_PKG_SUGGESTS="perl" -## This requires a working $TERMUX_PREFIX/bin/sh on the host building: -# removed --with-expat --with-tcltk=$TERMUX_PREFIX/bin/wish TERMUX_PKG_EXTRA_CONFIGURE_ARGS=" ac_cv_fread_reads_directories=yes ac_cv_header_libintl_h=no @@ -21,10 +16,6 @@ ac_cv_snprintf_returns_bogus=no --with-curl --with-shell=$TERMUX_PREFIX/bin/sh " -# expat is only used by git-http-push for remote lock management over DAV, so disable: -# NO_INSTALL_HARDLINKS to use symlinks instead of hardlinks (which does not work on Android M): -# added: NO_PERL=1, NO_EXPAT=1, NO_TCLTK=1 -# removed: PERL_PATH=$TERMUX_PREFIX/bin/perl, USE_LIBPCRE2=1 TERMUX_PKG_EXTRA_MAKE_ARGS=" NO_NSEC=1 NO_PERL=1 @@ -32,12 +23,14 @@ NO_EXPAT=1 NO_TCLTK=1 NO_GETTEXT=1 NO_INSTALL_HARDLINKS=1 +NO_RUST=1 +INSTALL_SYMLINKS=1 +CSPRNG_METHOD=openssl +DEFAULT_PAGER=pager +DEFAULT_EDITOR=editor " TERMUX_PKG_BUILD_IN_SRC=true -# Things to remove to save space: -# bin/git-cvsserver - server emulating CVS -# bin/git-shell - restricted login shell for Git-only SSH access TERMUX_PKG_RM_AFTER_INSTALL=" bin/git-cvsserver bin/git-shell @@ -48,52 +41,23 @@ share/man/man1/git-shell.1 " termux_step_pre_configure() { - # Certain packages are not safe to build on device because their - # build.sh script deletes specific files in $TERMUX_PREFIX. if $TERMUX_ON_DEVICE_BUILD; then termux_error_exit "Package '$TERMUX_PKG_NAME' is not safe for on-device builds." fi - - # Setup perl so that the build process can execute it: - # rm -f $TERMUX_PREFIX/bin/perl - # ln -s $(command -v perl) $TERMUX_PREFIX/bin/perl - - # Force fresh perl files (otherwise files from earlier builds - # remains without bumped modification times, so are not picked - # up by the package): rm -Rf $TERMUX_PREFIX/share/git-perl - - # Fixes build if utfcpp is installed: CPPFLAGS="-I$TERMUX_PKG_SRCDIR $CPPFLAGS" } -termux_step_post_make_install() { - # Installing man requires asciidoc and xmlto, so git uses separate make targets for man pages - # make -j $TERMUX_PKG_MAKE_PROCESSES install-man - - # make -j $TERMUX_PKG_MAKE_PROCESSES -C contrib/subtree $TERMUX_PKG_EXTRA_MAKE_ARGS - # make -C contrib/subtree $TERMUX_PKG_EXTRA_MAKE_ARGS ${TERMUX_PKG_MAKE_INSTALL_TARGET} - # make -j $TERMUX_PKG_MAKE_PROCESSES -C contrib/subtree install-man - - # mkdir -p $TERMUX_PREFIX/etc/bash_completion.d/ - # cp $TERMUX_PKG_SRCDIR/contrib/completion/git-completion.bash \ - # $TERMUX_PKG_SRCDIR/contrib/completion/git-prompt.sh \ - # $TERMUX_PREFIX/etc/bash_completion.d/ - - # Remove the build machine perl setup in termux_step_pre_configure to avoid it being packaged: - # rm $TERMUX_PREFIX/bin/perl +termux_step_make_install() { + make -j "${TERMUX_PKG_MAKE_PROCESSES}" ${TERMUX_PKG_EXTRA_MAKE_ARGS} install +} - # Remove clutter: +termux_step_post_make_install() { rm -Rf $TERMUX_PREFIX/lib/*-linux*/perl - - # Remove duplicated binaries in bin/ with symlink to the one in libexec/git-core: - (cd $TERMUX_PREFIX/bin; ln -s -f ../libexec/git-core/git git) - (cd $TERMUX_PREFIX/bin; ln -s -f ../libexec/git-core/git-upload-pack git-upload-pack) - # (cd $TERMUX_PREFIX/libexec/git-core; ln -s -f git-gui git-citool) } termux_step_post_massage() { - if [ ! -f libexec/git-core/git-remote-https ]; then + if [[ ! -f libexec/git-core/git-remote-https ]]; then termux_error_exit "Git built without https support" fi } diff --git a/patches/libxml2/build.sh b/patches/libxml2/build.sh index f2b7ffa..e7aa626 100755 --- a/patches/libxml2/build.sh +++ b/patches/libxml2/build.sh @@ -1,36 +1,47 @@ -TERMUX_PKG_HOMEPAGE=http://www.xmlsoft.org +TERMUX_PKG_HOMEPAGE=https://gitlab.gnome.org/GNOME/libxml2/-/wikis/home TERMUX_PKG_DESCRIPTION="Library for parsing XML documents" TERMUX_PKG_LICENSE="MIT" TERMUX_PKG_MAINTAINER="@termux" -TERMUX_PKG_VERSION="2.13.3" -TERMUX_PKG_REVISION=1 -_MAJOR_VERSION="${TERMUX_PKG_VERSION%.*}" -TERMUX_PKG_SRCURL=https://download.gnome.org/sources/libxml2/${_MAJOR_VERSION}/libxml2-${TERMUX_PKG_VERSION}.tar.xz -TERMUX_PKG_SHA256=0805d7c180cf09caad71666c7a458a74f041561a532902454da5047d83948138 +TERMUX_PKG_VERSION="2.15.3" +TERMUX_PKG_REVISION=2 +TERMUX_PKG_SRCURL="https://download.gnome.org/sources/libxml2/${TERMUX_PKG_VERSION%.*}/libxml2-${TERMUX_PKG_VERSION}.tar.xz" +TERMUX_PKG_SHA256=78262a6e7ac170d6528ebfe2efccdf220191a5af6a6cd61ea4a9a9a5042c7a07 TERMUX_PKG_AUTO_UPDATE=true +TERMUX_PKG_SETUP_PYTHON=false TERMUX_PKG_EXTRA_CONFIGURE_ARGS=" ---with-legacy ---without-python + -Ddocs=disabled + -Dhttp=enabled + -Dicu=disabled + -Dlegacy=enabled + -Dpython=disabled + -Dhistory=enabled + -Dreadline=enabled " -TERMUX_PKG_RM_AFTER_INSTALL="share/gtk-doc" -TERMUX_PKG_DEPENDS="libiconv, liblzma, zlib" +TERMUX_PKG_RM_AFTER_INSTALL=" +share/doc/libxml2/html +share/doc/libxml2/xmlcatalog.html +share/doc/libxml2/xmllint.html +" +TERMUX_PKG_DEPENDS="libandroid-glob, libiconv, zlib" +TERMUX_PKG_BUILD_DEPENDS="readline" TERMUX_PKG_BREAKS="libxml2-dev" TERMUX_PKG_REPLACES="libxml2-dev" -termux_step_pre_configure() { - # SOVERSION suffix is needed for SONAME of shared libs to avoid conflict - # with system ones (in /system/lib64 or /system/lib): - sed -i 's/^\(linux\*android\)\*)/\1-notermux)/' configure +termux_step_configure() { + LDFLAGS+=" -landroid-glob" + export TERMUX_MESON_ENABLE_SOVERSION=1 + termux_step_configure_meson } termux_step_post_massage() { - # Check if SONAME is properly set: if ! readelf -d lib/libxml2.so | grep -q '(SONAME).*\[libxml2\.so\.'; then termux_error_exit "SONAME for libxml2.so is not properly set." fi - local _GUARD_FILE="lib/libxml2.so.2" - if [ ! -e "${_GUARD_FILE}" ]; then - termux_error_exit "Error: file ${_GUARD_FILE} not found." + local _SOVERSION=16 + if [[ ! -e "lib/libxml2.so.${_SOVERSION}" ]]; then + echo "ERROR - Expected: lib/libxml2.so.${_SOVERSION}" >&2 + echo "ERROR - Found : $(find lib/libxml2* -regex '.*so\.[0-9]+')" >&2 + termux_error_exit "Not proceeding with update." fi } diff --git a/patches/ncurses/build.sh b/patches/ncurses/build.sh index d33cc13..ab38ba0 100644 --- a/patches/ncurses/build.sh +++ b/patches/ncurses/build.sh @@ -2,39 +2,19 @@ TERMUX_PKG_HOMEPAGE=https://invisible-island.net/ncurses/ TERMUX_PKG_DESCRIPTION="Library for text-based user interfaces in a terminal-independent manner" TERMUX_PKG_LICENSE="MIT" TERMUX_PKG_MAINTAINER="@termux" -# This references a commit in https://github.com/ThomasDickey/ncurses-snapshots, specifically -# https://github.com/ThomasDickey/ncurses-snapshots/commit/${_SNAPSHOT_COMMIT} -# Check the commit description to see which version a commit belongs to - correct version -# is checked in termux_step_pre_configure(), so the build will fail on a mistake. -# Using this simplifies things (no need to avoid downloading and applying patches manually), -# and uses github is a high available hosting. -_SNAPSHOT_COMMIT=8bd5a3d98fc741bdcc9e5fada1a3d5980e1ea22a -TERMUX_PKG_VERSION=(6.4.20231001 - 9.31 - 15 - 0.31.0 - 0.11.0) -TERMUX_PKG_REVISION=5 -TERMUX_PKG_SRCURL=(https://github.com/ThomasDickey/ncurses-snapshots/archive/${_SNAPSHOT_COMMIT}.tar.gz - http://dist.schmorp.de/rxvt-unicode/Attic/rxvt-unicode-${TERMUX_PKG_VERSION[1]}.tar.bz2 - https://github.com/thestinger/termite/archive/v${TERMUX_PKG_VERSION[2]}.tar.gz - https://github.com/kovidgoyal/kitty/releases/download/v${TERMUX_PKG_VERSION[3]}/kitty-${TERMUX_PKG_VERSION[3]}.tar.xz - https://github.com/alacritty/alacritty/archive/refs/tags/v${TERMUX_PKG_VERSION[4]}.tar.gz) -TERMUX_PKG_SHA256=(ca4a28ed4d38a7b79e1cd883e3d2755839072a7e4fe8cf265be1ef4ae79b6bc2 - aaa13fcbc149fe0f3f391f933279580f74a96fd312d6ed06b8ff03c2d46672e8 - 3ae9ebef28aad081c6c11351f086776e2fd9547563b2f900732b41c376bec05a - d122497134abab8e25dfcb6b127af40cfe641980e007f696732f70ed298198f5 - 0fb3370c662f5b87d1b9a487aef999195212b192e08f6f68a572fed8fd637e07) +_SNAPSHOT_COMMIT=5f58399b2de47ed14bdfe3a0cb149293b27893d5 +TERMUX_PKG_VERSION="6.6.20260307+really6.5.20250830" +TERMUX_PKG_SRCURL="https://github.com/ThomasDickey/ncurses-snapshots/archive/${_SNAPSHOT_COMMIT}.tar.gz" +TERMUX_PKG_SHA256="28cd102efe6a2610e830cc79cf270da6ff0427b2022900a9a36d2761522f9576" TERMUX_PKG_AUTO_UPDATE=false -# ncurses-utils: tset/reset/clear are moved to package 'ncurses'. TERMUX_PKG_BREAKS="ncurses-dev, ncurses-utils (<< 6.1.20190511-4)" TERMUX_PKG_REPLACES="ncurses-dev, ncurses-utils (<< 6.1.20190511-4)" -# --disable-stripping to disable -s argument to install which does not work when cross compiling: TERMUX_PKG_EXTRA_CONFIGURE_ARGS=" ac_cv_header_locale_h=no am_cv_langinfo_codeset=no +--disable-opaque-panel --disable-stripping --enable-const --enable-ext-colors @@ -61,64 +41,56 @@ share/man/man7 " termux_step_pre_configure() { - MAIN_VERSION=$(cut -f 2 VERSION) - PATCH_VERSION=$(cut -f 3 VERSION) - ACTUAL_VERSION=${MAIN_VERSION}.${PATCH_VERSION} - EXPECTED_VERSION=${TERMUX_PKG_VERSION[0]} - if [ "${ACTUAL_VERSION}" != "${EXPECTED_VERSION}" ]; then + MAIN_VERSION="$(cut -f 2 VERSION)" + PATCH_VERSION="$(cut -f 3 VERSION)" + ACTUAL_VERSION="${MAIN_VERSION}.${PATCH_VERSION}" + EXPECTED_VERSION="${TERMUX_PKG_VERSION#*really}" + if [[ "${ACTUAL_VERSION}" != "${EXPECTED_VERSION}" ]]; then termux_error_exit "Version mismatch - expected ${EXPECTED_VERSION}, was ${ACTUAL_VERSION}. Check https://github.com/ThomasDickey/ncurses-snapshots/commit/${_SNAPSHOT_COMMIT}" fi export CPPFLAGS+=" -fPIC" } termux_step_post_make_install() { - cd $TERMUX_PREFIX/lib + cd "$TERMUX_PREFIX/lib" || termux_error_exit "Prefix 'lib' directory does not exist." + + local version="${TERMUX_PKG_VERSION#*really}" - # Ncursesw/Ncurses compatibility symlinks. for lib in form menu ncurses panel; do - ln -sfr lib${lib}w.so.${TERMUX_PKG_VERSION:0:3} lib${lib}.so.${TERMUX_PKG_VERSION:0:3} - ln -sfr lib${lib}w.so.${TERMUX_PKG_VERSION:0:3} lib${lib}.so.${TERMUX_PKG_VERSION:0:1} - ln -sfr lib${lib}w.so.${TERMUX_PKG_VERSION:0:3} lib${lib}.so - ln -sfr lib${lib}w.a lib${lib}.a - (cd pkgconfig; ln -sf ${lib}w.pc $lib.pc) + ln -sfr "lib${lib}w.so.${version:0:3}" "lib${lib}.so.${version:0:3}" + ln -sfr "lib${lib}w.so.${version:0:3}" "lib${lib}.so.${version:0:1}" + ln -sfr "lib${lib}w.so.${version:0:3}" "lib${lib}.so" + ln -sfr "lib${lib}w.a" "lib${lib}.a" + (cd pkgconfig; ln -sf "${lib}w.pc" "$lib.pc") || termux_error_exit "Failed to install comatibility symlink for '${lib}'" done - # Legacy compatibility symlinks (libcurses, libtermcap, libtic, libtinfo). for lib in curses termcap tic tinfo; do - ln -sfr libncursesw.so.${TERMUX_PKG_VERSION:0:3} lib${lib}.so.${TERMUX_PKG_VERSION:0:3} - ln -sfr libncursesw.so.${TERMUX_PKG_VERSION:0:3} lib${lib}.so.${TERMUX_PKG_VERSION:0:1} - ln -sfr libncursesw.so.${TERMUX_PKG_VERSION:0:3} lib${lib}.so - ln -sfr libncursesw.a lib${lib}.a - (cd pkgconfig; ln -sfr ncursesw.pc ${lib}.pc) + ln -sfr "libncursesw.so.${version:0:3}" "lib${lib}.so.${version:0:3}" + ln -sfr "libncursesw.so.${version:0:3}" "lib${lib}.so.${version:0:1}" + ln -sfr "libncursesw.so.${version:0:3}" "lib${lib}.so" + ln -sfr libncursesw.a "lib${lib}.a" + (cd pkgconfig; ln -sfr ncursesw.pc "${lib}.pc") || termux_error_exit "Failed to install legacy comatibility symlink for '${lib}'" done - # Some packages want these: - cd $TERMUX_PREFIX/include/ + cd "$TERMUX_PREFIX/include/" || termux_error_exit "Prefix 'include' directory does not exist." rm -Rf ncurses{,w} mkdir ncurses{,w} ln -s ../{curses.h,eti.h,form.h,menu.h,ncurses_dll.h,ncurses.h,panel.h,termcap.h,term_entry.h,term.h,unctrl.h} ncurses ln -s ../{curses.h,eti.h,form.h,menu.h,ncurses_dll.h,ncurses.h,panel.h,termcap.h,term_entry.h,term.h,unctrl.h} ncursesw - # Strip away 30 years of cruft to decrease size. - local TI=$TERMUX_PREFIX/share/terminfo - mv $TI $TERMUX_PKG_TMPDIR/full-terminfo - mkdir -p $TI/{a,d,e,g,n,k,l,p,r,s,t,v,x} - cp $TERMUX_PKG_TMPDIR/full-terminfo/a/ansi $TI/a/ - cp $TERMUX_PKG_TMPDIR/full-terminfo/d/{dtterm,dumb} $TI/d/ - cp $TERMUX_PKG_TMPDIR/full-terminfo/e/eterm-color $TI/e/ - cp $TERMUX_PKG_TMPDIR/full-terminfo/g/gnome{,-256color} $TI/g/ - cp $TERMUX_PKG_TMPDIR/full-terminfo/n/nsterm $TI/n/ - cp $TERMUX_PKG_TMPDIR/full-terminfo/k/kitty{,+common,-direct} $TI/k/ - cp $TERMUX_PKG_TMPDIR/full-terminfo/l/linux $TI/l/ - cp $TERMUX_PKG_TMPDIR/full-terminfo/p/putty{,-256color} $TI/p/ - cp $TERMUX_PKG_TMPDIR/full-terminfo/r/rxvt{,-256color} $TI/r/ - cp $TERMUX_PKG_TMPDIR/full-terminfo/s/{screen{,2,-256color},st{,-256color}} $TI/s/ - cp $TERMUX_PKG_TMPDIR/full-terminfo/t/tmux{,-256color} $TI/t/ - cp $TERMUX_PKG_TMPDIR/full-terminfo/v/{vt52,vt100,vt102} $TI/v/ - cp $TERMUX_PKG_TMPDIR/full-terminfo/x/xterm{,-color,-new,-16color,-256color,+256color} $TI/x/ - - tic -x -o $TI $TERMUX_PKG_SRCDIR/rxvt-unicode-${TERMUX_PKG_VERSION[1]}/doc/etc/rxvt-unicode.terminfo - tic -x -o $TI $TERMUX_PKG_SRCDIR/termite-${TERMUX_PKG_VERSION[2]}/termite.terminfo - tic -x -o $TI $TERMUX_PKG_SRCDIR/kitty-${TERMUX_PKG_VERSION[3]}/terminfo/kitty.terminfo - tic -x -o $TI $TERMUX_PKG_SRCDIR/alacritty-${TERMUX_PKG_VERSION[4]}/extra/alacritty.info + local TI="$TERMUX_PREFIX/share/terminfo" + mv "$TI" "$TERMUX_PKG_TMPDIR/full-terminfo" + mkdir -p "$TI"/{a,d,e,g,n,l,p,r,s,t,v,x} + cp "$TERMUX_PKG_TMPDIR"/full-terminfo/a/ansi "$TI/a/" + cp "$TERMUX_PKG_TMPDIR"/full-terminfo/d/{dtterm,dumb} "$TI/d/" + cp "$TERMUX_PKG_TMPDIR"/full-terminfo/e/eterm-color "$TI/e/" + cp "$TERMUX_PKG_TMPDIR"/full-terminfo/g/gnome{,-256color} "$TI/g/" + cp "$TERMUX_PKG_TMPDIR"/full-terminfo/n/nsterm "$TI/n/" + cp "$TERMUX_PKG_TMPDIR"/full-terminfo/l/linux "$TI/l/" + cp "$TERMUX_PKG_TMPDIR"/full-terminfo/p/putty{,-256color} "$TI/p/" + cp "$TERMUX_PKG_TMPDIR"/full-terminfo/r/rxvt{,-256color} "$TI/r/" + cp "$TERMUX_PKG_TMPDIR"/full-terminfo/s/{screen{,2,-256color},st{,-256color}} "$TI/s/" + cp "$TERMUX_PKG_TMPDIR"/full-terminfo/t/tmux{,-256color} "$TI/t/" + cp "$TERMUX_PKG_TMPDIR"/full-terminfo/v/vt{52,100,102} "$TI/v/" + cp "$TERMUX_PKG_TMPDIR"/full-terminfo/x/xterm{,-color,-new,-16color,-256color,+256color} "$TI/x/" } diff --git a/patches/properties.patch b/patches/properties.patch new file mode 100644 index 0000000..786b526 --- /dev/null +++ b/patches/properties.patch @@ -0,0 +1,24 @@ +--- a/scripts/properties.sh ++++ b/scripts/properties.sh +@@ -464,7 +464,7 @@ + # + # Default value: `com.termux` + ## +-TERMUX_APP__PACKAGE_NAME="com.termux" ++TERMUX_APP__PACKAGE_NAME="xyz.jekyllex" + TERMUX_APP_PACKAGE="$TERMUX_APP__PACKAGE_NAME" # Deprecated alternative variable for `TERMUX_APP__PACKAGE_NAME` + + __termux_build_props__add_variables_validator_actions "TERMUX_APP__PACKAGE_NAME" "app_package_name" +@@ -2231,10 +2231,10 @@ + __termux_build_props__add_variables_validator_actions "TERMUX_CLEANUP_BUILT_PACKAGES_THRESHOLD" "unsigned_int" + + # Path to CGCT tools +-CGCT_DEFAULT_PREFIX="/data/data/com.termux/files/usr/glibc" ++CGCT_DEFAULT_PREFIX="/data/data/xyz.jekyllex/files/usr/glibc" + __termux_build_props__add_variables_validator_actions "CGCT_DEFAULT_PREFIX" "safe_absolute_path invalid_termux_prefix_paths" + +-export CGCT_DIR="/data/data/com.termux/cgct" ++export CGCT_DIR="/data/data/xyz.jekyllex/cgct" + __termux_build_props__add_variables_validator_actions "CGCT_DIR" "safe_absolute_path invalid_termux_prefix_paths" + + # Allow to override setup. diff --git a/patches/ruby/build.sh b/patches/ruby/build.sh index 7a695b2..94fd3e6 100644 --- a/patches/ruby/build.sh +++ b/patches/ruby/build.sh @@ -9,7 +9,7 @@ TERMUX_PKG_VERSION=3.3.4 TERMUX_PKG_SRCURL=https://cache.ruby-lang.org/pub/ruby/$(echo $TERMUX_PKG_VERSION | cut -d . -f 1-2)/ruby-${TERMUX_PKG_VERSION}.tar.xz TERMUX_PKG_SHA256=1caaee9a5a6befef54bab67da68ace8d985e4fb59cd17ce23c28d9ab04f4ddad # libbffi is used by the fiddle extension module: -TERMUX_PKG_DEPENDS="libandroid-execinfo, libandroid-support, libffi, libgmp, readline, openssl, libyaml, zlib" +TERMUX_PKG_DEPENDS="libandroid-execinfo, libandroid-support, libffi, libgmp, libxml2, libxslt, readline, openssl, libyaml, zlib" TERMUX_PKG_RECOMMENDS="clang, make, pkg-config, resolv-conf" TERMUX_PKG_BREAKS="ruby-dev" TERMUX_PKG_REPLACES="ruby-dev" @@ -29,6 +29,24 @@ TERMUX_PKG_EXTRA_HOSTBUILD_CONFIGURE_ARGS=" --disable-install-capi " +_jekyllex_apply_gem_patches() { + local gems_root="$TERMUX_PKG_SRCDIR/.bundle/gems" + local patches_root="$TERMUX_SCRIPTDIR/patches/gems" + local gem_dir name patch_file + [ -d "$gems_root" ] || return 0 + [ -d "$patches_root" ] || return 0 + for gem_dir in "$gems_root"/*; do + [ -d "$gem_dir" ] || continue + name=$(basename "$gem_dir") + [ -d "$patches_root/$name" ] || continue + for patch_file in "$patches_root/$name"/*; do + [ -f "$patch_file" ] || continue + echo "Applying gem patch $(basename "$patch_file") -> $name" + (cd "$gem_dir" && patch -p1 --forward --batch < "$patch_file") || true + done + done +} + termux_step_host_build() { "$TERMUX_PKG_SRCDIR/configure" ${TERMUX_PKG_EXTRA_HOSTBUILD_CONFIGURE_ARGS} make -j $TERMUX_PKG_MAKE_PROCESSES @@ -48,6 +66,11 @@ termux_step_pre_configure() { autoreconf -fi export PATH=$TERMUX_PKG_HOSTBUILD_DIR/ruby-host/bin:$PATH + export NOKOGIRI_USE_SYSTEM_LIBRARIES=1 + export PKG_CONFIG_PATH="${TERMUX_PREFIX}/lib/pkgconfig${PKG_CONFIG_PATH:+:$PKG_CONFIG_PATH}" + GEM_HOME="$TERMUX_PKG_HOSTBUILD_DIR/ruby-host/lib/ruby/gems/${_RUBY_API_VERSION}" \ + GEM_PATH="$TERMUX_PKG_HOSTBUILD_DIR/ruby-host/lib/ruby/gems/${_RUBY_API_VERSION}" \ + gem install mini_portile2 -v 2.8.7 --no-document || true if [ "$TERMUX_ARCH_BITS" = 32 ]; then # process.c:function timetick2integer: error: undefined reference to '__mulodi4' @@ -58,25 +81,39 @@ termux_step_pre_configure() { CFLAGS+=" -fno-strict-aliasing" } +termux_step_make() { + export PATH=$TERMUX_PKG_HOSTBUILD_DIR/ruby-host/bin:$PATH + export NOKOGIRI_USE_SYSTEM_LIBRARIES=1 + export PKG_CONFIG_PATH="${TERMUX_PREFIX}/lib/pkgconfig${PKG_CONFIG_PATH:+:$PKG_CONFIG_PATH}" + + make extract-gems || true + _jekyllex_apply_gem_patches + if ! make -j $TERMUX_PKG_MAKE_PROCESSES; then + _jekyllex_apply_gem_patches + make -j $TERMUX_PKG_MAKE_PROCESSES + fi +} + termux_step_make_install() { make install make uninstall # remove possible remains to get fresh timestamps make install - local RBCONFIG=$TERMUX_PREFIX/lib/ruby/${_RUBY_API_VERSION}/${TERMUX_HOST_PLATFORM}/rbconfig.rb - - # Fix absolute paths to executables: - perl -p -i -e 's/^.*CONFIG\["INSTALL"\].*$/ CONFIG["INSTALL"] = "install -c"/' $RBCONFIG - perl -p -i -e 's/^.*CONFIG\["PKG_CONFIG"\].*$/ CONFIG["PKG_CONFIG"] = "pkg-config"/' $RBCONFIG - perl -p -i -e 's/^.*CONFIG\["MAKEDIRS"\].*$/ CONFIG["MAKEDIRS"] = "mkdir -p"/' $RBCONFIG - perl -p -i -e 's/^.*CONFIG\["MKDIR_P"\].*$/ CONFIG["MKDIR_P"] = "mkdir -p"/' $RBCONFIG - perl -p -i -e 's/^.*CONFIG\["EGREP"\].*$/ CONFIG["EGREP"] = "grep -E"/' $RBCONFIG - perl -p -i -e 's/^.*CONFIG\["GREP"\].*$/ CONFIG["GREP"] = "grep"/' $RBCONFIG + local RBCONFIG + RBCONFIG=$(find "$TERMUX_PREFIX/lib/ruby/${_RUBY_API_VERSION}" -name rbconfig.rb 2>/dev/null | head -n 1) + if [ -n "$RBCONFIG" ]; then + perl -p -i -e 's/^.*CONFIG\["INSTALL"\].*$/ CONFIG["INSTALL"] = "install -c"/' "$RBCONFIG" + perl -p -i -e 's/^.*CONFIG\["PKG_CONFIG"\].*$/ CONFIG["PKG_CONFIG"] = "pkg-config"/' "$RBCONFIG" + perl -p -i -e 's/^.*CONFIG\["MAKEDIRS"\].*$/ CONFIG["MAKEDIRS"] = "mkdir -p"/' "$RBCONFIG" + perl -p -i -e 's/^.*CONFIG\["MKDIR_P"\].*$/ CONFIG["MKDIR_P"] = "mkdir -p"/' "$RBCONFIG" + perl -p -i -e 's/^.*CONFIG\["EGREP"\].*$/ CONFIG["EGREP"] = "grep -E"/' "$RBCONFIG" + perl -p -i -e 's/^.*CONFIG\["GREP"\].*$/ CONFIG["GREP"] = "grep"/' "$RBCONFIG" + fi } termux_step_post_massage() { - local _RUBYGEMS_ARCH=${TERMUX_HOST_PLATFORM/i686-/x86-} - if [ ! -d ./lib/ruby/gems/${_RUBY_API_VERSION}/extensions/${_RUBYGEMS_ARCH} ]; then + local ext_root="./lib/ruby/gems/${_RUBY_API_VERSION}/extensions" + if [ ! -d "$ext_root" ] || [ -z "$(find "$ext_root" -name gem.build_complete | head -n 1)" ]; then termux_error_exit "Extensions for bundled gems were not installed." fi } diff --git a/patches/ruby/rbinstall.rb.patch b/patches/ruby/rbinstall.rb.patch index 6635029..0e51cc8 100644 --- a/patches/ruby/rbinstall.rb.patch +++ b/patches/ruby/rbinstall.rb.patch @@ -40,7 +40,7 @@ index bb2e6a2..8b98bd8 100755 + patch_files.each do |patch_file| + target = "#{srcdir}/.bundle/gems/#{gem_name}" + FileUtils.cp(patch_file, target) -+ system("cd #{target} && git apply #{File.basename(patch_file)}") ++ system("cd #{target} && patch -p1 --forward --batch < #{patch_file}") + end package = RbInstall::DirPackage.new spec ins = RbInstall::UnpackedInstaller.new(package, options) diff --git a/patches/ruby/tool-rbinstall.rb.diff b/patches/ruby/tool-rbinstall.rb.diff new file mode 100644 index 0000000..d27aa0b --- /dev/null +++ b/patches/ruby/tool-rbinstall.rb.diff @@ -0,0 +1,20 @@ +--- a/tool/rbinstall.rb ++++ b/tool/rbinstall.rb +@@ -1003,7 +1003,7 @@ + end + + def install_default_gem(dir, srcdir, bindir) +- gem_dir = Gem.default_dir ++ gem_dir = "@TERMUX_PREFIX@/lib/ruby/gems/@RUBY_API_VERSION@" + install_dir = with_destdir(gem_dir) + prepare "default gems from #{dir}", gem_dir + RbInstall.no_write do +@@ -1052,7 +1052,7 @@ + end + + install?(:ext, :comm, :gem, :'bundled-gems') do +- gem_dir = Gem.default_dir ++ gem_dir = "@TERMUX_PREFIX@/lib/ruby/gems/@RUBY_API_VERSION@" + install_dir = with_destdir(gem_dir) + prepare "bundled gems", gem_dir + RbInstall.no_write do diff --git a/properties.sh b/properties.sh deleted file mode 100755 index bb64bcb..0000000 --- a/properties.sh +++ /dev/null @@ -1,52 +0,0 @@ -# Adapted from: https://github.com/termux/termux-packages/blob/acf1df1e90034ce0100ac54726ae56792bf56859/scripts/properties.sh -TERMUX_SDK_REVISION=9123335 -TERMUX_ANDROID_BUILD_TOOLS_VERSION=33.0.1 - -: "${TERMUX_NDK_VERSION_NUM:="27"}" -: "${TERMUX_NDK_REVISION:=""}" -TERMUX_NDK_VERSION=$TERMUX_NDK_VERSION_NUM$TERMUX_NDK_REVISION - -if [ -n "${JAVA_HOME+x}" ]; then - : "${TERMUX_JAVA_HOME:="${JAVA_HOME}"}" -else - : "${TERMUX_JAVA_HOME:=/usr/lib/jvm/java-17-openjdk-amd64}" - export JAVA_HOME="${TERMUX_JAVA_HOME}" -fi - -if [ -z "${ANDROID_HOME+x}" ]; then - : "${ANDROID_HOME:="${HOME}/lib/android-sdk-$TERMUX_SDK_REVISION"}" -fi - -if [ -z "${NDK+x}" ]; then - : "${NDK:="${HOME}/lib/android-ndk-r${TERMUX_NDK_VERSION}"}" -fi - -# Termux packages configuration. -TERMUX_APP_PACKAGE="xyz.jekyllex" -TERMUX_REPO_PACKAGE="xyz.jekyllex" -TERMUX_BASE_DIR="/data/data/${TERMUX_APP_PACKAGE}/files" -TERMUX_CACHE_DIR="/data/data/${TERMUX_APP_PACKAGE}/cache" -TERMUX_ANDROID_HOME="${TERMUX_BASE_DIR}/home" -TERMUX_APPS_DIR="${TERMUX_BASE_DIR}/apps" -TERMUX_PREFIX_CLASSICAL="${TERMUX_BASE_DIR}/usr" -TERMUX_PREFIX="${TERMUX_PREFIX_CLASSICAL}" -TERMUX_ETC_PREFIX_DIR_PATH="${TERMUX_PREFIX}/etc" -TERMUX_PROFILE_D_PREFIX_DIR_PATH="${TERMUX_ETC_PREFIX_DIR_PATH}/profile.d" -TERMUX_CONFIG_PREFIX_DIR_PATH="${TERMUX_ETC_PREFIX_DIR_PATH}/termux" -TERMUX_BOOTSTRAP_CONFIG_DIR_PATH="${TERMUX_CONFIG_PREFIX_DIR_PATH}/bootstrap" - -# Path to CGCT tools -CGCT_DEFAULT_PREFIX="/data/data/${TERMUX_APP_PACKAGE}/files/usr/glibc" -export CGCT_DIR="/data/data/${TERMUX_APP_PACKAGE}/cgct" - -export TERMUX_PACKAGES_DIRECTORIES=$(jq --raw-output 'del(.pkg_format) | keys | .[]' ${TERMUX_SCRIPTDIR}/repo.json) - -# Allow to override setup. -for f in "${HOME}/.config/termux/termuxrc.sh" "${HOME}/.termux/termuxrc.sh" "${HOME}/.termuxrc"; do - if [ -f "$f" ]; then - echo "Using builder configuration from '$f'..." - . "$f" - break - fi -done -unset f