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

ruby-changes:26044

From: kou <ko1@a...>
Date: Sat, 1 Dec 2012 12:35:47 +0900 (JST)
Subject: [ruby-changes:26044] kou:r38101 (trunk): * re-added r38053 that is reverted by r38061. Problems by r38053

kou	2012-12-01 12:35:36 +0900 (Sat, 01 Dec 2012)

  New Revision: 38101

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

  Log:
    * re-added r38053 that is reverted by r38061. Problems by r38053
      are resolved by r38096. r38096 removed GEM_SKIP configuration.
    
      The below is ChangeLog of r38053:
    
    * defs/default_gems: Add base directory column.
    
    * tool/rbinstall.rb:
      - Install .gemspecs of default gem to
        #{GEM_HOME}/specifications/default/.
      - Update files parameter of .gemspecs by relative path from
        library directory.

  Modified files:
    trunk/ChangeLog
    trunk/defs/default_gems
    trunk/tool/rbinstall.rb

Index: defs/default_gems
===================================================================
--- defs/default_gems	(revision 38100)
+++ defs/default_gems	(revision 38101)
@@ -1,5 +1,5 @@
-# gem		versioning file			[executable files under bin]
-rake		lib/rake/version.rb		[rake]
-rdoc		lib/rdoc.rb			[rdoc ri]
-minitest	lib/minitest/unit.rb
-json		ext/json/lib/json/version.rb
+# gem		base directory		versioning file			[executable files under bin]
+rake		lib/rake		lib/rake/version.rb		[rake]
+rdoc		lib/rdoc		lib/rdoc.rb			[rdoc ri]
+minitest	lib/minitest		lib/minitest/unit.rb
+json		ext/json		ext/json/lib/json/version.rb
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 38100)
+++ ChangeLog	(revision 38101)
@@ -1,3 +1,18 @@
+Sat Dec  1 12:22:17 2012  Kouhei Sutou  <kou@c...>
+
+	* re-added r38053 that is reverted by r38061. Problems by r38053
+	  are resolved by r38096. r38096 removed GEM_SKIP configuration.
+
+	  The below is ChangeLog of r38053:
+
+	* defs/default_gems: Add base directory column.
+
+	* tool/rbinstall.rb:
+	  - Install .gemspecs of default gem to
+	    #{GEM_HOME}/specifications/default/.
+	  - Update files parameter of .gemspecs by relative path from
+	    library directory.
+
 Sat Dec  1 11:09:12 2012  Aaron Patterson <aaron@t...>
 
 	* variable.c (rb_class_path_no_cache): add a function to get the class
Index: tool/rbinstall.rb
===================================================================
--- tool/rbinstall.rb	(revision 38100)
+++ tool/rbinstall.rb	(revision 38101)
@@ -562,24 +562,95 @@
       src.sub!(/\A#.*/, '')
       eval(src, nil, path)
     end
+
+    def to_ruby
+        <<-GEMSPEC
+Gem::Specification.new do |s|
+  s.name = #{name.dump}
+  s.version = #{version.dump}
+  s.summary = #{summary.dump}
+  s.description = #{description.dump}
+  s.homepage = #{homepage.dump}
+  s.authors = #{authors.inspect}
+  s.email = #{email.inspect}
+  s.files = #{files.inspect}
+end
+        GEMSPEC
+    end
   end
 end
 
 module RbInstall
   module Specs
+    class FileCollector
+      def initialize(base_dir)
+        @base_dir = base_dir
+      end
+
+      def collect
+        ruby_libraries + built_libraries
+      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
+
+        Dir.glob("#{base}{.rb,/**/*.rb}").collect do |ruby_source|
+          remove_prefix(prefix, ruby_source)
+        end
+      end
+
+      def built_libraries
+        case type
+        when "ext"
+          prefix = "#{$extout}/#{CONFIG['arch']}/"
+          base = "#{prefix}#{relative_base}"
+          Dir.glob("#{base}{.so,/**/*.so}").collect do |built_library|
+            remove_prefix(prefix, built_library)
+          end
+        when "lib"
+          []
+        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
+
     class Reader < Struct.new(:src)
       def gemspec
         @gemspec ||= begin
-          Gem::Specification.load(src) || raise("invalid spec in #{src}")
+          spec = Gem::Specification.load(src) || raise("invalid spec in #{src}")
+          file_collector = FileCollector.new(File.dirname(src))
+          spec.files = file_collector.collect
+          spec
         end
       end
 
       def spec_source
-        File.read src
+        @gemspec.to_ruby
       end
     end
 
-    class Generator < Struct.new(:name, :src, :execs)
+    class Generator < Struct.new(:name, :base_dir, :src, :execs)
       def gemspec
         @gemspec ||= eval spec_source
       end
@@ -591,6 +662,7 @@
   s.version = #{version.dump}
   s.summary = "This #{name} is bundled with Ruby"
   s.executables = #{execs.inspect}
+  s.files = #{files.inspect}
 end
         GEMSPEC
       end
@@ -602,6 +674,11 @@
         } or return
         version.split(%r"=\s*", 2)[1].strip[/\A([\'\"])(.*?)\1/, 2]
       end
+
+      def files
+        file_collector = FileCollector.new(base_dir)
+        file_collector.collect
+      end
     end
   end
 end
@@ -615,6 +692,9 @@
   prepare "default gems", gem_dir, directories
 
   spec_dir = File.join(gem_dir, directories.grep(/^spec/)[0])
+  default_spec_dir = "#{spec_dir}/default"
+  makedirs(default_spec_dir)
+
   gems = {}
   File.foreach(File.join(srcdir, "defs/default_gems")) do |line|
     line.chomp!
@@ -624,11 +704,12 @@
     line.scan(/\G\s*([^\[\]\s]+|\[([^\[\]]*)\])/) do
       words << ($2 ? $2.split : $1)
     end
-    name, src, execs = *words
-    next unless name and src
+    name, base_dir, src, execs = *words
+    next unless name and base_dir and src
 
     src       = File.join(srcdir, src)
-    specgen   = RbInstall::Specs::Generator.new(name, src, execs || [])
+    base_dir  = File.join(srcdir, base_dir)
+    specgen   = RbInstall::Specs::Generator.new(name, base_dir, src, execs || [])
     gems[name] ||= specgen
   end
 
@@ -639,10 +720,12 @@
 
   gems.sort.each do |name, specgen|
     gemspec   = specgen.gemspec
+    base_dir  = specgen.src.sub(/\A#{Regexp.escape(srcdir)}\//, "")
     full_name = "#{gemspec.name}-#{gemspec.version}"
 
     puts "#{" "*30}#{gemspec.name} #{gemspec.version}"
-    open_for_install(File.join(spec_dir, "#{full_name}.gemspec"), $data_mode) do
+    gemspec_path = File.join(default_spec_dir, "#{full_name}.gemspec")
+    open_for_install(gemspec_path, $data_mode) do
       specgen.spec_source
     end
 

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

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