[前][次][番号順一覧][スレッド一覧]

ruby-changes:27506

From: nobu <ko1@a...>
Date: Sun, 3 Mar 2013 01:14:42 +0900 (JST)
Subject: [ruby-changes:27506] nobu:r39558 (trunk): ext_conf_builder.rb: build in the source directory

nobu	2013-03-03 01:14:32 +0900 (Sun, 03 Mar 2013)

  New Revision: 39558

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=39558

  Log:
    ext_conf_builder.rb: build in the source directory
    
    * lib/rubygems/ext/ext_conf_builder.rb (Gem::Ext::ExtConfBuilder.build):
      revert use of temporary directory for build, to work some buggy
      extconf.rb which cannot build outside the source directory.
      [ruby-core:53056] [Bug #7698]

  Modified files:
    trunk/ChangeLog
    trunk/lib/rubygems/ext/ext_conf_builder.rb

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 39557)
+++ ChangeLog	(revision 39558)
@@ -1,3 +1,10 @@ https://github.com/ruby/ruby/blob/trunk/ChangeLog#L1
+Sun Mar  3 01:14:28 2013  Nobuyoshi Nakada  <nobu@r...>
+
+	* lib/rubygems/ext/ext_conf_builder.rb (Gem::Ext::ExtConfBuilder.build):
+	  revert use of temporary directory for build, to work some buggy
+	  extconf.rb which cannot build outside the source directory.
+	  [ruby-core:53056] [Bug #7698]
+
 Sun Mar  3 00:04:20 2013  Nobuyoshi Nakada  <nobu@r...>
 
 	* enc/depend (CPPFLAGS), lib/mkmf.rb (MakeMakefile#create_makefile):
Index: lib/rubygems/ext/ext_conf_builder.rb
===================================================================
--- lib/rubygems/ext/ext_conf_builder.rb	(revision 39557)
+++ lib/rubygems/ext/ext_conf_builder.rb	(revision 39558)
@@ -7,37 +7,30 @@ https://github.com/ruby/ruby/blob/trunk/lib/rubygems/ext/ext_conf_builder.rb#L7
 require 'rubygems/ext/builder'
 require 'rubygems/command'
 require 'fileutils'
-require 'tmpdir'
+require 'tempfile'
 
 class Gem::Ext::ExtConfBuilder < Gem::Ext::Builder
 
   def self.build(extension, directory, dest_path, results, args=[])
-    pwd = Dir.pwd
-    cmd = "#{Gem.ruby} -r./siteconf #{File.join pwd, File.basename(extension)}"
-    cmd << " #{args.join ' '}" unless args.empty?
-
-    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
+    siteconf = Tempfile.open(%w"siteconf .rb", ".") 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
+      f
     end
 
+    cmd = [Gem.ruby, "-r#{siteconf.path}", File.basename(extension), *args].join ' '
+
+    run cmd, results
+
+    make dest_path, results
+
     results
+  ensure
+    siteconf.close(true) if siteconf
   end
 
 end

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]