X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=SConstruct;h=045c091c4a88410ea50cc863f741e8cd882e4438;hb=18d987b03ac188adf6e1a82ebce2666738f0ff65;hp=d9e8cc3b66dec3d7100f857b1211a059a4f6b9ea;hpb=86f66d5102f4881dda4b91893e7eaba53a98cf12;p=senf.git diff --git a/SConstruct b/SConstruct index d9e8cc3..045c091 100644 --- a/SConstruct +++ b/SConstruct @@ -17,25 +17,44 @@ senfutil.loadTools(env) 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 -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 -all_valgrinds Run all tests under valgrind/memcheck -lcov Generate test coverage output in doc/lcov and lcov.info +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 +test_changes Build tests only for files with local changes (queries svn or git) +all_docs Build documentation for all modules +all Build everything +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 +all_valgrinds Run all tests under valgrind/memcheck +lcov Generate test coverage output in doc/lcov and lcov.info You may execute targets on a remote host (if the directory layout is the same) by calling scons @[@] + +Some more elaborate unit tests may be enabled by setting appropritate variables +in the shell (unix) environment + +SENF_TIMING_CRITICAL_TESTS + Enables unit tests which depend on timing measurements. These + unit tests should only be run on a single core and an otherwise + idle system. + +SENF_WLAN_TEST_INTERFACE + WLAN interface to use for testing. The interface should not be + actively in use. + +SENF_ETH_TEST_INTERFACE + Ethernet interface to use for testing. The interface should not + be actively in use. + +Some unit tests will only run when executed to 'root'. """) env.Append( @@ -49,8 +68,9 @@ env.Append( CPPPATH = [ '$BUILDDIR', '#' ], LOCALLIBDIR = '$BUILDDIR', LIBPATH = [ '$LOCALLIBDIR' ], - LIBS = [ '$LIBSENF$LIBADDSUFFIX', 'rt', '$BOOSTREGEXLIB', - '$BOOSTIOSTREAMSLIB', '$BOOSTSIGNALSLIB', '$BOOSTFSLIB' ], + LIBS = [ '$LIBSENF$LIBADDSUFFIX', '$EXTRA_LIBS' ], + EXTRA_LIBS = [ 'rt', '$BOOSTREGEXLIB', '$BOOSTIOSTREAMSLIB', '$BOOSTSIGNALSLIB', + '$BOOSTFSLIB' ], TEST_EXTRA_LIBS = [ ], VALGRINDARGS = [ '--num-callers=50' ], @@ -95,12 +115,16 @@ env.Append( LINKFLAGS_debug = [ '-g' ], ) +# Add all UNIX env vars starting with 'SENF' to the execution environment +env.Append( ENV = dict(((k,v) for k,v in os.environ.iteritems() if k.startswith("SENF"))) ) + env.SetDefault( LIBSENF = "senf", LCOV = "lcov", GENHTML = "genhtml", SCONSBIN = env.File("#/tools/scons"), - SCONSARGS = [ '-Q', '-j$CONCURRENCY_LEVEL', 'debug=$debug', 'final=$final' ], + SCONSARGS = [ '-Q', '-j$CONCURRENCY_LEVEL', 'debug=$debug', 'final=$final' ] + \ + [ '%s=%s' % (k,v) for k,v in ARGUMENTS.iteritems() ], SCONS = "@$SCONSBIN $SCONSARGS", CONCURRENCY_LEVEL = env.GetOption('num_jobs') or 1, TOPDIR = env.Dir('#').abspath, @@ -109,14 +133,25 @@ env.SetDefault( FLAVOR = '', ) +# ugly hack for ubuntu karmic +# ToDo: auto-configure alike support +if os.path.exists('/usr/lib/libboost_regex-mt.so'): + env.Append( BOOST_VARIANT = '-mt' ) + # Set variables from command line senfutil.parseArguments( env, BoolVariable('final', 'Build final (optimized) build', False), BoolVariable('debug', 'Link in debug symbols', False), BoolVariable('syslayout', 'Install in to system layout directories (lib/, include/ etc)', False), + BoolVariable('sparse_tests', 'Link tests against object files and not the senf lib', False) ) +if 'test_changes' in COMMAND_LINE_TARGETS and not env.has_key('only_tests'): + import SparseTestHack + env['only_tests'] = " ".join(x.abspath for x in SparseTestHack.findSCMChanges(env)) + +if env.has_key('only_tests') : env['sparse_tests'] = True Export('env') # Create Doxyfile.local otherwise doxygen will barf on this non-existent file @@ -134,6 +169,9 @@ SConscriptChdir(0) SConscript("debian/SConscript") SConscriptChdir(1) if os.path.exists('SConscript.local') : SConscript('SConscript.local') +if env['sparse_tests']: + import SparseTestHack + SparseTestHack.setup(env) if env.subst('$BUILDDIR') == '#': SConscript("SConscript") else: @@ -141,6 +179,9 @@ else: SConscript("Examples/SConscript") SConscript("HowTos/SConscript") SConscript("doclib/SConscript") +if env['sparse_tests']: + verbose = 'test_changes' in COMMAND_LINE_TARGETS + SparseTestHack.build(env, verbose, verbose) ########################################################################### # Define build targets @@ -156,6 +197,7 @@ env.Install('${INCLUDEINSTALLDIR}', 'boost') env.Alias('install_all', env.FindInstalledFiles()) env.Alias('default', DEFAULT_TARGETS) env.Alias('all_tests', env.FindAllBoostUnitTests()) +env.Alias('test_changes', 'all_tests') env.Alias('all', [ 'default', 'all_tests', 'examples', 'all_docs' ]) #### prepare @@ -212,5 +254,8 @@ for target in COMMAND_LINE_TARGETS: cwd=env.GetLaunchDir() home=os.environ['HOME']+'/' if cwd.startswith(home) : cwd = cwd[len(home):] + args = [ '$SCONSARGS' ] + if env.GetLaunchDir() != os.getcwd(): + args.append('-u') env.PhonyTarget(target, [], [ "ssh $HOST scons $SCONSARGS -C $DIR $RTARGET" ], - HOST=host, RTARGET=realtarget, DIR=cwd) + HOST=host, RTARGET=realtarget, DIR=cwd, SCONSARGS=args)