summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcitrusmoose <[email protected]>2022-06-16 15:13:17 -0400
committergit <[email protected]>2022-06-20 16:04:47 +0900
commit8d689294d033d59f211a6d2c2da72b34ce53c4e5 (patch)
treea5b354d8a20e300e2d560001e504333de52142e5
parentec5c56412f0b67845b42acec06cbd1d341896f25 (diff)
[rubygems/rubygems] Fix extension paths in generated standalone script
The paths for extensions of gems would contain the hardcoded ruby version on which the extension was built. This will replace it with runtime ruby version like the parent version directory. It will make the standalone script compatible between different ruby version installations. https://github.com/rubygems/rubygems/commit/a9dae93d5d
-rw-r--r--lib/bundler/installer/standalone.rb8
-rw-r--r--spec/bundler/install/gems/standalone_spec.rb3
2 files changed, 9 insertions, 2 deletions
diff --git a/lib/bundler/installer/standalone.rb b/lib/bundler/installer/standalone.rb
index e8494b4bcd..2aba648e77 100644
--- a/lib/bundler/installer/standalone.rb
+++ b/lib/bundler/installer/standalone.rb
@@ -29,7 +29,9 @@ module Bundler
@specs.map do |spec|
next if spec.name == "bundler"
Array(spec.require_paths).map do |path|
- gem_path(path, spec).sub(version_dir, '#{RUBY_ENGINE}/#{RbConfig::CONFIG["ruby_version"]}')
+ gem_path(path, spec).
+ sub(version_dir, '#{RUBY_ENGINE}/#{RbConfig::CONFIG["ruby_version"]}').
+ sub(extensions_dir, 'extensions/\k<platform>/#{RbConfig::CONFIG["ruby_version"]}')
# This is a static string intentionally. It's interpolated at a later time.
end
end.flatten.compact
@@ -39,6 +41,10 @@ module Bundler
"#{RUBY_ENGINE}/#{RbConfig::CONFIG["ruby_version"]}"
end
+ def extensions_dir
+ %r{extensions/(?<platform>[^/]+)/#{RbConfig::CONFIG["ruby_version"]}}
+ end
+
def bundler_path
Bundler.root.join(Bundler.settings[:path], "bundler")
end
diff --git a/spec/bundler/install/gems/standalone_spec.rb b/spec/bundler/install/gems/standalone_spec.rb
index 0bbd829148..f856d6b51e 100644
--- a/spec/bundler/install/gems/standalone_spec.rb
+++ b/spec/bundler/install/gems/standalone_spec.rb
@@ -202,8 +202,9 @@ RSpec.shared_examples "bundle install --standalone" do
it "generates a bundle/bundler/setup.rb with the proper paths" do
expected_path = bundled_app("bundle/bundler/setup.rb")
extension_line = File.read(expected_path).each_line.find {|line| line.include? "/extensions/" }.strip
+ platform = Gem::Platform.local
expect(extension_line).to start_with '$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{RbConfig::CONFIG["ruby_version"]}/extensions/'
- expect(extension_line).to end_with '/very_simple_binary-1.0")'
+ expect(extension_line).to end_with platform.to_s + '/#{RbConfig::CONFIG["ruby_version"]}/very_simple_binary-1.0")'
end
end