diff options
author | Vít Ondruch <vondruch@redhat.com> | 2019-10-10 12:32:59 +0200 |
---|---|---|
committer | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2021-02-14 14:09:05 +0900 |
commit | 763b8fed3dee32ff3bd6c86260f7d4ce4cfaa508 (patch) | |
tree | 0b6547baa07aee0388a6dd50d412152541f4ea5f | |
parent | fc56b96b09e477686975c978142e3af9179219cd (diff) | |
download | ruby-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.
-rwxr-xr-x | tool/rbinstall.rb | 48 |
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 |