Fix some build problems
[senf.git] / senfscons / SENFSCons.py
index 90a04ff..812c30e 100644 (file)
@@ -73,6 +73,7 @@ def InitOpts():
     opts.Add('EXTRA_LIBS', 'Additional libraries to link against', '')
     opts.Add(SCons.Options.BoolOption('final','Enable optimization',0))
     opts.Add(SCons.Options.BoolOption('debug','Enable debug symbols in binaries',0))
+    opts.Add(SCons.Options.BoolOption('profile','Enable profiling',0))
     opts.Add('PREFIX', 'Installation prefix', '/usr/local')
     opts.Add('LIBINSTALLDIR', 'Library install dir', '$PREFIX/lib')
     opts.Add('BININSTALLDIR', 'Executable install dir', '$PREFIX/bin')
@@ -162,6 +163,7 @@ def FinalizeBoost(env):
     env['BOOSTREGEXLIB'] = 'boost_regex' + env['BOOST_VARIANT']
     env['BOOSTFSLIB'] = 'boost_filesystem' + env['BOOST_VARIANT']
     env['BOOSTIOSTREAMSLIB'] = 'boost_iostreams' + env['BOOST_VARIANT']
+    env['BOOSTSIGNALSLIB'] = 'boost_signals' + env['BOOST_VARIANT']
 
     if env['BOOST_PREFIX']:
         env['BOOST_LIBDIR'] = os.path.join(env['BOOST_PREFIX'], 'lib')
@@ -264,19 +266,25 @@ def MakeEnvironment():
 
     if env['final']:
         env.Append(CXXFLAGS = [ '-O3' ])
+        if env['profile']:
+            env.Append(CXXFLAGS = [ '-g', '-pg' ],
+                       LINKFLAGS = [ '-g', '-pg' ])
     else:
         # The boost-regex library is not compiled with _GLIBCXX_DEBUG so this fails:
         #          CPPDEFINES = [ '_GLIBCXX_DEBUG' ],
         env.Append(CXXFLAGS = [ '-O0', '-g' ],
                    CPPDEFINES = { 'SENF_DEBUG': ''})
-        if env['debug']:
+        if env['profile']:
+            env.Append(CXXFLAGS = [ '-pg' ],
+                       LINKFLAGS = [ '-pg' ])
+        if env['debug'] or env['profile']:
             env.Append(LINKFLAGS = [ '-g', '-rdynamic' ])
         else:
             env.Append(LINKFLAGS = [ '-Wl,-S', '-rdynamic' ])
 
     env.Append(CPPDEFINES = [ '$EXTRA_DEFINES' ],
                LIBS = [ '$EXTRA_LIBS' ],
-               ALLLIBS = [])
+               ALLOBJECTS = [])
 
     return env
 
@@ -322,14 +330,20 @@ def GlobalTargets(env):
 # \internal
 def LibPath(lib): return '${LOCALLIBDIR}/${LIBPREFIX}%s${LIBADDSUFFIX}${LIBSUFFIX}' % lib
 
+## \brief Add explicit test
+#
+# This target helper will add an explicit test. This is like a unit test but is
+# built directly against the completed library
+#
+# \ingroup target
 def Test(env, sources, LIBS = [], OBJECTS = []):
     test = [ env.BoostUnitTests(
         target = 'test',
         objects = [],
         test_sources = sources,
-        LIBS = [ x + '$LIBADDSUFFIX' for x in LIBS ],
+        LIBS = [ '$LIBSENF' ],
         OBJECTS = OBJECTS,
-        DEPENDS = [ env.File(LibPath(x)) for x in LIBS ]) ]
+        DEPENDS = [ env.File(LibPath(env['LIBSENF'])) ]) ]
     compileTestSources = [ src for src in sources
                            if 'COMPILE_CHECK' in file(src).read() ]
     if compileTestSources:
@@ -379,9 +393,9 @@ def Objects(env, sources, testSources = None, LIBS = [], OBJECTS = [], no_includ
             target = 'test',
             objects = objects,
             test_sources = testSources,
-            LIBS = [ x + '$LIBADDSUFFIX' for x in LIBS ],
+            LIBS = [ '$LIBSENF' ],
             OBJECTS = OBJECTS,
-            DEPENDS = [ env.File(LibPath(x)) for x in LIBS ]) ]
+            DEPENDS = [ env.File(LibPath(env['LIBSENF'])) ]) ]
         compileTestSources = [ src for src in testSources
                                if 'COMPILE_CHECK' in file(src).read() ]
         if compileTestSources:
@@ -638,14 +652,10 @@ def DoxyXRef(env, docs=None,
 #\ingroup target
 def Lib(env, library, sources, testSources = None, LIBS = [], OBJECTS = [], no_includes = False):
     objects = Objects(env,sources,testSources,LIBS=LIBS,OBJECTS=OBJECTS)
-    lib = None
     if objects:
-        lib = env.Library(env.File(LibPath(library)),objects)
-        env.Default(lib)
-        env.Append(ALLLIBS = library)
-        env.Alias('default', lib)
-        InstallWithSources(env, lib, '$LIBINSTALLDIR', sources, testSources, no_includes)
-    return lib
+        env.Append(ALLOBJECTS = objects)
+        InstallSourceIncludes(env, sources)
+    return objects
 
 ## \brief Build Object from multiple sources
 def Object(env, target, sources, testSources = None, LIBS = [], OBJECTS = [], no_includes = False):
@@ -655,7 +665,7 @@ def Object(env, target, sources, testSources = None, LIBS = [], OBJECTS = [], no
         ob = env.Command(target+"${OBJADDSUFFIX}${OBJSUFFIX}", objects, "ld -r -o $TARGET $SOURCES")
         env.Default(ob)
         env.Alias('default', ob)
-        InstallWithSources(env, ob, '$OBJINSTALLDIR', sources, testSources, no_includes)
+        InstallSourceIncludes(env, sources)
     return ob
 
 ## \brief Build executable
@@ -673,10 +683,10 @@ def Binary(env, binary, sources, testSources = None, LIBS = [], OBJECTS = [], no
     program = None
     if objects:
         progEnv = env.Clone()
-        progEnv.Prepend(LIBS = [ x + '$LIBADDSUFFIX' for x in LIBS ])
+        progEnv.Prepend(LIBS = [ '$LIBSENF' ])
         program = progEnv.ProgramNoScan(target=binary,source=objects+OBJECTS)
         env.Default(program)
-        env.Depends(program, [ env.File(LibPath(x)) for x in LIBS ])
+        env.Depends(program, [ env.File(LibPath(env['LIBSENF'])) ])
         env.Alias('default', program)
         InstallWithSources(env, program, '$BININSTALLDIR', sources, testSources, no_includes)
     return program