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

ruby-changes:54651

From: hsbt <ko1@a...>
Date: Sat, 19 Jan 2019 12:36:26 +0900 (JST)
Subject: [ruby-changes:54651] hsbt:r66867 (trunk): Revert r58345 and r58371.

hsbt	2019-01-19 12:36:22 +0900 (Sat, 19 Jan 2019)

  New Revision: 66867

  https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=66867

  Log:
    Revert r58345 and r58371.
    
      These changes break the behavior of default gems. Bug #13428 says
      r58345 is reasonable because gemspec file is installed by `to_ruby_for_cache`
      method. But I revert `to_ruby_for_cache` in rbinstall.rb at r58403.
      There is no reason that we apply r58345 now.
    
      But I'm not sure about gemspec of default gems affects standalone gems.
      I'm going to investigate it on rubygems/rubygems.
    
      [Bug #15500][ruby-core:90867]

  Modified files:
    trunk/tool/rbinstall.rb
Index: tool/rbinstall.rb
===================================================================
--- tool/rbinstall.rb	(revision 66866)
+++ tool/rbinstall.rb	(revision 66867)
@@ -641,6 +641,69 @@ install?(:local, :comm, :man) do https://github.com/ruby/ruby/blob/trunk/tool/rbinstall.rb#L641
 end
 
 module RbInstall
+  module Specs
+    class FileCollector
+      def initialize(gemspec)
+        @gemspec = gemspec
+        @base_dir = File.dirname(gemspec)
+      end
+
+      def collect
+        (ruby_libraries + built_libraries).sort
+      end
+
+      private
+      def type
+        /\/(ext|lib)?\/.*?\z/ =~ @base_dir
+        $1
+      end
+
+      def ruby_libraries
+        case type
+        when "ext"
+          prefix = "#{$extout}/common/"
+          base = "#{prefix}#{relative_base}"
+        when "lib"
+          base = @base_dir
+          prefix = base.sub(/lib\/.*?\z/, "") + "lib/"
+        end
+
+        if base
+          Dir.glob("#{base}{.rb,/**/*.rb}").collect do |ruby_source|
+            remove_prefix(prefix, ruby_source)
+          end
+        else
+          [remove_prefix(File.dirname(@gemspec) + '/', @gemspec.gsub(/gemspec/, 'rb'))]
+        end
+      end
+
+      def built_libraries
+        case type
+        when "ext"
+          prefix = "#{$extout}/#{CONFIG['arch']}/"
+          base = "#{prefix}#{relative_base}"
+          dlext = CONFIG['DLEXT']
+          Dir.glob("#{base}{.#{dlext},/**/*.#{dlext}}").collect do |built_library|
+            remove_prefix(prefix, built_library)
+          end
+        when "lib"
+          []
+        else
+          []
+        end
+      end
+
+      def relative_base
+        /\/#{Regexp.escape(type)}\/(.*?)\z/ =~ @base_dir
+        $1
+      end
+
+      def remove_prefix(prefix, string)
+        string.sub(/\A#{Regexp.escape(prefix)}/, "")
+      end
+    end
+  end
+
   class UnpackedInstaller < Gem::Installer
     module DirPackage
       def extract_files(destination_dir, pattern = "*")
@@ -730,17 +793,7 @@ install?(:ext, :comm, :gem, :'default-ge https://github.com/ruby/ruby/blob/trunk/tool/rbinstall.rb#L793
   install_default_gem('lib', srcdir)
 end
 install?(:ext, :arch, :gem, :'default-gems', :'default-gems-arch') do
-  install_default_gem('ext', srcdir) do |path|
-    # assume that gemspec and extconf.rb are placed in the same directory
-    success = false
-    begin
-      IO.foreach(File.dirname(path[(srcdir.size+1)..-1]) + "/Makefile") do |l|
-        break success = true if /^TARGET\s*=/ =~ l
-      end
-    rescue Errno::ENOENT
-    end
-    success
-  end
+  install_default_gem('ext', srcdir)
 end
 
 def load_gemspec(file)
@@ -766,8 +819,12 @@ def install_default_gem(dir, srcdir) https://github.com/ruby/ruby/blob/trunk/tool/rbinstall.rb#L819
   makedirs(default_spec_dir)
 
   gems = Dir.glob("#{srcdir}/#{dir}/**/*.gemspec").map {|src|
-    next if block_given? and !yield(src)
-    load_gemspec(src)
+    spec = load_gemspec(src)
+    file_collector = RbInstall::Specs::FileCollector.new(src)
+    files = file_collector.collect
+    next if files.empty?
+    spec.files = files
+    spec
   }
   gems.compact.sort_by(&:name).each do |gemspec|
     old_gemspecs = Dir[File.join(default_spec_dir, "#{gemspec.name}-*.gemspec")]

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

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