env = Environment()
+env.Decider('MD5-timestamp')
+env.EnsureSConsVersion(1,2)
+
# Load all the local SCons tools
env.Tool('Doxygen')
env.Tool('Dia2Png')
linklint Check links of doxygen documentation with 'linklint'
fixlinks Fix broken links in doxygen documentation
valgrind 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*', '.sconsign' ],
+ ENV = { 'PATH' : os.environ.get('PATH'), 'HOME' : os.environ.get('HOME') },
+ CLEAN_PATTERNS = [ '*~', '#*#', '*.pyc', 'semantic.cache', '.sconsign*',
+ '*.gcno', '*.gcda', '*.gcov' ],
CPPPATH = [ '#' ],
LOCALLIBDIR = '#',
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',
- CONFINSTALLDIR = '$OBJINSTALLDIR',
+ CONFINSTALLDIR = '${syslayout and "$LIBINSTALLDIR/senf" or "$PREFIX"}',
+ OBJINSTALLDIR = '$CONFINSTALLDIR',
+ DOCINSTALLDIR = '$PREFIX${syslayout and "/share/doc/senf" or "/manual"}',
+ SCONSINSTALLDIR = '$CONFINSTALLDIR/site_scons',
CPP_INCLUDE_EXTENSIONS = [ '.h', '.hh', '.ih', '.mpp', '.cci', '.ct', '.cti' ],
CPP_EXCLUDE_EXTENSIONS = [ '.test.hh' ],
)
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
# 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' ]:
###########################################################################
# 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)
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)
echo;
echo "Running $$test";
echo;
- valgrind --tool=memcheck --error-exitcode=99 --suppressions=valgrind.sup
+ valgrind --tool=memcheck --error-exitcode=99 --suppressions=tools/valgrind.sup
$$test $BOOSTTESTARGS;
[ $$? -ne 99 ] || exit 1;
done
""".replace("\n"," ") ])
+### 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)