Skip to content

Commit bfd5921

Browse files
committed
* 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. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38101 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
1 parent 3f50943 commit bfd5921

File tree

3 files changed

+110
-12
lines changed

3 files changed

+110
-12
lines changed

ChangeLog

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,18 @@
1+
Sat Dec 1 12:22:17 2012 Kouhei Sutou <[email protected]>
2+
3+
* re-added r38053 that is reverted by r38061. Problems by r38053
4+
are resolved by r38096. r38096 removed GEM_SKIP configuration.
5+
6+
The below is ChangeLog of r38053:
7+
8+
* defs/default_gems: Add base directory column.
9+
10+
* tool/rbinstall.rb:
11+
- Install .gemspecs of default gem to
12+
#{GEM_HOME}/specifications/default/.
13+
- Update files parameter of .gemspecs by relative path from
14+
library directory.
15+
116
Sat Dec 1 11:09:12 2012 Aaron Patterson <[email protected]>
217

318
* variable.c (rb_class_path_no_cache): add a function to get the class

defs/default_gems

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
# gem versioning file [executable files under bin]
2-
rake lib/rake/version.rb [rake]
3-
rdoc lib/rdoc.rb [rdoc ri]
4-
minitest lib/minitest/unit.rb
5-
json ext/json/lib/json/version.rb
1+
# gem base directory versioning file [executable files under bin]
2+
rake lib/rake lib/rake/version.rb [rake]
3+
rdoc lib/rdoc lib/rdoc.rb [rdoc ri]
4+
minitest lib/minitest lib/minitest/unit.rb
5+
json ext/json ext/json/lib/json/version.rb

tool/rbinstall.rb

Lines changed: 90 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -562,24 +562,95 @@ def self.load(path)
562562
src.sub!(/\A#.*/, '')
563563
eval(src, nil, path)
564564
end
565+
566+
def to_ruby
567+
<<-GEMSPEC
568+
Gem::Specification.new do |s|
569+
s.name = #{name.dump}
570+
s.version = #{version.dump}
571+
s.summary = #{summary.dump}
572+
s.description = #{description.dump}
573+
s.homepage = #{homepage.dump}
574+
s.authors = #{authors.inspect}
575+
s.email = #{email.inspect}
576+
s.files = #{files.inspect}
577+
end
578+
GEMSPEC
579+
end
565580
end
566581
end
567582

568583
module RbInstall
569584
module Specs
585+
class FileCollector
586+
def initialize(base_dir)
587+
@base_dir = base_dir
588+
end
589+
590+
def collect
591+
ruby_libraries + built_libraries
592+
end
593+
594+
private
595+
def type
596+
/\/(ext|lib)?\/.*?\z/ =~ @base_dir
597+
$1
598+
end
599+
600+
def ruby_libraries
601+
case type
602+
when "ext"
603+
prefix = "#{$extout}/common/"
604+
base = "#{prefix}#{relative_base}"
605+
when "lib"
606+
base = @base_dir
607+
prefix = base.sub(/lib\/.*?\z/, "") + "lib/"
608+
end
609+
610+
Dir.glob("#{base}{.rb,/**/*.rb}").collect do |ruby_source|
611+
remove_prefix(prefix, ruby_source)
612+
end
613+
end
614+
615+
def built_libraries
616+
case type
617+
when "ext"
618+
prefix = "#{$extout}/#{CONFIG['arch']}/"
619+
base = "#{prefix}#{relative_base}"
620+
Dir.glob("#{base}{.so,/**/*.so}").collect do |built_library|
621+
remove_prefix(prefix, built_library)
622+
end
623+
when "lib"
624+
[]
625+
end
626+
end
627+
628+
def relative_base
629+
/\/#{Regexp.escape(type)}\/(.*?)\z/ =~ @base_dir
630+
$1
631+
end
632+
633+
def remove_prefix(prefix, string)
634+
string.sub(/\A#{Regexp.escape(prefix)}/, "")
635+
end
636+
end
637+
570638
class Reader < Struct.new(:src)
571639
def gemspec
572640
@gemspec ||= begin
573-
Gem::Specification.load(src) || raise("invalid spec in #{src}")
641+
spec = Gem::Specification.load(src) || raise("invalid spec in #{src}")
642+
file_collector = FileCollector.new(File.dirname(src))
643+
spec.files = file_collector.collect
644+
spec
574645
end
575646
end
576647

577648
def spec_source
578-
File.read src
649+
@gemspec.to_ruby
579650
end
580651
end
581652

582-
class Generator < Struct.new(:name, :src, :execs)
653+
class Generator < Struct.new(:name, :base_dir, :src, :execs)
583654
def gemspec
584655
@gemspec ||= eval spec_source
585656
end
@@ -591,6 +662,7 @@ def spec_source
591662
s.version = #{version.dump}
592663
s.summary = "This #{name} is bundled with Ruby"
593664
s.executables = #{execs.inspect}
665+
s.files = #{files.inspect}
594666
end
595667
GEMSPEC
596668
end
@@ -602,6 +674,11 @@ def version
602674
} or return
603675
version.split(%r"=\s*", 2)[1].strip[/\A([\'\"])(.*?)\1/, 2]
604676
end
677+
678+
def files
679+
file_collector = FileCollector.new(base_dir)
680+
file_collector.collect
681+
end
605682
end
606683
end
607684
end
@@ -615,6 +692,9 @@ def version
615692
prepare "default gems", gem_dir, directories
616693

617694
spec_dir = File.join(gem_dir, directories.grep(/^spec/)[0])
695+
default_spec_dir = "#{spec_dir}/default"
696+
makedirs(default_spec_dir)
697+
618698
gems = {}
619699
File.foreach(File.join(srcdir, "defs/default_gems")) do |line|
620700
line.chomp!
@@ -624,11 +704,12 @@ def version
624704
line.scan(/\G\s*([^\[\]\s]+|\[([^\[\]]*)\])/) do
625705
words << ($2 ? $2.split : $1)
626706
end
627-
name, src, execs = *words
628-
next unless name and src
707+
name, base_dir, src, execs = *words
708+
next unless name and base_dir and src
629709

630710
src = File.join(srcdir, src)
631-
specgen = RbInstall::Specs::Generator.new(name, src, execs || [])
711+
base_dir = File.join(srcdir, base_dir)
712+
specgen = RbInstall::Specs::Generator.new(name, base_dir, src, execs || [])
632713
gems[name] ||= specgen
633714
end
634715

@@ -639,10 +720,12 @@ def version
639720

640721
gems.sort.each do |name, specgen|
641722
gemspec = specgen.gemspec
723+
base_dir = specgen.src.sub(/\A#{Regexp.escape(srcdir)}\//, "")
642724
full_name = "#{gemspec.name}-#{gemspec.version}"
643725

644726
puts "#{" "*30}#{gemspec.name} #{gemspec.version}"
645-
open_for_install(File.join(spec_dir, "#{full_name}.gemspec"), $data_mode) do
727+
gemspec_path = File.join(default_spec_dir, "#{full_name}.gemspec")
728+
open_for_install(gemspec_path, $data_mode) do
646729
specgen.spec_source
647730
end
648731

0 commit comments

Comments
 (0)