From: g0dil Date: Fri, 4 Sep 2009 14:39:06 +0000 (+0000) Subject: Further top-dir cleanup and lcov target X-Git-Url: http://g0dil.de/git?p=senf.git;a=commitdiff_plain;h=39447d83ae68fe219e4a76970e7d29a936242d28 Further top-dir cleanup and lcov target git-svn-id: https://svn.berlios.de/svnroot/repos/senf/trunk@1384 270642c3-0616-0410-b53a-bc976706d245 --- diff --git a/.gitignore b/.gitignore index 1bab2c8..4dd6f87 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,9 @@ *~ *# .#* +*.gcda +*.gcno +*.gcov # File names to ignore in all directories all_includes.hh diff --git a/Makefile b/Makefile index acbd708..d838e92 100644 --- a/Makefile +++ b/Makefile @@ -12,28 +12,29 @@ endif ifdef debug SCONS_ARGS += "debug="$(debug) endif -ifdef profile - SCONS_ARGS += "profile="$(profile) -endif -SCONS=scons -j $(CONCURRENCY_LEVEL) $(SCONS_ARGS) +SCONS=./tools/scons -j $(CONCURRENCY_LEVEL) $(SCONS_ARGS) + +# DON'T call this default ... default is a valid scons target ;-) +build: default -default: build +TARGETS := prepare default examples all_tests all_docs all install_all \ + deb debsrc debbin linklint fixlinks valgrind lcov +ALLTARGETS := $(TARGETS) package build -build: - $(SCONS) +$(TARGETS): + $(SCONS) $@ clean: $(SCONS) --clean all - find ./ -name \*.gcno | xargs rm -f - find ./ -name \*.gcda | xargs rm -f - find ./ -name \*.gcov | xargs rm -f - rm -f test_coverage.info - rm -rf /doc/test_coverage -all_docs all_tests all: - $(SCONS) $@ - +package: deb +test_coverage: lcov + +#---------------------------------------------------------------------- +# subdirectory build targets +#---------------------------------------------------------------------- + %/test %/doc: $(SCONS) $@ @@ -43,28 +44,19 @@ all_docs all_tests all: #---------------------------------------------------------------------- # remote compile targets #---------------------------------------------------------------------- -all@% all_docs@% all_tests@% build@%: - ssh $* "cd `pwd` && $(MAKE) SCONS_ARGS=\"$(SCONS_ARGS)\" $(firstword $(subst @, ,$@))" - -#---------------------------------------------------------------------- -# test coverage -#---------------------------------------------------------------------- -test_coverage: - $(SCONS) debug=1 EXTRA_CCFLAGS="-fprofile-arcs -ftest-coverage" EXTRA_LIBS="gcov" all_tests - ln -s ../../boost/ include/senf/ # ugly work-around - lcov --directory . --capture --output-file /tmp/test_coverage.info --base-directory . -# lcov --output-file /tmp/test_coverage.info.tmp --extract test_coverage.info \*/senf/\* - lcov --output-file test_coverage.info --remove /tmp/test_coverage.info \*/include/\* - genhtml --output-directory doc/test_coverage --title "all_tests" test_coverage.info - rm /tmp/test_coverage.info - rm include/senf/boost +CWD = $(shell pwd) +$(ALLTARGETS:%=%@%): + ssh $* "cd $(CWD) && $(MAKE) SCONS_ARGS=\"$(SCONS_ARGS)\" $(firstword $(subst @, ,$@))" #---------------------------------------------------------------------- # Subversion stuff #---------------------------------------------------------------------- + svn_version: - @svnversion + @v=`svnversion`; if [ $$v=="exported" ]; then gitsvnversion else echo $v; fi + +version: svn_version #---------------------------------------------------------------------- # Building SENF requires some debian packages @@ -72,16 +64,11 @@ svn_version: DEB_BASE = build-essential # This line parses the 'Build-Depends' entry from debian/control -DEB_SENF = $(shell perl -an -F'[:,]' -e ' \ - BEGIN{ $$,=" " } \ - $$P=0 if /^\S/; \ - map {s/\(.*\)//} @F; \ - print @F if $$P; \ - if (/^Build-Depends:/) { print @F[1..$$\#F]; $$P=1 }' \ - debian/control | xargs echo) +DEB_SENF = $(shell perl -alnF'[:,]' -e ' \ + BEGIN{$$,=" "} END{splice @R,0,1; print @R} \ + map {s/\(.*\)|\|.*//; s/[ \n\t]//g} @F; \ + push @R,grep {/./} @F if (/^Build-Depends:/i.../^\S/)!~/(^|E0)$$/;' \ + debian/control) prerequisites: aptitude install $(DEB_BASE) $(DEB_SENF) - -package: - $(SCONS) deb diff --git a/SConstruct b/SConstruct index 5e14e7d..cabb4bc 100644 --- a/SConstruct +++ b/SConstruct @@ -38,11 +38,13 @@ 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 +lcov Generate test coverage output in doc/lcov and lcov.info """) 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 = '#', @@ -93,10 +95,11 @@ 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, ) # Set variables from command line @@ -178,11 +181,21 @@ env.PhonyTarget('valgrind', [ 'all_tests' ], [ """ done """.replace("\n"," ") ]) +### lcov +env.Alias('lcov', env.AlwaysBuild( + env.Command( [ env.Dir('doc/lcov'), 'lcov.info' ], [], [ + '$SCONS debug=1 CCFLAGS+="-fprofile-arcs -ftest-coverage" LIBS+="gcov" all_tests', + '$LCOV --directory . --capture --output-file /tmp/senf_lcov.info --base-directory .', + '$LCOV --output-file ${TARGETS[1]} --remove /tmp/senf_lcov.info \\*/include/\\*', + '$GENHTML --output-directory ${TARGETS[0]} --title all_tests ${TARGETS[1]}', + '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) diff --git a/doclib/SConscript b/doclib/SConscript index 2bc4d08..65a798a 100644 --- a/doclib/SConscript +++ b/doclib/SConscript @@ -271,20 +271,18 @@ env.Append( ENV = { }) env.PhonyTarget('linklint', [], [ - 'rm -rf linklint', - 'linklint -doc linklint -limit 99999999 `find -type d -name html -printf "/%P/@ "`', - '[ ! -r linklint/errorX.html ] || python doclib/linklint_addnames.py linklint/errorX.html.new', - '[ ! -r linklint/errorX.html.new ] || mv linklint/errorX.html.new linklint/errorX.html', - '[ ! -r linklint/errorAX.html ] || python doclib/linklint_addnames.py linklint/errorAX.html.new', - '[ ! -r linklint/errorAX.html.new ] || mv linklint/errorAX.html.new linklint/errorAX.html', - 'echo -e "\\nLokal link check results: linklint/index.html\\nRemote link check results: linklint/urlindex.html\\n"', + 'rm -rf doc/linklint', + 'linklint -doc doc/linklint -limit 99999999 `find -type d -name html -printf "/%P/@ "`', + '[ ! -r doc/linklint/errorX.html ] || python doclib/linklint_addnames.py doc/linklint/errorX.html.new', + '[ ! -r doc/linklint/errorX.html.new ] || mv doc/linklint/errorX.html.new doc/linklint/errorX.html', + '[ ! -r doc/linklint/errorAX.html ] || python doclib/linklint_addnames.py doc/linklint/errorAX.html.new', + '[ ! -r doc/linklint/errorAX.html.new ] || mv doc/linklint/errorAX.html.new doc/linklint/errorAX.html', ]) env.PhonyTarget('fixlinks', [], [ - 'python doclib/fix-links.py -v -s .svn -s linklint -s debian linklint/errorX.txt linklint/errorAX.txt', + 'python doclib/fix-links.py -v -s .svn -s linklint -s debian doc/linklint/errorX.txt doc/linklint/errorAX.txt', ]) - header = env.Command('doxy-header.html', 'SConscript', writeTemplate, TEMPLATE = Literal(HEADER), TITLE = "Documentation and API reference")