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

ruby-changes:27527

From: nobu <ko1@a...>
Date: Mon, 4 Mar 2013 15:33:55 +0900 (JST)
Subject: [ruby-changes:27527] nobu:r39579 (trunk): ext_conf_builder.rb: install via temporary directory

nobu	2013-03-04 15:33:48 +0900 (Mon, 04 Mar 2013)

  New Revision: 39579

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

  Log:
    ext_conf_builder.rb: install via temporary directory
    
    * lib/rubygems/ext/ext_conf_builder.rb (Gem::Ext::ExtConfBuilder.build):
      fix for unusal cases again.  install to a temporary directory once
      and move instaled files to the destination directory, if it is same
      as the current directory.  [Bug #7698]

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

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 39578)
+++ ChangeLog	(revision 39579)
@@ -1,3 +1,10 @@ https://github.com/ruby/ruby/blob/trunk/ChangeLog#L1
+Mon Mar  4 15:33:40 2013  Nobuyoshi Nakada  <nobu@r...>
+
+	* lib/rubygems/ext/ext_conf_builder.rb (Gem::Ext::ExtConfBuilder.build):
+	  fix for unusal cases again.  install to a temporary directory once
+	  and move instaled files to the destination directory, if it is same
+	  as the current directory.  [Bug #7698]
+
 Mon Mar  4 14:13:36 2013  Nobuyoshi Nakada  <nobu@r...>
 
 	* Makefile.in (miniruby, ruby): move MAINLIBC because linker arguments
Index: lib/rubygems/ext/ext_conf_builder.rb
===================================================================
--- lib/rubygems/ext/ext_conf_builder.rb	(revision 39578)
+++ lib/rubygems/ext/ext_conf_builder.rb	(revision 39579)
@@ -10,26 +10,14 @@ require 'fileutils' https://github.com/ruby/ruby/blob/trunk/lib/rubygems/ext/ext_conf_builder.rb#L10
 require 'tempfile'
 
 class Gem::Ext::ExtConfBuilder < Gem::Ext::Builder
-
-  def self.hack_for_obsolete_style_gems(directory)
-    return unless directory and File.identical?(directory, ".")
-    mf = Gem.read_binary 'Makefile'
-    changed = false
-    changed |= mf.gsub!(/^(install-rb-default:)(.*)/) {
-      "#$1#{$2.gsub(/(?:^|\s+)\$\(RUBY(?:ARCH|LIB)DIR\)\/\S+(?=\s|$)/, '')}"
-    }
-    changed |= mf.gsub!(/^(install-so:.*DLLIB.*\n)((?:\t.*\n)+)/) {
-      "#$1#{$2.gsub(/.*INSTALL.*DLLIB.*\n/, '')}"
-    }
-    if changed
-      File.open('Makefile', 'wb') {|f| f.print mf}
-    end
-  end
+  FileEntry = FileUtils::Entry_ # :nodoc:
 
   def self.build(extension, directory, dest_path, results, args=[])
+    tmp_dest = (Dir.mktmpdir(".gem.", ".") if File.identical?(dest_path, "."))
+
     siteconf = Tempfile.open(%w"siteconf .rb", ".") do |f|
       f.puts "require 'rbconfig'"
-      f.puts "dest_path = #{dest_path.dump}"
+      f.puts "dest_path = #{(tmp_dest || dest_path).dump}"
       %w[sitearchdir sitelibdir].each do |dir|
         f.puts "RbConfig::MAKEFILE_CONFIG['#{dir}'] = dest_path"
         f.puts "RbConfig::CONFIG['#{dir}'] = dest_path"
@@ -43,14 +31,20 @@ class Gem::Ext::ExtConfBuilder < Gem::Ex https://github.com/ruby/ruby/blob/trunk/lib/rubygems/ext/ext_conf_builder.rb#L31
 
     run cmd, results
 
-    hack_for_obsolete_style_gems directory
-
     make dest_path, results
 
+    if tmp_dest
+      FileEntry.new(tmp_dest).traverse do |ent|
+        destent = ent.class.new(dest_path, ent.rel)
+        destent.exist? or File.rename(ent.path, destent.path)
+      end
+    end
+
     results
   ensure
     ENV["RUBYOPT"] = rubyopt
     siteconf.close(true) if siteconf
+    FileUtils.rm_rf tmp_dest if tmp_dest
   end
 
 end
Index: test/rubygems/test_gem_installer.rb
===================================================================
--- test/rubygems/test_gem_installer.rb	(revision 39578)
+++ test/rubygems/test_gem_installer.rb	(revision 39579)
@@ -1038,7 +1038,17 @@ gem 'other', version https://github.com/ruby/ruby/blob/trunk/test/rubygems/test_gem_installer.rb#L1038
       RUBY
     end
 
+    Dir.mkdir(File.join("lib", @spec.name))
+    rb2 = File.join("lib", @spec.name, "#{@spec.name}.rb")
+    @spec.files << rb2
+    write_file File.join(@tempdir, rb2) do |io|
+      io.write <<-RUBY
+        # #{@spec.name}/#{@spec.name}.rb
+      RUBY
+    end
+
     assert !File.exist?(File.join(@spec.gem_dir, rb))
+    assert !File.exist?(File.join(@spec.gem_dir, rb2))
     use_ui @ui do
       path = Gem::Package.build @spec
 
@@ -1046,6 +1056,7 @@ gem 'other', version https://github.com/ruby/ruby/blob/trunk/test/rubygems/test_gem_installer.rb#L1056
       @installer.install
     end
     assert File.exist?(File.join(@spec.gem_dir, rb))
+    assert File.exist?(File.join(@spec.gem_dir, rb2))
   end
 
   def test_install_extension_flat

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

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