From d6b40320b2cfecf9802e664a4869353d195fcc6d Mon Sep 17 00:00:00 2001 From: Hiroshi SHIBATA Date: Thu, 11 Dec 2025 19:34:01 +0900 Subject: [PATCH] Append found lib/ entries to spec.files to support out-of-place builds --- tool/rbinstall.rb | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb index 936ef8242d..874c3ef1d9 100755 --- a/tool/rbinstall.rb +++ b/tool/rbinstall.rb @@ -870,16 +870,25 @@ def load_gemspec(file, base = nil, files: nil) code = File.read(file, encoding: "utf-8:-") code.gsub!(/^ *#.*/, "") - files = files ? files.map(&:dump).join(", ") : "" + spec_files = files ? files.map(&:dump).join(", ") : "" code.gsub!(/(?:`git[^\`]*`|%x\[git[^\]]*\])\.split(\([^\)]*\))?/m) do - "[" + files + "]" + "[" + spec_files + "]" end \ or code.gsub!(/IO\.popen\(.*git.*?\)/) do - "[" + files + "] || itself" + "[" + spec_files + "] || itself" end spec = eval(code, binding, file) + # for out-of-place build + collected_files = files ? spec.files.concat(files).uniq : spec.files + spec.files = collected_files.map do |f| + if !File.exist?(File.join(base || ".", f)) && f.end_with?(".rb") + "lib/#{f}" + else + f + end + end unless Gem::Specification === spec raise TypeError, "[#{file}] isn't a Gem::Specification (#{spec.class} instead)." end