ruby: fix build with bundled gems
This commit is contained in:
parent
fa6f87a8ae
commit
9634895022
|
@ -103,16 +103,21 @@ let
|
||||||
}).${ver.majMinTiny}
|
}).${ver.majMinTiny}
|
||||||
++ op (lib.versionOlder ver.majMin "3.1") ./do-not-regenerate-revision.h.patch
|
++ op (lib.versionOlder ver.majMin "3.1") ./do-not-regenerate-revision.h.patch
|
||||||
++ op (atLeast30 && useBaseRuby) ./do-not-update-gems-baseruby.patch
|
++ op (atLeast30 && useBaseRuby) ./do-not-update-gems-baseruby.patch
|
||||||
# Ruby prior to 3.0 has a bug the installer (tools/rbinstall.rb) but
|
++ ops (!atLeast30 && rubygemsSupport) [
|
||||||
# the resulting error was swallowed. Newer rubygems no longer swallows
|
# We upgrade rubygems to a version that isn't compatible with the
|
||||||
# this error. We upgrade rubygems when rubygemsSupport is enabled, so
|
# ruby 2.7 installer. Backport the upstream fix.
|
||||||
# we have to fix this bug to prevent the install step from failing.
|
./rbinstall-new-rubygems-compat.patch
|
||||||
# See https://github.com/ruby/ruby/pull/2930
|
|
||||||
++ op (!atLeast30 && rubygemsSupport)
|
# Ruby prior to 3.0 has a bug the installer (tools/rbinstall.rb) but
|
||||||
|
# the resulting error was swallowed. Newer rubygems no longer swallows
|
||||||
|
# this error. We upgrade rubygems when rubygemsSupport is enabled, so
|
||||||
|
# we have to fix this bug to prevent the install step from failing.
|
||||||
|
# See https://github.com/ruby/ruby/pull/2930
|
||||||
(fetchpatch {
|
(fetchpatch {
|
||||||
url = "https://github.com/ruby/ruby/commit/261d8dd20afd26feb05f00a560abd99227269c1c.patch";
|
url = "https://github.com/ruby/ruby/commit/261d8dd20afd26feb05f00a560abd99227269c1c.patch";
|
||||||
sha256 = "0wrii25cxcz2v8bgkrf7ibcanjlxwclzhayin578bf0qydxdm9qy";
|
sha256 = "0wrii25cxcz2v8bgkrf7ibcanjlxwclzhayin578bf0qydxdm9qy";
|
||||||
});
|
})
|
||||||
|
];
|
||||||
|
|
||||||
postUnpack = opString rubygemsSupport ''
|
postUnpack = opString rubygemsSupport ''
|
||||||
rm -rf $sourceRoot/{lib,test}/rubygems*
|
rm -rf $sourceRoot/{lib,test}/rubygems*
|
||||||
|
@ -189,6 +194,11 @@ let
|
||||||
sed -i '/CC_VERSION_MESSAGE/d' $rbConfig
|
sed -i '/CC_VERSION_MESSAGE/d' $rbConfig
|
||||||
''
|
''
|
||||||
}
|
}
|
||||||
|
# Remove unnecessary external intermediate files created by gems
|
||||||
|
extMakefiles=$(find $out/lib/ruby/gems -name Makefile)
|
||||||
|
for makefile in $extMakefiles; do
|
||||||
|
make -C "$(dirname "$makefile")" distclean
|
||||||
|
done
|
||||||
# Bundler tries to create this directory
|
# Bundler tries to create this directory
|
||||||
mkdir -p $out/nix-support
|
mkdir -p $out/nix-support
|
||||||
cat > $out/nix-support/setup-hook <<EOF
|
cat > $out/nix-support/setup-hook <<EOF
|
||||||
|
|
|
@ -0,0 +1,87 @@
|
||||||
|
From 8e85d27f9ccfe152fc1b891c19f125915a907493 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
|
||||||
|
Date: Tue, 1 Oct 2019 12:03:33 +0200
|
||||||
|
Subject: [PATCH] Use `Gem::Package` like object instead of monkey patching.
|
||||||
|
|
||||||
|
1. This is similar to what RubyGems does and it is less magic [[1]].
|
||||||
|
2. It avoids deprecated code paths in RubyGems [[2]].
|
||||||
|
|
||||||
|
[1]: https://github.com/rubygems/rubygems/blob/92892bbc3adba86a90756c385433835f6761b8da/lib/rubygems/installer.rb#L151
|
||||||
|
[2]: https://github.com/rubygems/rubygems/blob/92892bbc3adba86a90756c385433835f6761b8da/lib/rubygems/installer.rb#L187
|
||||||
|
|
||||||
|
(cherry picked from commit e960ef6f18a25c637c54f00c75bb6c24f8ab55d0)
|
||||||
|
---
|
||||||
|
tool/rbinstall.rb | 47 +++++++++++++++++++++++++++--------------------
|
||||||
|
1 file changed, 27 insertions(+), 20 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb
|
||||||
|
index 060390626f..28ae8c409a 100755
|
||||||
|
--- a/tool/rbinstall.rb
|
||||||
|
+++ b/tool/rbinstall.rb
|
||||||
|
@@ -710,28 +710,34 @@ def remove_prefix(prefix, string)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
- class UnpackedInstaller < Gem::Installer
|
||||||
|
- module DirPackage
|
||||||
|
- def extract_files(destination_dir, pattern = "*")
|
||||||
|
- path = File.dirname(@gem.path)
|
||||||
|
- return if path == destination_dir
|
||||||
|
- File.chmod(0700, destination_dir)
|
||||||
|
- mode = pattern == "bin/*" ? $script_mode : $data_mode
|
||||||
|
- spec.files.each do |f|
|
||||||
|
- src = File.join(path, f)
|
||||||
|
- dest = File.join(without_destdir(destination_dir), f)
|
||||||
|
- makedirs(dest[/.*(?=\/)/m])
|
||||||
|
- install src, dest, :mode => mode
|
||||||
|
- end
|
||||||
|
- File.chmod($dir_mode, destination_dir)
|
||||||
|
+ class DirPackage
|
||||||
|
+ attr_reader :spec
|
||||||
|
+
|
||||||
|
+ attr_accessor :dir_mode
|
||||||
|
+ attr_accessor :prog_mode
|
||||||
|
+ attr_accessor :data_mode
|
||||||
|
+
|
||||||
|
+ def initialize(spec)
|
||||||
|
+ @spec = spec
|
||||||
|
+ @src_dir = File.dirname(@spec.loaded_from)
|
||||||
|
+ end
|
||||||
|
+
|
||||||
|
+ def extract_files(destination_dir, pattern = "*")
|
||||||
|
+ path = @src_dir
|
||||||
|
+ return if path == destination_dir
|
||||||
|
+ File.chmod(0700, destination_dir)
|
||||||
|
+ mode = pattern == "bin/*" ? $script_mode : $data_mode
|
||||||
|
+ spec.files.each do |f|
|
||||||
|
+ src = File.join(path, f)
|
||||||
|
+ dest = File.join(without_destdir(destination_dir), f)
|
||||||
|
+ makedirs(dest[/.*(?=\/)/m])
|
||||||
|
+ install src, dest, :mode => mode
|
||||||
|
end
|
||||||
|
+ File.chmod($dir_mode, destination_dir)
|
||||||
|
end
|
||||||
|
+ end
|
||||||
|
|
||||||
|
- def initialize(spec, *options)
|
||||||
|
- super(spec.loaded_from, *options)
|
||||||
|
- @package.extend(DirPackage).spec = spec
|
||||||
|
- end
|
||||||
|
-
|
||||||
|
+ class UnpackedInstaller < Gem::Installer
|
||||||
|
def write_cache_file
|
||||||
|
end
|
||||||
|
|
||||||
|
@@ -890,7 +896,8 @@ def install_default_gem(dir, srcdir)
|
||||||
|
if File.directory?(ext = "#{gem_ext_dir}/#{spec.full_name}")
|
||||||
|
spec.extensions[0] ||= "-"
|
||||||
|
end
|
||||||
|
- ins = RbInstall::UnpackedInstaller.new(spec, options)
|
||||||
|
+ package = RbInstall::DirPackage.new spec
|
||||||
|
+ ins = RbInstall::UnpackedInstaller.new(package, options)
|
||||||
|
puts "#{INDENT}#{spec.name} #{spec.version}"
|
||||||
|
ins.install
|
||||||
|
File.chmod($data_mode, File.join(install_dir, "specifications", "#{spec.full_name}.gemspec"))
|
||||||
|
--
|
||||||
|
2.35.1
|
||||||
|
|
Loading…
Reference in a new issue