From 22f1db4b8e349c8a7a4894113d06d7f438f988fa Mon Sep 17 00:00:00 2001 From: nobu Date: Thu, 24 Mar 2016 16:10:43 +0000 Subject: mkmf: Unquote directory strings * 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 --- ChangeLog | 8 ++++++++ lib/mkmf.rb | 1 + test/mkmf/test_find_executable.rb | 7 +++++++ 3 files changed, 16 insertions(+) diff --git a/ChangeLog b/ChangeLog index da790ffa8f..eeffdcfc42 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +Fri Mar 25 01:10:42 2016 Sebastian Schuberth + + * 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] + Thu Mar 24 22:38:18 2016 Nobuyoshi Nakada * strftime.c (FMT, FMTV): remove recursive-assignments to get rid diff --git a/lib/mkmf.rb b/lib/mkmf.rb index 6e23db8575..31bee93c97 100644 --- a/lib/mkmf.rb +++ b/lib/mkmf.rb @@ -1551,6 +1551,7 @@ SRC end file = nil path.each do |dir| + dir.sub!(/\A"(.*)"\z/m, '\1') if $mswin or $mingw return file if executable_file.call(file = File.join(dir, bin)) if exts exts.each {|ext| executable_file.call(ext = file + ext) and return ext} diff --git a/test/mkmf/test_find_executable.rb b/test/mkmf/test_find_executable.rb index ad48e5193c..7ffc28ecc8 100644 --- a/test/mkmf/test_find_executable.rb +++ b/test/mkmf/test_find_executable.rb @@ -47,5 +47,12 @@ class TestMkmf 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 -- cgit v1.2.3