Add senf.conf support and update senfutil
[senf.git] / SConstruct
index 5ab04af..f56ce4f 100644 (file)
@@ -17,30 +17,34 @@ env.Tool('CopyToDir')
 env.Tool('Boost')
 env.Tool('CombinedObject')
 env.Tool('PhonyTarget')
+env.Tool('InstallDir')
 
 env.Help("""
 Additional top-level build targets:
 
 prepare      Create all target files not part of the repository
+default      Build all default targets (like calling scons with no arguments)
+examples     Build all examples
 all_tests    Build and run unit tests for all modules
 all_docs     Build documentation for all modules
 all          Build everything
-install_all  Install SENF into $PREFIX
+install_all  Install SENF into $$PREFIX
 deb          Build debian source and binary package
 debsrc       Build debian source package
 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
-""")
 
-class BuildTypeOptions:
-    def __init__(self, var):
-        self._var = var
+Build parameters:
+
+final=1      Build optimized library without debug symbols
+debug=1      Link all binaries with debug symbols (slow!)
+syslayout=1  Install into system layout directories ($$PREFIX/lib, $$PREFIX/include etc)
 
-    def __call__(self, target, source, env, for_signature):
-        type = env['final'] and "final" or env['debug'] and "debug" or "normal"
-        return env[self._var + "_" + type]
+additionally, any construction environment variable may be set from the scons
+command line (see SConstruct file and SCons documentation for a list of variables).
+""")
 
 env.Replace(
    PKGDRAW                = 'doclib/pkgdraw',
@@ -59,10 +63,13 @@ env.Append(
 
    PREFIX                 = '#/dist',
    LIBINSTALLDIR          = '$PREFIX${syslayout and "/lib" or ""}',
-   BININSTALLDIR          = '$PREFIX${syslayout and "/bin" or ""',
+   BININSTALLDIR          = '$PREFIX${syslayout and "/bin" or ""}',
    INCLUDEINSTALLDIR      = '$PREFIX${syslayout and "/include" or ""}',
-   OBJINSTALLDIR          = '$LIBINSTALLDIR${syslayout and "/$LIBINSTALLDIR/senf" or ""',
-   DOCINSTALLDIR          = '$PREFIX/docs',
+   OBJINSTALLDIR          = '${syslayout and "$LIBINSTALLDIR/senf" or "$PREFIX"}',
+   DOCINSTALLDIR          = '$PREFIX/manual',
+   SCONSINSTALLDIR        = '${syslayout and "$LIBINSTALLDIR/senf" or "$PREFIX"}/site_scons',
+   CONFINSTALLDIR         = '$OBJINSTALLDIR',
+
    CPP_INCLUDE_EXTENSIONS = [ '.h', '.hh', '.ih', '.mpp', '.cci', '.ct', '.cti' ],
    CPP_EXCLUDE_EXTENSIONS = [ '.test.hh' ],
 
@@ -76,20 +83,20 @@ env.Append(
    INLINE_OPTS            = [ '$INLINE_OPTS_NORMAL' ],
    CXXFLAGS               = [ '-Wall', '-Woverloaded-virtual', '-Wno-long-long', '$INLINE_OPTS',
                               '$CXXFLAGS_' ],
-   CXXFLAGS_              = BuildTypeOptions('CXXFLAGS'),
+   CXXFLAGS_              = senfutil.BuildTypeOptions('CXXFLAGS'),
    CXXFLAGS_final         = [ '-O3' ],
    CXXFLAGS_normal        = [ '-O0', '-g' ],
    CXXFLAGS_debug         = [ '$CXXFLAGS_normal' ],
 
    CPPDEFINES             = [ '$expandLogOption', '$CPPDEFINES_' ],
    expandLogOption        = senfutil.expandLogOption,
-   CPPDEFINES_            = BuildTypeOptions('CPPDEFINES'),
+   CPPDEFINES_            = senfutil.BuildTypeOptions('CPPDEFINES'),
    CPPDEFINES_final       = [ ],
    CPPDEFINES_normal      = [ 'SENF_DEBUG' ],
    CPPDEFINES_debug       = [ '$CPPDEFINES_normal' ],
 
    LINKFLAGS              = [ '-rdynamic', '$LINKFLAGS_' ],
-   LINKFLAGS_             = BuildTypeOptions('LINKFLAGS'),
+   LINKFLAGS_             = senfutil.BuildTypeOptions('LINKFLAGS'),
    LINKFLAGS_final        = [ ],
    LINKFLAGS_normal       = [ '-Wl,-S' ],
    LINKFLAGS_debug        = [ ],
@@ -136,10 +143,20 @@ 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('$LIBINSTALLDIR', libsenf)
 
+def create(target, source, env): 
+    file(str(target[0]), 'w').write(source[0].get_contents()+"\n")
+env['BUILDERS']['CreateFile'] = Builder(action = create)
+
+conf = env.CreateFile("${LOCALLIBDIR}/${LIBSENF}${LIBADDSUFFIX}.conf", 
+                      env.Value(env.subst("$_CPPDEFFLAGS")))
+env.Default(conf)
+env.Install('$CONFINSTALLDIR', conf)
+
 #### install_all, default, all_tests, all
+env.Install('${SCONSINSTALLDIR}', 'site_scons/senfutil.py')
+
 env.Alias('install_all', env.FindInstalledFiles())
 env.Alias('default', DEFAULT_TARGETS)
 env.Alias('all_tests', env.FindAllBoostUnitTests())