From 53079d7421b70a09642243da27039653cf02b5d1 Mon Sep 17 00:00:00 2001 From: g0dil <g0dil@wiback.org> Date: Thu, 25 Jan 2007 23:34:48 +0000 Subject: [PATCH] Fix relative pathname handling in Doxyfiles --- Doxyfile | 13 ++++--------- Mainpage.dox | 5 +++-- Packets/Doxyfile | 4 ++-- SConstruct | 24 ++++++++++-------------- Scheduler/Doxyfile | 4 ++-- Socket/Doxyfile | 4 ++-- Utils/Doxyfile | 2 +- doclib/Doxyfile.global | 8 ++++---- senfscons/Doxyfile | 3 +-- senfscons/Doxygen.py | 34 +++++++++++++++++++++------------- 10 files changed, 50 insertions(+), 51 deletions(-) diff --git a/Doxyfile b/Doxyfile index 59fb6de13..8b758e170 100644 --- a/Doxyfile +++ b/Doxyfile @@ -1,14 +1,9 @@ +@INCLUDE = "$(TOPDIR)/doclib/Doxyfile.global" + PROJECT_NAME = Overview PROJECT_NUMBER = "(Revision $(REVISION), generated $(TODAY))" -OUTPUT_DIRECTORY = doc -INPUT = . -FILE_PATTERNS = *.dox -IMAGE_PATH = . EXAMPLE_PATH = Sniffer -HTML_HEADER = doclib/doxy-header-overview.html -HTML_FOOTER = doclib/doxy-footer.html -GENERATE_LATEX = NO -GENERATE_MAN = NO -@INCLUDE = "Doxyfile.local" +HTML_HEADER = doclib/doxy-header-overview.html +GENERATE_XML = NO diff --git a/Mainpage.dox b/Mainpage.dox index 2ded00706..02fc96474 100644 --- a/Mainpage.dox +++ b/Mainpage.dox @@ -65,6 +65,7 @@ \li Doxygen (http://www.doxygen.org) \li The \c dia diagram editor (http://www.gnome.org/projects/dia/) + \li \The c xsltproc XSLT processor (http://xmlsoft.org/XSLT/xsltproc2.html) The library is only tested with gcc-3.4 and 4.0 on Linux. On other @@ -251,8 +252,8 @@ \section new_conf Configuring SENFSCons To set up the build environment, copy the - <tt>senfscons/SConstruct.template</tt> to <tt>Satscons</tt> in the - project root. The default setup of this file is to build all + <tt>senfscons/SConstruct.template</tt> to <tt>SConstruct</tt> in + the project root. The default setup of this file is to build all subdirectories (using the \c SConscript files of the subdirectories). You can add additonal global targets and configuration parameters here. diff --git a/Packets/Doxyfile b/Packets/Doxyfile index 95d25b4ef..2e7c41a30 100644 --- a/Packets/Doxyfile +++ b/Packets/Doxyfile @@ -1,5 +1,5 @@ -@INCLUDE = ../doclib/Doxyfile.global +@INCLUDE = "$(TOPDIR)/doclib/Doxyfile.global" PROJECT_NAME = libPackets -TAGFILES = ../Utils/doc/Utils.tag +TAGFILES = "$(TOPDIR)/Utils/doc/Utils.tag" GENERATE_TAGFILE = doc/Packets.tag \ No newline at end of file diff --git a/SConstruct b/SConstruct index 79462692f..a2a3eba83 100644 --- a/SConstruct +++ b/SConstruct @@ -1,11 +1,17 @@ # -*- python -*- -import sys, glob, os.path +import sys, glob, os.path, datetime sys.path.append('senfscons') import SENFSCons ########################################################################### +svninfo = dict( + [ tuple(map(lambda y:y.strip(),x.split(":",1))) + for x in os.popen("svn info").read().split("\n") + if ':' in x ] ) +svninfo['commited'] = not(os.popen("svn status").read()) + SENFSCons.UseBoost() SENFSCons.UseSTLPort() env = SENFSCons.MakeEnvironment() @@ -15,19 +21,9 @@ env.Append( LIBS = [ 'iberty' ], DOXY_XREF_TYPES = [ 'bug', 'fixme', 'todo', 'idea' ], DOXY_HTML_XSL = '#/doclib/html-munge.xsl', -) - -import datetime - -svninfo = dict( - [ tuple(map(lambda y:y.strip(),x.split(":",1))) - for x in os.popen("svn info").read().split("\n") - if ':' in x ] ) -svninfo['commited'] = not(os.popen("svn status").read()) - -env.Append( - ENV = { 'TODAY' : datetime.date.today(), - 'REVISION' : svninfo['Revision'] + (not(svninfo['commited']) and " + local changes" or "") } + ENV = { 'TODAY' : str(datetime.date.today()), + 'REVISION' : svninfo['Revision'] + (not(svninfo['commited']) and " + local changes" or ""), + }, ) Export('env') diff --git a/Scheduler/Doxyfile b/Scheduler/Doxyfile index 157f80892..38eada5b1 100644 --- a/Scheduler/Doxyfile +++ b/Scheduler/Doxyfile @@ -1,5 +1,5 @@ -@INCLUDE = ../doclib/Doxyfile.global +@INCLUDE = "$(TOPDIR)/doclib/Doxyfile.global" PROJECT_NAME = libScheduler -TAGFILES = ../Utils/doc/Utils.tag +TAGFILES = "$(TOPDIR)/Utils/doc/Utils.tag" GENERATE_TAGFILE = doc/Scheduler.tag diff --git a/Socket/Doxyfile b/Socket/Doxyfile index 1a5a548d4..76ad2bbb6 100644 --- a/Socket/Doxyfile +++ b/Socket/Doxyfile @@ -1,6 +1,6 @@ -@INCLUDE = ../doclib/Doxyfile.global +@INCLUDE = "$(TOPDIR)/doclib/Doxyfile.global" PROJECT_NAME = libSocket -TAGFILES = ../Utils/doc/Utils.tag +TAGFILES = "$(TOPDIR)/Utils/doc/Utils.tag" GENERATE_TAGFILE = doc/Socket.tag diff --git a/Utils/Doxyfile b/Utils/Doxyfile index 414df50ba..b193e9063 100644 --- a/Utils/Doxyfile +++ b/Utils/Doxyfile @@ -1,4 +1,4 @@ -@INCLUDE = ../doclib/Doxyfile.global +@INCLUDE = "$(TOPDIR)/doclib/Doxyfile.global" PROJECT_NAME = libUtils GENERATE_TAGFILE = doc/Utils.tag diff --git a/doclib/Doxyfile.global b/doclib/Doxyfile.global index d2b544d2a..2e805893b 100644 --- a/doclib/Doxyfile.global +++ b/doclib/Doxyfile.global @@ -1,7 +1,7 @@ OUTPUT_DIRECTORY = doc INPUT = . FILE_PATTERNS = *.c *.cc *.cci *.ct *.cti *.h *.hh *.ih *.mmc *.dox -EXCLUDE_PATTERNS = *.test.cc *.test.hh .* +EXCLUDE_PATTERNS = *.test.cc *.test.hh .* *~ "#*#" IMAGE_PATH = . ALIASES = "fixme=\xrefitem fixme \"Fix\" \"Fixmes\"" \ @@ -25,8 +25,8 @@ EXPAND_ONLY_PREDEF = YES PREDEFINED = DOXYGEN EXPAND_AS_DEFINED = prefix_ -HTML_HEADER = ../doclib/doxy-header.html -HTML_FOOTER = ../doclib/doxy-footer.html +HTML_HEADER = "$(TOPDIR)/doclib/doxy-header.html" +HTML_FOOTER = "$(TOPDIR)/doclib/doxy-footer.html" GENERATE_LATEX = NO GENERATE_MAN = NO GENERATE_XML = YES @@ -42,4 +42,4 @@ MAX_DOT_GRAPH_HEIGHT = 1200 MAX_DOT_GRAPH_DEPTH = 3 DOT_MULTI_TARGETS = YES -@INCLUDE = "../Doxyfile.local" +@INCLUDE = "$(TOPDIR)/Doxyfile.local" diff --git a/senfscons/Doxyfile b/senfscons/Doxyfile index b244b6488..a3f0a5eef 100644 --- a/senfscons/Doxyfile +++ b/senfscons/Doxyfile @@ -1,4 +1,3 @@ -@INCLUDE = ../doclib/Doxyfile.global +@INCLUDE = "$(TOPDIR)/doclib/Doxyfile.global" PROJECT_NAME = SENFSCons -PROJECT_NUMBER = "Version 0.0.1" diff --git a/senfscons/Doxygen.py b/senfscons/Doxygen.py index 9e8f1c684..f422aacd5 100644 --- a/senfscons/Doxygen.py +++ b/senfscons/Doxygen.py @@ -45,18 +45,23 @@ import os, sys, traceback import os.path -import glob +import glob, re from fnmatch import fnmatch -def DoxyfileParse(file): - data = DoxyfileParse_(file,{}) - for (k,v) in data.items(): +EnvVar = re.compile(r"\$\(([0-9A-Za-z_-]+)\)") + +def DoxyfileParse(env,file): + ENV = {} + ENV.update(env.get("ENV",{})) + ENV['TOPDIR'] = env.Dir('#').abspath + data = DoxyfileParse_(file,{},ENV) + for k,v in data.items(): if not v : del data[k] elif k in ("INPUT", "FILE_PATTERNS", "EXCLUDE_PATTERNS", "@INCLUDE", "TAGFILES") : continue elif len(v)==1 : data[k] = v[0] return data -def DoxyfileParse_(file, data): +def DoxyfileParse_(file, data, ENV): """ Parse a Doxygen source file and return a dictionary of all the values. Values will be strings and lists of strings. @@ -66,7 +71,7 @@ def DoxyfileParse_(file, data): import shlex lex = shlex.shlex(instream=open(file), posix=True) - lex.wordchars += "*+./-:@~" + lex.wordchars += "*+./-:@~$()" lex.whitespace = lex.whitespace.replace("\n", "") lex.escape = "\\" @@ -100,12 +105,13 @@ def DoxyfileParse_(file, data): elif token == "=": data[key] = [] else: + token = EnvVar.sub(lambda m,ENV=ENV: str(ENV.get(m.group(1),"")),token) append_data(data, key, new_data, token) new_data = True if key=='@INCLUDE': inc = os.path.join(dir,data['@INCLUDE'][-1]) if os.path.exists(inc) : - DoxyfileParse_(inc,data) + DoxyfileParse_(inc,data,ENV) last_token = token token = lex.get_token() @@ -140,7 +146,7 @@ def DoxySourceScan(node, env, path): sources = [] basedir = node.dir.abspath - data = DoxyfileParse(node.abspath) + data = DoxyfileParse(env, node.abspath) recursive = data.get("RECURSIVE", "NO").upper()=="YES" file_patterns = data.get("FILE_PATTERNS", default_file_patterns) exclude_patterns = data.get("EXCLUDE_PATTERNS", default_exclude_patterns) @@ -186,7 +192,7 @@ def DoxyEmitter(source, target, env): "XML" : ("NO", "xml"), } - data = DoxyfileParse(source[0].abspath) + data = DoxyfileParse(env, source[0].abspath) targets = [] if data.has_key("OUTPUT_DIRECTORY"): @@ -215,9 +221,9 @@ def DoxyEmitter(source, target, env): return (targets, source) -def doxyNodeHtmlDir(node): +def doxyNodeHtmlDir(env,node): if not node.sources : return None - data = DoxyfileParse(node.sources[0].abspath) + data = DoxyfileParse(env, node.sources[0].abspath) if data.get("GENERATE_HTML",'YES').upper() != 'YES' : return None return os.path.normpath(os.path.join( node.sources[0].dir.abspath, data.get("OUTPUT_DIRECTORY","."), @@ -237,9 +243,10 @@ def relpath(source, target): def DoxyGenerator(source, target, env, for_signature): - data = DoxyfileParse(source[0].abspath) + data = DoxyfileParse(env, source[0].abspath) - actions = [ env.Action("cd ${SOURCE.dir} && ${DOXYGEN} ${SOURCE.file}") ] + actions = [ env.Action("cd ${SOURCE.dir} && TOPDIR=%s ${DOXYGEN} ${SOURCE.file}" + % (relpath(source[0].dir.abspath, env.Dir('#').abspath),)) ] # This will add automatic 'installdox' calls. # @@ -269,6 +276,7 @@ def DoxyGenerator(source, target, env, for_signature): url = env.get(os.path.splitext(os.path.basename(tagfile))[0].upper()+"_DOXY_URL", None) if not url: url = doxyNodeHtmlDir( + env, env.File(os.path.normpath(os.path.join(str(source[0].dir), tagfile)))) if url : url = relpath(output_dir, url) if not url: -- GitLab