From: g0dil Date: Sat, 14 Aug 2010 07:56:35 +0000 (+0000) Subject: Move all 'clean' globbing into senfutil using senfutil.CleanGlob X-Git-Url: http://g0dil.de/git?p=senf.git;a=commitdiff_plain;h=8558757024b5e0181b62f888f665dc2dfc48639b Move all 'clean' globbing into senfutil using senfutil.CleanGlob git-svn-id: https://svn.berlios.de/svnroot/repos/senf/trunk@1688 270642c3-0616-0410-b53a-bc976706d245 --- diff --git a/SConstruct b/SConstruct index 268dff9..08056ad 100644 --- a/SConstruct +++ b/SConstruct @@ -1,6 +1,6 @@ # -*- python -*- -import sys, os.path, fnmatch +import sys, os.path import SENFSCons, senfutil ########################################################################### @@ -40,6 +40,14 @@ test Build and run unit test for this module doc Build the documentation of this module valgrind Run the unit test of this module under valgrind +When cleaning up using '$ scons -c ', some targets are handled specially: + +all Remove everything generated by the build including temporary and + backup files + +some Remove all files not needed for building like temporary or backup + files. This target is only valid when called as clean target. + You may execute targets on a remote host via ssh (if the directory layout is the same) by calling @@ -73,12 +81,11 @@ env.Replace( env.Append( IMPORT_ENV = [ 'PATH', 'HOME', 'SSH_*', 'SENF*', 'CCACHE_*', 'DISTCC_*' ], - CLEAN_PATTERNS = [ '*~', '#*#', '*.pyc', 'semantic.cache', '.sconsign*', - '.sconf_temp' ], + CLEAN_SOME_PATTERNS = [ '*~', '#*#', '*.pyc', 'semantic.cache' ], + CLEAN_PATTERNS = [ '.sconsign*', '.sconf_temp' ], CPPPATH = [ '#', '$BUILDDIR', '${NEED_BOOST_EXT and "#/boost_ext" or None}' ], - LOCALLIBDIR = '$BUILDDIR', LIBPATH = [ '$LOCALLIBDIR' ], LIBS = [ '$EXTRA_LIBS' ], EXTRA_LIBS = [ 'rt' ], @@ -123,6 +130,7 @@ env.SetDefault( SCONSINSTALLDIR = '$CONFINSTALLDIR/site_scons', BUILDDIR = '${FLAVOR and "#/build/$FLAVOR" or "#"}', + LOCALLIBDIR = '$BUILDDIR', LIBSENF = "senf", LCOV = "lcov", @@ -223,6 +231,7 @@ env.Alias('all', [ 'default', 'all_tests', 'examples', 'all_docs' ]) #### prepare env.PhonyTarget('prepare', [], []) +env.PhonyTarget('some', [], []) #### valgrind env.Alias('all_valgrinds') @@ -242,27 +251,37 @@ if env.get('HAVE_VALGRIND'): ### lcov env.PhonyTarget('lcov', [], [ - '$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', + '$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.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'), env.Dir('build/lcov') ]) +senfutil.CleanGlob(env, ['lcov','some','all'], [ '*.gcno', '*.gcda', '*.gcov' ]) +env.Clean(['lcov', 'all'], [ 'lcov.info', env.Dir('doc/lcov'), env.Dir('build/lcov') ]) #### clean + env.Clean('all', ('.prepare-stamp', env.Dir('dist'), env.Dir('build'))) -if env.GetOption('clean') : env.Depends('all', ('lcov', 'all_valgrinds')) + +senfutil.CleanGlob(env, 'all', '$CLEAN_PATTERNS') +senfutil.CleanGlob(env, ['some', 'all'], '$CLEAN_SOME_PATTERNS') 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) ]) + env.Depends('all', ('lcov', 'all_valgrinds')) # Disable writing to the deleted .sconsign file import SCons.SConsign SCons.SConsign.write = lambda : None diff --git a/site_scons/senfutil.py b/site_scons/senfutil.py index 3061ab9..2b570d2 100644 --- a/site_scons/senfutil.py +++ b/site_scons/senfutil.py @@ -1,4 +1,5 @@ import os, os.path, site_tools.Yaptu, types, re, fnmatch +import SCons.Util from SCons.Script import * senfutildir = os.path.dirname(__file__) @@ -234,6 +235,18 @@ def Glob(env, exclude=[], subdirs=[]): testSources.sort() return (sources, testSources) +def CleanGlob(env, targets, patterns): + if env.GetOption('clean'): + targets = SCons.Util.flatten(targets) + for target in targets: + if target in BUILD_TARGETS: + patterns = map(str,SCons.Util.flatten(env.subst_list(patterns))) + files = [ os.path.join(path,f) + for path, subdirs, files in os.walk('.') + for pattern in patterns + for f in fnmatch.filter(files,pattern) ] + return env.Clean(target, files) + tagfiles = None def Doxygen(env, doxyheader=None, doxyfooter=None, doxycss=None, mydoxyfile=False, senfdoc_path=[],