Run subsidiary rscons binary from rscons() method if found - close #129

This commit is contained in:
Josh Holtrop 2021-11-28 22:36:24 -05:00
parent 69f5bea2b2
commit 19dbab3426
2 changed files with 33 additions and 3 deletions

View File

@ -55,15 +55,19 @@ module Rscons
# @param args[Array<String>]
# Arguments to pass to rscons subprocess.
def rscons(path, *args)
me = File.expand_path($0)
rscons_path = File.expand_path($0)
path = File.expand_path(path)
if File.directory?(path)
command = [me, *args]
command = [*args]
dir = path
else
command = [me, "-f", path, *args]
command = ["-f", path, *args]
dir = File.dirname(path)
end
if File.exist?("#{dir}/rscons")
rscons_path = "#{dir}/rscons"
end
command = [rscons_path] + command
print_dir = dir != "." && dir != File.expand_path(Dir.pwd)
if ENV["specs"] and not ENV["dist_specs"] # specs
command = ["ruby", $LOAD_PATH.map {|p| ["-I", p]}, command].flatten # specs

View File

@ -2694,6 +2694,32 @@ EOF
end
end
context "with a rscons binary in the subsidiary script directory" do
it "executes rscons from the subsidiary script directory" do
test_dir "subsidiary"
File.binwrite("sub/rscons", <<EOF)
#!/usr/bin/env ruby
puts "sub rscons"
EOF
FileUtils.chmod(0755, "sub/rscons")
result = run_rscons(op: %W[configure])
expect(result.stderr).to eq ""
verify_lines(lines(result.stdout), [
%r{Entering directory '.*/sub'},
%r{sub rscons},
%r{Leaving directory '.*/sub'},
%r{Entering directory '.*/sub'},
%r{sub rscons},
%r{Leaving directory '.*/sub'},
%r{Entering directory '.*/sub'},
%r{sub rscons},
%r{Leaving directory '.*/sub'},
%r{top configure},
])
end
end
it "does not print entering/leaving directory messages when the subsidiary script is in the same directory" do
test_dir "subsidiary"