Fix SparseTestHack to work without subversion installed
[senf.git] / site_scons / senfutil.py
index 9a4578b..275ea1d 100644 (file)
@@ -31,6 +31,13 @@ class BuildTypeOptions:
         type = env['final'] and "final" or env['debug'] and "debug" or "normal"
         return env[self._var + "_" + type]
 
+def loadTools(env):
+    global senfutildir
+    tooldir = os.path.join(senfutildir, 'site_tools')
+    for tool in os.listdir(tooldir):
+        name, ext = os.path.splitext(tool)
+        if ext == '.py' and name != "__init__" : env.Tool(name, [ tooldir ])
+
 def parseArguments(env, *defs):
     vars = Variables(args=ARGUMENTS)
     for d in defs : vars.Add(d)
@@ -64,22 +71,13 @@ Special command line parameters:
 def SetupForSENF(env, senf_path = []):
     global senfutildir
     senf_path.extend(('senf', os.path.dirname(senfutildir), '/usr/local', '/usr'))
-    tooldir = os.path.join(senfutildir, 'site_tools')
 
-    env.Tool('Boost',       [ tooldir ])
-    env.Tool('PhonyTarget', [ tooldir ])
-    env.Tool('Yaptu',       [ tooldir ])
-    env.Tool('CopyToDir',   [ tooldir ])
-    env.Tool('Doxygen',     [ tooldir ])
+    loadTools(env)
 
     env.Append(
         LIBS              = [ 'senf', 'rt', '$BOOSTREGEXLIB',
                               '$BOOSTIOSTREAMSLIB', '$BOOSTSIGNALSLIB',
                               '$BOOSTFSLIB' ],
-        BOOSTREGEXLIB     = 'boost_regex',
-        BOOSTIOSTREAMSLIB = 'boost_iostreams',
-        BOOSTSIGNALSLIB   = 'boost_signals',
-        BOOSTFSLIB        = 'boost_filesystem',
         
         CXXFLAGS          = [ '-Wno-long-long', '$CXXFLAGS_' ],
         CXXFLAGS_         = BuildTypeOptions('CXXFLAGS'),
@@ -171,14 +169,24 @@ def DefaultOptions(env):
         LINKFLAGS_normal = [ '-Wl,-S' ],
         LINKFLAGS_debug  = [ '-g' ],
     )
+    # ugly hack for ubuntu karmic 
+    # ToDo: auto-configure alike support
+    if os.path.exists('/usr/lib/libboost_regex-mt.so'):
+        env.Append( BOOST_VARIANT = '-mt' )
+
 
 def Glob(env, exclude=[], subdirs=[]):
-    testSources = glob.glob("*.test.cc")
-    sources = [ x for x in glob.glob("*.cc") if x not in testSources and x not in exclude ]
+    testSources = env.Glob("*.test.cc", strings=True)
+    sources = [ x 
+                for x in env.Glob("*.cc", strings=True) 
+                if x not in testSources and x not in exclude ]
     for subdir in subdirs:
-        testSources += glob.glob(os.path.join(subdir,"*.test.cc"))
-        sources += [ x for x in glob.glob(os.path.join(subdir,"*.cc"))
+        testSources += env.Glob(os.path.join(subdir,"*.test.cc"), strings=True)
+        sources += [ x 
+                     for x in env.Glob(os.path.join(subdir,"*.cc"), strings=True)
                      if x not in testSources and x not in exclude ]
+    sources.sort()
+    testSources.sort()
     return (sources, testSources)
 
 tagfiles = None
@@ -208,7 +216,9 @@ def Doxygen(env, doxyheader=None, doxyfooter=None, doxycss=None, mydoxyfile=Fals
         else:
             for dir, dirs, files in os.walk(senfdocdir):
                 tagfiles.extend([ os.path.join(dir,f) for f in files if f.endswith('.tag') ])
-                if dir.endswith('/doc') : dirs.remove('html')
+                if dir.endswith('/doc') : 
+                    try: dirs.remove('html')
+                    except ValueError: pass
                 for d in dirs: 
                     if d.startswith('.') : dirs.remove(d)
     
@@ -253,7 +263,8 @@ def Doxygen(env, doxyheader=None, doxyfooter=None, doxycss=None, mydoxyfile=Fals
                                      'tagfiles'   : '$TAGFILES',
                                      'output_dir' : 'doc',
                                      'html_dir'   : 'html',
-                                     'html'       : 'YES' },
+                                     'html'       : 'YES',
+                                     'DOXYGEN'    : '$DOXYGEN' },
                       TAGFILES   = tagfiles, 
                       DOCLIBDIR  = libdir,
                       DOXYGENCOM = "$DOCLIBDIR/doxygen.sh $DOXYOPTS $SOURCE")