1 import os, os.path, sys
2 from SCons.Script import *
11 if line.startswith('COMPILE_FAIL(') and ')' in line:
12 name = line.split('(',1)[-1].split(')',1)[0]
14 elif line.startswith('}') and name and start:
15 tests[name] = (start, linenr)
18 def CompileCheck(target, source, env):
19 tests = scanTests(file(source[0].abspath))
20 errf = os.popen(env.subst('$CXXCOM -DCOMPILE_CHECK 2>&1', source=source, target=target))
24 elts = error.split(':',2)
25 if len(elts) != 3 : continue
26 filename, line, message = elts
27 if not os.path.exists(filename) : continue
29 except ValueError : continue
30 message = message.strip()
32 if delay_name and not message.startswith('instantiated from '):
33 print "Passed test '%s': %s" % (delay_name, message)
37 filename = os.path.abspath(filename)
38 if filename != source[0].abspath : continue
40 for name,lines in tests.iteritems():
41 if line >= lines[0] and line <= lines[1]:
43 if message.startswith('instantiated from '):
46 print "Passed test '%s': %s" % (name, message)
48 print "Passed test '%s': <unknown message ??>" % delay_name
49 failedTests = set(tests.iterkeys()) - set(passedTests.iterkeys())
51 for test in failedTests:
52 print "Test '%s' FAILED" % test
54 print "*** %d tests FAILED" % len(failedTests)
55 if os.path.exists(target[0].abspath):
56 os.unlink(target[0].abspath)
58 file(target[0].abspath,"w").close()
61 CompileCheck = Action(CompileCheck)
65 builder = env.Builder(
66 action = CompileCheck,
69 source_scanner = SCons.Scanner.C.CScanner(),
73 env.Append(BUILDERS = { 'CompileCheck': builder })