From 3607fca6b8fbf1de95879bf69b97d09a2ca69f89 Mon Sep 17 00:00:00 2001 From: Tee KOBAYASHI Date: Fri, 23 Dec 2022 14:03:54 +0900 Subject: [PATCH] ruby: Bump to 3.2.0 --- packages/ruby/build.sh | 33 +++++++-- packages/ruby/common.mk.patch | 13 ++++ packages/ruby/fix-paths.patch | 68 ++++++++----------- ...nstall.rb.patch => tool-rbinstall.rb.diff} | 4 +- 4 files changed, 68 insertions(+), 50 deletions(-) create mode 100644 packages/ruby/common.mk.patch rename packages/ruby/{tool-rbinstall.rb.patch => tool-rbinstall.rb.diff} (79%) diff --git a/packages/ruby/build.sh b/packages/ruby/build.sh index 2938925fbf..c8fd479412 100644 --- a/packages/ruby/build.sh +++ b/packages/ruby/build.sh @@ -2,9 +2,9 @@ TERMUX_PKG_HOMEPAGE=https://www.ruby-lang.org/ TERMUX_PKG_DESCRIPTION="Dynamic programming language with a focus on simplicity and productivity" TERMUX_PKG_LICENSE="BSD 2-Clause" TERMUX_PKG_MAINTAINER="@termux" -TERMUX_PKG_VERSION=3.1.3 -TERMUX_PKG_SRCURL=https://cache.ruby-lang.org/pub/ruby/${TERMUX_PKG_VERSION:0:3}/ruby-${TERMUX_PKG_VERSION}.tar.xz -TERMUX_PKG_SHA256=4ee161939826bcdfdafa757cf8e293a7f14e357f62be7144f040335cc8c7371a +TERMUX_PKG_VERSION=3.2.0 +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=d2f4577306e6dd932259693233141e5c3ec13622c95b75996541b8d5b68b28b4 # libbffi is used by the fiddle extension module: TERMUX_PKG_DEPENDS="libandroid-execinfo, libandroid-support, libffi, libgmp, readline, openssl, libyaml, zlib" TERMUX_PKG_RECOMMENDS="clang, make, pkg-config" @@ -19,14 +19,29 @@ TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" rb_cv_type_deprecated=x" # getresuid(2) does not work on ChromeOS - https://github.com/termux/termux-app/issues/147: # TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" ac_cv_func_getresuid=no" TERMUX_PKG_HOSTBUILD=true +TERMUX_PKG_EXTRA_HOSTBUILD_CONFIGURE_ARGS=" +--prefix=$TERMUX_PKG_HOSTBUILD_DIR/ruby-host +--disable-install-doc +--disable-install-rdoc +--disable-install-capi +" termux_step_host_build() { - "$TERMUX_PKG_SRCDIR/configure" --prefix=$TERMUX_PKG_HOSTBUILD_DIR/ruby-host + "$TERMUX_PKG_SRCDIR/configure" ${TERMUX_PKG_EXTRA_HOSTBUILD_CONFIGURE_ARGS} make -j $TERMUX_MAKE_PROCESSES make install } termux_step_pre_configure() { + _RUBY_API_VERSION=$(echo $TERMUX_PKG_VERSION | cut -d . -f 1-2).0 + test ${_RUBY_ABI_VERSION:=} && _RUBY_API_VERSION+=+${_RUBY_ABI_VERSION} + + echo "Applying tool-rbinstall.rb.diff" + sed -e "s|@TERMUX_PREFIX@|${TERMUX_PREFIX}|g" \ + -e "s|@RUBY_API_VERSION@|${_RUBY_API_VERSION}|g" \ + $TERMUX_PKG_BUILDER_DIR/tool-rbinstall.rb.diff \ + | patch --silent -p1 + autoreconf -fi export PATH=$TERMUX_PKG_HOSTBUILD_DIR/ruby-host/bin:$PATH @@ -45,7 +60,7 @@ termux_step_make_install() { make uninstall # remove possible remains to get fresh timestamps make install - local RBCONFIG=$TERMUX_PREFIX/lib/ruby/${TERMUX_PKG_VERSION:0:3}.0/${TERMUX_HOST_PLATFORM}/rbconfig.rb + 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 @@ -57,7 +72,11 @@ termux_step_make_install() { } termux_step_post_massage() { - if [ ! -f $TERMUX_PREFIX/lib/ruby/${TERMUX_PKG_VERSION:0:3}.0/${TERMUX_HOST_PLATFORM}/readline.so ]; then - echo "Error: The readline extension was not built" + if [ ! -f ./lib/ruby/${_RUBY_API_VERSION}/${TERMUX_HOST_PLATFORM}/readline.so ]; then + termux_error_exit "The readline extension was not installed." + fi + local _RUBYGEMS_ARCH=${TERMUX_HOST_PLATFORM/i686-/x86-} + if [ ! -d ./lib/ruby/gems/${_RUBY_API_VERSION}/extensions/${_RUBYGEMS_ARCH} ]; then + termux_error_exit "Extensions for bundled gems were not installed." fi } diff --git a/packages/ruby/common.mk.patch b/packages/ruby/common.mk.patch new file mode 100644 index 0000000000..4e1422b8b6 --- /dev/null +++ b/packages/ruby/common.mk.patch @@ -0,0 +1,13 @@ +As of writing, extensions for bundled gems are not installed without this patch. +We have a guard for that in build.sh and you can remove this without extra care. + +--- a/common.mk ++++ b/common.mk +@@ -1375,7 +1375,6 @@ + + refresh-gems: update-bundled_gems prepare-gems + prepare-gems: $(HAVE_BASERUBY:yes=update-gems) $(HAVE_BASERUBY:yes=extract-gems) +-prepare-gems: $(DOT_WAIT) $(HAVE_BASERUBY:yes=outdate-bundled-gems) + extract-gems: $(HAVE_BASERUBY:yes=update-gems) + + update-gems$(gnumake:yes=-sequential): PHONY diff --git a/packages/ruby/fix-paths.patch b/packages/ruby/fix-paths.patch index afce393a10..0485ee25a2 100644 --- a/packages/ruby/fix-paths.patch +++ b/packages/ruby/fix-paths.patch @@ -25,13 +25,13 @@ diff -uNr ruby-3.0.0/dln_find.c ruby-3.0.0.mod/dln_find.c @@ -72,10 +72,7 @@ if (!path) { - path = -- "/usr/local/bin" PATH_SEP -- "/usr/ucb" PATH_SEP -- "/usr/bin" PATH_SEP -- "/bin" PATH_SEP -+ "@TERMUX_PREFIX@/bin" PATH_SEP - "."; + path = +- "/usr/local/bin" PATH_SEP +- "/usr/ucb" PATH_SEP +- "/usr/bin" PATH_SEP +- "/bin" PATH_SEP ++ "@TERMUX_PREFIX@/bin" PATH_SEP + "."; } buf = dln_find_1(fname, path, buf, size, 1 DLN_FIND_EXTRA_ARG); diff -uNr ruby-3.0.0/ext/etc/etc.c ruby-3.0.0.mod/ext/etc/etc.c @@ -46,20 +46,6 @@ diff -uNr ruby-3.0.0/ext/etc/etc.c ruby-3.0.0.mod/ext/etc/etc.c const char *tmpstr = default_tmp; size_t tmplen = strlen(default_tmp); # if defined _CS_DARWIN_USER_TEMP_DIR -diff -uNr ruby-3.0.0/ext/fiddle/libffi-3.2.1/src/closures.c ruby-3.0.0.mod/ext/fiddle/libffi-3.2.1/src/closures.c ---- ruby-3.0.0/ext/fiddle/libffi-3.2.1/src/closures.c 2014-11-08 14:47:24.000000000 +0200 -+++ ruby-3.0.0.mod/ext/fiddle/libffi-3.2.1/src/closures.c 2021-02-09 17:40:07.564105731 +0200 -@@ -391,8 +391,8 @@ - int repeat; - } open_temp_exec_file_opts[] = { - { open_temp_exec_file_env, "TMPDIR", 0 }, -- { open_temp_exec_file_dir, "/tmp", 0 }, -- { open_temp_exec_file_dir, "/var/tmp", 0 }, -+ { open_temp_exec_file_dir, "@TERMUX_PREFIX@/tmp", 0 }, -+ { open_temp_exec_file_dir, "@TERMUX_PREFIX@/var/tmp", 0 }, - { open_temp_exec_file_dir, "/dev/shm", 0 }, - { open_temp_exec_file_env, "HOME", 0 }, - #ifdef HAVE_MNTENT diff -uNr ruby-3.0.0/ext/pty/pty.c ruby-3.0.0.mod/ext/pty/pty.c --- ruby-3.0.0/ext/pty/pty.c 2020-12-25 05:33:01.000000000 +0200 +++ ruby-3.0.0.mod/ext/pty/pty.c 2021-02-09 17:45:16.473977053 +0200 @@ -67,11 +53,11 @@ diff -uNr ruby-3.0.0/ext/pty/pty.c ruby-3.0.0.mod/ext/pty/pty.c char errbuf[32]; if (argc == 0) { -- const char *shellname = "/bin/sh"; -+ const char *shellname = "@TERMUX_PREFIX@/bin/sh"; +- const char *shellname = "/bin/sh"; ++ const char *shellname = "@TERMUX_PREFIX@/bin/sh"; - if ((p = getenv("SHELL")) != NULL) { - shellname = p; + if ((p = getenv("SHELL")) != NULL) { + shellname = p; diff -uNr ruby-3.0.0/hash.c ruby-3.0.0.mod/hash.c --- ruby-3.0.0/hash.c 2020-12-25 05:33:01.000000000 +0200 +++ ruby-3.0.0.mod/hash.c 2021-02-09 17:43:01.683876134 +0200 @@ -172,6 +158,15 @@ diff -uNr ruby-3.0.0/mjit.c ruby-3.0.0.mod/mjit.c # undef RETURN_ENV } +@@ -1741,7 +1741,7 @@ + M("--mjit-warnings", "", "Enable printing JIT warnings"), + M("--mjit-debug", "", "Enable JIT debugging (very slow), or add cflags if specified"), + M("--mjit-wait", "", "Wait until JIT compilation finishes every time (for testing)"), +- M("--mjit-save-temps", "", "Save JIT temporary files in $TMP or /tmp (for testing)"), ++ M("--mjit-save-temps", "", "Save JIT temporary files in $TMP or @TERMUX_PREFIX@/tmp (for testing)"), + M("--mjit-verbose=num", "", "Print JIT logs of level num or less to stderr (default: 0)"), + M("--mjit-max-cache=num", "", "Max number of methods to be JIT-ed in a cache (default: " + STRINGIZE(DEFAULT_MAX_CACHE_SIZE) ")"), diff -uNr ruby-3.0.0/process.c ruby-3.0.0.mod/process.c --- ruby-3.0.0/process.c 2020-12-25 05:33:01.000000000 +0200 +++ ruby-3.0.0.mod/process.c 2021-02-09 17:49:30.716668413 +0200 @@ -202,24 +197,15 @@ diff -uNr ruby-3.0.0/process.c ruby-3.0.0.mod/process.c diff -uNr ruby-3.1.0/ruby.c ruby-3.1.0.mod/ruby.c --- ruby-3.1.0/ruby.c +++ ruby-3.1.0.mod/ruby.c -@@ -359,7 +359,7 @@ - M("--mjit-warnings", "", "Enable printing JIT warnings"), - M("--mjit-debug", "", "Enable JIT debugging (very slow), or add cflags if specified"), - M("--mjit-wait", "", "Wait until JIT compilation finishes every time (for testing)"), -- M("--mjit-save-temps", "", "Save JIT temporary files in $TMP or /tmp (for testing)"), -+ M("--mjit-save-temps", "", "Save JIT temporary files in $TMP or @TERMUX_PREFIX@/tmp (for testing)"), - M("--mjit-verbose=num", "", "Print JIT logs of level num or less to stderr (default: 0)"), - M("--mjit-max-cache=num", "", "Max number of methods to be JIT-ed in a cache (default: 100)"), - M("--mjit-min-calls=num", "", "Number of calls to trigger JIT (for testing, default: 10000)"), @@ -684,7 +684,7 @@ - RUBY_ARCH_PATH; - const ptrdiff_t libdir_len = (ptrdiff_t)sizeof(libdir) - - rb_strlen_lit(RUBY_ARCH_PATH) - 1; -- static const char bindir[] = "/bin"; -+ static const char bindir[] = "@TERMUX_PREFIX@/bin"; - const ptrdiff_t bindir_len = (ptrdiff_t)sizeof(bindir) - 1; + RUBY_ARCH_PATH; + const ptrdiff_t libdir_len = (ptrdiff_t)sizeof(libdir) + - rb_strlen_lit(RUBY_ARCH_PATH) - 1; +- static const char bindir[] = "/bin"; ++ static const char bindir[] = "@TERMUX_PREFIX@/bin"; + const ptrdiff_t bindir_len = (ptrdiff_t)sizeof(bindir) - 1; - const char *p2 = NULL; + const char *p2 = NULL; diff -uNr ruby-3.0.0/spec/bundler/commands/exec_spec.rb ruby-3.0.0.mod/spec/bundler/commands/exec_spec.rb --- ruby-3.0.0/spec/bundler/commands/exec_spec.rb 2020-12-25 05:33:01.000000000 +0200 +++ ruby-3.0.0.mod/spec/bundler/commands/exec_spec.rb 2021-02-09 17:50:58.332721054 +0200 diff --git a/packages/ruby/tool-rbinstall.rb.patch b/packages/ruby/tool-rbinstall.rb.diff similarity index 79% rename from packages/ruby/tool-rbinstall.rb.patch rename to packages/ruby/tool-rbinstall.rb.diff index c259a157a7..0871942cd0 100644 --- a/packages/ruby/tool-rbinstall.rb.patch +++ b/packages/ruby/tool-rbinstall.rb.diff @@ -5,7 +5,7 @@ def install_default_gem(dir, srcdir, bindir) - gem_dir = Gem.default_dir -+ gem_dir = "@TERMUX_PREFIX@/lib/ruby/gems/3.1.0" ++ 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 @@ -14,7 +14,7 @@ install?(:ext, :comm, :gem, :'bundled-gems') do - gem_dir = Gem.default_dir -+ gem_dir = "@TERMUX_PREFIX@/lib/ruby/gems/3.1.0" ++ 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