Change CompileCheck builder to write error messages into .checked file (on success)
[senf.git] / site_scons / senfconf.py
1 # from __future__ import with_statement
2
3 _configTests = {}
4
5 def Tests():
6     global _configTests
7     return _configTests
8
9 def Test(func):
10     global _configTests
11     _configTests[func.__name__] = func
12
13 # class TemporaryContext:
14 #     def __init__(self, context):
15 #         self._context = context
16 #         self._env = self._context.env.Clone()
17
18 #     def __enter__(self):
19 #         return None
20
21 #     def __exit__(self,*args):
22 #         self._context.env.Replace(**self._env.Dictionary())
23 #         return False
24
25 @Test
26 def CheckBoostVersion(context):
27     context.Message( "Checking boost version... " )
28     ret = context.TryRun("#include <boost/version.hpp>\n"
29                          "#include <iostream>\n"
30                          "int main(int, char **) { std::cout << BOOST_LIB_VERSION << std::endl; }",
31                          ".cc")[1].strip()
32     if not ret:
33         context.Result("no boost includes found")
34         return None
35     else:
36         context.Result(ret)
37         return ret
38
39 @Test
40 def CheckBoostVariants(context, *variants):
41     useVariant = None
42 #    with TemporaryContext(context):
43     try:
44         _env = context.env.Clone()
45         for variant in variants:
46             if variant : variantStr = "'%s'" % variant
47             else       : variantStr = "default"
48             context.Message( "Checking boost %s variant... " % variantStr )
49             context.env.Replace( BOOST_VARIANT=variant )
50             context.env.Append( _LIBFLAGS = ' -Wl,-Bstatic -l$BOOSTTESTLIB  -Wl,-Bdynamic' )
51             ret = context.TryLink("#define BOOST_AUTO_TEST_MAIN\n"
52                                   "#include <boost/test/auto_unit_test.hpp>\n"
53                                   "#include <boost/test/test_tools.hpp>\n"
54                                   "BOOST_AUTO_TEST_CASE(test) { BOOST_CHECK(true); }\n",
55                                   ".cc")
56             context.Result( ret )
57             if ret and useVariant is None:
58                 useVariant = variant
59     finally:
60         context.env.Replace(**_env.Dictionary())
61     if useVariant is not None and not context.env.GetOption('no_progress'):
62         print  "Using %s boost variant." % (
63             useVariant and "'%s'" % useVariant or "default")
64     return useVariant