Merge pull request #161801 from thefloweringash/ruby-revision

ruby: specify RUBY_REVISION
This commit is contained in:
Mario Rodas 2022-04-04 06:42:43 -05:00 committed by GitHub
commit faddaa7fb2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 110 additions and 27 deletions

View file

@ -59,14 +59,9 @@ let
pname = "ruby"; pname = "ruby";
inherit version; inherit version;
src = if useRailsExpress then fetchFromGitHub { src = fetchurl {
owner = "ruby";
repo = "ruby";
rev = tag;
sha256 = sha256.git;
} else fetchurl {
url = "https://cache.ruby-lang.org/pub/ruby/${ver.majMin}/ruby-${ver}.tar.gz"; url = "https://cache.ruby-lang.org/pub/ruby/${ver.majMin}/ruby-${ver}.tar.gz";
sha256 = sha256.src; inherit sha256;
}; };
# Have `configure' avoid `/usr/bin/nroff' in non-chroot builds. # Have `configure' avoid `/usr/bin/nroff' in non-chroot builds.
@ -100,17 +95,22 @@ let
patchLevel = ver.patchLevel; patchLevel = ver.patchLevel;
}).${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 && useRailsExpress) ./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*
@ -182,6 +182,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
@ -253,25 +258,16 @@ let
in { in {
ruby_2_7 = generic { ruby_2_7 = generic {
version = rubyVersion "2" "7" "5" ""; version = rubyVersion "2" "7" "5" "";
sha256 = { sha256 = "1wc1hwmz4m6iqlmqag8liyld917p6a8dvnhnpd1v8d8jl80bjm97";
src = "1wc1hwmz4m6iqlmqag8liyld917p6a8dvnhnpd1v8d8jl80bjm97";
git = "16565fyl7141hr6q6d74myhsz46lvgam8ifnacshi68vzibwjbbh";
};
}; };
ruby_3_0 = generic { ruby_3_0 = generic {
version = rubyVersion "3" "0" "3" ""; version = rubyVersion "3" "0" "3" "";
sha256 = { sha256 = "1b4j39zyyvdkf1ax2c6qfa40b4mxfkr87zghhw19fmnzn8f8d1im";
src = "1b4j39zyyvdkf1ax2c6qfa40b4mxfkr87zghhw19fmnzn8f8d1im";
git = "1q19w5i1jkfxn7qq6f9v9ngax9h52gxwijk7hp312dx6amwrkaim";
};
}; };
ruby_3_1 = generic { ruby_3_1 = generic {
version = rubyVersion "3" "1" "1" ""; version = rubyVersion "3" "1" "1" "";
sha256 = { sha256 = "sha256-/m5Hgt6XRDl43bqLpL440iKqJNw+PwKmqOdwHA7rYZ0=";
src = "sha256-/m5Hgt6XRDl43bqLpL440iKqJNw+PwKmqOdwHA7rYZ0=";
git = "sha256-76t/tGyK5nz7nvcRdHJTjjckU+Kv+/kbTMiNWJ93jU8=";
};
}; };
} }

View file

@ -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