X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=site_scons%2Fsenfutil.py;h=2b570d2e878cb826f1364641c710f6048a19c08f;hb=e108afcb12ecd5d9d8fdc35149c8a097e56185dd;hp=fce11f0b6acf24f6be5fc572bff740807ffe660e;hpb=41ac85f6c8a96bdefebdbee4e88193d7f23f50cf;p=senf.git diff --git a/site_scons/senfutil.py b/site_scons/senfutil.py index fce11f0..2b570d2 100644 --- a/site_scons/senfutil.py +++ b/site_scons/senfutil.py @@ -1,4 +1,5 @@ import os, os.path, site_tools.Yaptu, types, re, fnmatch +import SCons.Util from SCons.Script import * senfutildir = os.path.dirname(__file__) @@ -6,7 +7,7 @@ senfutildir = os.path.dirname(__file__) # Fix for SCons 0.97 compatibility try: Variables -except NameError: +except NameError: Variables = Options BoolVariable = BoolOption @@ -26,9 +27,10 @@ def parseArguments(env, *defs): env.Help(""" Any construction environment variable may be set from the scons command line (see SConstruct file and SCons documentation for a list -of variables) using +of variables) usin +g - VARNAME=value Assign new value + VARNAME=value Assign new value VARNAME+=value Append value at end Special command line parameters: @@ -37,7 +39,8 @@ Special command line parameters: try : unknv = vars.UnknownVariables() except AttributeError: unknv = vars.UnknownOptions() env.SetDefault(ARGUMENT_VARIABLES = {}) - for k,v in unknv.iteritems(): + for k,v in ARGLIST: + if not unknv.has_key(k) : continue if k.endswith('+'): env.Append(**{k[:-1]: v}) env.Append(ARGUMENT_VARIABLES = {k[:-1]:v}) @@ -46,7 +49,7 @@ Special command line parameters: env.Append(ARGUMENT_VARIABLES = {k:v}) def importProcessEnv(env): - env.Append( ENV = dict(( (k,v) + env.Append( ENV = dict(( (k,v) for pattern in env.get('IMPORT_ENV',[]) for k,v in os.environ.iteritems() if fnmatch.fnmatchcase(k,pattern) )) ) @@ -108,13 +111,14 @@ def SetupForSENF(env, senf_path = [], flavor=None): try_flavors = [ '', 'g' ] if flavor is not None: try_flavors[0:0] = [ flavor ] - + res = detect_senf(env, senf_path, try_flavors) - if not env.GetOption('no_progress'): - if res: - print env.subst("scons: Using${SENFSYSLAYOUT and ' system' or ''} 'libsenf${LIBADDSUFFIX}' in '$SENFDIR'") - else: - print "scons: SENF library not found, trying to build anyway ..." + if res: + if not env.GetOption('no_progress'): + print env.subst("scons: Using${SENFSYSLAYOUT and ' system' or ''} " + "'libsenf${LIBADDSUFFIX}' in '$SENFDIR'") + else: + print "scons: SENF library not found, trying to build anyway ..." loadTools(env) @@ -125,36 +129,35 @@ def SetupForSENF(env, senf_path = [], flavor=None): LIBPATH = [ '$SENFDIR' ], ) - conf = env.Configure(clean=False, help=False) - if not conf.CheckBoostVersion(): - conf.Fail("Boost includes not found") - conf.CheckBoostVariants() - conf.Finish() - + if env['BOOST_VARIANT'] is None: + conf = env.Configure(clean=False, help=False) + conf.CheckBoostVersion(fail=True) + conf.CheckBoostVariants() + conf.Finish() + env.Replace( expandLogOption = expandLogOption, ) env.SetDefault( - FLAVOR = flavor, LIBADDSUFFIX = '${FLAVOR and "_$FLAVOR" or ""}', OBJADDSUFFIX = '${LIBADDSUFFIX}', + BUNDLEDIR = '$SENFDIR${SENFSYSLAYOUT and "/lib/senf" or ""}', + SENFINCDIR = '$SENFDIR${SENFSYSLAYOUT and "/include" or ""}', + PROJECTNAME = "Unnamed project", DOCLINKS = [], PROJECTEMAIL = "nobody@nowhere.org", COPYRIGHT = "nobody", REVISION = "unknown", - BUNDLEDIR = '$SENFDIR${SENFSYSLAYOUT and "/lib/senf" or ""}', - SENFINCDIR = '$SENFDIR${SENFSYSLAYOUT and "/include" or ""}', ) env.Append( - CPPPATH = [ '${NEED_BOOST_EXT and "$SENFINCDIR/boost_ext" or None}' ], CPPDEFINES = [ '$expandLogOption' ], CXXFLAGS = [ '-Wno-long-long', '-fno-strict-aliasing' ], LINKFLAGS = [ '-rdynamic' ], - LIBS = [ 'senf$LIBADDSUFFIX', 'rt', '$BOOSTREGEXLIB', '$BOOSTIOSTREAMSLIB', + LIBS = [ 'senf$LIBADDSUFFIX', 'rt', '$BOOSTREGEXLIB', '$BOOSTIOSTREAMSLIB', '$BOOSTSIGNALSLIB', '$BOOSTFSLIB' ], ) - + try: path = env.File('$BUNDLEDIR/senf${LIBADDSUFFIX}.conf').abspath env.MergeFlags(file(path).read()) @@ -179,7 +182,7 @@ def DefaultOptions(env): LINKFLAGS = [ '$LINKFLAGS_' ], LOGLEVELS = [ '$LOGLEVELS_' ], ) - env.SetDefault( + env.SetDefault( CXXFLAGS_final = [], CXXFLAGS_normal = [], CXXFLAGS_debug = [], @@ -199,7 +202,7 @@ def DefaultOptions(env): # Interpret command line options parseArguments( - env, + env, BoolVariable('final', 'Build final (optimized) build', False), BoolVariable('debug', 'Link in debug symbols', False), ) @@ -220,18 +223,30 @@ def DefaultOptions(env): def Glob(env, exclude=[], subdirs=[]): testSources = env.Glob("*.test.cc", strings=True) - sources = [ x - for x in env.Glob("*.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 += env.Glob(os.path.join(subdir,"*.test.cc"), strings=True) - sources += [ x + 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 CleanGlob(env, targets, patterns): + if env.GetOption('clean'): + targets = SCons.Util.flatten(targets) + for target in targets: + if target in BUILD_TARGETS: + patterns = map(str,SCons.Util.flatten(env.subst_list(patterns))) + files = [ os.path.join(path,f) + for path, subdirs, files in os.walk('.') + for pattern in patterns + for f in fnmatch.filter(files,pattern) ] + return env.Clean(target, files) + tagfiles = None def Doxygen(env, doxyheader=None, doxyfooter=None, doxycss=None, mydoxyfile=False, senfdoc_path=[], @@ -242,7 +257,7 @@ def Doxygen(env, doxyheader=None, doxyfooter=None, doxycss=None, mydoxyfile=Fals global senfutildir global tagfiles libdir=os.path.join(senfutildir, 'lib') - + if tagfiles is None: senfdocdir = None senfdoc_path.extend(('senfdoc', '$SENFDIR', '$SENFDIR/manual', @@ -259,12 +274,12 @@ 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') : + if dir.endswith('/doc') : try: dirs.remove('html') except ValueError: pass - for d in dirs: + for d in dirs: if d.startswith('.') : dirs.remove(d) - + if env.GetOption('clean'): env.Clean('doc', env.Dir('doc')) if not mydoxyfile: @@ -272,7 +287,7 @@ def Doxygen(env, doxyheader=None, doxyfooter=None, doxycss=None, mydoxyfile=Fals if not mydoxyfile: # Create Doxyfile NOW - site_tools.Yaptu.yaptuAction("Doxyfile", + site_tools.Yaptu.yaptuAction("Doxyfile", os.path.join(libdir, "Doxyfile.yap"), env) @@ -283,7 +298,7 @@ def Doxygen(env, doxyheader=None, doxyfooter=None, doxycss=None, mydoxyfile=Fals env.Value('$REVISION') ] # The other files are created using dependencies - if doxyheader: + if doxyheader: doxyheader = env.CopyToDir(env.Dir("doc"), doxyheader) else: doxyheader = env.Yaptu("doc/doxyheader.html", os.path.join(libdir, "doxyheader.yap"), **kw) @@ -308,7 +323,7 @@ def Doxygen(env, doxyheader=None, doxyfooter=None, doxycss=None, mydoxyfile=Fals 'html_dir' : 'html', 'html' : 'YES', 'DOXYGEN' : '$DOXYGEN' }, - TAGFILES = tagfiles, + TAGFILES = tagfiles, DOCLIBDIR = libdir, DOXYGENCOM = "$DOCLIBDIR/doxygen.sh $DOXYOPTS $SOURCE")