X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=site_scons%2Fsite_tools%2FDoxygen.py;h=842e4412342d76741e09c9758a98c387721d2be8;hb=566fb4271b2aff5aa07943707f770b2a84c2738b;hp=44a105f8997cc6f73ffc9e21a905f29676a21d92;hpb=81bca7eaa075738ba2f2b7c36efaced331677836;p=senf.git diff --git a/site_scons/site_tools/Doxygen.py b/site_scons/site_tools/Doxygen.py index 44a105f..842e441 100644 --- a/site_scons/site_tools/Doxygen.py +++ b/site_scons/site_tools/Doxygen.py @@ -151,11 +151,12 @@ class DoxyfileParser: ENVVAR_RE = re.compile(r"\$\(([0-9A-Za-z_-]+)\)") - def __init__(self, path, env, include_path=None, items = None): + def __init__(self, node, env, include_path=None, items = None): + self._node = node self._env = env self._include_path = include_path or [] - self._lexer = DoxyfileLexer(file(path)) - self._dir = os.path.split(path)[0] + self._lexer = DoxyfileLexer(file(node.srcnode().get_path())) + self._dir = node.dir self._items = items or {} def parse(self): @@ -188,15 +189,15 @@ class DoxyfileParser: if len(value) != 1: raise ValueError,"Invalid argument to @INCLUDE" - for d in [ self._dir ] + self._include_path: + for d in [ self._dir.get_path() ] + self._include_path: p = os.path.join(d,value[0]) if os.path.exists(p): self._items.setdefault('@INCLUDE',[]).append(p) - parser = DoxyfileParser(p, self._env, self._include_path, self._items) + parser = DoxyfileParser(self._node.dir.File(p), self._env, self._include_path, self._items) parser.parse() return - raise ValueError,"@INCLUDE file not found" + raise ValueError,"@INCLUDE file '%s' not found" % value[0] def _INCLUDE_PATH(self, op, value): self._include_path.extend(value) @@ -204,15 +205,13 @@ class DoxyfileParser: def items(self): return self._items -def DoxyfileParse(env,file): +def DoxyfileParse(env,node): # We don't parse source files which do not contain the word 'doxyfile'. SCons will # pass other dependencies to DoxyfileParse which are not doxyfiles ... grmpf ... - if not 'doxyfile' in file.lower(): - return {} ENV = {} ENV.update(env.get("ENV",{})) ENV.update(env.get("DOXYENV", {})) - parser = DoxyfileParser(file,ENV) + parser = DoxyfileParser(node,ENV) try: parser.parse() except ValueError, v: @@ -260,7 +259,7 @@ def DoxySourceScan(node, env, path): sources = [] basedir = node.dir.abspath - data = DoxyfileParse(env, node.abspath) + data = DoxyfileParse(env, node) 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) @@ -291,7 +290,7 @@ def DoxySourceScan(node, env, path): def DoxySourceScanCheck(node, env): """Check if we should scan this file""" - return os.path.isfile(node.path) + return os.path.isfile(node.path) and 'doxyfile' in node.name.lower() def DoxyEmitter(source, target, env): """Doxygen Doxyfile emitter""" @@ -304,7 +303,7 @@ def DoxyEmitter(source, target, env): "XML" : ("NO", "xml"), } - data = DoxyfileParse(env, source[0].abspath) + data = DoxyfileParse(env, source[0]) targets = [] if data.get("OUTPUT_DIRECTORY",""): @@ -342,7 +341,7 @@ def DoxyEmitter(source, target, env): def doxyNodeHtmlDir(env,node): if not node.sources : return None - data = DoxyfileParse(env, node.sources[0].abspath) + data = DoxyfileParse(env, node.sources[0]) 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","."), @@ -360,14 +359,14 @@ def relpath(source, target): return os.path.join(*([".."] * (len(source_elts) - prefix_len) + target_elts[prefix_len:])) -def DoxyGenerator(source, target, env, for_signature): - data = DoxyfileParse(env, source[0].abspath) - actions = [ - SCons.Action.Action("$DOXYGENCOM"), - SCons.Action.Action([ "touch $TARGETS" ]), - ] - - return actions +def doxyAction(target, source, env): + e = {} + e.update(env['ENV']) + for k,v in env.get('DOXYENV',[]).iteritems() : e[k] = env.subst(v) + SCons.Action.Action("$DOXYGENCOM")(target, source, env.Clone(ENV = e), show=False) + +def doxyActionStr(target, source, env): + return env.subst("$DOXYGENCOM",target=target,source=source) def generate(env): """ @@ -381,7 +380,8 @@ def generate(env): ) doxyfile_builder = env.Builder( - generator = DoxyGenerator, + action = [ SCons.Action.Action(doxyAction, doxyActionStr), + SCons.Action.Action([ "touch $TARGETS" ]) ], emitter = DoxyEmitter, target_factory = env.fs.Entry, single_source = True, @@ -393,7 +393,8 @@ def generate(env): }) env.SetDefault( - DOXYGENCOM = 'cd ${SOURCE.dir} && doxygen ${SOURCE.file}' + DOXYGEN = "doxygen", + DOXYGENCOM = 'cd ${SOURCE.dir} && ${DOXYGEN} ${SOURCE.file}' ) def exists(env):