X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=SConstruct;h=9538c9576af3f94a4c273499ec6dd4940ef3bfd2;hb=25976ed67c66d30811fa0a01043e50347e9d1e69;hp=ebb1fab9e88f12035f1942513658f5b71fa72e0b;hpb=2c5ee014ddfed45406e238029600346c99870229;p=senf.git diff --git a/SConstruct b/SConstruct index ebb1fab..9538c95 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,29 +9,41 @@ 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('BoostUnitTest', [ 'senfscons' ]) -env.Tool('InstallSubdir', [ '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.Tool('InstallDir') env.Help(""" Additional top-level build targets: prepare Create all target files not part of the repository +default Build all default targets (like calling scons with no arguments) +examples Build all examples all_tests Build and run unit tests for all modules all_docs Build documentation for all modules all Build everything -install_all Install SENF into $PREFIX +install_all Install SENF into $$PREFIX deb Build debian source and binary package debsrc Build debian source package debbin Build debian binary package linklint Check links of doxygen documentation with 'linklint' fixlinks Fix broken links in doxygen documentation valgrind Run all tests under valgrind/memcheck + +Build parameters: + +final=1 Build optimized library without debug symbols +debug=1 Link all binaries with debug symbols (slow!) +syslayout=1 Install into system layout directories ($$PREFIX/lib, $$PREFIX/include etc) + +additionally, any construction environment variable may be set from the scons +command line (see SConstruct file and SCons documentation for a list of variables). """) class BuildTypeOptions: @@ -44,23 +54,28 @@ 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' ], - CPPPATH = [ '#/include' ], + CPPPATH = [ '#' ], LOCALLIBDIR = '#', LIBPATH = [ '$LOCALLIBDIR' ], - LIBS = [ 'rt', '$BOOSTREGEXLIB', '$BOOSTIOSTREAMSLIB', '$BOOSTSIGNALSLIB', - '$BOOSTFSLIB' ], - TEST_EXTRA_LIBS = [ '$LIBSENF$LIBADDSUFFIX' ], - - 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 = '${syslayout and "$LIBINSTALLDIR/senf" or "$PREFIX"}', + DOCINSTALLDIR = '$PREFIX/manual', + SCONSINSTALLDIR = '${syslayout and "$LIBINSTALLDIR/senf" or "$PREFIX"}/site_scons', CPP_INCLUDE_EXTENSIONS = [ '.h', '.hh', '.ih', '.mpp', '.cci', '.ct', '.cti' ], CPP_EXCLUDE_EXTENSIONS = [ '.test.hh' ], @@ -94,9 +109,10 @@ env.Append( ) env.SetDefault( - LIBSENF = "senf", - final = 0, - debug = 0, + LIBSENF = "senf", + final = 0, + debug = 0, + syslayout = 0 ) # Set variables from command line @@ -109,58 +125,46 @@ 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) +# Load SConscripts -if os.path.exists('SConscript.local'): - SConscript('SConscript.local') +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") -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) -env.InstallSubdir(target = '$INCLUDEINSTALLDIR', source = [ 'config.hh' ]) +env.Install('$LIBINSTALLDIR', libsenf) -env.Alias('install_all', env.Install('$LIBINSTALLDIR', libsenf)) +#### install_all, default, all_tests, all +env.Install('${SCONSINSTALLDIR}', 'site_scons/senfutil.py') -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) ]) +env.Alias('install_all', env.FindInstalledFiles()) +env.Alias('default', DEFAULT_TARGETS) +env.Alias('all_tests', env.FindAllBoostUnitTests()) +env.Alias('all', [ 'default', 'all_tests', 'examples', '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 +174,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"))