From 61fb360f9ed69f19ee2d8143070602523e05bc97 Mon Sep 17 00:00:00 2001 From: Hans de Graaff Date: Sun, 2 Jun 2019 09:40:38 +0200 Subject: dev-ruby/rubygems: new Gentoo defaults This revision has pretty much completely rewritten Gentoo defaults for ruby. The old defaults were broken with the introduction of default gems in rubygems 3.0.0. The new defaults should be backward compatible with the old defaults, but they use defined hooks for the most part to do the work. Bug: https://bugs.gentoo.org/676946 Signed-off-by: Hans de Graaff Package-Manager: Portage-2.3.66, Repoman-2.3.11 --- dev-ruby/rubygems/files/gentoo-defaults-3.rb | 57 +++++++++++++ dev-ruby/rubygems/rubygems-3.0.3-r1.ebuild | 120 +++++++++++++++++++++++++++ 2 files changed, 177 insertions(+) create mode 100644 dev-ruby/rubygems/files/gentoo-defaults-3.rb create mode 100644 dev-ruby/rubygems/rubygems-3.0.3-r1.ebuild (limited to 'dev-ruby/rubygems') diff --git a/dev-ruby/rubygems/files/gentoo-defaults-3.rb b/dev-ruby/rubygems/files/gentoo-defaults-3.rb new file mode 100644 index 000000000000..b8ad8f1227ce --- /dev/null +++ b/dev-ruby/rubygems/files/gentoo-defaults-3.rb @@ -0,0 +1,57 @@ +# frozen_string_literal: true + +# Gentoo defaults for rubygems 3.x +# +# Gentoo policy is to install all manually installed code into +# /usr/local and to keep /usr managed by Gentoo. This policy file +# ensures that all manually installed gems using "gem install" are +# installed in /usr/local. Gentoo gems are installed in /usr. + +# TODO: We used to manipulate the default_dir, but this no longer +# works since this is now the base for the new "default" gems that +# ruby 2.6 uses with irb. So default_dir should refer to the system +# default now. rubygems also provides various hooks so we may be able +# to use those to install gems in /usr/local by default in a less +# intrusive way. +module Gem + + class << self + def portage_gems_dir + ConfigMap[:sitelibdir].gsub('site_ruby', 'gems') + end + + def local_dir + portage_gems_dir.gsub('@GENTOO_PORTAGE_EPREFIX@/usr', + '@GENTOO_PORTAGE_EPREFIX@/usr/local') + end + + def install_dir + Process.euid.zero? ? local_dir : user_dir + end + + undef :default_path + def default_path + path = [] + path << user_dir if user_home && File.exist?(user_home) + path << default_dir + path << vendor_dir if vendor_dir && File.directory?(vendor_dir) + path << local_dir + path << portage_gems_dir + end + + def system_config_path + '@GENTOO_PORTAGE_EPREFIX@/etc' + end + + # Set Gentoo defaults for gem commands + undef :operating_system_defaults + def operating_system_defaults + { + 'install' => "--install-dir #{install_dir}", + 'uninstall' => "--install-dir #{install_dir}", + 'update' => "--install-dir #{install_dir}" + } + end + + end +end diff --git a/dev-ruby/rubygems/rubygems-3.0.3-r1.ebuild b/dev-ruby/rubygems/rubygems-3.0.3-r1.ebuild new file mode 100644 index 000000000000..8c6d1f49acfb --- /dev/null +++ b/dev-ruby/rubygems/rubygems-3.0.3-r1.ebuild @@ -0,0 +1,120 @@ +# Copyright 1999-2019 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=6 + +USE_RUBY="ruby24 ruby25 ruby26" + +inherit ruby-ng prefix + +DESCRIPTION="Centralized Ruby extension management system" +HOMEPAGE="https://rubygems.org/" +LICENSE="GPL-2 || ( Ruby MIT )" + +SRC_URI="https://rubygems.org/rubygems/${P}.tgz" + +KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~amd64-fbsd ~x86-fbsd ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos ~sparc-solaris ~sparc64-solaris ~x64-solaris ~x86-solaris" +SLOT="0" +IUSE="server test" + +PDEPEND="server? ( =dev-ruby/builder-3* )" + +ruby_add_bdepend " + test? ( + dev-ruby/json + dev-ruby/minitest:5 + dev-ruby/rdoc + )" + +all_ruby_prepare() { + + mkdir -p lib/rubygems/defaults || die + cp "${FILESDIR}/gentoo-defaults-3.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 -i -e '/assert_self_install_permissions/,/^ end/ s/^.*RUBY_INSTALL_NAME.*//' test/rubygems/test_gem.rb || die + + # Skip tests for default gems that all fail +# sed -i -e '/test_default_gems_use_full_paths/,/^ end/ s:^:#:' test/rubygems/test_gem.rb || die +# sed -i -e '/test_execute_ignore_default_gem_verbose/,/^ end/ s:^:#:' test/rubygems/test_gem_commands_cleanup_command.rb || die +# sed -i -e '/test_execute_default_gem/,/^ end/ s:^:#:' test/rubygems/test_gem_commands_contents_command.rb test/rubygems/test_gem_commands_pristine_command.rb || die +# sed -i -e '/test_execute_\(default_details\|show_default_gems\)/,/^ end/ s:^:#:' test/rubygems/test_gem_commands_query_command.rb || die +# sed -i -e '/test_execute_all/,/^ end/ s:^:#:' test/rubygems/test_gem_commands_uninstall_command.rb || die +# sed -i -e '/\(test_default_gem\|test_check_executable_overwrite\|test_require_works_after_cleanup\)/,/^ end/ s:^:#:' \ +# test/rubygems/test_{gem_installer,require}.rb || die +# sed -i -e '/test_\(load_default_gem\|default_spec_stub\|self_stubs\)/,/^ end/ s:^:#:' test/rubygems/test_gem_specification.rb || die +# sed -i -e '/test_uninstall_default_gem/,/^ end/ s:^:#:' test/rubygems/test_gem_uninstaller.rb || die +# rm -f test/rubygems/test_gem_indexer.rb || die +# sed -i -e '/test_\(require_when_gem_defined\|realworld_default_gem\)/,/^ end/ s:^:#:' test/rubygems/test_require.rb || die +# rm -f test/rubygems/test_gem_commands_setup_command.rb || die + + # Avoid tests playing tricks with ruby engine that don't seem to + # work for us. + rm test/rubygems/test_gem_request_set_gem_dependency_api.rb || die + + # Avoid test requiring network access + sed -i -e '/test_download_to_cache/askip "requires network access"' test/rubygems/test_gem_remote_fetcher.rb || die + + # Avoid test requiring file system permission changes + sed -i -e '/test_traverse_parents_does_not_crash_on_permissions_error/,/^ end/ s:^:#:' test/rubygems/test_gem_util.rb || die + + # Avoid uninvestigated test failure in favor of security release + sed -i -e '/test_self_install_permissions_with_format_executable/askip "uninvestigated failure"' test/rubygems/test_gem.rb || die +} + +each_ruby_compile() { + # Not really a build but... + sed -i -e 's:#!.*:#!'"${RUBY}"':' bin/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 { |tu| require tu }' || 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 || die + + newbin bin/gem $(basename ${RUBY} | sed -e 's:ruby:gem:') || die +} + +all_ruby_install() { + dodoc History.txt README.md + + if use server; then + newinitd "${FILESDIR}/init.d-gem_server2" gem_server || die "newinitd failed" + newconfd "${FILESDIR}/conf.d-gem_server" gem_server || die "newconfd failed" + 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(23|24|...)" + ewarn +} -- cgit v1.2.3-65-gdbad