X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=SConstruct;h=1c63e04011ba1f63063f82e66975009ae57a1c24;hb=75e3ce2a5296d017a459c098c40c31ae799d0823;hp=cca03b8a6e56ecca1c286c59bf0b2189b0af4efe;hpb=a5428583d411aae9d768f55deea83b8a7abb25a1;p=senf.git diff --git a/SConstruct b/SConstruct index cca03b8..1c63e04 100644 --- a/SConstruct +++ b/SConstruct @@ -1,8 +1,6 @@ # -*- python -*- -import sys, glob, os.path, datetime, pwd, time, fnmatch, string -sys.path.append(Dir('#/senfscons').abspath) -sys.path.append(Dir('#/doclib').abspath) +import sys, glob, os.path, fnmatch import SENFSCons, senfutil ########################################################################### @@ -11,19 +9,19 @@ import SENFSCons, senfutil env = Environment() # Load all the local SCons tools -env.Tool('Doxygen', [ 'senfscons' ]) -env.Tool('Dia2Png', [ 'senfscons' ]) -env.Tool('PkgDraw', [ 'senfscons' ]) -env.Tool('CopyToDir', [ 'senfscons' ]) -env.Tool('ProgramNoScan', [ 'senfscons' ]) -env.Tool('CompileCheck', [ 'senfscons' ]) -env.Tool('Boost', [ 'senfscons' ]) -env.Tool('BoostUnitTests', [ 'senfscons' ]) +env.Tool('Doxygen') +env.Tool('Dia2Png') +env.Tool('PkgDraw') +env.Tool('InstallSubdir') +env.Tool('CopyToDir') +env.Tool('Boost') +env.Tool('CombinedObject') +env.Tool('PhonyTarget') env.Help(""" Additional top-level build targets: -prepare Create all source files not part of the repository +prepare Create all target files not part of the repository all_tests Build and run unit tests for all modules all_docs Build documentation for all modules all Build everything @@ -36,37 +34,35 @@ fixlinks Fix broken links in doxygen documentation valgrind Run all tests under valgrind/memcheck """) -# Compile options - -# Options used to debug inlining: -# -# BEWARE: You need lots of ram to compile with these settings (approx 1G) - class BuildTypeOptions: def __init__(self, var): self._var = var - def __call__(self, source, target, env, for_signature): + def __call__(self, target, source, env, for_signature): 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*' ], + CLEAN_PATTERNS = [ '*~', '#*#', '*.pyc', 'semantic.cache', '.sconsign*', '.sconsign' ], - CPPPATH = [ '#/include' ], + CPPPATH = [ '#' ], LOCALLIBDIR = '#', LIBPATH = [ '$LOCALLIBDIR' ], - LIBS = [ 'rt', '$BOOSTREGEXLIB', '$BOOSTIOSTREAMSLIB', '$BOOSTSIGNALSLIB', - '$BOOSTFSLIB' ], - TEST_EXTRA_LIBS = [ ], + LIBS = [ '$LIBSENF$LIBADDSUFFIX', 'rt', '$BOOSTREGEXLIB', + '$BOOSTIOSTREAMSLIB', '$BOOSTSIGNALSLIB', '$BOOSTFSLIB' ], + TEST_EXTRA_LIBS = [ ], PREFIX = '/usr/local', - LIBINSTALLDIR = '$PREFIX/lib', - BININSTALLDIR = '$PREFIX/bin', - INCLUDEINSTALLDIR = '$PREFIX/include', + LIBINSTALLDIR = '$PREFIX', + BININSTALLDIR = '$PREFIX', + INCLUDEINSTALLDIR = '$PREFIX', OBJINSTALLDIR = '$LIBINSTALLDIR', - DOCINSTALLDIR = '$PREFIX/doc', + DOCINSTALLDIR = '$PREFIX/docs', CPP_INCLUDE_EXTENSIONS = [ '.h', '.hh', '.ih', '.mpp', '.cci', '.ct', '.cti' ], CPP_EXCLUDE_EXTENSIONS = [ '.test.hh' ], @@ -115,58 +111,42 @@ Export('env') if not os.path.exists("Doxyfile.local"): Execute(Touch("Doxyfile.local")) -# Create local_config.h -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 = [ - "debian/SConscript", - "doclib/SConscript", -] - -SConscript(initSConscripts) -if os.path.exists('SConscript.local'): - SConscript('SConscript.local') +# Load SConscripts -SConscript(list(set(glob.glob("*/SConscript")) - set(initSConscripts))) +SConscript("debian/SConscript") +if os.path.exists('SConscript.local') : SConscript('SConscript.local') +SConscript("senf/SConscript") +SConscript("Examples/SConscript") +SConscript("HowTos/SConscript") +SConscript("doclib/SConscript") -# Define the main targets -SENFSCons.StandardTargets(env) -SENFSCons.GlobalTargets(env) +########################################################################### +# Define build targets -env.Depends( SENFSCons.Doxygen(env), env.Value(env['ENV']['REVISION']) ) +#### doc +env.Depends(SENFSCons.Doxygen(env), env.Value(env['ENV']['REVISION'])) -libsenf = env.Library(env.subst("$LIBSENF$LIBADDSUFFIX"), env['ALLOBJECTS']) +#### libsenf.a +libsenf = env.Library("$LOCALLIBDIR/${LIBSENF}${LIBADDSUFFIX}", env['ALLOBJECTS']) env.Default(libsenf) -env.Clean('all', libsenf) -env.Alias('default', libsenf) -SENFSCons.InstallIncludeFiles(env, [ 'config.hh' ]) -env.Alias('install_all', env.Install('$LIBINSTALLDIR', libsenf)) +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; @@ -176,7 +156,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', env.Dir('linklint')) # env.Dir to disambiguate from linklint PhonyTarget + +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"))