import os.path, SCons.Options, SCons.Environment, SCons.Script.SConscript, glob
+SCONS_TOOLS = [
+ "Doxygen",
+ "Dia2Png",
+]
+
opts = None
finalizers = []
+basedir = os.path.split(__file__)[0]
+
def InitOpts():
global opts
if opts is not None: return
opts = SCons.Options.Options('SConfig')
opts.Add('CXX', 'C++ compiler to use', 'g++')
+ opts.Add('EXTRA_DEFINES', 'Additional preprocessor defines', '')
+ opts.Add('EXTRA_LIBS', 'Additional libraries to link against', '')
opts.Add(SCons.Options.BoolOption('final','Enable optimization',0))
def Finalizer(f):
opts.Add('BOOST_INCLUDES', 'Boost include directory', '')
opts.Add('BOOST_VARIANT', 'The boost variant to use', '')
opts.Add('BOOST_TOOLSET', 'The boost toolset to use', '')
+ opts.Add('BOOST_RUNTIME', 'The boost runtime to use', '')
+ opts.Add('BOOST_DEBUG_RUNTIME', 'The boost debug runtime to use', '')
opts.Add('BOOST_LIBDIR', 'The directory of the boost libraries', '')
Finalizer(FinalizeBoost)
def FinalizeBoost(env):
- env.Tool('BoostUnitTests', [os.path.split(__file__)[0]])
+ env.Tool('BoostUnitTests', [basedir])
if env['BOOST_TOOLSET']:
runtime = ""
- if not env['final'] : runtime += "gd"
+ if env['final'] : runtime += env.get('BOOST_RUNTIME','')
+ else : runtime += env.get('BOOST_DEBUG_RUNTIME','gd')
if env['STLPORT_LIB'] : runtime += "p"
if runtime: runtime = "-" + runtime
env['BOOST_VARIANT'] = "-" + env['BOOST_TOOLSET'] + runtime
InitOpts()
opts.Add('STLPORT_INCLUDES', 'STLport include directory', '')
opts.Add('STLPORT_LIB', 'Name of the stlport library or empty to not use stlport', '')
+ opts.Add('STLPORT_DEBUGLIB', 'Name of the stlport debug library','')
opts.Add('STLPORT_LIBDIR', 'The directory of the stlport libraries','')
Finalizer(FinalizeSTLPort)
def FinalizeSTLPort(env):
- env['STLPORT_DEBUGLIB'] = ''
if env['STLPORT_LIB']:
- env['STLPORT_DEBUGLIB'] = env['STLPORT_LIB'] + '_stldebug'
+ if not env['STLPORT_DEBUGLIB']:
+ env['STLPORT_DEBUGLIB'] = env['STLPORT_LIB'] + '_stldebug'
env.Append(LIBPATH = [ '$STLPORT_LIBDIR' ],
CPPPATH = [ '$STLPORT_INCLUDES' ])
if env['final']:
env.Append(LIBS = [ '$STLPORT_DEBUGLIB' ],
CPPDEFINES = [ '_STLP_DEBUG' ])
-def UseDoxygen():
- Finalizer(FinalizeDoxygen)
-
-def FinalizeDoxygen(env):
- env.Tool('Doxygen', [os.path.split(__file__)[0]])
-
def MakeEnvironment():
global opts, finalizers
InitOpts()
for finalizer in finalizers:
finalizer(env)
- env.Append(CXXFLAGS = [ '-Wall', '-Woverloaded-virtual', '-Wno-long-long',
- '-pedantic', '-ansi' ],
+ for tool in SCONS_TOOLS:
+ env.Tool(tool, [basedir])
+
+ env.Append(CXXFLAGS = [ '-Wall', '-Woverloaded-virtual', '-Wno-long-long' ],
LOCALLIBDIR = [ '#' ],
LIBPATH = [ '$LOCALLIBDIR' ])
CPPDEFINES = [ 'NDEBUG' ])
else:
env.Append(CXXFLAGS = [ '-O0', '-g', '-fno-inline' ],
- LINKFLAGS = [ '-g' ])
+ LINKFLAGS = [ '-g' ])
+
+ env.Append(CPPDEFINES = [ '$EXTRA_DEFINES' ],
+ LIBS = [ '$EXTRA_LIBS' ])
#return conf.Finish()
return env
-def GlobSources():
+def GlobSources(exclude=[]):
testSources = glob.glob("*.test.cc")
- sources = [ x for x in glob.glob("*.cc") if x not in testSources ]
+ sources = [ x for x in glob.glob("*.cc") if x not in testSources and x not in exclude ]
return (sources, testSources)
def StandardTargets(env):
return objects
-def Doxygen(env, sources, testSources = None):
- if type(sources) == type(()):
- testSources = sources[1]
- sources = sources[0]
-
- doc = env.Doxygen(
- target = 'doc',
- source = sources )
-
- env.Alias('all_docs', doc)
- return doc
+def DoxyGlob(exclude=[]):
+ sources = [ f
+ for ext in ("cci", "ct", "cti", "h", "hh", "ih", "mmc", "dox")
+ for f in glob.glob("*."+ext)
+ if f not in exclude ]
+ return sources
+
+def Doxygen(env, doxyfile="Doxyfile", extra_sources = []):
+ docs = env.Doxygen(doxyfile)
+ env.Depends(docs,extra_sources)
+ env.Alias('all_docs', *docs)
+ return docs
def Lib(env, library, sources, testSources = None, LIBS = []):
objects = Objects(env,sources,testSources,LIBS=LIBS)