diff options
Diffstat (limited to 'lib/rubygems/ext/ext_conf_builder.rb')
-rw-r--r-- | lib/rubygems/ext/ext_conf_builder.rb | 28 |
1 files changed, 24 insertions, 4 deletions
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 |