Move all 'clean' globbing into senfutil using senfutil.CleanGlob
[senf.git] / SConstruct
index da124b8..08056ad 100644 (file)
@@ -1,6 +1,6 @@
 # -*- python -*-
 
-import sys, os.path, fnmatch
+import sys, os.path
 import SENFSCons, senfutil
 
 ###########################################################################
@@ -33,10 +33,25 @@ 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
 
-You may execute targets on a remote host (if the directory layout is the same)
-by calling
+The following additional targets may be called within subdirectories, either
+using '$ scons -u <target>'  or '$ scons <directory>/<target>:
 
-    scons <target>@[<user>@]<host>
+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
+
+    $ scons <target>@[<user>@]<host>
 
 Some more elaborate unit tests may be enabled by setting appropritate variables
 in the shell (unix) environment
@@ -66,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' ],
@@ -96,7 +110,7 @@ env.Append(
     CXXFLAGS_debug         = [ '-O0', '-g' ],
 
     CPPDEFINES             = [ '$expandLogOption', '$CPPDEFINES_' ],
-    CPPDEFINES_final       = [ 'SENF_PPI_NOTRACE', 'BOOST_NO_MT' ],
+    CPPDEFINES_final       = [ 'SENF_PPI_NOTRACE', 'BOOST_NO_MT', 'NDEBUG', 'BOOST_DISABLE_ASSERTS' ],
     CPPDEFINES_normal      = [ 'SENF_DEBUG' ],
     CPPDEFINES_debug       = [ '$CPPDEFINES_normal' ],
 
@@ -116,6 +130,7 @@ env.SetDefault(
     SCONSINSTALLDIR        = '$CONFINSTALLDIR/site_scons',
 
     BUILDDIR               = '${FLAVOR and "#/build/$FLAVOR" or "#"}',
+    LOCALLIBDIR            = '$BUILDDIR',
 
     LIBSENF                = "senf",
     LCOV                   = "lcov",
@@ -216,10 +231,11 @@ env.Alias('all', [ 'default', 'all_tests', 'examples', 'all_docs' ])
 
 #### prepare
 env.PhonyTarget('prepare', [], [])
+env.PhonyTarget('some', [], [])
 
 #### valgrind
 env.Alias('all_valgrinds')
-if env['HAVE_VALGRIND']:
+if env.get('HAVE_VALGRIND'):
     for test in env.FindAllBoostUnitTests():
         stamp = env.Command(test[0].dir.File('.test-valgrind.stamp'),
                             [ test[0].dir.File('.test.bin'), 'tools/valgrind.sup' ],
@@ -235,27 +251,37 @@ if env['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