Fix spurious warnings and workaround possible aliasing porblems (-fno-strict-aliasing)
[senf.git] / site_scons / SENFSCons.py
index 384349c..01681e4 100644 (file)
@@ -46,7 +46,8 @@ def Doxygen(env, doxyfile = "Doxyfile", extra_sources = [], output_directory = "
                  'LIBDIR'          : env.Dir('#/site_scons/lib').abspath,
                  'output_dir'      : '$OUTPUT_DIRECTORY',
                  'html_dir'        : 'html',
-                 'html'            : 'NO' }
+                 'html'            : 'NO',
+                 'DOXYGEN'         : '$DOXYGEN' }
         denv.update(kw)
         return { 'DOXYENV'         : denv,
                  'MODULE'          : module,
@@ -99,9 +100,11 @@ def AllIncludesHH(env, exclude=[]):
                 if f.name not in exclude and not f.name.endswith('.test.hh') ]
     headers.sort(key=lambda x:x.name)
     target = env.File("all_includes.hh")
-    env.Default(env.CreateFile(target, 
-                               env.Value("".join([ '#include <%s>\n' % f.srcnode().get_path(env.Dir('#'))
-                                                   for f in headers ]))))
+    allinch = env.CreateFile(target, 
+                             env.Value("".join([ '#include <%s>\n' % f.srcnode().get_path(env.Dir('#'))
+                                                 for f in headers ])))
+    env.Default(allinch)
+    env.Depends(allinch, headers)
 
 INDEXPAGE="""
 /** \mainpage ${TITLE}
@@ -132,7 +135,6 @@ def IndexPage(env, name, title, text=""):
     env.Clean('all',name)
     env.Clean('all_docs',name)
 
-
 ###########################################################################
 # The following functions serve as simple macros for most SConscript files
 #
@@ -164,12 +166,27 @@ def AutoPacketBundle(env, name, exclude=[], subdirs=[], doc_extra_sources=[]):
 
     objects = env.Object(sources)
     cobject = env.CombinedObject('${LOCALLIBDIR}/${NAME}${OBJADDSUFFIX}', objects, NAME=((name)))
+    sobundle = env.SharedLibrary('${LOCALLIBDIR}/${NAME}${OBJADDSUFFIX}', sources, NAME=((name)),
+                                 LIBS=[], SHLIBPREFIX='')
 
     env.Default(cobject)
+    env.Default(sobundle)
     env.Append(ALLOBJECTS = objects, PACKET_BUNDLES = cobject)
     env.Install('$OBJINSTALLDIR', cobject)
+    env.Install('$OBJINSTALLDIR', sobundle)
 
     if tests                 : env.BoostUnitTest('test', tests + cobject)
     if includes              : env.InstallSubdir('$INCLUDEINSTALLDIR', includes)
     if doxyfile              : SENFSCons.Doxygen(env, extra_sources=((doc_extra_sources)) )
     if subscripts            : SConscript(subscripts)
+
+
+def BuildExample(env, sconstruct):
+    dir     = env.File( ((sconstruct)) ).dir
+    example = env.Command( dir.File('.example.phony'), env.Alias('default'),
+                           [ '$SCONS -C $EXAMPLEDIR' ],
+                           CONCURRENCY_LEVEL=1, EXAMPLEDIR=dir )
+    env.Alias('examples', example)
+
+    if env.GetOption('clean') and ('all' in BUILD_TARGETS or 'examples' in BUILD_TARGETS):
+        env.Clone(CONCURRENCY_LEVEL=1, EXAMPLEDIR=dir).Execute([ '$SCONS -C $EXAMPLEDIR -c' ])