X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=site_scons%2Fsenfutil.py;h=275ea1df42fc468f9fe9b8e81ca5a247df1321eb;hb=8871644fd9655c9e62384f6f39ce7c0c6c8dcf30;hp=55665dc83d185878ea6ab557500b074137de4636;hpb=42f4a13c65272fe04b84831dd3dee3c0be401ec7;p=senf.git diff --git a/site_scons/senfutil.py b/site_scons/senfutil.py index 55665dc..275ea1d 100644 --- a/site_scons/senfutil.py +++ b/site_scons/senfutil.py @@ -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) @@ -61,25 +68,16 @@ Special command line parameters: # 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 -def SetupForSENF(env, senf_paths = []): +def SetupForSENF(env, senf_path = []): global senfutildir - senf_paths.extend(('senf', '../senf', os.path.dirname(senfutildir), '/usr/local', '/usr')) - tooldir = os.path.join(senfutildir, 'site_tools') + senf_path.extend(('senf', os.path.dirname(senfutildir), '/usr/local', '/usr')) - 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'), @@ -95,11 +93,6 @@ def SetupForSENF(env, senf_paths = []): LOGLEVELS_ = BuildTypeOptions('LOGLEVELS'), ) - rev = 'unknown' - if os.path.isdir('.svn'): - rev = 'r'+os.popen('svnversion').read().strip().lower() - elif os.path.isdir('.git'): - rev = 'r'+os.popen('gitsvnversion').read().strip().lower() env.SetDefault( CXXFLAGS_final = [], CXXFLAGS_normal = [], @@ -121,7 +114,7 @@ def SetupForSENF(env, senf_paths = []): DOCLINKS = [], PROJECTEMAIL = "nobody@nowhere.org", COPYRIGHT = "nobody", - REVISION = rev, + REVISION = "unknown", ) # Interpret command line options @@ -133,27 +126,37 @@ def SetupForSENF(env, senf_paths = []): # If we have a symbolic link (or directory) 'senf', we use it as our # senf repository - for path in senf_paths: + for path in 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 ) + BUNDLEDIR = sconspath, + SENFDIR = sconspath, + SENFSYSLAYOUT = False) 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 - env.Append(BUNDLEDIR = os.path.join(sconspath,"lib/senf")) + 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" + + env.Alias('all', '#') def DefaultOptions(env): @@ -166,22 +169,59 @@ 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) -def Doxygen(env, doxyheader=None, doxyfooter=None, doxycss=None, mydoxyfile=False, **kw): +tagfiles = None + +def Doxygen(env, doxyheader=None, doxyfooter=None, doxycss=None, mydoxyfile=False, senfdoc_path=[], + **kw): # Additional interesting keyword arguments or environment variables: - # PROJECTNAME, DOCLINKS, PROJECTEMAIL, COPYRIGHT + # PROJECTNAME, DOCLINKS, PROJECTEMAIL, COPYRIGHT, REVISION + global senfutildir + global tagfiles libdir=os.path.join(senfutildir, 'lib') + if tagfiles is None: + senfdocdir = None + senfdoc_path.extend(('senfdoc', '$SENFDIR', '$SENFDIR/manual', + '$SENFDIR/share/doc/senf', '$SENFDIR/share/doc/libsenf-doc/html')) + for path in senfdoc_path: + path = env.Dir(path).get_path() + if os.path.exists(os.path.join(path, "doc/doclib.tag")): + senfdocdir = path + break + tagfiles = [] + if senfdocdir is None: + 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') : + try: dirs.remove('html') + except ValueError: pass + for d in dirs: + if d.startswith('.') : dirs.remove(d) + if env.GetOption('clean'): env.Clean('doc', env.Dir('doc')) if not mydoxyfile: @@ -193,27 +233,39 @@ def Doxygen(env, doxyheader=None, doxyfooter=None, doxycss=None, mydoxyfile=Fals os.path.join(libdir, "Doxyfile.yap"), env) + envvalues = [ env.Value('$PROJECTNAME'), + env.Value('$DOCLINKS'), + env.Value('$PROJECTEMAIL'), + env.Value('$COPYRIGHT'), + env.Value('$REVISION') ] + # The other files are created using dependencies if doxyheader: doxyheader = env.CopyToDir(env.Dir("doc"), doxyheader) else: doxyheader = env.Yaptu("doc/doxyheader.html", os.path.join(libdir, "doxyheader.yap"), **kw) + env.Depends(doxyheader, envvalues) if doxyfooter: doxyfooter = env.CopyToDir(env.Dir("doc"), doxyfooter) else: doxyfooter = env.Yaptu("doc/doxyfooter.html", os.path.join(libdir, "doxyfooter.yap"), **kw) + env.Depends(doxyfooter, envvalues) if doxycss: doxycss = env.CopyToDir(env.Dir("doc"), doxycss) else: doxycss = env.CopyToDir(env.Dir("doc"), os.path.join(libdir, "doxy.css")) doc = env.Doxygen("Doxyfile", - DOXYOPTS = [ '--html' ], + DOXYOPTS = [ '--html', '--tagfiles', '"$TAGFILES"' ], DOXYENV = { 'TOPDIR' : env.Dir('#').abspath, 'LIBDIR' : libdir, + 'REVISION' : '$REVISION', + 'tagfiles' : '$TAGFILES', 'output_dir' : 'doc', 'html_dir' : 'html', - 'html' : 'YES' }, + 'html' : 'YES', + 'DOXYGEN' : '$DOXYGEN' }, + TAGFILES = tagfiles, DOCLIBDIR = libdir, DOXYGENCOM = "$DOCLIBDIR/doxygen.sh $DOXYOPTS $SOURCE")