Change CompileCheck builder to write error messages into .checked file (on success)
[senf.git] / site_scons / site_tools / Boost.py
index 4e07ac3..bc6e0e6 100644 (file)
@@ -36,7 +36,8 @@ def CompileCheck(target, source, env):
     passedTests = {}
     delay_name = None
     out.seek(0)
-    for error in out.read().splitlines():
+    result = out.read();
+    for error in result.splitlines():
         elts = error.split(':',2)
         if len(elts) != 3 : continue
         filename, line, message = elts
@@ -71,12 +72,14 @@ def CompileCheck(target, source, env):
         if os.path.exists(target[0].abspath):
             os.unlink(target[0].abspath)
         return 1
-    file(target[0].abspath,"w").close()
+    file(target[0].abspath,"w").write(result)
     return 0
 
 CompileCheck = SCons.Script.Action(CompileCheck)
 
 def BoostUnitTest(env, target=None, source=None,  **kw):
+    global _ALL_TESTS
+
     target = env.arg2nodes(target)[0]
     source = env.arg2nodes(source)
 
@@ -89,11 +92,10 @@ def BoostUnitTest(env, target=None, source=None,  **kw):
                       **kw)
 
     stamp = env.Command(stampnode, bin,
-                        [ '$SOURCE $BOOSTTESTARGS',
-                          'touch $TARGET' ],
+                        [ './$SOURCE $BOOSTTESTARGS', SCons.Script.Touch('$TARGET')],
                         **kw)
 
-    alias = env.Command(env.File(target), stamp, [])
+    alias = env.Command(env.File(target), stamp, [ env.NopAction() ] )
 
     compileTests = [ src for src in source 
                      if src.suffix in SCons.Tool.cplusplus.CXXSuffixes \
@@ -107,17 +109,24 @@ def BoostUnitTest(env, target=None, source=None,  **kw):
     return alias
 
 def FindAllBoostUnitTests(env, target, source):
+    global _ALL_TESTS
     return _ALL_TESTS
 
+def NopAction(env, target, source):
+    def nop(target, source, env) : return None
+    def nopstr(target, source, env) : return ''
+    return env.Action(nop, nopstr)
+
 def generate(env):
     env.SetDefault(
         BOOST_VARIANT     = '',
+        _BOOST_VARIANT    = '${BOOST_VARIANT and "-" or None}$BOOST_VARIANT',
 
-        BOOSTTESTLIB      = 'boost_unit_test_framework$BOOST_VARIANT',
-        BOOSTREGEXLIB     = 'boost_regex$BOOST_VARIANT',
-        BOOSTFSLIB        = 'boost_filesystem$BOOST_VARIANT',
-        BOOSTIOSTREAMSLIB = 'boost_iostreams$BOOST_VARIANT',
-        BOOSTSIGNALSLIB   = 'boost_signals$BOOST_VARIANT',
+        BOOSTTESTLIB      = 'boost_unit_test_framework$_BOOST_VARIANT',
+        BOOSTREGEXLIB     = 'boost_regex$_BOOST_VARIANT',
+        BOOSTFSLIB        = 'boost_filesystem$_BOOST_VARIANT',
+        BOOSTIOSTREAMSLIB = 'boost_iostreams$_BOOST_VARIANT',
+        BOOSTSIGNALSLIB   = 'boost_signals$_BOOST_VARIANT',
 
         BOOSTTESTARGS     = [ '--build_info=yes', '--log_level=test_suite' ],
     )
@@ -131,6 +140,7 @@ def generate(env):
         source_scanner = SCons.Scanner.C.CScanner(),
         single_source=1
         )
+    env['BUILDERS']['NopAction'] = NopAction
 
 def exists(env):
     return True