diff options
| author | Hans de Graaff <graaff@gentoo.org> | 2025-03-26 18:36:15 +0100 |
|---|---|---|
| committer | Hans de Graaff <graaff@gentoo.org> | 2025-03-26 18:46:47 +0100 |
| commit | 31e698ded98899b5fc16de7b7f7304869528e274 (patch) | |
| tree | 56843beb176e71ddb7cb118cebc145ae957ced6f /dev-lang/ruby | |
| parent | e97d8e2e4d95c697f4242b4ca1ed76d1b2569350 (diff) | |
| download | gentoo-31e698ded98899b5fc16de7b7f7304869528e274.tar.gz gentoo-31e698ded98899b5fc16de7b7f7304869528e274.tar.bz2 gentoo-31e698ded98899b5fc16de7b7f7304869528e274.zip | |
dev-lang/ruby: add 3.1.7, 3.2.8
Signed-off-by: Hans de Graaff <graaff@gentoo.org>
Diffstat (limited to 'dev-lang/ruby')
| -rw-r--r-- | dev-lang/ruby/Manifest | 2 | ||||
| -rw-r--r-- | dev-lang/ruby/ruby-3.1.7.ebuild | 289 | ||||
| -rw-r--r-- | dev-lang/ruby/ruby-3.2.8.ebuild | 305 |
3 files changed, 596 insertions, 0 deletions
diff --git a/dev-lang/ruby/Manifest b/dev-lang/ruby/Manifest index b3adb09e5be6..3673ab33c841 100644 --- a/dev-lang/ruby/Manifest +++ b/dev-lang/ruby/Manifest @@ -1,6 +1,8 @@ DIST ruby-3.1.6.tar.xz 15273916 BLAKE2B feb697b8d01ebde0042e679b814c4c95481c6afa607db46ad1511fb0d1a555d7800725e847e90dd9944ef42575c5205cf711025a165a65b6070743701631929c SHA512 a3159648706d6d11ce9613201141e884b3accc69bf928c756de8a8f2b71d219886e91435d30cf2c30e85af31f87801138e10106344766100f1b80662c7244652 +DIST ruby-3.1.7.tar.xz 15196628 BLAKE2B 9e94bc1e3eac75864f700261aa734f4907f3005e8ffa6cbc82d6da7612554f162036a9f25fb6a5c0e35ec11efaaf1e638f47b6de45c8ceac82f6d4d3ff040a14 SHA512 44e013f6e8d159a49125d24eaf02f58e02997fcd7bd4f4370250248c2d3264fb45183e33797638a7d9a2907fb48fe1b46f5f45514d60a800f96bce2c10baca82 DIST ruby-3.2.6.tar.xz 15126888 BLAKE2B d59352e5543b96abe3de5f10b578c2b910a0f18f848fb32a10b80f8e882e7c687a3149ce6ab6ba1271731b8668e1dd47754b778def13010a587aa8544e881943 SHA512 78f7fc76d47c772b9bc313cbcb57a2c0f1a975e09cfe46a3083f6f603d62b0031bd4c55896c8353c1c343974d45077e06e310111198d870883e06a0cf6fd03ce DIST ruby-3.2.7.tar.xz 15128228 BLAKE2B a75717dde36669c7b62e7175fb74f2a6f5c7590e7b56ced3d35f1c626d3b7f67eed8b32705187708828622478166d3b630215f828773fe677af67996f0da6d3c SHA512 c10b6fd27fad3bbd33d780c0a3eccb5df2a8465a89d2294ea6f14c7e5e8f7c8ea30b8a8b68bf8903c76f9133c5d984d5d66052ec4eb413153c739e6eea24beed +DIST ruby-3.2.8.tar.xz 15130380 BLAKE2B 8d5223bfcec8804f9b52202a3e153c62427cd3a7cc7c2323ee8ea6fdb1b8e5e4cddec7516cf1db3dab7e06ae50122ae36760e518bcf471e344a7b7dffea5603c SHA512 19ff96619945d907e509803b85ecf21750ffa4ae033045272feb43c183ab180d0033b98cf47c18804e448f01bc1928e3b833c61c98446dbe6be31fb9ea6b059d DIST ruby-3.3.6.tar.xz 16398228 BLAKE2B 7e2fb58ca1f5ee7ab9c2fd7b24fdbf9eef9805329cdf23c9926bac0268344f101475c2c7aacb26f73c4c5f73704727e19a9cc074c4587b9c53a115d6fb0a5e85 SHA512 c4b86188bf539fa737932e1ba5b746bc295e7c43b2f8cca2668eb7c88aa7228e2ce9032bbcd244a7d558a11bc842445b5fbeac3503ca7d223b63c53e08dba4ab DIST ruby-3.3.7.tar.xz 16379504 BLAKE2B 33bd05d8462ec7e33872a31bcbfabcfc65a0245dc6519248e474085f3255dc3ad67210400ac314b291f16d3eb261459cadba180dfccc510a2b2c978035435347 SHA512 4082a7684c1b0d53a0ce493f79568e851d37a864f59c58b2e0c273b2659e0ca75318ddff939fdf5e9d0a3eeba1b6d8f03bf88afb49a5ffd77714f1c8a7dfdd55 DIST ruby-3.4.1.tar.xz 17222800 BLAKE2B 949cb57aeb6af4ca70d6638a2cd38ec9d067a3798ec27e02ee5934c902b74684b9f96d9fc00c1b22932de20b38b5bd3403a9a1a1bfe0c1caa380327d376d4c45 SHA512 8d2e34117696f9debf463ae1eed288fdbb5c1a12e32800e901b69218e3b7302a0066052077e2ebca851e3a635296199bd5a10437eea1d6f787f69a77bb865680 diff --git a/dev-lang/ruby/ruby-3.1.7.ebuild b/dev-lang/ruby/ruby-3.1.7.ebuild new file mode 100644 index 000000000000..0071dfc446b3 --- /dev/null +++ b/dev-lang/ruby/ruby-3.1.7.ebuild @@ -0,0 +1,289 @@ +# Copyright 1999-2025 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +inherit autotools flag-o-matic multiprocessing + +MY_P="${PN}-$(ver_cut 1-3)" +S=${WORKDIR}/${MY_P} + +SLOT=$(ver_cut 1-2) +MY_SUFFIX=$(ver_rs 1 '' ${SLOT}) +RUBYVERSION=${SLOT}.0 + +DESCRIPTION="An object-oriented scripting language" +HOMEPAGE="https://www.ruby-lang.org/" +SRC_URI="https://cache.ruby-lang.org/pub/ruby/${SLOT}/${MY_P}.tar.xz" + +LICENSE="|| ( Ruby-BSD BSD-2 )" +KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~amd64-linux ~x86-linux ~arm64-macos ~ppc-macos ~x64-macos ~x64-solaris" +IUSE="berkdb debug doc examples gdbm ipv6 jemalloc jit socks5 +ssl static-libs systemtap tk valgrind xemacs" + +RDEPEND=" + berkdb? ( sys-libs/db:= ) + gdbm? ( sys-libs/gdbm:= ) + jemalloc? ( dev-libs/jemalloc:= ) + jit? ( || ( sys-devel/gcc:* llvm-core/clang:* ) ) + ssl? ( + dev-libs/openssl:0= + ) + socks5? ( >=net-proxy/dante-1.1.13 ) + systemtap? ( dev-debug/systemtap ) + tk? ( + dev-lang/tcl:0=[threads] + dev-lang/tk:0=[threads] + ) + dev-libs/libyaml + dev-libs/libffi:= + sys-libs/readline:0= + sys-libs/zlib + virtual/libcrypt:= + >=app-eselect/eselect-ruby-20231008 +" + +DEPEND=" + ${RDEPEND} + valgrind? ( dev-debug/valgrind ) +" + +BUNDLED_GEMS=" + >=dev-ruby/irb-1.4.1[ruby_targets_ruby31(-)] + >=dev-ruby/minitest-5.15.0[ruby_targets_ruby31(-)] + >=dev-ruby/power_assert-2.0.1[ruby_targets_ruby31(-)] + >=dev-ruby/rake-13.0.6-r2[ruby_targets_ruby31(-)] + >=dev-ruby/rbs-2.1.0[ruby_targets_ruby31(-)] + >=dev-ruby/rexml-3.2.5[ruby_targets_ruby31(-)] + >=dev-ruby/rss-0.2.9[ruby_targets_ruby31(-)] + >=dev-ruby/test-unit-3.5.3[ruby_targets_ruby31(-)] + >=dev-ruby/typeprof-0.12.2[ruby_targets_ruby31(-)] +" + +PDEPEND=" + ${BUNDLED_GEMS} + virtual/rubygems[ruby_targets_ruby31(-)] + >=dev-ruby/bundler-2.3.3[ruby_targets_ruby31(-)] + >=dev-ruby/did_you_mean-1.6.1[ruby_targets_ruby31(-)] + >=dev-ruby/json-2.6.1[ruby_targets_ruby31(-)] + >=dev-ruby/rdoc-6.3.3[ruby_targets_ruby31(-)] + xemacs? ( app-xemacs/ruby-modes ) +" + +src_prepare() { + eapply "${FILESDIR}"/"${SLOT}"/011*.patch + eapply "${FILESDIR}"/"${SLOT}"/012*.patch + eapply "${FILESDIR}"/"${SLOT}"/013*.patch + eapply "${FILESDIR}"/"${SLOT}"/020*.patch + eapply "${FILESDIR}"/"${SLOT}"/902*.patch + + if use elibc_musl ; then + eapply "${FILESDIR}"/3.1/901-musl-*.patch + fi + + einfo "Unbundling gems..." + cd "$S" + # Remove bundled gems that we will install via PDEPEND, bug + # 539700. + rm -fr gems/* || die + touch gems/bundled_gems || die + # Don't install CLI tools since they will clash with the gem + rm -f bin/{racc,racc2y,y2racc} || die + sed -i -e '/executables/ s:^:#:' lib/racc/racc.gemspec || die + + einfo "Removing bundled libraries..." + rm -fr ext/fiddle/libffi-3.2.1 || die + + # Remove webrick tests because setting LD_LIBRARY_PATH does not work for them. + rm -rf tool/test/webrick || die + + # Remove tests that are known to fail or require a network connection + rm -f test/ruby/test_process.rb test/rubygems/test_gem{,_path_support}.rb || die + rm -f test/rinda/test_rinda.rb test/socket/test_tcp.rb test/fiber/test_address_resolve.rb test/resolv/test_addr.rb \ + spec/ruby/library/socket/tcpsocket/{initialize,open}_spec.rb|| die + sed -i -e '/def test_test/askip "Depends on system setup"' test/ruby/test_file_exhaustive.rb || die + + # MJIT is broken and removed in later ruby versions. + rm -f test/ruby/test_jit.rb || die + + # This test calls out to the system ruby which is not being tested + # and may not be the same version. + sed -e '/test_without_tty/aomit "Calls system ruby"' \ + -i test/readline/test_readline.rb || die + + if use prefix ; then + # Fix hardcoded SHELL var in mkmf library + sed -i -e "s#\(SHELL = \).*#\1${EPREFIX}/bin/sh#" lib/mkmf.rb || die + fi + + eapply_user + + eautoreconf +} + +src_configure() { + local modules="win32,win32ole" myconf= + + # Ruby's build system does interesting things with MAKEOPTS and doesn't + # handle MAKEOPTS="-Oline" or similar well. Just filter it all out + # and use -j/-l parsed out from the original MAKEOPTS, then use that. + # Newer Portage sets this option by default in GNUMAKEFLAGS if nothing + # is set by the user in MAKEOPTS. See bug #900929 and bug #728424. + local makeopts_tmp="-j$(makeopts_jobs) -l$(makeopts_loadavg)" + unset MAKEOPTS MAKEFLAGS GNUMAKEFLAGS + export MAKEOPTS="${makeopts_tmp}" + + # Avoid a hardcoded path to mkdir to avoid issues with mixed + # usr-merge and normal binary packages, bug #932386. + export ac_cv_path_mkdir=mkdir + + # -fomit-frame-pointer makes ruby segfault, see bug #150413. + filter-flags -fomit-frame-pointer + append-flags -fno-omit-frame-pointer + # In many places aliasing rules are broken; play it safe + # as it's risky with newer compilers to leave it as it is. + append-flags -fno-strict-aliasing + + # Ruby 3.1 does not compile against the gnu23 standard, bug + # #943767. Given that Ruby 3.1 is EOL in March 2025 just opt to use + # the older standard. + append-flags -std=gnu17 + + # Workaround for bug #938302 + if use systemtap && has_version "dev-debug/systemtap[-dtrace-symlink(+)]" ; then + export DTRACE="${BROOT}"/usr/bin/stap-dtrace + fi + + # Socks support via dante + if use socks5 ; then + # Socks support can't be disabled as long as SOCKS_SERVER is + # set and socks library is present, so need to unset + # SOCKS_SERVER in that case. + unset SOCKS_SERVER + fi + + # Increase GC_MALLOC_LIMIT if set (default is 8000000) + if [ -n "${RUBY_GC_MALLOC_LIMIT}" ] ; then + append-flags "-DGC_MALLOC_LIMIT=${RUBY_GC_MALLOC_LIMIT}" + fi + + # ipv6 hack, bug 168939. Needs --enable-ipv6. + use ipv6 || myconf="${myconf} --with-lookup-order-hack=INET" + + # Determine which modules *not* to build depending in the USE flags. + if ! use berkdb ; then + modules="${modules},dbm" + fi + if ! use gdbm ; then + modules="${modules},gdbm" + fi + if ! use ssl ; then + modules="${modules},openssl" + fi + if ! use tk ; then + modules="${modules},tk" + fi + + # Provide an empty LIBPATHENV because we disable rpath but we do not + # need LD_LIBRARY_PATH by default since that breaks USE=multitarget + # #564272 + # except on Darwin, where we really need LIBPATHENV to set the right + # DYLD_ stuff during the invocation of miniruby for it to work + # + # --with-setjmp-type=setjmp for bug #949016 + [[ ${CHOST} == *-darwin* ]] || export LIBPATHENV="" + INSTALL="${EPREFIX}/usr/bin/install -c" econf \ + --program-suffix=${MY_SUFFIX} \ + --with-soname=ruby${MY_SUFFIX} \ + --with-readline-dir="${EPREFIX}"/usr \ + --enable-shared \ + --enable-pthread \ + --disable-rpath \ + --without-baseruby \ + --with-compress-debug-sections=no \ + --with-setjmp-type=setjmp \ + --enable-mkmf-verbose \ + --with-out-ext="${modules}" \ + $(use_with jemalloc jemalloc) \ + $(use_enable jit jit-support ) \ + $(use_enable socks5 socks) \ + $(use_enable systemtap dtrace) \ + $(use_enable doc install-doc) \ + --enable-ipv6 \ + $(use_enable static-libs static) \ + $(use_enable static-libs install-static-library) \ + $(use_with static-libs static-linked-ext) \ + $(use_enable debug) \ + $(use_with valgrind) \ + ${myconf} \ + --enable-option-checking=no + + # Makefile is broken because it lacks -ldl + rm -rf ext/-test-/popen_deadlock || die +} + +src_compile() { + local -x LD_LIBRARY_PATH="${S}${LD_LIBRARY_PATH+:}${LD_LIBRARY_PATH}" + emake V=1 EXTLDFLAGS="${LDFLAGS}" MJIT_CFLAGS="${CFLAGS}" MJIT_OPTFLAGS="" MJIT_DEBUGFLAGS="" +} + +src_test() { + local -x LD_LIBRARY_PATH="${S}${LD_LIBRARY_PATH+:}${LD_LIBRARY_PATH}" + emake V=1 check +} + +src_install() { + # Remove the remaining bundled gems. We do this late in the process + # since they are used during the build to e.g. create the + # documentation. + einfo "Removing default gems before installation" + rm -rf lib/bundler* lib/rdoc/rdoc.gemspec || die + + # Ruby is involved in the install process, we don't want interference here. + unset RUBYOPT + + local MINIRUBY=$(echo -e 'include Makefile\ngetminiruby:\n\t@echo $(MINIRUBY)'|make -f - getminiruby) + + local -x LD_LIBRARY_PATH="${S}:${ED}/usr/$(get_libdir)${LD_LIBRARY_PATH+:}${LD_LIBRARY_PATH}" + + local -x RUBYLIB="${S}:${ED}/usr/$(get_libdir)/ruby/${RUBYVERSION}" + for d in $(find "${S}/ext" -type d) ; do + RUBYLIB="${RUBYLIB}:$d" + done + + # Create directory for the default gems + local gem_home="${EPREFIX}/usr/$(get_libdir)/ruby/gems/${RUBYVERSION}" + mkdir -p "${D}/${gem_home}" || die "mkdir gem home failed" + + emake V=1 DESTDIR="${D}" GEM_DESTDIR=${gem_home} install + + # Remove installed rubygems and rdoc copy + rm -rf "${ED}/usr/$(get_libdir)/ruby/${RUBYVERSION}/rubygems" || die "rm rubygems failed" + rm -rf "${ED}/usr/bin/"gem"${MY_SUFFIX}" || die "rm rdoc bins failed" + rm -rf "${ED}/usr/$(get_libdir)/ruby/${RUBYVERSION}"/rdoc* || die "rm rdoc failed" + rm -rf "${ED}/usr/bin/"{bundle,bundler,ri,rdoc}"${MY_SUFFIX}" || die "rm rdoc bins failed" + + if use doc; then + emake DESTDIR="${D}" GEM_DESTDIR=${gem_home} install-doc + fi + + if use examples; then + dodoc -r sample + fi + + dodoc ChangeLog NEWS.md doc/NEWS* README* +} + +pkg_postinst() { + if [[ ! -n $(readlink "${EROOT}"/usr/bin/ruby) ]] ; then + eselect ruby set ruby${MY_SUFFIX} + fi + + elog + elog "To switch between available Ruby profiles, execute as root:" + elog "\teselect ruby set ruby(30|31|...)" + elog +} + +pkg_postrm() { + eselect ruby cleanup +} diff --git a/dev-lang/ruby/ruby-3.2.8.ebuild b/dev-lang/ruby/ruby-3.2.8.ebuild new file mode 100644 index 000000000000..282a7c440177 --- /dev/null +++ b/dev-lang/ruby/ruby-3.2.8.ebuild @@ -0,0 +1,305 @@ +# Copyright 1999-2025 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +RUST_OPTIONAL="yes" + +inherit autotools flag-o-matic multiprocessing rust + +MY_P="${PN}-$(ver_cut 1-3)" + +DESCRIPTION="An object-oriented scripting language" +HOMEPAGE="https://www.ruby-lang.org/" +SRC_URI="https://cache.ruby-lang.org/pub/ruby/$(ver_cut 1-2)/${MY_P}.tar.xz" +S=${WORKDIR}/${MY_P} + +LICENSE="|| ( Ruby-BSD BSD-2 )" +SLOT=$(ver_cut 1-2) +MY_SUFFIX=$(ver_rs 1 '' ${SLOT}) +RUBYVERSION=${SLOT}.0 + +KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~amd64-linux ~x86-linux ~arm64-macos ~ppc-macos ~x64-macos ~x64-solaris" +IUSE="berkdb debug doc examples gdbm jemalloc jit socks5 +ssl static-libs systemtap tk valgrind xemacs" + +RDEPEND=" + berkdb? ( sys-libs/db:= ) + gdbm? ( sys-libs/gdbm:= ) + jemalloc? ( dev-libs/jemalloc:= ) + jit? ( ${RUST_DEPEND} ) + ssl? ( + dev-libs/openssl:0= + ) + socks5? ( >=net-proxy/dante-1.1.13 ) + systemtap? ( dev-debug/systemtap ) + tk? ( + dev-lang/tcl:0=[threads] + dev-lang/tk:0=[threads] + ) + dev-libs/libyaml + dev-libs/libffi:= + sys-libs/readline:0= + sys-libs/zlib + virtual/libcrypt:= + >=app-eselect/eselect-ruby-20231008 +" + +DEPEND=" + ${RDEPEND} + valgrind? ( dev-debug/valgrind ) +" + +BUNDLED_GEMS=" + >=dev-ruby/debug-1.7.1[ruby_targets_ruby32(-)] + >=dev-ruby/irb-1.6.2[ruby_targets_ruby32(-)] + >=dev-ruby/matrix-0.4.2[ruby_targets_ruby32(-)] + >=dev-ruby/minitest-5.16.3[ruby_targets_ruby32(-)] + >=dev-ruby/net-ftp-0.2.1[ruby_targets_ruby32(-)] + >=dev-ruby/net-imap-0.3.4.1[ruby_targets_ruby32(-)] + >=dev-ruby/net-pop-0.1.2[ruby_targets_ruby32(-)] + >=dev-ruby/net-smtp-0.3.4[ruby_targets_ruby32(-)] + >=dev-ruby/power_assert-2.0.3[ruby_targets_ruby32(-)] + >=dev-ruby/prime-0.1.2[ruby_targets_ruby32(-)] + >=dev-ruby/rake-13.0.6-r2[ruby_targets_ruby32(-)] + >=dev-ruby/rbs-2.8.2[ruby_targets_ruby32(-)] + >=dev-ruby/rexml-3.3.9[ruby_targets_ruby32(-)] + >=dev-ruby/rss-0.3.1[ruby_targets_ruby32(-)] + >=dev-ruby/test-unit-3.5.7[ruby_targets_ruby32(-)] + >=dev-ruby/typeprof-0.21.3[ruby_targets_ruby32(-)] +" + +PDEPEND=" + ${BUNDLED_GEMS} + virtual/rubygems[ruby_targets_ruby32(-)] + >=dev-ruby/bundler-2.3.3[ruby_targets_ruby32(-)] + >=dev-ruby/did_you_mean-1.6.1[ruby_targets_ruby32(-)] + >=dev-ruby/json-2.6.1[ruby_targets_ruby32(-)] + >=dev-ruby/rdoc-6.3.3[ruby_targets_ruby32(-)] + xemacs? ( app-xemacs/ruby-modes ) +" + +pkg_setup() { + use jit && rust_pkg_setup +} + +src_prepare() { + eapply "${FILESDIR}"/"${SLOT}"/010*.patch + eapply "${FILESDIR}"/"${SLOT}"/011*.patch + eapply "${FILESDIR}"/"${SLOT}"/013*.patch + eapply "${FILESDIR}"/"${SLOT}"/902*.patch + + if use elibc_musl ; then + eapply "${FILESDIR}"/${SLOT}/901-musl-*.patch + fi + + einfo "Unbundling gems..." + cd "$S" + # Remove bundled gems that we will install via PDEPEND, bug + # 539700. + rm -fr gems/* || die + touch gems/bundled_gems || die + # Don't install CLI tools since they will clash with the gem + rm -f bin/{racc,racc2y,y2racc} || die + sed -i -e '/executables/ s:^:#:' lib/racc/racc.gemspec || die + + # Remove tests that are known to fail or require a network connection + rm -f test/ruby/test_process.rb test/rubygems/test_gem{,_path_support}.rb || die + rm -f test/rubygems/test_bundled_ca.rb || die + rm -f test/rinda/test_rinda.rb test/socket/test_tcp.rb \ + test/fiber/test_address_resolve.rb spec/ruby/library/socket/tcpsocket/{initialize,open}_spec.rb|| die + + # Remove webrick tests because setting LD_LIBRARY_PATH does not work for them. + rm -rf tool/test/webrick || die + + # Avoid test using the system ruby + sed -i -e '/test_dumb_terminal/aomit "Uses system ruby"' test/reline/test_reline.rb || die + + # Avoid testing against hard-coded blockdev devices and user names + # that most likely are not available + sed -e '/def blockdev/a@blockdev = nil' \ + -e '/test_expand_path_for_existent_username/aomit "Checks USER"' \ + -i test/ruby/test_file_exhaustive.rb || die + + # Avoid tests that require gem downloads + sed -i -e '/^test-syntax-suggest/ s/\$(TEST_RUNNABLE)/no/' common.mk || die + sed -i -e '/^check:/ s/\$(TEST_RUNNABLE)-\$(PREPARE_SYNTAX_SUGGEST) test-syntax-suggest//' common.mk || die + + # Avoid test that fails intermittently + sed -e '/test_gem_exec_gem_uninstall/aomit "Fails intermittently"' \ + -i test/rubygems/test_gem_commands_exec_command.rb || die + + # Avoid test that can easily timeout + sed -e '/test_getch_timeout/aomit "Times out easily"' \ + -i test/io/console/test_io_console.rb || die + + if use prefix ; then + # Fix hardcoded SHELL var in mkmf library + sed -i -e "s#\(SHELL = \).*#\1${EPREFIX}/bin/sh#" lib/mkmf.rb || die + fi + + eapply_user + + eautoreconf +} + +src_configure() { + local modules="win32,win32ole" myconf= + + # Ruby's build system does interesting things with MAKEOPTS and doesn't + # handle MAKEOPTS="-Oline" or similar well. Just filter it all out + # and use -j/-l parsed out from the original MAKEOPTS, then use that. + # Newer Portage sets this option by default in GNUMAKEFLAGS if nothing + # is set by the user in MAKEOPTS. See bug #900929 and bug #728424. + local makeopts_tmp="-j$(makeopts_jobs) -l$(makeopts_loadavg)" + unset MAKEOPTS MAKEFLAGS GNUMAKEFLAGS + export MAKEOPTS="${makeopts_tmp}" + + # Avoid a hardcoded path to mkdir to avoid issues with mixed + # usr-merge and normal binary packages, bug #932386. + export ac_cv_path_mkdir=mkdir + + # -fomit-frame-pointer makes ruby segfault, see bug #150413. + filter-flags -fomit-frame-pointer + append-flags -fno-omit-frame-pointer + # In many places aliasing rules are broken; play it safe + # as it's risky with newer compilers to leave it as it is. + append-flags -fno-strict-aliasing + + # Workaround for bug #938302 + if use systemtap && has_version "dev-debug/systemtap[-dtrace-symlink(+)]" ; then + export DTRACE="${BROOT}"/usr/bin/stap-dtrace + fi + + # Socks support via dante + if use socks5 ; then + # Socks support can't be disabled as long as SOCKS_SERVER is + # set and socks library is present, so need to unset + # SOCKS_SERVER in that case. + unset SOCKS_SERVER + fi + + # Increase GC_MALLOC_LIMIT if set (default is 8000000) + if [ -n "${RUBY_GC_MALLOC_LIMIT}" ] ; then + append-flags "-DGC_MALLOC_LIMIT=${RUBY_GC_MALLOC_LIMIT}" + fi + + # Determine which modules *not* to build depending in the USE flags. + if ! use berkdb ; then + modules="${modules},dbm" + fi + if ! use gdbm ; then + modules="${modules},gdbm" + fi + if ! use ssl ; then + modules="${modules},openssl" + fi + if ! use tk ; then + modules="${modules},tk" + fi + + # Provide an empty LIBPATHENV because we disable rpath but we do not + # need LD_LIBRARY_PATH by default since that breaks USE=multitarget + # #564272 + # except on Darwin, where we really need LIBPATHENV to set the right + # DYLD_ stuff during the invocation of miniruby for it to work + # + # --with-setjmp-type=setjmp for bug #949016 + [[ ${CHOST} == *-darwin* ]] || export LIBPATHENV="" + INSTALL="${EPREFIX}/usr/bin/install -c" econf \ + --program-suffix=${MY_SUFFIX} \ + --with-soname=ruby${MY_SUFFIX} \ + --with-readline-dir="${EPREFIX}"/usr \ + --enable-shared \ + --enable-pthread \ + --disable-rpath \ + --without-baseruby \ + --with-compress-debug-sections=no \ + --with-setjmp-type=setjmp \ + --enable-mkmf-verbose \ + --with-out-ext="${modules}" \ + $(use_with jemalloc jemalloc) \ + $(use_enable jit jit-support) \ + $(use_enable jit yjit) \ + $(use_enable socks5 socks) \ + $(use_enable systemtap dtrace) \ + $(use_enable doc install-doc) \ + $(use_enable static-libs static) \ + $(use_enable static-libs install-static-library) \ + $(use_with static-libs static-linked-ext) \ + $(use_enable debug) \ + ${myconf} \ + $(use_with valgrind) \ + --enable-option-checking=no + + # Makefile is broken because it lacks -ldl + rm -rf ext/-test-/popen_deadlock || die +} + +src_compile() { + local -x LD_LIBRARY_PATH="${S}${LD_LIBRARY_PATH+:}${LD_LIBRARY_PATH}" + emake V=1 EXTLDFLAGS="${LDFLAGS}" MJIT_CFLAGS="${CFLAGS}" MJIT_OPTFLAGS="" MJIT_DEBUGFLAGS="" +} + +src_test() { + local -x USER=$(whoami) + local -x LD_LIBRARY_PATH="${S}${LD_LIBRARY_PATH+:}${LD_LIBRARY_PATH}" + emake V=1 check +} + +src_install() { + # Remove the remaining bundled gems. We do this late in the process + # since they are used during the build to e.g. create the + # documentation. + einfo "Removing default gems before installation" + rm -rf lib/bundler* lib/rdoc/rdoc.gemspec || die + + # Ruby is involved in the install process, we don't want interference here. + unset RUBYOPT + + local MINIRUBY=$(echo -e 'include Makefile\ngetminiruby:\n\t@echo $(MINIRUBY)'|make -f - getminiruby) + + local -x LD_LIBRARY_PATH="${S}:${ED}/usr/$(get_libdir)${LD_LIBRARY_PATH+:}${LD_LIBRARY_PATH}" + + local -x RUBYLIB="${S}:${ED}/usr/$(get_libdir)/ruby/${RUBYVERSION}" + for d in $(find "${S}/ext" -type d) ; do + RUBYLIB="${RUBYLIB}:$d" + done + + # Create directory for the default gems + local gem_home="${EPREFIX}/usr/$(get_libdir)/ruby/gems/${RUBYVERSION}" + mkdir -p "${D}/${gem_home}" || die "mkdir gem home failed" + + emake V=1 DESTDIR="${D}" GEM_DESTDIR=${gem_home} install + + # Remove installed rubygems and rdoc copy + rm -rf "${ED}/usr/$(get_libdir)/ruby/${RUBYVERSION}/rubygems" || die "rm rubygems failed" + rm -rf "${ED}/usr/bin/"gem"${MY_SUFFIX}" || die "rm rdoc bins failed" + rm -rf "${ED}/usr/$(get_libdir)/ruby/${RUBYVERSION}"/rdoc* || die "rm rdoc failed" + rm -rf "${ED}/usr/bin/"{bundle,bundler,ri,rdoc}"${MY_SUFFIX}" || die "rm rdoc bins failed" + + if use doc; then + emake DESTDIR="${D}" GEM_DESTDIR=${gem_home} install-doc + fi + + if use examples; then + dodoc -r sample + fi + + dodoc ChangeLog NEWS.md README* + dodoc -r doc +} + +pkg_postinst() { + if [[ ! -n $(readlink "${EROOT}"/usr/bin/ruby) ]] ; then + eselect ruby set ruby${MY_SUFFIX} + fi + + elog + elog "To switch between available Ruby profiles, execute as root:" + elog "\teselect ruby set ruby(30|31|...)" + elog +} + +pkg_postrm() { + eselect ruby cleanup +} |
