1 # from __future__ import with_statement
5 # Fix for SCons 0.97 compatibility
7 try: SCons.SConf.SConfBase.Define
10 def Define(self, name, value = None, comment = None):
13 comment_str = "/* %s */" % comment
14 lines.append(comment_str)
16 define_str = "#define %s %s" % (name, value)
18 define_str = "#define %s" % name
19 lines.append(define_str)
21 self.config_h_text = self.config_h_text + string.join(lines, '\n')
22 SCons.SConf.SConfBase.Define = Define
31 _configTests[func.__name__] = func
34 # class TemporaryContext:
35 # def __init__(self, context):
36 # self._context = context
37 # self._env = self._context.env.Clone()
39 # def __enter__(self):
42 # def __exit__(self,*args):
43 # self._context.env.Replace(**self._env.Dictionary())
47 def CheckBoostVersion(context):
48 context.Message( "Checking boost version... " )
49 ret = context.TryRun("#include <boost/version.hpp>\n"
50 "#include <iostream>\n"
51 "int main(int, char **) { std::cout << BOOST_LIB_VERSION << std::endl; }",
54 context.Result("no boost includes found")
55 context.env.Replace( BOOST_VERSION = '' )
59 context.env.Replace( BOOST_VERSION = ret )
63 def CheckBoostVariants(context, *variants):
65 # with TemporaryContext(context):
67 _env = context.env.Clone()
68 for variant in variants:
69 if variant : variantStr = "'%s'" % variant
70 else : variantStr = "default"
71 context.Message( "Checking boost %s variant... " % variantStr )
72 context.env.Replace( BOOST_VARIANT=variant )
73 context.env.Append( _LIBFLAGS = ' -Wl,-Bstatic -l$BOOSTTESTLIB -Wl,-Bdynamic' )
74 ret = context.TryLink("#define BOOST_AUTO_TEST_MAIN\n"
75 "#include <boost/test/auto_unit_test.hpp>\n"
76 "#include <boost/test/test_tools.hpp>\n"
77 "BOOST_AUTO_TEST_CASE(test) { BOOST_CHECK(true); }\n",
80 if ret and useVariant is None:
83 context.env.Replace(**_env.Dictionary())
84 if useVariant is not None and not context.env.GetOption('no_progress'):
85 print "Using %s boost variant." % (
86 useVariant and "'%s'" % useVariant or "default")
87 context.env.Replace( BOOST_VARIANT = useVariant )