mirror of https://github.com/grpc/grpc.git
The C based gRPC (C++, Python, Ruby, Objective-C, PHP, C#)
https://grpc.io/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
106 lines
4.3 KiB
106 lines
4.3 KiB
9 years ago
|
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
|
||
|
|