Skip to content
Snippets Groups Projects
Commit 53079d74 authored by g0dil's avatar g0dil
Browse files

Fix relative pathname handling in Doxyfiles

parent 33998aa1
No related branches found
No related tags found
No related merge requests found
@INCLUDE = "$(TOPDIR)/doclib/Doxyfile.global"
PROJECT_NAME = Overview PROJECT_NAME = Overview
PROJECT_NUMBER = "(Revision $(REVISION), generated $(TODAY))" PROJECT_NUMBER = "(Revision $(REVISION), generated $(TODAY))"
OUTPUT_DIRECTORY = doc
INPUT = .
FILE_PATTERNS = *.dox
IMAGE_PATH = .
EXAMPLE_PATH = Sniffer 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
...@@ -65,6 +65,7 @@ ...@@ -65,6 +65,7 @@
\li Doxygen (http://www.doxygen.org) \li Doxygen (http://www.doxygen.org)
\li The \c dia diagram editor (http://www.gnome.org/projects/dia/) \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 The library is only tested with gcc-3.4 and 4.0 on Linux. On other
...@@ -251,8 +252,8 @@ ...@@ -251,8 +252,8 @@
\section new_conf Configuring SENFSCons \section new_conf Configuring SENFSCons
To set up the build environment, copy the To set up the build environment, copy the
<tt>senfscons/SConstruct.template</tt> to <tt>Satscons</tt> in the <tt>senfscons/SConstruct.template</tt> to <tt>SConstruct</tt> in
project root. The default setup of this file is to build all the project root. The default setup of this file is to build all
subdirectories (using the \c SConscript files of the subdirectories (using the \c SConscript files of the
subdirectories). You can add additonal global targets and subdirectories). You can add additonal global targets and
configuration parameters here. configuration parameters here.
......
@INCLUDE = ../doclib/Doxyfile.global @INCLUDE = "$(TOPDIR)/doclib/Doxyfile.global"
PROJECT_NAME = libPackets PROJECT_NAME = libPackets
TAGFILES = ../Utils/doc/Utils.tag TAGFILES = "$(TOPDIR)/Utils/doc/Utils.tag"
GENERATE_TAGFILE = doc/Packets.tag GENERATE_TAGFILE = doc/Packets.tag
\ No newline at end of file
# -*- python -*- # -*- python -*-
import sys, glob, os.path import sys, glob, os.path, datetime
sys.path.append('senfscons') sys.path.append('senfscons')
import 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.UseBoost()
SENFSCons.UseSTLPort() SENFSCons.UseSTLPort()
env = SENFSCons.MakeEnvironment() env = SENFSCons.MakeEnvironment()
...@@ -15,19 +21,9 @@ env.Append( ...@@ -15,19 +21,9 @@ env.Append(
LIBS = [ 'iberty' ], LIBS = [ 'iberty' ],
DOXY_XREF_TYPES = [ 'bug', 'fixme', 'todo', 'idea' ], DOXY_XREF_TYPES = [ 'bug', 'fixme', 'todo', 'idea' ],
DOXY_HTML_XSL = '#/doclib/html-munge.xsl', DOXY_HTML_XSL = '#/doclib/html-munge.xsl',
) ENV = { 'TODAY' : str(datetime.date.today()),
'REVISION' : svninfo['Revision'] + (not(svninfo['commited']) and " + local changes" or ""),
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 "") }
) )
Export('env') Export('env')
......
@INCLUDE = ../doclib/Doxyfile.global @INCLUDE = "$(TOPDIR)/doclib/Doxyfile.global"
PROJECT_NAME = libScheduler PROJECT_NAME = libScheduler
TAGFILES = ../Utils/doc/Utils.tag TAGFILES = "$(TOPDIR)/Utils/doc/Utils.tag"
GENERATE_TAGFILE = doc/Scheduler.tag GENERATE_TAGFILE = doc/Scheduler.tag
@INCLUDE = ../doclib/Doxyfile.global @INCLUDE = "$(TOPDIR)/doclib/Doxyfile.global"
PROJECT_NAME = libSocket PROJECT_NAME = libSocket
TAGFILES = ../Utils/doc/Utils.tag TAGFILES = "$(TOPDIR)/Utils/doc/Utils.tag"
GENERATE_TAGFILE = doc/Socket.tag GENERATE_TAGFILE = doc/Socket.tag
@INCLUDE = ../doclib/Doxyfile.global @INCLUDE = "$(TOPDIR)/doclib/Doxyfile.global"
PROJECT_NAME = libUtils PROJECT_NAME = libUtils
GENERATE_TAGFILE = doc/Utils.tag GENERATE_TAGFILE = doc/Utils.tag
OUTPUT_DIRECTORY = doc OUTPUT_DIRECTORY = doc
INPUT = . INPUT = .
FILE_PATTERNS = *.c *.cc *.cci *.ct *.cti *.h *.hh *.ih *.mmc *.dox 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 = . IMAGE_PATH = .
ALIASES = "fixme=\xrefitem fixme \"Fix\" \"Fixmes\"" \ ALIASES = "fixme=\xrefitem fixme \"Fix\" \"Fixmes\"" \
...@@ -25,8 +25,8 @@ EXPAND_ONLY_PREDEF = YES ...@@ -25,8 +25,8 @@ EXPAND_ONLY_PREDEF = YES
PREDEFINED = DOXYGEN PREDEFINED = DOXYGEN
EXPAND_AS_DEFINED = prefix_ EXPAND_AS_DEFINED = prefix_
HTML_HEADER = ../doclib/doxy-header.html HTML_HEADER = "$(TOPDIR)/doclib/doxy-header.html"
HTML_FOOTER = ../doclib/doxy-footer.html HTML_FOOTER = "$(TOPDIR)/doclib/doxy-footer.html"
GENERATE_LATEX = NO GENERATE_LATEX = NO
GENERATE_MAN = NO GENERATE_MAN = NO
GENERATE_XML = YES GENERATE_XML = YES
...@@ -42,4 +42,4 @@ MAX_DOT_GRAPH_HEIGHT = 1200 ...@@ -42,4 +42,4 @@ MAX_DOT_GRAPH_HEIGHT = 1200
MAX_DOT_GRAPH_DEPTH = 3 MAX_DOT_GRAPH_DEPTH = 3
DOT_MULTI_TARGETS = YES DOT_MULTI_TARGETS = YES
@INCLUDE = "../Doxyfile.local" @INCLUDE = "$(TOPDIR)/Doxyfile.local"
@INCLUDE = ../doclib/Doxyfile.global @INCLUDE = "$(TOPDIR)/doclib/Doxyfile.global"
PROJECT_NAME = SENFSCons PROJECT_NAME = SENFSCons
PROJECT_NUMBER = "Version 0.0.1"
...@@ -45,18 +45,23 @@ ...@@ -45,18 +45,23 @@
import os, sys, traceback import os, sys, traceback
import os.path import os.path
import glob import glob, re
from fnmatch import fnmatch from fnmatch import fnmatch
def DoxyfileParse(file): EnvVar = re.compile(r"\$\(([0-9A-Za-z_-]+)\)")
data = DoxyfileParse_(file,{})
for (k,v) in data.items(): 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] if not v : del data[k]
elif k in ("INPUT", "FILE_PATTERNS", "EXCLUDE_PATTERNS", "@INCLUDE", "TAGFILES") : continue elif k in ("INPUT", "FILE_PATTERNS", "EXCLUDE_PATTERNS", "@INCLUDE", "TAGFILES") : continue
elif len(v)==1 : data[k] = v[0] elif len(v)==1 : data[k] = v[0]
return data return data
def DoxyfileParse_(file, data): def DoxyfileParse_(file, data, ENV):
""" """
Parse a Doxygen source file and return a dictionary of all the values. Parse a Doxygen source file and return a dictionary of all the values.
Values will be strings and lists of strings. Values will be strings and lists of strings.
...@@ -66,7 +71,7 @@ def DoxyfileParse_(file, data): ...@@ -66,7 +71,7 @@ def DoxyfileParse_(file, data):
import shlex import shlex
lex = shlex.shlex(instream=open(file), posix=True) lex = shlex.shlex(instream=open(file), posix=True)
lex.wordchars += "*+./-:@~" lex.wordchars += "*+./-:@~$()"
lex.whitespace = lex.whitespace.replace("\n", "") lex.whitespace = lex.whitespace.replace("\n", "")
lex.escape = "\\" lex.escape = "\\"
...@@ -100,12 +105,13 @@ def DoxyfileParse_(file, data): ...@@ -100,12 +105,13 @@ def DoxyfileParse_(file, data):
elif token == "=": elif token == "=":
data[key] = [] data[key] = []
else: else:
token = EnvVar.sub(lambda m,ENV=ENV: str(ENV.get(m.group(1),"")),token)
append_data(data, key, new_data, token) append_data(data, key, new_data, token)
new_data = True new_data = True
if key=='@INCLUDE': if key=='@INCLUDE':
inc = os.path.join(dir,data['@INCLUDE'][-1]) inc = os.path.join(dir,data['@INCLUDE'][-1])
if os.path.exists(inc) : if os.path.exists(inc) :
DoxyfileParse_(inc,data) DoxyfileParse_(inc,data,ENV)
last_token = token last_token = token
token = lex.get_token() token = lex.get_token()
...@@ -140,7 +146,7 @@ def DoxySourceScan(node, env, path): ...@@ -140,7 +146,7 @@ def DoxySourceScan(node, env, path):
sources = [] sources = []
basedir = node.dir.abspath basedir = node.dir.abspath
data = DoxyfileParse(node.abspath) data = DoxyfileParse(env, node.abspath)
recursive = data.get("RECURSIVE", "NO").upper()=="YES" recursive = data.get("RECURSIVE", "NO").upper()=="YES"
file_patterns = data.get("FILE_PATTERNS", default_file_patterns) file_patterns = data.get("FILE_PATTERNS", default_file_patterns)
exclude_patterns = data.get("EXCLUDE_PATTERNS", default_exclude_patterns) exclude_patterns = data.get("EXCLUDE_PATTERNS", default_exclude_patterns)
...@@ -186,7 +192,7 @@ def DoxyEmitter(source, target, env): ...@@ -186,7 +192,7 @@ def DoxyEmitter(source, target, env):
"XML" : ("NO", "xml"), "XML" : ("NO", "xml"),
} }
data = DoxyfileParse(source[0].abspath) data = DoxyfileParse(env, source[0].abspath)
targets = [] targets = []
if data.has_key("OUTPUT_DIRECTORY"): if data.has_key("OUTPUT_DIRECTORY"):
...@@ -215,9 +221,9 @@ def DoxyEmitter(source, target, env): ...@@ -215,9 +221,9 @@ def DoxyEmitter(source, target, env):
return (targets, source) return (targets, source)
def doxyNodeHtmlDir(node): def doxyNodeHtmlDir(env,node):
if not node.sources : return None 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 if data.get("GENERATE_HTML",'YES').upper() != 'YES' : return None
return os.path.normpath(os.path.join( node.sources[0].dir.abspath, return os.path.normpath(os.path.join( node.sources[0].dir.abspath,
data.get("OUTPUT_DIRECTORY","."), data.get("OUTPUT_DIRECTORY","."),
...@@ -237,9 +243,10 @@ def relpath(source, target): ...@@ -237,9 +243,10 @@ def relpath(source, target):
def DoxyGenerator(source, target, env, for_signature): 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. # This will add automatic 'installdox' calls.
# #
...@@ -269,6 +276,7 @@ def DoxyGenerator(source, target, env, for_signature): ...@@ -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) url = env.get(os.path.splitext(os.path.basename(tagfile))[0].upper()+"_DOXY_URL", None)
if not url: if not url:
url = doxyNodeHtmlDir( url = doxyNodeHtmlDir(
env,
env.File(os.path.normpath(os.path.join(str(source[0].dir), tagfile)))) env.File(os.path.normpath(os.path.join(str(source[0].dir), tagfile))))
if url : url = relpath(output_dir, url) if url : url = relpath(output_dir, url)
if not url: if not url:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment