[commit: ghc] master: The test runner now also works under the msys-native Python. (101c62e)
git at git.haskell.org
git at git.haskell.org
Wed Nov 19 23:03:27 UTC 2014
Repository : ssh://git@git.haskell.org/ghc
On branch : master
Link : http://ghc.haskell.org/trac/ghc/changeset/101c62e26286353dd3fac1ef54323529b64c9902/ghc
>---------------------------------------------------------------
commit 101c62e26286353dd3fac1ef54323529b64c9902
Author: Gintautas Miliauskas <gintautas.miliauskas at gmail.com>
Date: Mon Sep 22 23:10:56 2014 +0200
The test runner now also works under the msys-native Python.
Msys binaries apply heuristics to escape paths in arguments intended for
non-msys binaries, which breaks timeout invocations, see #9626.
Signed-off-by: Austin Seipp <austin at well-typed.com>
>---------------------------------------------------------------
101c62e26286353dd3fac1ef54323529b64c9902
testsuite/driver/testlib.py | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/testsuite/driver/testlib.py b/testsuite/driver/testlib.py
index 1549381..6fc86e4 100644
--- a/testsuite/driver/testlib.py
+++ b/testsuite/driver/testlib.py
@@ -1780,9 +1780,25 @@ def rawSystem(cmd_and_args):
else:
return os.spawnv(os.P_WAIT, cmd_and_args[0], cmd_and_args)
+# When running under native msys Python, any invocations of non-msys binaries,
+# including timeout.exe, will have their arguments munged according to some
+# heuristics, which leads to malformed command lines (#9626). The easiest way
+# to avoid problems is to invoke through /usr/bin/cmd which sidesteps argument
+# munging because it is a native msys application.
+def passThroughCmd(cmd_and_args):
+ args = []
+ # cmd needs a Windows-style path for its first argument.
+ args.append(cmd_and_args[0].replace('/', '\\'))
+ # Other arguments need to be quoted to deal with spaces.
+ args.extend(['"%s"' % arg for arg in cmd_and_args[1:]])
+ return ["cmd", "/c", " ".join(args)]
+
# Note that this doesn't handle the timeout itself; it is just used for
# commands that have timeout handling built-in.
def rawSystemWithTimeout(cmd_and_args):
+ if config.os == 'mingw32' and sys.executable.startswith('/usr'):
+ # This is only needed when running under msys python.
+ cmd_and_args = passThroughCmd(cmd_and_args)
r = rawSystem(cmd_and_args)
if r == 98:
# The python timeout program uses 98 to signal that ^C was pressed
More information about the ghc-commits
mailing list