X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=site_scons%2Fsenfutil.py;h=38c82b6409c3cc3d50c24b14f4f0c47b994054e8;hb=d80f142699130075658d6448c90adf71338f2c5a;hp=0b932d40213217077bb83e221ecf6db974fbedeb;hpb=0a467c035c4039da15a213784d9c2434ec084b2b;p=senf.git diff --git a/site_scons/senfutil.py b/site_scons/senfutil.py index 0b932d4..38c82b6 100644 --- a/site_scons/senfutil.py +++ b/site_scons/senfutil.py @@ -1,5 +1,6 @@ import os.path, glob, site_tools.Yaptu from SCons.Script import * +import senfconf senfutildir = os.path.dirname(__file__) @@ -31,6 +32,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) @@ -59,27 +67,17 @@ Special command line parameters: # This looks much more complicated than it is: We do three things here: # a) switch between final or debug options # b) parse the LOGLEVELS parameter into the correct SENF_LOG_CONF syntax -# c) check for a local SENF, set options accordingly and update that SENF if needed +# c) check for a local SENF, set options accordingly +# d) check, wether the boost extensions are needed 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', + LIBS = [ 'rt' ], CXXFLAGS = [ '-Wno-long-long', '$CXXFLAGS_' ], CXXFLAGS_ = BuildTypeOptions('CXXFLAGS'), @@ -132,8 +130,9 @@ def SetupForSENF(env, senf_path = []): if not path.startswith('/') : sconspath = '#/%s' % path else : sconspath = path if os.path.exists(os.path.join(path,"senf/config.hh")): - print "\nUsing SENF in '%s'\n" \ - % ('/..' in sconspath and os.path.abspath(path) or sconspath) + if not env.GetOption('no_progress'): + print "\nUsing SENF in '%s'\n" \ + % ('/..' in sconspath and os.path.abspath(path) or sconspath) env.Append( LIBPATH = [ sconspath ], CPPPATH = [ sconspath ], BUNDLEDIR = sconspath, @@ -142,17 +141,29 @@ def SetupForSENF(env, senf_path = []): try: env.MergeFlags(file(os.path.join(path,"senf.conf")).read()) except IOError: - print "(SENF configuration file 'senf.conf' not found, assuming non-final SENF)" + if not env.GetOption('no_progress'): + print "(SENF configuration file 'senf.conf' not found, assuming non-final SENF)" env.Append(CPPDEFINES = [ 'SENF_DEBUG' ]) break elif os.path.exists(os.path.join(path,"include/senf/config.hh")): - print "\nUsing system SENF in '%s/'\n" % sconspath + if not env.GetOption('no_progress'): + print "\nUsing system SENF in '%s/'\n" % sconspath env.Append(BUNDLEDIR = os.path.join(sconspath,"lib/senf"), SENFDIR = sconspath, SENFSYSLAYOUT = True) break else: - print "\nSENF library not found .. trying build anyway !!\n" + if not env.GetOption('no_progress'): + print "\nSENF library not found .. trying build anyway !!\n" + + Configure(env) + + # Only add senf after all configure checks have run + env.Append( + CPPPATH = '${NEED_BOOST_EXT and "$SENFDIR/boost_ext" or None}', + LIBS = [ 'senf', '$BOOSTREGEXLIB', '$BOOSTIOSTREAMSLIB', '$BOOSTSIGNALSLIB', + '$BOOSTFSLIB' ], + ) env.Alias('all', '#') @@ -168,15 +179,32 @@ def DefaultOptions(env): LINKFLAGS_debug = [ '-g' ], ) + 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) + +def Configure(env): + conf = env.Configure(clean=False, help=False, custom_tests = senfconf.Tests()) + env.Replace( + BOOST_VERSION = conf.CheckBoostVersion(), + BOOST_VARIANT = conf.CheckBoostVariants( '', 'mt' ), + NEED_BOOST_EXT = not conf.CheckCXXHeader("boost/bimap.hpp"), + ) + conf.Finish() + + tagfiles = None def Doxygen(env, doxyheader=None, doxyfooter=None, doxycss=None, mydoxyfile=False, senfdoc_path=[], @@ -199,11 +227,14 @@ def Doxygen(env, doxyheader=None, doxyfooter=None, doxycss=None, mydoxyfile=Fals break tagfiles = [] if senfdocdir is None: - print "(SENF documentation not found)" + if not env.GetOption('no_progress'): + print "(SENF documentation not found)" 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) @@ -248,7 +279,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")