X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=SConstruct;h=18a33975f3461c432af2c56cb20dfd1bb5e8aba6;hb=2e7dc69c3a63bac0a9df1abbcece62c03112a1ab;hp=92a4078e4bda5a0cd16709ad6f8331a05f40e678;hpb=87204d50de0c429f265aec817bc9efd9af816082;p=senf.git diff --git a/SConstruct b/SConstruct index 92a4078..18a3397 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,18 +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('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 @@ -39,27 +38,31 @@ 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*', '.sconsign' ], - CPPPATH = [ '#/include' ], + CPPPATH = [ '#' ], LOCALLIBDIR = '#', LIBPATH = [ '$LOCALLIBDIR' ], - LIBS = [ 'rt', '$BOOSTREGEXLIB', '$BOOSTIOSTREAMSLIB', '$BOOSTSIGNALSLIB', - '$BOOSTFSLIB' ], - TEST_EXTRA_LIBS = [ ], - - PREFIX = '/usr/local', - LIBINSTALLDIR = '$PREFIX/lib', - BININSTALLDIR = '$PREFIX/bin', - INCLUDEINSTALLDIR = '$PREFIX/include', - OBJINSTALLDIR = '$LIBINSTALLDIR', - DOCINSTALLDIR = '$PREFIX/doc', + LIBS = [ '$LIBSENF$LIBADDSUFFIX', 'rt', '$BOOSTREGEXLIB', + '$BOOSTIOSTREAMSLIB', '$BOOSTSIGNALSLIB', '$BOOSTFSLIB' ], + TEST_EXTRA_LIBS = [ ], + + PREFIX = '#/dist', + LIBINSTALLDIR = '$PREFIX${syslayout and "/lib" or ""}', + BININSTALLDIR = '$PREFIX${syslayout and "/bin" or ""', + INCLUDEINSTALLDIR = '$PREFIX${syslayout and "/include" or ""}', + OBJINSTALLDIR = '$LIBINSTALLDIR${syslayout and "/$LIBINSTALLDIR/senf" or ""', + DOCINSTALLDIR = '$PREFIX/docs', CPP_INCLUDE_EXTENSIONS = [ '.h', '.hh', '.ih', '.mpp', '.cci', '.ct', '.cti' ], CPP_EXCLUDE_EXTENSIONS = [ '.test.hh' ], @@ -93,9 +96,10 @@ env.Append( ) env.SetDefault( - LIBSENF = "senf", - final = 0, - debug = 0, + LIBSENF = "senf", + final = 0, + debug = 0, + syslayout = 0 ) # Set variables from command line @@ -108,57 +112,44 @@ 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", -] +# Load SConscripts -SConscript(initSConscripts) +SConscriptChdir(0) +SConscript("debian/SConscript") +SConscriptChdir(1) +if os.path.exists('SConscript.local') : SConscript('SConscript.local') +SConscript("senf/SConscript") +SConscript("Examples/SConscript") +SConscript("HowTos/SConscript") +SConscript("doclib/SConscript") -if os.path.exists('SConscript.local'): - SConscript('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 = 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; @@ -168,7 +159,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"))