Combine all boot build stuff in a single scons tool
[senf.git] / SConstruct
index ebb1fab..7cf0362 100644 (file)
@@ -14,11 +14,11 @@ env = Environment()
 env.Tool('Doxygen', [ 'senfscons' ])
 env.Tool('Dia2Png', [ 'senfscons' ])
 env.Tool('PkgDraw', [ 'senfscons' ])
+env.Tool('InstallSubdir', [ 'senfscons' ])
 env.Tool('CopyToDir', [ 'senfscons' ])
-env.Tool('CompileCheck', [ 'senfscons' ])
 env.Tool('Boost', [ 'senfscons' ])
-env.Tool('BoostUnitTest', [ 'senfscons' ])
-env.Tool('InstallSubdir', [ 'senfscons' ])
+env.Tool('CombinedObject', [ 'senfscons' ])
+env.Tool('PhonyTarget', [ 'senfscons' ])
 
 env.Help("""
 Additional top-level build targets:
@@ -44,6 +44,10 @@ class BuildTypeOptions:
         type = env['final'] and "final" or env['debug'] and "debug" or "normal"
         return env[self._var + "_" + type]
 
+env.Replace(
+   PKGDRAW                = 'doclib/pkgdraw',
+)
+
 env.Append(
    ENV                    = { 'PATH' : os.environ.get('PATH') },
    CLEAN_PATTERNS         = [ '*~', '#*#', '*.pyc', 'semantic.cache', '.sconsign*', '.sconsign' ],
@@ -51,9 +55,9 @@ env.Append(
    CPPPATH                = [ '#/include' ],
    LOCALLIBDIR            = '#',
    LIBPATH                = [ '$LOCALLIBDIR' ],
-   LIBS                   = [ 'rt', '$BOOSTREGEXLIB', '$BOOSTIOSTREAMSLIB', '$BOOSTSIGNALSLIB',
-                              '$BOOSTFSLIB' ], 
-   TEST_EXTRA_LIBS        = [ '$LIBSENF$LIBADDSUFFIX' ],
+   LIBS                   = [ '$LIBSENF$LIBADDSUFFIX', 'rt', '$BOOSTREGEXLIB', 
+                              '$BOOSTIOSTREAMSLIB', '$BOOSTSIGNALSLIB', '$BOOSTFSLIB' ], 
+   TEST_EXTRA_LIBS        = [  ],
 
    PREFIX                 = '/usr/local',
    LIBINSTALLDIR          = '$PREFIX/lib',
@@ -113,17 +117,9 @@ if not os.path.exists("Doxyfile.local"):
 if not env.GetOption('clean') and not os.path.exists("local_config.hh"):
     Execute(Touch("local_config.hh"))
 
-###########################################################################
-# Define build targets
-
-# Before defining any targets, check wether this is the first build in
-# pristine directory tree. If so, call 'scons prepare' so the dependencies
-# created later are correct (yes, this is a hack :-( )
-
 if not env.GetOption('clean') and not os.path.exists(".prepare-stamp") \
    and not os.environ.get("SCONS") and COMMAND_LINE_TARGETS != [ 'prepare' ]:
     env.Execute([ "scons prepare" ])
-env.Clean('all', '.prepare-stamp')
 
 # Load SConscripts. Need to load some first (they change the global environment)
 initSConscripts = [ 
@@ -138,29 +134,30 @@ if os.path.exists('SConscript.local'):
 
 SConscript(list(set(glob.glob("*/SConscript")) - set(initSConscripts)))
 
-# Define the main targets
-env.Alias('all', [ 'default', 'all_tests', 'all_docs' ])
+###########################################################################
+# Define build targets
 
+#### doc
 env.Depends(SENFSCons.Doxygen(env), env.Value(env['ENV']['REVISION']))
 
+#### libsenf.a
 libsenf = env.Library(env.subst("$LIBSENF$LIBADDSUFFIX"), env['ALLOBJECTS'])
 env.Default(libsenf)
-env.Clean('all', libsenf)
-env.Alias('default', libsenf)
 
 env.InstallSubdir(target = '$INCLUDEINSTALLDIR', source = [ 'config.hh' ])
+env.Install('$LIBINSTALLDIR', libsenf)
 
-env.Alias('install_all', env.Install('$LIBINSTALLDIR', libsenf))
-
-if env.GetOption('clean'):
-    env.Clean('all', [ os.path.join(path,f)
-                       for path, subdirs, files in os.walk('.')
-                       for pattern in env['CLEAN_PATTERNS']
-                       for f in fnmatch.filter(files,pattern) ])
+#### install_all, default, all_tests, all
+env.Alias('install_all', env.FindInstalledFiles())
+env.Alias('default', DEFAULT_TARGETS)
+env.Alias('all_tests', env.FindAllBoostUnitTests())
+env.Alias('all', [ 'default', 'all_tests', 'all_docs' ])
 
-SENFSCons.PhonyTarget(env, 'prepare', [ 'true' ])
+#### prepare
+env.PhonyTarget('prepare', [], [])
 
-SENFSCons.PhonyTarget(env, 'valgrind', [ """
+#### valgrind
+env.PhonyTarget('valgrind', [ 'all_tests' ], [ """
     find -name .test.bin 
         | while read test; do
             echo;
@@ -170,7 +167,18 @@ SENFSCons.PhonyTarget(env, 'valgrind', [ """
                 $$test $BOOSTTESTARGS;
             [ $$? -ne 99 ] || exit 1;
         done
-""".replace("\n"," ") ], [ 'all_tests' ])
+""".replace("\n"," ") ])
+
+#### clean
+env.Clean('all', '.prepare-stamp')
+env.Clean('all', libsenf)
+env.Clean('all', 'linklint')
+
+if env.GetOption('clean'):
+    env.Clean('all', [ os.path.join(path,f)
+                       for path, subdirs, files in os.walk('.')
+                       for pattern in env['CLEAN_PATTERNS']
+                       for f in fnmatch.filter(files,pattern) ])
 
 if not env.GetOption('clean') and not os.path.exists(".prepare-stamp"):
     Execute(Touch(".prepare-stamp"))