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