summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans de Graaff <graaff@gentoo.org>2018-12-27 19:21:12 +0100
committerHans de Graaff <graaff@gentoo.org>2018-12-27 20:06:33 +0100
commit6e2686448ec8ff2355fecee39426a20bac4cb61f (patch)
treecfa21a4b85942dd7ccdfaefd483565599831eb6c /dev-lang/ruby
parentprofiles/prefix/package.use.mask: apply some USE-masks (diff)
downloadgentoo-6e2686448ec8ff2355fecee39426a20bac4cb61f.tar.gz
gentoo-6e2686448ec8ff2355fecee39426a20bac4cb61f.tar.bz2
gentoo-6e2686448ec8ff2355fecee39426a20bac4cb61f.zip
dev-lang/ruby: fix various install issues
Properly unbundle rdoc and bundler which we install via the gems. Fix install path for default bundled gemspec, fixing file collisions without FEATURES=userpriv. Add USE flag for jit, but note that this does not fully disable jit, and jit does not work due to issues with the .pch file generated for it. Add missing PDEPEND on bundler since we now unbundle it properly. Fixes: https://bugs.gentoo.org/673760 Signed-off-by: Hans de Graaff <graaff@gentoo.org> Package-Manager: Portage-2.3.51, Repoman-2.3.11
Diffstat (limited to 'dev-lang/ruby')
-rw-r--r--dev-lang/ruby/files/2.6/009_no-gems.patch88
-rw-r--r--dev-lang/ruby/files/2.6/010-libressl_2.7.patch15
-rw-r--r--dev-lang/ruby/ruby-2.6.0-r1.ebuild236
3 files changed, 252 insertions, 87 deletions
diff --git a/dev-lang/ruby/files/2.6/009_no-gems.patch b/dev-lang/ruby/files/2.6/009_no-gems.patch
index e12429a43242..f98801d50312 100644
--- a/dev-lang/ruby/files/2.6/009_no-gems.patch
+++ b/dev-lang/ruby/files/2.6/009_no-gems.patch
@@ -1,12 +1,8 @@
---- a/tool/rbinstall.rb.~1~ 2017-10-30 06:45:20.000000000 +0100
-+++ b/tool/rbinstall.rb 2017-12-25 11:06:53.340432435 +0100
-@@ -700,20 +700,10 @@
+--- a/tool/rbinstall.rb.~1~ 2018-12-27 07:43:59.938638174 +0100
++++ b/tool/rbinstall.rb 2018-12-27 07:51:09.096382161 +0100
+@@ -723,17 +723,7 @@
# :startdoc:
- install?(:ext, :comm, :gem, :'default-gems', :'default-gems-comm') do
-- install_default_gem('lib', srcdir)
-+ # Gems are unbundled in Gentoo
- end
install?(:ext, :arch, :gem, :'default-gems', :'default-gems-arch') do
- install_default_gem('ext', srcdir) do |path|
- # assume that gemspec and extconf.rb are placed in the same directory
@@ -23,73 +19,21 @@
end
def load_gemspec(file)
-@@ -765,68 +755,7 @@
+@@ -743,7 +743,7 @@
end
- install?(:ext, :comm, :gem, :'bundled-gems') do
+ def install_default_gem(dir, srcdir)
- gem_dir = Gem.default_dir
-- directories = Gem.ensure_gem_subdirectories(gem_dir, :mode => $dir_mode)
-- prepare "bundled gems", gem_dir, directories
-- install_dir = with_destdir(gem_dir)
-- installed_gems = {}
-- options = {
-- :install_dir => install_dir,
-- :bin_dir => with_destdir(bindir),
-- :domain => :local,
-- :ignore_dependencies => true,
-- :dir_mode => $dir_mode,
-- :data_mode => $data_mode,
-- :prog_mode => $prog_mode,
-- :wrappers => true,
-- :format_executable => true,
-- }
-- gem_ext_dir = "#$extout/gems/#{CONFIG['arch']}"
-- extensions_dir = Gem::StubSpecification.gemspec_stub("", gem_dir, gem_dir).extensions_dir
-- Gem::Specification.each_gemspec([srcdir+'/gems/*']) do |path|
-- spec = load_gemspec(path)
-- next unless spec.platform == Gem::Platform::RUBY
-- next unless spec.full_name == path[srcdir.size..-1][/\A\/gems\/([^\/]+)/, 1]
-- spec.extension_dir = "#{extensions_dir}/#{spec.full_name}"
-- if File.directory?(ext = "#{gem_ext_dir}/#{spec.full_name}")
-- spec.extensions[0] ||= "-"
-- end
-- ins = RbInstall::UnpackedInstaller.new(spec, options)
-- puts "#{INDENT}#{spec.name} #{spec.version}"
-- ins.install
-- File.chmod($data_mode, File.join(install_dir, "specifications", "#{spec.full_name}.gemspec"))
-- unless spec.extensions.empty?
-- install_recursive(ext, spec.extension_dir)
-- end
-- installed_gems[spec.full_name] = true
-- end
-- installed_gems, gems = Dir.glob(srcdir+'/gems/*.gem').partition {|gem| installed_gems.key?(File.basename(gem, '.gem'))}
-- unless installed_gems.empty?
-- install installed_gems, gem_dir+"/cache"
-- end
-- next if gems.empty?
-- if defined?(Zlib)
-- Gem.instance_variable_set(:@ruby, with_destdir(File.join(bindir, ruby_install_name)))
-- silent = Gem::SilentUI.new
-- gems.each do |gem|
-- inst = Gem::Installer.new(gem, options)
-- inst.spec.extension_dir = with_destdir(inst.spec.extension_dir)
-- begin
-- Gem::DefaultUserInteraction.use_ui(silent) {inst.install}
-- rescue Gem::InstallError => e
-- next
-- end
-- gemname = File.basename(gem)
-- puts "#{INDENT}#{gemname}"
-- end
-- # fix directory permissions
-- # TODO: Gem.install should accept :dir_mode option or something
-- File.chmod($dir_mode, *Dir.glob(install_dir+"/**/"))
-- # fix .gemspec permissions
-- File.chmod($data_mode, *Dir.glob(install_dir+"/specifications/*.gemspec"))
-- else
-- puts "skip installing bundled gems because of lacking zlib"
-- end
-+ # Gems are unbundled in Gentoo
++ gem_dir = ENV['GEM_DESTDIR'] ; puts "gem_dir for default gems = #{gem_dir}"
+ directories = Gem.ensure_gem_subdirectories(gem_dir, :mode => $dir_mode)
+ prepare "default gems from #{dir}", gem_dir, directories
+
+@@ -777,7 +777,7 @@
end
- parse_args()
+ install?(:ext, :comm, :gem, :'bundled-gems') do
+- gem_dir = Gem.default_dir
++ gem_dir = ENV['GEM_DESTDIR']
+ directories = Gem.ensure_gem_subdirectories(gem_dir, :mode => $dir_mode)
+ prepare "bundled gems", gem_dir, directories
+ install_dir = with_destdir(gem_dir)
diff --git a/dev-lang/ruby/files/2.6/010-libressl_2.7.patch b/dev-lang/ruby/files/2.6/010-libressl_2.7.patch
deleted file mode 100644
index 150f43c9e55d..000000000000
--- a/dev-lang/ruby/files/2.6/010-libressl_2.7.patch
+++ /dev/null
@@ -1,15 +0,0 @@
---- a/ext/openssl/extconf.rb.orig 2018-04-02 09:57:14 UTC
-+++ b/ext/openssl/extconf.rb
-@@ -122,8 +122,11 @@ OpenSSL.check_func_or_macro("SSL_get_ser
- have_func("SSL_is_server")
-
- # added in 1.1.0
-+if !have_struct_member("SSL", "ctx", "openssl/ssl.h") ||
-+ try_static_assert("LIBRESSL_VERSION_NUMBER >= 0x2070000fL", "openssl/opensslv.h")
-+ $defs.push("-DHAVE_OPAQUE_OPENSSL")
-+end
- have_func("CRYPTO_lock") || $defs.push("-DHAVE_OPENSSL_110_THREADING_API")
--have_struct_member("SSL", "ctx", "openssl/ssl.h") || $defs.push("-DHAVE_OPAQUE_OPENSSL")
- have_func("BN_GENCB_new")
- have_func("BN_GENCB_free")
- have_func("BN_GENCB_get_arg")
diff --git a/dev-lang/ruby/ruby-2.6.0-r1.ebuild b/dev-lang/ruby/ruby-2.6.0-r1.ebuild
new file mode 100644
index 000000000000..ccaa7a4cae2d
--- /dev/null
+++ b/dev-lang/ruby/ruby-2.6.0-r1.ebuild
@@ -0,0 +1,236 @@
+# Copyright 1999-2018 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+inherit autotools flag-o-matic multilib
+
+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="mirror://ruby/${SLOT}/${MY_P}.tar.xz"
+
+LICENSE="|| ( Ruby-BSD BSD-2 )"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~amd64-fbsd ~x86-fbsd"
+IUSE="berkdb debug doc examples gdbm ipv6 jemalloc jit libressl +rdoc rubytests socks5 +ssl static-libs tk xemacs"
+
+RDEPEND="
+ berkdb? ( sys-libs/db:= )
+ gdbm? ( sys-libs/gdbm:= )
+ jemalloc? ( dev-libs/jemalloc )
+ jit? ( || ( sys-devel/gcc:* sys-devel/clang:* ) )
+ ssl? (
+ !libressl? ( dev-libs/openssl:0= )
+ libressl? ( dev-libs/libressl )
+ )
+ socks5? ( >=net-proxy/dante-1.1.13 )
+ tk? (
+ dev-lang/tcl:0=[threads]
+ dev-lang/tk:0=[threads]
+ )
+ dev-libs/libyaml
+ virtual/libffi:=
+ sys-libs/zlib
+ >=app-eselect/eselect-ruby-20171225
+"
+
+DEPEND="${RDEPEND}"
+
+BUNDLED_GEMS="
+ >=dev-ruby/did_you_mean-1.2.1[ruby_targets_ruby26]
+ >=dev-ruby/minitest-5.11.3[ruby_targets_ruby26]
+ >=dev-ruby/net-telnet-0.2.0[ruby_targets_ruby26]
+ >=dev-ruby/power_assert-1.1.3[ruby_targets_ruby26]
+ >=dev-ruby/rake-12.3.2[ruby_targets_ruby26]
+ >=dev-ruby/test-unit-3.2.9[ruby_targets_ruby26]
+ >=dev-ruby/xmlrpc-0.3.0[ruby_targets_ruby26]
+"
+
+PDEPEND="
+ ${BUNDLED_GEMS}
+ virtual/rubygems[ruby_targets_ruby26]
+ >=dev-ruby/bundler-1.17.2[ruby_targets_ruby26]
+ >=dev-ruby/json-2.0.2[ruby_targets_ruby26]
+ rdoc? ( >=dev-ruby/rdoc-5.1.0[ruby_targets_ruby26] )
+ xemacs? ( app-xemacs/ruby-modes )"
+
+src_prepare() {
+ # 005 does not compile bigdecimal and is questionable because it
+ # compiles ruby in a non-standard way, may be dropped
+ eapply "${FILESDIR}"/2.6/009*.patch
+
+ einfo "Unbundling gems..."
+ cd "$S"
+ # Remove bundled gems that we will install via PDEPEND, bug
+ # 539700.
+ rm -fr gems/* || die
+
+ einfo "Removing bundled libraries..."
+ rm -fr ext/fiddle/libffi-3.2.1 || die
+
+ eapply_user
+
+ eautoreconf
+}
+
+src_configure() {
+ local modules= myconf=
+
+ # -fomit-frame-pointer makes ruby segfault, see bug #150413.
+ filter-flags -fomit-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
+ # SuperH needs this
+ use sh && append-flags -mieee
+
+ # 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
+ INSTALL="${EPREFIX}/usr/bin/install -c" LIBPATHENV="" econf \
+ --program-suffix=${MY_SUFFIX} \
+ --with-soname=ruby${MY_SUFFIX} \
+ --docdir=${EPREFIX}/usr/share/doc/${P} \
+ --enable-shared \
+ --enable-pthread \
+ --disable-rpath \
+ --with-out-ext="${modules}" \
+ $(use_with jemalloc jemalloc) \
+ $(use_enable jit jit-support ) \
+ $(use_enable socks5 socks) \
+ $(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) \
+ ${myconf} \
+ --enable-option-checking=no \
+ || die "econf failed"
+
+ # Makefile is broken because it lacks -ldl
+ rm -rf ext/-test-/popen_deadlock || die
+}
+
+src_compile() {
+ emake V=1 EXTLDFLAGS="${LDFLAGS}" MJIT_CFLAGS="${CFLAGS}" MJIT_OPTFLAGS="" MJIT_DEBUGFLAGS="" || die "emake failed"
+}
+
+src_test() {
+ emake -j1 V=1 test || die "make test failed"
+
+ elog "Ruby's make test has been run. Ruby also ships with a make check"
+ elog "that cannot be run until after ruby has been installed."
+ elog
+ if use rubytests; then
+ elog "You have enabled rubytests, so they will be installed to"
+ elog "/usr/share/${PN}-${SLOT}/test. To run them you must be a user other"
+ elog "than root, and you must place them into a writeable directory."
+ elog "Then call: "
+ elog
+ elog "ruby${MY_SUFFIX} -C /location/of/tests runner.rb"
+ else
+ elog "Enable the rubytests USE flag to install the make check tests"
+ fi
+}
+
+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.
+ rm -rf ext/json || die
+ 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)
+
+ LD_LIBRARY_PATH="${S}:${ED}/usr/$(get_libdir)${LD_LIBRARY_PATH+:}${LD_LIBRARY_PATH}"
+ RUBYLIB="${S}:${ED}/usr/$(get_libdir)/ruby/${RUBYVERSION}"
+ for d in $(find "${S}/ext" -type d) ; do
+ RUBYLIB="${RUBYLIB}:$d"
+ done
+ export LD_LIBRARY_PATH RUBYLIB
+
+ # Create directory for the default gems
+ local gem_home="/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 || die "make install failed"
+
+ # 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 || die "make install-doc failed"
+ fi
+
+ if use examples; then
+ insinto /usr/share/doc/${PF}
+ doins -r sample
+ fi
+
+ dodoc ChangeLog NEWS doc/NEWS* README* || die
+
+ if use rubytests; then
+ pushd test
+ insinto /usr/share/${PN}-${SLOT}/test
+ doins -r .
+ popd
+ fi
+}
+
+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(23|24|...)"
+ elog
+}
+
+pkg_postrm() {
+ eselect ruby cleanup
+}