X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=site_scons%2Fsenfutil.py;h=39866d38d30648021943ec34ecfcdde602fb4745;hb=ad287a6e1241649e73188edf5b8902e4e65f615d;hp=1cb88e352a909fd82a2ad1ca15e6f6d63c6b2e74;hpb=8715a32e62efafee5a9681f3f3ee8d18c4bf2859;p=senf.git diff --git a/site_scons/senfutil.py b/site_scons/senfutil.py index 1cb88e3..39866d3 100644 --- a/site_scons/senfutil.py +++ b/site_scons/senfutil.py @@ -1,6 +1,8 @@ -import os.path +import os.path, glob, site_tools.Yaptu from SCons.Script import * +senfutildir = os.path.dirname(__file__) + # Fix for SCons 0.97 compatibility try: Variables @@ -59,9 +61,17 @@ 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 = []): - senf_paths.extend(('senf', '../senf', os.path.dirname(os.path.dirname(__file__)), - '/usr/local', '/usr')) +def SetupForSENF(env, senf_path = []): + global senfutildir + senf_path.extend(('senf', '../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 ]) + env.Append( LIBS = [ 'senf', 'rt', '$BOOSTREGEXLIB', '$BOOSTIOSTREAMSLIB', '$BOOSTSIGNALSLIB', @@ -101,6 +111,12 @@ def SetupForSENF(env, senf_paths = []): LOGLEVELS_final = [], LOGLEVELS_normal = [], LOGLEVELS_debug = [], + + PROJECTNAME = "Unnamed project", + DOCLINKS = [], + PROJECTEMAIL = "nobody@nowhere.org", + COPYRIGHT = "nobody", + REVISION = "unknown", ) # Interpret command line options @@ -112,7 +128,7 @@ 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")): @@ -134,6 +150,8 @@ def SetupForSENF(env, senf_paths = []): else: print "\nSENF library not found .. trying build anyway !!\n" + env.Alias('all', '#') + def DefaultOptions(env): env.Append( @@ -145,3 +163,94 @@ def DefaultOptions(env): LINKFLAGS_normal = [ '-Wl,-S' ], 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 ] + 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")) + if x not in testSources and x not in exclude ] + return (sources, testSources) + +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, REVISION + + global senfutildir + global tagfiles + libdir=os.path.join(senfutildir, 'lib') + + if tagfiles is None: + senfdocdir = None + senfdoc_path.extend(('senfdoc', 'senf/manual', 'senf', '../senf/manual', '../senf', + os.path.join(os.path.dirname(senfutildir), 'manual'), + os.path.dirname(senfutildir), + '/usr/share/doc/senf', '/usr/local/share/doc/senf', + '/usr/share/doc/libsenf-doc/html')) + for path in senfdoc_path: + if os.path.exists(os.path.join(path, "doc/Main.tag")): + senfdocdir = path + break + tagfiles = [] + if senfdocdir is None: + 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') + for d in dirs: + if d.startswith('.') : dirs.remove(d) + + if env.GetOption('clean'): + env.Clean('doc', env.Dir('doc')) + if not mydoxyfile: + env.Clean('doc', "Doxyfile") + + if not mydoxyfile: + # Create Doxyfile NOW + site_tools.Yaptu.yaptuAction("Doxyfile", + 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', '--tagfiles', '"$TAGFILES"' ], + DOXYENV = { 'TOPDIR' : env.Dir('#').abspath, + 'LIBDIR' : libdir, + 'REVISION' : '$REVISION', + 'tagfiles' : '$TAGFILES', + 'output_dir' : 'doc', + 'html_dir' : 'html', + 'html' : 'YES' }, + TAGFILES = tagfiles, + DOCLIBDIR = libdir, + DOXYGENCOM = "$DOCLIBDIR/doxygen.sh $DOXYOPTS $SOURCE") + + env.Depends(doc, [ doxyheader, doxyfooter, doxycss ]) + + return doc