Move all 'clean' globbing into senfutil using senfutil.CleanGlob
g0dil [Sat, 14 Aug 2010 07:56:35 +0000 (07:56 +0000)]
git-svn-id: https://svn.berlios.de/svnroot/repos/senf/trunk@1688 270642c3-0616-0410-b53a-bc976706d245

SConstruct
site_scons/senfutil.py

index 268dff9..08056ad 100644 (file)
@@ -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 <target>', 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
index 3061ab9..2b570d2 100644 (file)
@@ -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=[],