aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--interpreter.py11
-rw-r--r--test cases/common/38 run program/meson.build14
-rw-r--r--test cases/common/38 run program/scripts/hello.bat2
3 files changed, 21 insertions, 6 deletions
diff --git a/interpreter.py b/interpreter.py
index 0be909a..15f05cd 100644
--- a/interpreter.py
+++ b/interpreter.py
@@ -17,7 +17,7 @@ import nodes
import environment
import coredata
import dependencies
-import os, sys, platform, copy, subprocess
+import os, sys, platform, copy, subprocess, shutil
class InterpreterException(coredata.MesonException):
pass
@@ -57,8 +57,13 @@ class RunProcess(InterpreterObject):
return subprocess.Popen(command_array, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
except FileNotFoundError:
pass
- # Was not a command, try to run as a script relative to current dir.
- fullpath = os.path.join(curdir, command_array[0])
+ # Was not a command, is a program in path?
+ exe = shutil.which(cmd_name)
+ if exe is not None:
+ command_array = [exe] + command_array[1:]
+ return subprocess.Popen(command_array, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ # No? Maybe it is a script in the source tree.
+ fullpath = os.path.join(curdir, cmd_name)
command_array = [fullpath] + command_array[1:]
try:
return subprocess.Popen(command_array, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
diff --git a/test cases/common/38 run program/meson.build b/test cases/common/38 run program/meson.build
index e035643..5fe03d3 100644
--- a/test cases/common/38 run program/meson.build
+++ b/test cases/common/38 run program/meson.build
@@ -1,6 +1,11 @@
project('run command', 'c')
-c = run_command('echo', 'hello')
+if host.name() == 'windows'
+ c = run_command('cmd', '/c', 'echo', 'hello')
+else
+ c = run_command('echo', 'hello')
+endif
+
correct = 'hello'
if c.returncode() != 0
@@ -19,8 +24,11 @@ endif
# Now the same with a script.
-cs = run_command('scripts/hello.sh')
-correct = 'hello'
+if host.name() == 'windows'
+ cs = run_command('scripts/hello.bat')
+else
+ cs = run_command('scripts/hello.sh')
+endif
if cs.returncode() != 0
error('Executing script failed.')
diff --git a/test cases/common/38 run program/scripts/hello.bat b/test cases/common/38 run program/scripts/hello.bat
new file mode 100644
index 0000000..cbc346b
--- /dev/null
+++ b/test cases/common/38 run program/scripts/hello.bat
@@ -0,0 +1,2 @@
+@ECHO OFF
+ECHO hello