mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
22f1db4b8e
* lib/mkmf.rb (find_executable0): On Windows, it is actually valid to surround individual PATH directory entries with double quotes. Remove these before joining the path as otherwise the literal quotes would become part of the path, resulting in the executable not to be found. [Fix GH-1305] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54255 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
58 lines
1.3 KiB
Ruby
58 lines
1.3 KiB
Ruby
# frozen_string_literal: false
|
|
require_relative 'base'
|
|
|
|
class TestMkmf
|
|
class TestFindExecutable < TestMkmf
|
|
def setup
|
|
super
|
|
@path, ENV["PATH"] = ENV["PATH"], @tmpdir
|
|
end
|
|
|
|
def each_exts(&block)
|
|
name = "foobar#{$$}#{rand(1000)}"
|
|
stdout.filter {|s| s.sub(name, "<executable>")}
|
|
exts = mkmf {self.class::CONFIG['EXECUTABLE_EXTS']}.split
|
|
exts[0] ||= ""
|
|
exts.each do |ext|
|
|
yield name+ext, name
|
|
end
|
|
end
|
|
|
|
def teardown
|
|
ENV["PATH"] = @path
|
|
super
|
|
end
|
|
|
|
def test_find_executable
|
|
bug2669 = '[ruby-core:27912]'
|
|
each_exts do |full, name|
|
|
begin
|
|
open(full, "w") {|ff| ff.chmod(0755)}
|
|
result = mkmf {find_executable(name)}
|
|
ensure
|
|
File.unlink(full)
|
|
end
|
|
assert_equal("#{@tmpdir}/#{full}", result, bug2669)
|
|
end
|
|
end
|
|
|
|
def test_find_executable_dir
|
|
each_exts do |full, name|
|
|
begin
|
|
Dir.mkdir(full)
|
|
result = mkmf {find_executable(name)}
|
|
ensure
|
|
Dir.rmdir(full)
|
|
end
|
|
assert_nil(result)
|
|
end
|
|
end
|
|
|
|
if /mingw|mswin/ =~ RUBY_PLATFORM
|
|
def test_quoted_path_on_windows
|
|
ENV["PATH"] = %["#{@tmpdir}"]
|
|
test_find_executable
|
|
end
|
|
end
|
|
end
|
|
end
|