X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=SConstruct;h=6cde4f714d9e6ba38dcb4a78f22ac88f179ad804;hb=ec7f715d7eef5bb915c7ca39587a99fb41d8d3be;hp=1dbe31c9fa1214fac37aa33fad969b0e06c355e6;hpb=3a89de27838820f859f586854574b19eeca9a559;p=senf.git diff --git a/SConstruct b/SConstruct index 1dbe31c..6cde4f7 100644 --- a/SConstruct +++ b/SConstruct @@ -1,6 +1,6 @@ # -*- python -*- -import sys, glob, os.path, fnmatch +import sys, os.path, fnmatch import SENFSCons, senfutil ########################################################################### @@ -12,15 +12,7 @@ env.Decider('MD5-timestamp') env.EnsureSConsVersion(1,2) # Load all the local SCons tools -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') +senfutil.loadTools(env) env.Help(""" Additional top-level build targets: @@ -45,8 +37,9 @@ env.Append( ENV = { 'PATH' : os.environ.get('PATH'), 'HOME' : os.environ.get('HOME') }, CLEAN_PATTERNS = [ '*~', '#*#', '*.pyc', 'semantic.cache', '.sconsign*' ], - CPPPATH = [ '#' ], - LOCALLIBDIR = '#', + BUILDDIR = '${FLAVOR and "#/build/$FLAVOR" or "#"}', + CPPPATH = [ '$BUILDDIR', '#' ], + LOCALLIBDIR = '$BUILDDIR', LIBPATH = [ '$LOCALLIBDIR' ], LIBS = [ '$LIBSENF$LIBADDSUFFIX', 'rt', '$BOOSTREGEXLIB', '$BOOSTIOSTREAMSLIB', '$BOOSTSIGNALSLIB', '$BOOSTFSLIB' ], @@ -102,6 +95,9 @@ env.SetDefault( SCONS = "@$SCONSBIN -Q -j$CONCURRENCY_LEVEL", CONCURRENCY_LEVEL = env.GetOption('num_jobs') or 1, TOPDIR = env.Dir('#').abspath, + LIBADDSUFFIX = '${FLAVOR and "_$FLAVOR" or ""}', + OBJADDSUFFIX = '${LIBADDSUFFIX}', + FLAVOR = '', ) # Set variables from command line @@ -121,7 +117,7 @@ if not os.path.exists("doclib/Doxyfile.local"): 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.Execute([ "$SCONS prepare" ]) # Load SConscripts @@ -129,7 +125,10 @@ SConscriptChdir(0) SConscript("debian/SConscript") SConscriptChdir(1) if os.path.exists('SConscript.local') : SConscript('SConscript.local') -SConscript("senf/SConscript") +if env.subst('$BUILDDIR') == '#': + SConscript("SConscript") +else: + SConscript("SConscript", variant_dir=env.subst('$BUILDDIR'), src_dir='#', duplicate=False) SConscript("Examples/SConscript") SConscript("HowTos/SConscript") SConscript("doclib/SConscript") @@ -137,20 +136,6 @@ SConscript("doclib/SConscript") ########################################################################### # Define build targets -#### libsenf.a -libsenf = env.Library("$LOCALLIBDIR/${LIBSENF}${LIBADDSUFFIX}", env['ALLOBJECTS']) -env.Default(libsenf) -env.Install('$LIBINSTALLDIR', libsenf) - -def create(target, source, env): - file(str(target[0]), 'w').write(source[0].get_contents()+"\n") -env['BUILDERS']['CreateFile'] = Builder(action = create) - -conf = env.CreateFile("${LOCALLIBDIR}/${LIBSENF}${LIBADDSUFFIX}.conf", - env.Value(env.subst("$_CPPDEFFLAGS"))) -env.Default(conf) -env.Install('$CONFINSTALLDIR', conf) - #### install_all, default, all_tests, all env.Install('${SCONSINSTALLDIR}', [ 'site_scons/__init__.py', 'site_scons/senfutil.py', @@ -183,28 +168,30 @@ for test in env.FindAllBoostUnitTests(): ### lcov env.PhonyTarget('lcov', [], [ - '$SCONS debug=1 CCFLAGS+="-fprofile-arcs -ftest-coverage" LIBS+="gcov" all_tests', - '$LCOV --follow --directory $TOPDIR/senf --capture --output-file /tmp/senf_lcov.info --base-directory $TOPDIR', + '$SCONS debug=1 BUILDDIR="#/build/lcov" CCFLAGS+="-fprofile-arcs -ftest-coverage" LIBS+="gcov" all_tests', + '$LCOV --follow --directory $TOPDIR/build/lcov/senf --capture --output-file /tmp/senf_lcov.info --base-directory $TOPDIR', '$LCOV --output-file lcov.info --remove /tmp/senf_lcov.info "*/include/*" "*/boost/*" "*.test.*" ', '$GENHTML --output-directory doc/lcov --title all_tests lcov.info', 'rm /tmp/senf_lcov.info' ]) if env.GetOption('clean'): - env.Depends('lcov', 'all_tests') env.Clean('lcov', [ os.path.join(path,f) for path, subdirs, files in os.walk('.') for pattern in ('*.gcno', '*.gcda', '*.gcov') for f in fnmatch.filter(files,pattern) ] + - [ 'lcov.info', env.Dir('doc/lcov') ]) + [ 'lcov.info', env.Dir('doc/lcov'), env.Dir('build/lcov') ]) #### clean -env.Clean('all', ('.prepare-stamp', env.Dir('dist'))) +env.Clean('all', ('.prepare-stamp', env.Dir('dist'), env.Dir('build'))) if env.GetOption('clean') : env.Depends('all', ('lcov', 'all_valgrinds')) -if env.GetOption('clean'): +if env.GetOption('clean') and 'all' in BUILD_TARGETS: 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) ]) + # Disable writing to the deleted .sconsign file + import SCons.SConsign + SCons.SConsign.write = lambda : None if not env.GetOption('clean') and not os.path.exists(".prepare-stamp"): Execute(Touch(".prepare-stamp"))