diff options
| author | Daniel Dunbar <daniel@zuster.org> | 2010-06-11 23:27:45 +0000 |
|---|---|---|
| committer | Daniel Dunbar <daniel@zuster.org> | 2010-06-11 23:27:45 +0000 |
| commit | 43c2cb63aefba86e2200cd8e4d4bf6de75823e96 (patch) | |
| tree | 40f28e805de66f668786156fe0e7a6bf9054af02 | |
| parent | 2292bcc3cba7a419bdd8e808d780fa5f92fbed02 (diff) | |
| download | bcm5719-llvm-43c2cb63aefba86e2200cd8e4d4bf6de75823e96.tar.gz bcm5719-llvm-43c2cb63aefba86e2200cd8e4d4bf6de75823e96.zip | |
lit: When running Tcl style tests on Windows, substitute slashes to avoid Tcl
quoting problems. Not particularly ideal, but should work ok. Based on a patch by
Michael Spencer!
llvm-svn: 105855
| -rw-r--r-- | llvm/utils/lit/lit/TestRunner.py | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/llvm/utils/lit/lit/TestRunner.py b/llvm/utils/lit/lit/TestRunner.py index d10e4b030d8..c2a6e5bb383 100644 --- a/llvm/utils/lit/lit/TestRunner.py +++ b/llvm/utils/lit/lit/TestRunner.py @@ -13,11 +13,13 @@ class InternalShellError(Exception): self.command = command self.message = message +kIsWindows = platform.system() == 'Windows' + # Don't use close_fds on Windows. -kUseCloseFDs = platform.system() != 'Windows' +kUseCloseFDs = not kIsWindows # Use temporary files to replace /dev/null on Windows. -kAvoidDevNull = platform.system() == 'Windows' +kAvoidDevNull = kIsWindows def executeCommand(command, cwd=None, env=None): p = subprocess.Popen(command, cwd=cwd, @@ -364,7 +366,7 @@ def isExpectedFail(xfails, xtargets, target_triple): return True -def parseIntegratedTestScript(test): +def parseIntegratedTestScript(test, normalize_slashes): """parseIntegratedTestScript - Scan an LLVM/Clang style integrated test script and extract the lines to 'RUN' as well as 'XFAIL' and 'XTARGET' information. The RUN lines also will have variable substitution performed. @@ -375,18 +377,25 @@ def parseIntegratedTestScript(test): # # FIXME: This should not be here? sourcepath = test.getSourcePath() + sourcedir = os.path.dirname(sourcepath) execpath = test.getExecPath() execdir,execbase = os.path.split(execpath) tmpBase = os.path.join(execdir, 'Output', execbase) if test.index is not None: tmpBase += '_%d' % test.index + # Normalize slashes, if requested. + if normalize_slashes: + sourcepath = sourcepath.replace('\\', '/') + sourcedir = sourcedir.replace('\\', '/') + tmpBase = tmpBase.replace('\\', '/') + # We use #_MARKER_# to hide %% while we do the other substitutions. substitutions = [('%%', '#_MARKER_#')] substitutions.extend(test.config.substitutions) substitutions.extend([('%s', sourcepath), - ('%S', os.path.dirname(sourcepath)), - ('%p', os.path.dirname(sourcepath)), + ('%S', sourcedir), + ('%p', sourcedir), ('%t', tmpBase + '.tmp'), # FIXME: Remove this once we kill DejaGNU. ('%abs_tmp', tmpBase + '.tmp'), @@ -462,7 +471,9 @@ def executeTclTest(test, litConfig): if test.config.unsupported: return (Test.UNSUPPORTED, 'Test is unsupported') - res = parseIntegratedTestScript(test) + # Parse the test script, normalizing slashes in substitutions on Windows + # (since otherwise Tcl style lexing will treat them as escapes). + res = parseIntegratedTestScript(test, normalize_slashes=kIsWindows) if len(res) == 2: return res |

