mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	* 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
 |