PPI: Rename all 'Reader's to 'Source's and 'Writer's to 'Sink's
[senf.git] / senfscons / SENFSCons.py
index 72087a3..40939cb 100644 (file)
@@ -51,6 +51,7 @@ SCONS_TOOLS = [
     "Dia2Png",
     "CopyToDir",
     "InstallIncludes",
+    "ProgramNoScan",
 ]
 
 opts = None
@@ -118,7 +119,7 @@ def Finalizer(f):
 # libraries are provided by the distribution, you probably don't need
 # to specify any parameters. If your configuration is more complex,
 # refer to the <a
-# href="http://www.boost.org/tools/build/v1/build_system.htm">Boost.Build</a>
+# href="http://www.boost.org/tools/build/v2/index.html">Boost.Build</a>
 # documentation for a definition of the terms used above (toolset,
 # variant, runtime ...).
 #
@@ -219,6 +220,7 @@ def MakeEnvironment():
             env[opt.key] = SCons.Script.SConscript.Arguments.get(opt.key)
     if SCons.Script.SConscript.Arguments.get('final'):
         env['final'] = 1
+    env.Help("\nSupported build variables (either in SConfig or on the command line:\n")
     env.Help(opts.GenerateHelpText(env))
 
     # We want to pass the SSH_AUTH_SOCK system env-var so we can ssh
@@ -244,10 +246,13 @@ def MakeEnvironment():
                    CPPDEFINES = [ 'NDEBUG' ])
     else:
         env.Append(CXXFLAGS = [ '-O0', '-g', '-fno-inline' ],
+    # The boost-regex library is not compiled with _GLIBCXX_DEBUG so this fails.
+    #               CPPDEFINES = [ '_GLIBCXX_DEBUG' ],
                    LINKFLAGS = [ '-g' ])
 
     env.Append(CPPDEFINES = [ '$EXTRA_DEFINES' ],
-               LIBS = [ '$EXTRA_LIBS' ])
+               LIBS = [ '$EXTRA_LIBS' ],
+               ALLLIBS = [])
 
     return env
 
@@ -287,7 +292,7 @@ def StandardTargets(env):
 #
 # \ingroup target
 def GlobalTargets(env):
-    env.Depends(env.Alias('all'),'#')
+    env.Alias('all', [ 'default', 'all_tests', 'all_docs' ])
 
 ## \brief Return path of a built library within $LOCALLIBDIR
 # \internal
@@ -344,6 +349,13 @@ def Objects(env, sources, testSources = None, LIBS = [], OBJECTS = []):
 
     return objects
 
+def InstallIncludeFiles(env, files):
+    target = env.Dir(env['INCLUDEINSTALLDIR'])
+    base = env.Dir(env['INSTALL_BASE'])
+    for f in files:
+        src = env.File(f)
+        env.Alias('install_all', env.Install(target.Dir(src.dir.get_path(base)), src))
+
 def InstallWithSources(env, targets, dir, sources, testSources = [], no_includes = False):
     if type(sources) is type(()):
         sources, testSources = sources
@@ -352,8 +364,7 @@ def InstallWithSources(env, targets, dir, sources, testSources = [], no_includes
     if type(testSources) is not type([]):
         testSources = [ testSources ]
 
-    installs = []
-    installs.append( env.Install(dir, targets) )
+    installs = [ env.Install(dir, targets) ]
 
     if not no_includes:
         target = env.Dir(env['INCLUDEINSTALLDIR']).Dir(
@@ -361,7 +372,6 @@ def InstallWithSources(env, targets, dir, sources, testSources = [], no_includes
         source = targets
         if testSources:
             source.append( env.File('.test.bin') )
-            
             installs.append(env.InstallIncludes(
                 target = target,
                 source = targets,
@@ -577,6 +587,7 @@ def Lib(env, library, sources, testSources = None, LIBS = [], OBJECTS = [], no_i
         lib = env.Library(env.File(LibPath(library)),objects)
         env.Default(lib)
         env.Append(ALLLIBS = library)
+        env.Alias('default', lib)
         install = InstallWithSources(env, lib, '$LIBINSTALLDIR', sources, testSources, no_includes)
         env.Alias('install_all', install)
     return lib
@@ -588,6 +599,7 @@ def Object(env, target, sources, testSources = None, LIBS = [], OBJECTS = [], no
     if objects:
         ob = env.Command(target+".o", objects, "ld -r -o $TARGET $SOURCES")
         env.Default(ob)
+        env.Alias('default', ob)
         install = InstallWithSources(env, ob, '$OBJINSTALLDIR', sources, testSources, no_includes)
         env.Alias('install_all', install)
     return ob
@@ -608,10 +620,18 @@ def Binary(env, binary, sources, testSources = None, LIBS = [], OBJECTS = [], no
     if objects:
         progEnv = env.Copy()
         progEnv.Prepend(LIBS = LIBS)
-        program = progEnv.Program(target=binary,source=objects+OBJECTS)
+        program = progEnv.ProgramNoScan(target=binary,source=objects+OBJECTS)
         env.Default(program)
         env.Depends(program, [ env.File(LibPath(x)) for x in LIBS ])
+        env.Alias('default', program)
         install = InstallWithSources(env, program, '$BININSTALLDIR', sources, testSources,
                                      no_includes)
         env.Alias('install_all', install)
     return program
+
+def AllIncludesHH(env, headers):
+    headers.sort()
+    target = env.File("all_includes.hh")
+    file(target.abspath,"w").write("".join([ '#include "%s"\n' % f
+                                             for f in headers ]))
+    env.Clean('all', target)