From 1e215d073b456741c1a673e029eac88b57dc6e7b Mon Sep 17 00:00:00 2001 From: TomIO Date: Sat, 21 Jun 2025 01:08:13 +0200 Subject: [PATCH] fix(main/zig): check the Kernel version and stop if unsupported at install --- packages/zig/build.sh | 15 +++++++++++++ packages/zig/preinst.sh.in | 44 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 packages/zig/preinst.sh.in diff --git a/packages/zig/build.sh b/packages/zig/build.sh index b5f91908777b090..9f637410ff38e44 100644 --- a/packages/zig/build.sh +++ b/packages/zig/build.sh @@ -4,6 +4,7 @@ TERMUX_PKG_LICENSE="MIT" TERMUX_PKG_LICENSE_FILE="zig/LICENSE" TERMUX_PKG_MAINTAINER="@termux" TERMUX_PKG_VERSION="0.14.1" +TERMUX_PKG_REVISION=1 TERMUX_PKG_SRCURL=https://github.com/ziglang/zig/releases/download/${TERMUX_PKG_VERSION}/zig-bootstrap-${TERMUX_PKG_VERSION}.tar.xz TERMUX_PKG_SHA256=89b2fce50bfbb1eee29c382193d22c6eb0c7da3a96b5ba6d05e0af2945b3ca3d TERMUX_PKG_BUILD_IN_SRC=true @@ -44,3 +45,17 @@ termux_step_post_massage() { "$TERMUX_PKG_MASSAGEDIR/$TERMUX_PREFIX_CLASSICAL/bin/zig" init ) } + +termux_step_create_debscripts() { + # Minimum supported kernel version for this version of Zig. + # Zig pegs this to the oldest supported Debian LTS build + # https://github.com/ziglang/zig/blob/0.14.1/lib/std/Target.zig#L454-L469 + # https://github.com/ziglang/zig/commit/0d4d8dfc1583138a59147f1aab5eec803a23adb1 + # https://github.com/ziglang/zig/issues/20423 + local ZIG_MINIMUM="4.19.0" + + sed -e "s|@ZIG_MINIMUM@|$ZIG_MINIMUM|g" \ + -e "s|@TERMUX_PKG_VERSION@|$TERMUX_PKG_VERSION|g" \ + -e "s|@TERMUX_PACKAGE_FORMAT@|$TERMUX_PACKAGE_FORMAT|g" \ + "$TERMUX_PKG_BUILDER_DIR/preinst.sh.in" > ./preinst +} diff --git a/packages/zig/preinst.sh.in b/packages/zig/preinst.sh.in new file mode 100644 index 000000000000000..714878ae9495b88 --- /dev/null +++ b/packages/zig/preinst.sh.in @@ -0,0 +1,44 @@ +#!@TERMUX_PREFIX@/bin/sh +# shellcheck shell=sh + +echo "Checking that your device meets the" +echo "minimum kernel version for Zig @TERMUX_PKG_VERSION@" +echo + +is_supported() { + _KERNEL_VERSION="$1" + _MINIMUM_VERSION="$2" + # shellcheck disable=SC2194 # We replace this in the build script + case "@TERMUX_PACKAGE_FORMAT@" in + apt) + if dpkg --compare-versions "$_KERNEL_VERSION" lt "$_MINIMUM_VERSION"; then + return 1 + fi + ;; + pacman) + if [ "$(vercmp "$_KERNEL_VERSION" "$_MINIMUM_VERSION")" != 1 ]; then + return 1 + fi + ;; + esac +return 0 +} + +KERNEL_VERSION="$(uname -r)" +if ! is_supported "$KERNEL_VERSION" "@ZIG_MINIMUM@"; then + echo "Your device's kernel version is too old for Zig @TERMUX_PKG_VERSION@" + if is_supported "$KERNEL_VERSION" "3.16.0"; then + echo "Your device does however support Zig 0.13.0 or earlier." + # uncomment these if/when we move old Zig versions to the TUR. + # echo "You can install it from the TUR." + # echo "" + # echo "pkg up" + # echo "pkg i tur-repo" + # echo "pkg i zig-0.13" + else + echo "Your device does not support any version of Zig" + echo "There's nothing we can do to make it supported." + fi + exit 1 +fi +exit 0