summaryrefslogtreecommitdiff
path: root/tool/rbinstall.rb
diff options
context:
space:
mode:
authorVít Ondruch <vondruch@redhat.com>2019-10-10 12:32:59 +0200
committerNobuyoshi Nakada <nobu@ruby-lang.org>2021-02-14 14:09:05 +0900
commit763b8fed3dee32ff3bd6c86260f7d4ce4cfaa508 (patch)
tree0b6547baa07aee0388a6dd50d412152541f4ea5f /tool/rbinstall.rb
parentfc56b96b09e477686975c978142e3af9179219cd (diff)
downloadruby-763b8fed3dee32ff3bd6c86260f7d4ce4cfaa508.tar.gz
Use UnpackedInstaller to install default gems.
Use UnpackedInstaller for installation of default gems similarly it is already used to install bundled gems. This allows to reuse RubyGems functionality instead of custom code full of exceptions.
Diffstat (limited to 'tool/rbinstall.rb')
-rwxr-xr-xtool/rbinstall.rb48
1 files changed, 26 insertions, 22 deletions
diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb
index 8790268476..56502f161a 100755
--- a/tool/rbinstall.rb
+++ b/tool/rbinstall.rb
@@ -700,7 +700,7 @@ module RbInstall
base = "#{prefix}#{relative_base}"
when "lib"
base = @base_dir
- prefix = base.sub(/lib\/.*?\z/, "") + "lib/"
+ prefix = base.sub(/lib\/.*?\z/, "")
else
# other/something.gemspec ->
# [other/something.rb, other/something/foo.rb, ...]
@@ -763,7 +763,13 @@ module RbInstall
mode = pattern == File.join(spec.bindir, '*') ? prog_mode : data_mode
destdir = without_destdir(destination_dir)
spec.files.each do |f|
+ next unless File.fnmatch(pattern, f)
src = File.join(@src_dir, f)
+ # The `src` is fine for bundled gems. However, default gems have their
+ # binaries in `libexec`.
+ unless File.exist?(src)
+ src = File.join(@src_dir, 'libexec', File.basename(f))
+ end
dest = File.join(destdir, f)
makedirs(dest[/.*(?=\/)/m])
install src, dest, :mode => mode
@@ -871,10 +877,10 @@ end
# :startdoc:
install?(:ext, :comm, :gem, :'default-gems', :'default-gems-comm') do
- install_default_gem('lib', srcdir)
+ install_default_gem('lib', srcdir, bindir)
end
install?(:ext, :arch, :gem, :'default-gems', :'default-gems-arch') do
- install_default_gem('ext', srcdir)
+ install_default_gem('ext', srcdir, bindir)
end
def load_gemspec(file, expanded = false)
@@ -902,12 +908,23 @@ def load_gemspec(file, expanded = false)
spec
end
-def install_default_gem(dir, srcdir)
+def install_default_gem(dir, srcdir, bindir)
gem_dir = Gem.default_dir
install_dir = with_destdir(gem_dir)
prepare "default gems from #{dir}", gem_dir
makedirs(Gem.ensure_default_gem_subdirectories(install_dir, $dir_mode).map {|d| File.join(gem_dir, d)})
+ options = {
+ :install_dir => with_destdir(gem_dir),
+ :bin_dir => with_destdir(bindir),
+ :ignore_dependencies => true,
+ :dir_mode => $dir_mode,
+ :data_mode => $data_mode,
+ :prog_mode => $script_mode,
+ :wrappers => true,
+ :format_executable => true,
+ :install_as_default => true,
+ }
default_spec_dir = Gem.default_specifications_dir
gems = Dir.glob("#{srcdir}/#{dir}/**/*.gemspec").map {|src|
@@ -926,25 +943,12 @@ def install_default_gem(dir, srcdir)
full_name = "#{gemspec.name}-#{gemspec.version}"
- puts "#{INDENT}#{gemspec.name} #{gemspec.version}"
- gemspec_path = File.join(default_spec_dir, "#{full_name}.gemspec")
- open_for_install(gemspec_path, $data_mode) do
- gemspec.to_ruby.gsub(/.*\0.*\n/, '')
- end
-
- specific_gem_dir = File.join(gem_dir, 'gems', full_name)
-
- makedirs(specific_gem_dir)
-
- unless gemspec.executables.empty? then
- bin_dir = File.join(specific_gem_dir, gemspec.bindir)
- makedirs(bin_dir)
+ gemspec.loaded_from = File.join srcdir, gemspec.spec_name
- gemspec.executables.map {|exec|
- install File.join(srcdir, 'libexec', exec),
- File.join(bin_dir, exec)
- }
- end
+ package = RbInstall::DirPackage.new gemspec
+ ins = RbInstall::UnpackedInstaller.new(package, options)
+ puts "#{INDENT}#{gemspec.name} #{gemspec.version}"
+ ins.install
end
end