summaryrefslogtreecommitdiff
path: root/tool/rbinstall.rb
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2021-02-14 17:41:02 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2021-02-14 17:41:26 +0900
commit0dad341006c3d6a1d941451c5ad5f4d72b386595 (patch)
treead7d4292965bc3af2910bf401de090fa7cdf9367 /tool/rbinstall.rb
parent504d6dc429f931d0ea45d1b0d969cd27476ff91b (diff)
downloadruby-0dad341006c3d6a1d941451c5ad5f4d72b386595.tar.gz
Directory mapping for default gems
To uniform directory structures, sometimes files are gathered in different directory than the upstreams, executable files in `libexec` for instance. Re-map these files to consistent with the upstreams.
Diffstat (limited to 'tool/rbinstall.rb')
-rwxr-xr-xtool/rbinstall.rb16
1 files changed, 8 insertions, 8 deletions
diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb
index debf73a7d2..9c3d71300d 100755
--- a/tool/rbinstall.rb
+++ b/tool/rbinstall.rb
@@ -746,9 +746,10 @@ module RbInstall
attr_accessor :prog_mode
attr_accessor :data_mode
- def initialize(spec)
+ def initialize(spec, dir_map = nil)
@spec = spec
@src_dir = File.dirname(@spec.loaded_from)
+ @dir_map = dir_map
end
def extract_files(destination_dir, pattern = "*")
@@ -756,14 +757,13 @@ module RbInstall
File.chmod(0700, destination_dir) unless $dryrun
mode = pattern == File.join(spec.bindir, '*') ? prog_mode : data_mode
destdir = without_destdir(destination_dir)
+ if @dir_map
+ (dir_map = @dir_map.map {|k, v| Regexp.quote(k) unless k == v}).compact!
+ dir_map = %r{\A(?:#{dir_map.join('|')})(?=/)}
+ end
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
+ src = File.join(@src_dir, dir_map =~ f ? "#{@dir_map[$&]}#{$'}" : f)
dest = File.join(destdir, f)
makedirs(dest[/.*(?=\/)/m])
install src, dest, :mode => mode
@@ -939,7 +939,7 @@ def install_default_gem(dir, srcdir, bindir)
gemspec.loaded_from = File.join srcdir, gemspec.spec_name
- package = RbInstall::DirPackage.new gemspec
+ package = RbInstall::DirPackage.new gemspec, {gemspec.bindir => 'libexec'}
ins = RbInstall::UnpackedInstaller.new(package, options)
puts "#{INDENT}#{gemspec.name} #{gemspec.version}"
ins.install