X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=SConstruct;h=c0fe56581208c0f097f1bf3c2eac08681a6ee00c;hb=8c6873a925c79e6bb640f82895b31f4cbd84ef30;hp=2192601ca6f01b659b71a387b0010cccee55459a;hpb=62bcd1c4c495d8c6b8727dee0e609bbb0c9231f5;p=senf.git diff --git a/SConstruct b/SConstruct index 2192601..c0fe565 100644 --- a/SConstruct +++ b/SConstruct @@ -3,20 +3,16 @@ import sys, glob, os.path, fnmatch import SENFSCons, senfutil -# Fix for SCons 0.97 compatibility -try: - BoolVariable -except NameError: - BoolVariable = BoolOption - ########################################################################### # Load utilities and setup libraries and configure build env = Environment() +env.Decider('MD5-timestamp') +env.EnsureSConsVersion(1,2) + # Load all the local SCons tools env.Tool('Doxygen') -env.Tool('Doxygen') env.Tool('Dia2Png') env.Tool('PkgDraw') env.Tool('InstallSubdir') @@ -29,28 +25,26 @@ 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 -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 +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 """) -env.Replace( - PKGDRAW = 'doclib/pkgdraw', -) - env.Append( - ENV = { 'PATH' : os.environ.get('PATH') }, - CLEAN_PATTERNS = [ '*~', '#*#', '*.pyc', 'semantic.cache', '.sconsign*' ], + ENV = { 'PATH' : os.environ.get('PATH'), 'HOME' : os.environ.get('HOME') }, + CLEAN_PATTERNS = [ '*~', '#*#', '*.pyc', 'semantic.cache', '.sconsign*', + '*.gcno', '*.gcda', '*.gcov' ], CPPPATH = [ '#' ], LOCALLIBDIR = '#', @@ -58,6 +52,7 @@ env.Append( LIBS = [ '$LIBSENF$LIBADDSUFFIX', 'rt', '$BOOSTREGEXLIB', '$BOOSTIOSTREAMSLIB', '$BOOSTSIGNALSLIB', '$BOOSTFSLIB' ], TEST_EXTRA_LIBS = [ ], + VALGRINDARGS = [ '--num-callers=50' ], PREFIX = '#/dist', LIBINSTALLDIR = '$PREFIX${syslayout and "/lib" or ""}', @@ -101,10 +96,12 @@ env.Append( ) env.SetDefault( - LIBSENF = "senf", - final = False, - debug = False, - syslayout = False + LIBSENF = "senf", + LCOV = "lcov", + GENHTML = "genhtml", + SCONS = "./tools/scons -j$CONCURRENCY_LEVEL", + CONCURRENCY_LEVEL = env.GetOption('num_jobs') or 1, + TOPDIR = env.Dir('#').abspath, ) # Set variables from command line @@ -119,8 +116,8 @@ Export('env') # Create Doxyfile.local otherwise doxygen will barf on this non-existent file # Create it even when cleaning, to silence the doxygen builder warnings -if not os.path.exists("Doxyfile.local"): - Execute(Touch("Doxyfile.local")) +if not os.path.exists("doclib/Doxyfile.local"): + Execute(Touch("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' ]: @@ -140,9 +137,6 @@ SConscript("doclib/SConscript") ########################################################################### # Define build targets -#### doc -env.Depends(SENFSCons.Doxygen(env), env.Value(env['ENV']['REVISION'])) - #### libsenf.a libsenf = env.Library("$LOCALLIBDIR/${LIBSENF}${LIBADDSUFFIX}", env['ALLOBJECTS']) env.Default(libsenf) @@ -158,7 +152,12 @@ env.Default(conf) env.Install('$CONFINSTALLDIR', conf) #### install_all, default, all_tests, all -env.Install('${SCONSINSTALLDIR}', 'site_scons/senfutil.py') +env.Install('${SCONSINSTALLDIR}', [ 'site_scons/__init__.py', + 'site_scons/senfutil.py', + 'site_scons/yaptu.py' ]) +env.InstallDir('${SCONSINSTALLDIR}', [ 'site_scons/site_tools', 'site_scons/lib' ], + FILTER_SUFFIXES=[ '','.css','.pl','.py','.sh','.sty','.xml','.xsl','.yap' ]) +env.Install('${INCLUDEINSTALLDIR}', 'boost') env.Alias('install_all', env.FindInstalledFiles()) env.Alias('default', DEFAULT_TARGETS) @@ -169,23 +168,32 @@ env.Alias('all', [ 'default', 'all_tests', 'examples', 'all_docs' ]) env.PhonyTarget('prepare', [], []) #### valgrind -env.PhonyTarget('valgrind', [ 'all_tests' ], [ """ - find -name .test.bin - | while read test; do - echo; - echo "Running $$test"; - echo; - valgrind --tool=memcheck --error-exitcode=99 --suppressions=valgrind.sup - $$test $BOOSTTESTARGS; - [ $$? -ne 99 ] || exit 1; - done -""".replace("\n"," ") ]) +for test in env.FindAllBoostUnitTests(): + stamp = env.Command(test[0].dir.File('.test-valgrind.stamp'), + [ test[0].dir.File('.test.bin'), 'tools/valgrind.sup' ], + [ """valgrind --tool=memcheck + --error-exitcode=99 + --suppressions=${SOURCES[1]} + $VALGRINDARGS + ${SOURCES[0]} $BOOSTTESTARGS; + [ $$? -ne 99 ] || exit 1""".replace("\n"," "), + Touch("$TARGET") ]) + alias = env.Command(test[0].dir.File('valgrind'), stamp, [ env.NopAction() ]) + env.Alias('all_valgrinds', alias) + +### lcov +env.PhonyTarget('lcov', [], [ + '$SCONS debug=1 CCFLAGS+="-fprofile-arcs -ftest-coverage" LIBS+="gcov" all_tests', + '$LCOV --directory $TOPDIR/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' ]) #### clean env.Clean('all', '.prepare-stamp') env.Clean('all', libsenf) -env.Clean('all', env.Dir('linklint')) # env.Dir to disambiguate from linklint PhonyTarget env.Clean('all', env.Dir('dist')) +env.Clean('all', 'lcov.info') if env.GetOption('clean'): env.Clean('all', [ os.path.join(path,f)