diff options
author | drbrain <drbrain@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2013-02-28 22:25:55 +0000 |
---|---|---|
committer | drbrain <drbrain@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2013-02-28 22:25:55 +0000 |
commit | a5dfaca00a94bc3d135aae52b4458f5a355bf0ed (patch) | |
tree | 77c9580bb289422d6e97749934a8c24c8aadc76c /lib/rubygems/ext | |
parent | 3fc7731297d8de1f52cec9382a4f1f0a08bea949 (diff) | |
download | ruby-a5dfaca00a94bc3d135aae52b4458f5a355bf0ed.tar.gz |
* lib/rubygems/ext/builder.rb: Fix incompatibilities when installing
extensions. Patch by Nobu.
[ruby-trunk - Bug #7968] [ruby-trunk - Bug #7971]
* lib/rubygems/ext/ext_conf_builder.rb: ditto.
* lib/rubygems/installer.rb: ditto.
* test/rubygems/test_gem_ext_ext_conf_builder.rb: Test for the above.
* test/rubygems/test_gem_installer.rb: ditto.
* lib/rubygems/commands/sources_command.rb: Prefer HTTPS over HTTP.
* lib/rubygems/defaults.rb: ditto
* lib/rubygems/dependency_resolver.rb: Ditto.
* lib/rubygems/source.rb: ditto.
* lib/rubygems/spec_fetcher.rb: ditto.
* lib/rubygems/specification.rb: ditto.
* lib/rubygems/test_utilities.rb: ditto.
* test/rubygems/test_gem.rb: Test for the above.
* test/rubygems/test_gem_commands_sources_command.rb: ditto.
* test/rubygems/test_gem_dependency_resolver_api_set.rb: ditto.
* test/rubygems/test_gem_remote_fetcher.rb: ditto.
* test/rubygems/test_gem_source.rb: ditto.
* test/rubygems/test_gem_spec_fetcher.rb: ditto.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@39542 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/rubygems/ext')
-rw-r--r-- | lib/rubygems/ext/builder.rb | 7 | ||||
-rw-r--r-- | lib/rubygems/ext/ext_conf_builder.rb | 28 |
2 files changed, 24 insertions, 11 deletions
diff --git a/lib/rubygems/ext/builder.rb b/lib/rubygems/ext/builder.rb index d7d953fec3..9b6ad304a2 100644 --- a/lib/rubygems/ext/builder.rb +++ b/lib/rubygems/ext/builder.rb @@ -16,13 +16,6 @@ class Gem::Ext::Builder raise Gem::InstallError, "Makefile not found:\n\n#{results.join "\n"}" end - mf = Gem.read_binary 'Makefile' - mf = mf.gsub(/^RUBYARCHDIR\s*=\s*\$[^$]*/, "RUBYARCHDIR = #{dest_path}") - mf = mf.gsub(/^RUBYLIBDIR\s*=\s*\$[^$]*/, "RUBYLIBDIR = #{dest_path}") - mf = mf.gsub(/\s*\S+\.time$/, "") - - File.open('Makefile', 'wb') {|f| f.print mf} - # try to find make program from Ruby configure arguments first RbConfig::CONFIG['configure_args'] =~ /with-make-prog\=(\w+)/ make_program = $1 || ENV['MAKE'] || ENV['make'] diff --git a/lib/rubygems/ext/ext_conf_builder.rb b/lib/rubygems/ext/ext_conf_builder.rb index 7ca322d3e5..3a439af502 100644 --- a/lib/rubygems/ext/ext_conf_builder.rb +++ b/lib/rubygems/ext/ext_conf_builder.rb @@ -6,16 +6,36 @@ require 'rubygems/ext/builder' require 'rubygems/command' +require 'fileutils' +require 'tmpdir' class Gem::Ext::ExtConfBuilder < Gem::Ext::Builder def self.build(extension, directory, dest_path, results, args=[]) - cmd = "#{Gem.ruby} #{File.basename extension}" + pwd = Dir.pwd + cmd = "#{Gem.ruby} -r./siteconf #{File.join pwd, File.basename(extension)}" cmd << " #{args.join ' '}" unless args.empty? - run cmd, results - - make dest_path, results + Dir.mktmpdir("gem-install.") do |tmpdir| + Dir.chdir(tmpdir) do + open("siteconf.rb", "w") do |f| + f.puts "require 'rbconfig'" + f.puts "dest_path = #{dest_path.dump}" + %w[sitearchdir sitelibdir].each do |dir| + f.puts "RbConfig::MAKEFILE_CONFIG['#{dir}'] = dest_path" + f.puts "RbConfig::CONFIG['#{dir}'] = dest_path" + end + end + + begin + run cmd, results + + make dest_path, results + ensure + FileUtils.mv("mkmf.log", pwd) if $! and File.exist?("mkmf.log") + end + end + end results end |