gentoo-ebuilds/dev-ruby/rubygems/rubygems-3.5.23.ebuild
Hans de Graaff 582706b9d9
dev-ruby/rubygems: fix prepare phase with USE=test
The rake invocation was loading code from both the rubygems version to
be installed and the system rubygems version. This can lead to
inconsistencies and errors due to mismatched versions.

Setting RUBYLIB should address this but that does not work for some
reason. Use "ruby -I lib" instead.

Closes: https://bugs.gentoo.org/957027
Signed-off-by: Hans de Graaff <graaff@gentoo.org>
2025-06-04 10:47:29 +02:00

124 lines
3.9 KiB
Bash

# Copyright 1999-2025 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
USE_RUBY="ruby31 ruby32 ruby33"
inherit ruby-ng prefix
DESCRIPTION="Centralized Ruby extension management system"
HOMEPAGE="https://rubygems.org/"
SRC_URI="https://github.com/rubygems/rubygems/archive/v${PV}.tar.gz -> ${P}.tar.gz"
LICENSE="|| ( Ruby MIT )"
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="server test"
RESTRICT="!test? ( test )"
PDEPEND="server? ( =dev-ruby/builder-3* )"
PATCHES=( "${FILESDIR}/rubygems-rdoc.patch" )
ruby_add_depend "virtual/ruby-ssl"
ruby_add_bdepend "
test? (
dev-ruby/json
dev-ruby/minitest:5
dev-ruby/rake
dev-ruby/rdoc
dev-ruby/webrick
)"
all_ruby_prepare() {
# Remove unpackaged automatiek from Rakefile which stops it from working
sed -i -e '/automatiek/ s:^:#:' -e '/Automatiek/,/^end/ s:^:#:' Rakefile || die
mkdir -p lib/rubygems/defaults || die
cp "${FILESDIR}/gentoo-defaults-5.rb" lib/rubygems/defaults/operating_system.rb || die
eprefixify lib/rubygems/defaults/operating_system.rb
# Disable broken tests when changing default values:
sed -i -e '/test_default_path/,/^ end/ s:^:#:' test/rubygems/test_gem.rb || die
sed -e '/test_initialize_\(path_with_defaults\|regexp_path_separator\)/aomit "gentoo"' \
-i test/rubygems/test_gem_path_support.rb || die
# Avoid test that won't work as json is also installed as plain ruby code
sed -i -e '/test_realworld_\(\|upgraded_\)default_gem/aomit "gentoo"' test/rubygems/test_require.rb || die
# Avoid test that requires additional utility scripts
rm -f test/test_changelog_generator.rb || die
# Avoid tests that require a network connection (for crates.io or other downloads)
rm -f test/rubygems/test_gem_ext_cargo_builder.rb || die
sed -e '/test_gem_exec_gem_uninstall/aomit "requires network"' \
-i test/rubygems/test_gem_commands_exec_command.rb || die
# Avoid tests with newer rdoc versions. These tests have been disabled upstream.
sed -e '/test_execute_rdoc/aomit "no longer needed with rdoc 6.9.0"' \
-i test/rubygems/test_gem_commands_{install,update}_command.rb || die
# Update manifest after changing files to avoid a test failure. Set
# RUBYLIB to ensure that we consistently use the new code for
# rubygems and the bundled bundler.
if use test; then
ruby -I lib -S rake update_manifest || die
fi
}
each_ruby_compile() {
# Not really a build but...
sed -i -e 's:#!.*:#!'"${RUBY}"':' exe/gem
}
each_ruby_test() {
# Unset RUBYOPT to avoid interferences, bug #158455 et. al.
#unset RUBYOPT
if [[ "${EUID}" -ne "0" ]]; then
RUBYLIB="$(pwd)/lib${RUBYLIB+:${RUBYLIB}}" ${RUBY} --disable-gems -I.:lib:test:bundler/lib \
-e 'require "rubygems"; gem "minitest", "~>5.0"; Dir["test/**/test_*.rb"].each { require _1 }' || die "tests failed"
else
ewarn "The userpriv feature must be enabled to run tests, bug 408951."
eerror "Testsuite will not be run."
fi
}
each_ruby_install() {
# Unset RUBYOPT to avoid interferences, bug #158455 et. al.
unset RUBYOPT
export RUBYLIB="$(pwd)/lib${RUBYLIB+:${RUBYLIB}}"
pushd lib &>/dev/null
doruby -r *
popd &>/dev/null
local sld=$(ruby_rbconfig_value 'sitelibdir')
insinto "${sld#${EPREFIX}}" # bug #320813
newins "${FILESDIR}/auto_gem.rb.ruby19" auto_gem.rb
newbin exe/gem $(basename ${RUBY} | sed -e 's:ruby:gem:')
}
all_ruby_install() {
dodoc CHANGELOG.md README.md
if use server; then
newinitd "${FILESDIR}/init.d-gem_server2" gem_server
newconfd "${FILESDIR}/conf.d-gem_server" gem_server
fi
}
pkg_postinst() {
if [[ ! -n $(readlink "${ROOT}"/usr/bin/gem) ]] ; then
eselect ruby set $(eselect --brief --colour=no ruby show | head -n1)
fi
ewarn
ewarn "To switch between available Ruby profiles, execute as root:"
ewarn "\teselect ruby set ruby(30|31|...)"
ewarn
}