summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--configure.in1
-rw-r--r--test/mkmf/test_find_executable.rb36
-rw-r--r--win32/Makefile.sub3
3 files changed, 40 insertions, 0 deletions
diff --git a/configure.in b/configure.in
index c28a9e8c3f..da63857a00 100644
--- a/configure.in
+++ b/configure.in
@@ -2092,6 +2092,7 @@ AC_SUBST(ARCHFILE)
if test "$EXEEXT" = .exe; then
EXECUTABLE_EXTS='".exe",".com",".cmd",".bat"'
AC_DEFINE_UNQUOTED(EXECUTABLE_EXTS, $EXECUTABLE_EXTS)
+ EXECUTABLE_EXTS=`echo $EXECUTABLE_EXTS | tr -d '"' | tr , ' '`
AC_SUBST(EXECUTABLE_EXTS)
fi
diff --git a/test/mkmf/test_find_executable.rb b/test/mkmf/test_find_executable.rb
new file mode 100644
index 0000000000..6030a8e605
--- /dev/null
+++ b/test/mkmf/test_find_executable.rb
@@ -0,0 +1,36 @@
+require_relative 'base'
+
+class TestMkmf
+ class TestFindExecutable < TestMkmf
+ class F
+ def do_find_executable(name)
+ find_executable(name)
+ end
+ end
+
+ def test_find_executable
+ bug2669 = '[ruby-core:27912]'
+ path, ENV["PATH"] = ENV["PATH"], path
+ ENV["PATH"] = @tmpdir
+ f = F.new
+ name = "foobar#{$$}#{rand(1000)}"
+ if /mswin\d|mingw|cygwin/ =~ RUBY_PLATFORM
+ exts = %w[.exe .com .cmd .bat]
+ else
+ exts = [""]
+ end
+ exts.each do |ext|
+ full = name+ext
+ begin
+ open(full, "w") {|f| f.chmod(0755)}
+ result = f.do_find_executable(name)
+ ensure
+ File.unlink(full)
+ end
+ assert_equal("#{@tmpdir}/#{name}#{ext}", result, bug2669)
+ end
+ ensure
+ ENV["PATH"] = path
+ end
+ end
+end
diff --git a/win32/Makefile.sub b/win32/Makefile.sub
index 6530fa81d3..19aa5973ac 100644
--- a/win32/Makefile.sub
+++ b/win32/Makefile.sub
@@ -593,6 +593,9 @@ $(BANG)endif
# @ren $(RUBY_CONFIG_H:.h=_h).bak $(RUBY_CONFIG_H)
#!endif
+EXECUTABLE_EXTS = $(EXECUTABLE_EXTS:"=) # "
+EXECUTABLE_EXTS = $(EXECUTABLE_EXTS:,= )
+
config.status: $(MKFILES) $(srcdir)/win32/Makefile.sub $(win_srcdir)/Makefile.sub $(srcdir)/common.mk
@echo Creating $@
@exit <<$@