mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
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] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66867 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
c20aae965e
commit
c52ca1f2ff
1 changed files with 70 additions and 13 deletions
|
@ -641,6 +641,69 @@ install?(:local, :comm, :man) do
|
||||||
end
|
end
|
||||||
|
|
||||||
module RbInstall
|
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
|
class UnpackedInstaller < Gem::Installer
|
||||||
module DirPackage
|
module DirPackage
|
||||||
def extract_files(destination_dir, pattern = "*")
|
def extract_files(destination_dir, pattern = "*")
|
||||||
|
@ -730,17 +793,7 @@ install?(:ext, :comm, :gem, :'default-gems', :'default-gems-comm') do
|
||||||
install_default_gem('lib', srcdir)
|
install_default_gem('lib', srcdir)
|
||||||
end
|
end
|
||||||
install?(:ext, :arch, :gem, :'default-gems', :'default-gems-arch') do
|
install?(:ext, :arch, :gem, :'default-gems', :'default-gems-arch') do
|
||||||
install_default_gem('ext', srcdir) do |path|
|
install_default_gem('ext', srcdir)
|
||||||
# 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
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def load_gemspec(file)
|
def load_gemspec(file)
|
||||||
|
@ -766,8 +819,12 @@ def install_default_gem(dir, srcdir)
|
||||||
makedirs(default_spec_dir)
|
makedirs(default_spec_dir)
|
||||||
|
|
||||||
gems = Dir.glob("#{srcdir}/#{dir}/**/*.gemspec").map {|src|
|
gems = Dir.glob("#{srcdir}/#{dir}/**/*.gemspec").map {|src|
|
||||||
next if block_given? and !yield(src)
|
spec = load_gemspec(src)
|
||||||
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|
|
gems.compact.sort_by(&:name).each do |gemspec|
|
||||||
old_gemspecs = Dir[File.join(default_spec_dir, "#{gemspec.name}-*.gemspec")]
|
old_gemspecs = Dir[File.join(default_spec_dir, "#{gemspec.name}-*.gemspec")]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue