MultiTestRunner: Make sure to point at src dir, for out of tree builds.

Factor out routine for executing the script commands.

llvm-svn: 77075
This commit is contained in:
Daniel Dunbar 2009-07-25 15:26:08 +00:00
parent 4edf8a17d5
commit 605bd11311
2 changed files with 32 additions and 32 deletions

View File

@ -2,7 +2,7 @@ LEVEL = ../../..
include $(LEVEL)/Makefile.common
# Test in all immediate subdirectories if unset.
TESTDIRS ?= .
TESTDIRS ?= $(PROJ_SRC_DIR)
ifndef TESTARGS
ifdef VERBOSE

View File

@ -57,6 +57,35 @@ def mkdir_p(path):
if e.errno != errno.EEXIST:
raise
def executeScript(script, commands, cwd):
# Write script file
f = open(script,'w')
if kSystemName == 'Windows':
f.write('\nif %ERRORLEVEL% NEQ 0 EXIT\n'.join(commands))
else:
f.write(' &&\n'.join(commands))
f.write('\n')
f.close()
if kSystemName == 'Windows':
command = ['cmd','/c', script]
else:
command = ['/bin/sh', script]
p = subprocess.Popen(command, cwd=cwd,
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
env=kChildEnv)
out,err = p.communicate()
exitCode = p.wait()
# Detect Ctrl-C in subprocess.
if exitCode == -signal.SIGINT:
raise KeyboardInterrupt
return out, err, exitCode
import StringIO
def runOneTest(testPath, tmpBase, clang, clangcc):
# Make paths absolute.
@ -119,37 +148,8 @@ def runOneTest(testPath, tmpBase, clang, clangcc):
# Strip off '&&'
scriptLines[i] = ln[:-2]
# Write script file
f = open(script,'w')
if kSystemName == 'Windows':
f.write('\nif %ERRORLEVEL% NEQ 0 EXIT\n'.join(scriptLines))
else:
f.write(' &&\n'.join(scriptLines))
f.write('\n')
f.close()
p = None
try:
if kSystemName == 'Windows':
command = ['cmd','/c', script]
else:
command = ['/bin/sh', script]
p = subprocess.Popen(command,
cwd=os.path.dirname(testPath),
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
env=kChildEnv)
out,err = p.communicate()
exitCode = p.wait()
# Detect Ctrl-C in subprocess.
if exitCode == -signal.SIGINT:
raise KeyboardInterrupt
except KeyboardInterrupt:
raise
out, err, exitCode = executeScript(script, scriptLines,
cwd=os.path.dirname(testPath))
if xfailLines:
ok = exitCode != 0
status = (TestStatus.XPass, TestStatus.XFail)[ok]