check_program: do not fail on Windows for non-existent PATH entries
This commit is contained in:
parent
0344f02cb1
commit
a1bb9d81fd
@ -204,16 +204,18 @@ module Rscons
|
|||||||
File.file?(path) and File.executable?(path)
|
File.file?(path) and File.executable?(path)
|
||||||
end
|
end
|
||||||
if RbConfig::CONFIG["host_os"] =~ /mswin|windows|mingw/i
|
if RbConfig::CONFIG["host_os"] =~ /mswin|windows|mingw/i
|
||||||
executable = executable.downcase
|
if File.directory?(path_entry)
|
||||||
dir_entries = Dir.entries(path_entry)
|
executable = executable.downcase
|
||||||
dir_entries.find do |entry|
|
dir_entries = Dir.entries(path_entry)
|
||||||
path = "#{path_entry}/#{entry}"
|
dir_entries.find do |entry|
|
||||||
entry = entry.downcase
|
path = "#{path_entry}/#{entry}"
|
||||||
if ((entry == executable) or
|
entry = entry.downcase
|
||||||
(entry == "#{executable}.exe") or
|
if ((entry == executable) or
|
||||||
(entry == "#{executable}.com") or
|
(entry == "#{executable}.exe") or
|
||||||
(entry == "#{executable}.bat")) and is_executable[path]
|
(entry == "#{executable}.com") or
|
||||||
return path
|
(entry == "#{executable}.bat")) and is_executable[path]
|
||||||
|
return path
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
|
@ -145,7 +145,11 @@ EOF
|
|||||||
stdout, stderr, status = nil, nil, nil
|
stdout, stderr, status = nil, nil, nil
|
||||||
Bundler.with_clean_env do
|
Bundler.with_clean_env do
|
||||||
env = ENV.to_h
|
env = ENV.to_h
|
||||||
env["PATH"] = "#{@build_test_run_dir}/_bin#{File::PATH_SEPARATOR}#{env["PATH"]}"
|
path = ["#{@build_test_run_dir}/_bin", "#{env["PATH"]}"]
|
||||||
|
if options[:path]
|
||||||
|
path = Array(options[:path]) + path
|
||||||
|
end
|
||||||
|
env["PATH"] = path.join(File::PATH_SEPARATOR)
|
||||||
stdout, stderr, status = Open3.capture3(env, *command)
|
stdout, stderr, status = Open3.capture3(env, *command)
|
||||||
File.open("#{@build_test_run_dir}/.stdout", "wb") do |fh|
|
File.open("#{@build_test_run_dir}/.stdout", "wb") do |fh|
|
||||||
fh.write(stdout)
|
fh.write(stdout)
|
||||||
@ -2046,6 +2050,16 @@ EOF
|
|||||||
expect(result.stdout).to match /Checking for program 'find'... .*find/
|
expect(result.stdout).to match /Checking for program 'find'... .*find/
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context "with non-existent PATH entries" do
|
||||||
|
it "succeeds when the requested program is found" do
|
||||||
|
test_dir "configure"
|
||||||
|
result = run_rscons(rsconscript: "check_program_success.rb", op: "configure", path: "/foo/bar")
|
||||||
|
expect(result.stderr).to eq ""
|
||||||
|
expect(result.status).to eq 0
|
||||||
|
expect(result.stdout).to match /Checking for program 'find'... .*find/
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
it "fails when the requested program is not found" do
|
it "fails when the requested program is not found" do
|
||||||
test_dir "configure"
|
test_dir "configure"
|
||||||
result = run_rscons(rsconscript: "check_program_failure.rb", op: "configure")
|
result = run_rscons(rsconscript: "check_program_failure.rb", op: "configure")
|
||||||
@ -2188,8 +2202,8 @@ EOF
|
|||||||
expect(result.stdout).to match /Setting build directory\.\.\. bb/
|
expect(result.stdout).to match /Setting build directory\.\.\. bb/
|
||||||
expect(result.stdout).to match %r{Setting prefix\.\.\. /my/prefix}
|
expect(result.stdout).to match %r{Setting prefix\.\.\. /my/prefix}
|
||||||
expect(result.stdout).to match /Checking for C compiler\.\.\. gcc/
|
expect(result.stdout).to match /Checking for C compiler\.\.\. gcc/
|
||||||
expect(result.stdout).to match /Checking for C\+\+ compiler\.\.\. g++/
|
expect(result.stdout).to match /Checking for C\+\+ compiler\.\.\. g\+\+/
|
||||||
expect(result.stdout).to match /Checking for D compiler\.\.\. gdc/
|
expect(result.stdout).to match /Checking for D compiler\.\.\. (gdc|ldc2)/
|
||||||
expect(result.stdout).to match /Checking for package 'mypackage'\.\.\. found/
|
expect(result.stdout).to match /Checking for package 'mypackage'\.\.\. found/
|
||||||
expect(result.stdout).to match /Checking for C header 'stdio.h'\.\.\. found/
|
expect(result.stdout).to match /Checking for C header 'stdio.h'\.\.\. found/
|
||||||
expect(result.stdout).to match /Checking for C\+\+ header 'iostream'\.\.\. found/
|
expect(result.stdout).to match /Checking for C\+\+ header 'iostream'\.\.\. found/
|
||||||
|
@ -121,7 +121,10 @@ EOF
|
|||||||
before(:each) do
|
before(:each) do
|
||||||
stub_const("File::PATH_SEPARATOR", ";")
|
stub_const("File::PATH_SEPARATOR", ";")
|
||||||
stub_const("RbConfig::CONFIG", "host_os" => "mingw")
|
stub_const("RbConfig::CONFIG", "host_os" => "mingw")
|
||||||
expect(ENV).to receive(:[]).with("PATH").and_return("C:\\bin;C:\\Windows")
|
expect(ENV).to receive(:[]).with("PATH").and_return("C:\\none;C:\\bin;C:\\Windows")
|
||||||
|
allow(File).to receive(:directory?).with("C:\\none").and_return(false)
|
||||||
|
allow(File).to receive(:directory?).with("C:\\bin").and_return(true)
|
||||||
|
allow(File).to receive(:directory?).with("C:\\Windows").and_return(true)
|
||||||
allow(Dir).to receive(:entries).with("C:\\bin").and_return(%w[one.com])
|
allow(Dir).to receive(:entries).with("C:\\bin").and_return(%w[one.com])
|
||||||
allow(Dir).to receive(:entries).with("C:\\Windows").and_return(%w[two.exe Three.bat])
|
allow(Dir).to receive(:entries).with("C:\\Windows").and_return(%w[two.exe Three.bat])
|
||||||
end
|
end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user