diff options
Diffstat (limited to 'third_party/rake-compiler-dock/build/patches/rake-compiler-0.9.5/compat-with-bundler.diff')
-rw-r--r-- | third_party/rake-compiler-dock/build/patches/rake-compiler-0.9.5/compat-with-bundler.diff | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/third_party/rake-compiler-dock/build/patches/rake-compiler-0.9.5/compat-with-bundler.diff b/third_party/rake-compiler-dock/build/patches/rake-compiler-0.9.5/compat-with-bundler.diff new file mode 100644 index 0000000000..ea22bd928e --- /dev/null +++ b/third_party/rake-compiler-dock/build/patches/rake-compiler-0.9.5/compat-with-bundler.diff @@ -0,0 +1,105 @@ +From 41f834449fc4323b2f995e8715aa5842d9fd9334 Mon Sep 17 00:00:00 2001 +From: Lars Kanis <lars@greiz-reinsdorf.de> +Date: Sat, 30 Jan 2016 08:08:07 +0100 +Subject: [PATCH] Change the fake mechanism to be compatible with bundler. + +The previous fake mechanism worked by hooking onto the +"require 'rbconfig'" call. +This is problematic because bundler internally requires rbconfig, but doesn't +work corretly in a faked environment. +It then fails to load gems that are also part of the standard library, like +json and rdoc. +This results in issues like https://github.com/rake-compiler/rake-compiler-dock/issues/8 + +The fake mechanism is now changed to hook onto the "require 'mkrb'" call, +which is typically part of the extconf file, and it is where the faked platform +values are actually needed. +That way it is loaded after bundler/setup, so that the library paths are +set according to the Gemfile.lock, to the native Linux libraries, before +the fake environment is active. + +Please note, that the build directory of a given gem needs to be cleared, +in order to get updated fake files. So do a "rm tmp pkg -rf". +--- + lib/rake/extensiontask.rb | 35 ++++++++++++++--------------------- + 1 file changed, 14 insertions(+), 21 deletions(-) + +diff --git a/lib/rake/extensiontask.rb b/lib/rake/extensiontask.rb +index 030af96..f914919 100644 +--- a/lib/rake/extensiontask.rb ++++ b/lib/rake/extensiontask.rb +@@ -169,8 +169,8 @@ Java extension should be preferred. + # now add the extconf script + cmd << abs_extconf.relative_path_from(abs_tmp_path) + +- # rbconfig.rb will be present if we are cross compiling +- if t.prerequisites.include?("#{tmp_path}/rbconfig.rb") then ++ # fake.rb will be present if we are cross compiling ++ if t.prerequisites.include?("#{tmp_path}/fake.rb") then + options.push(*cross_config_options(platf)) + end + +@@ -365,39 +365,30 @@ Java extension should be preferred. + # define compilation tasks for cross platform! + define_compile_tasks(for_platform, ruby_ver) + +- # chain fake.rb, rbconfig.rb and mkmf.rb to Makefile generation ++ # chain fake.rb and mkmf.rb to Makefile generation + file "#{tmp_path}/Makefile" => ["#{tmp_path}/fake.rb", +- "#{tmp_path}/rbconfig.rb", + "#{tmp_path}/mkmf.rb"] + +- # copy the file from the cross-ruby location +- file "#{tmp_path}/rbconfig.rb" => [rbconfig_file] do |t| ++ # copy the rbconfig from the cross-ruby location and ++ # genearte fake.rb for different ruby versions ++ file "#{tmp_path}/fake.rb" => [rbconfig_file] do |t| + File.open(t.name, 'w') do |f| +- f.write "require 'fake.rb'\n\n" ++ f.write fake_rb(for_platform, ruby_ver) + f.write File.read(t.prerequisites.first) + end + end + + # copy mkmf from cross-ruby location + file "#{tmp_path}/mkmf.rb" => [mkmf_file] do |t| +- cp t.prerequisites.first, t.name +- if ruby_ver < "1.9" && "1.9" <= RUBY_VERSION +- File.open(t.name, 'r+t') do |f| +- content = f.read ++ File.open(t.name, 'w') do |f| ++ content = File.read(t.prerequisites.first) ++ content.sub!(/^(require ')rbconfig(')$/, '\\1fake\\2') ++ if ruby_ver < "1.9" && "1.9" <= RUBY_VERSION + content.sub!(/^( break )\*(defaults)$/, '\\1\\2.first') + content.sub!(/^( return )\*(defaults)$/, '\\1\\2.first') + content.sub!(/^( mfile\.)print( configuration\(srcprefix\))$/, '\\1puts\\2') +- f.rewind +- f.write content +- f.truncate(f.tell) + end +- end +- end +- +- # genearte fake.rb for different ruby versions +- file "#{tmp_path}/fake.rb" do |t| +- File.open(t.name, 'w') do |f| +- f.write fake_rb(for_platform, ruby_ver) ++ f.write content + end + end + +@@ -495,8 +486,10 @@ Java extension should be preferred. + # "cannot load such file -- win32/resolv" when it is required later on. + # See also: https://github.com/tjschuck/rake-compiler-dev-box/issues/5 + require 'resolv' ++ require 'rbconfig' + + class Object ++ remove_const :RbConfig + remove_const :RUBY_PLATFORM + remove_const :RUBY_VERSION + remove_const :RUBY_DESCRIPTION if defined?(RUBY_DESCRIPTION) +-- +2.5.0.windows.1 + |