X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senfscons%2FDoxygen.py;h=3b52795f8efbca15ead05515f79c9fb669df9f73;hb=83df9651fac5af034774ff9314ee18eeb8a5ec2a;hp=a85354584915e9756c950c2806c9073b66b756dc;hpb=5a5c6d7f0fae7ad6c0af49d7742955cb6cf618cf;p=senf.git diff --git a/senfscons/Doxygen.py b/senfscons/Doxygen.py index a853545..3b52795 100644 --- a/senfscons/Doxygen.py +++ b/senfscons/Doxygen.py @@ -1,3 +1,5 @@ +# The Doxygen builder is based on the Doxygen builder from: +# # Astxx, the Asterisk C++ API and Utility Library. # Copyright (C) 2005, 2006 Matthew A. Nicholson # Copyright (C) 2006 Tim Blechmann @@ -15,7 +17,55 @@ # License along with this library; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# I have been fighting 4 problems in this implementation: +# The Modifications are Copyright (C) 2006,2007 +# Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS) +# Kompetenzzentrum fuer Satelitenkommunikation (SatCom) +# Stefan Bund + +## \file +# \brief Doxygen builder + +## \package senfscons.Doxygen +# \brief Doxygen Documentation Builder +# +# This builder will invoke \c doxygen to build software +# documentation. The doxygen builder only takes the name of the +# doxyfile as it's source file. The builder parses that doxygen +# configuration file. +# +# The builder will automatically find all sources on which the +# documentation depends. This includes +# \li the source code files (as selected by the \c RECURSIVE, \c +# FILE_PATTERNS, \c INPUT and \c EXCLUDE_PATTERNS doxygen +# directives +# \li the \c HTML_HEADER and \c HTML_FOOTER +# \li all referenced \c TAGFILES +# \li the \c INPUT_FILTER +# \li all included doxyfiles (via \c @INCLUDE) +# +# The builder will emit a list of targets built by doxygen. This +# depends on the types of documentation built. +# +# The builder will also generate additional commands to resolve +# cross-references to other module documentations. This is based on +# the \c TAGFILES used. Tagfiles built in the same project in other +# modules are automatically found and the links will be resolved +# correctly. To resolve links from external tagfiles, you may specify +# tagfilename_DOXY_URL as a construction environment +# variable to specify the path to resolve references from the given +# tagfile to. tagfilename is the uppercased basename of the +# tagfile used. +# +# \par Construction Envrionment Variables: +# +# +# +#
\c DOXYGENdoxygen command, defaults to \c doxygen
tag_DOXY_URLexternal tagfile resolve URL
+# +# \ingroup builder + +# I (g0dil@berlios.de) have been fighting 4 problems in this +# implementation: # - A Directory target will *not* call any source scanners # - A Directory target will interpret the directory contents as # sources not targets. This means, that if a command creates that @@ -46,6 +96,7 @@ import os, sys, traceback import os.path import glob, re +import SCons.Action from fnmatch import fnmatch EnvVar = re.compile(r"\$\(([0-9A-Za-z_-]+)\)") @@ -71,7 +122,7 @@ def DoxyfileParse_(file, data, ENV): import shlex lex = shlex.shlex(instream=open(file), posix=True) - lex.wordchars += "*+./-:@~$()" + lex.wordchars += "*+=./-:@~$()" lex.whitespace = lex.whitespace.replace("\n", "") lex.escape = "\\" @@ -132,7 +183,7 @@ def DoxySourceScan(node, env, path): dep_add_keys = ( '@INCLUDE', 'HTML_HEADER', 'HTML_FOOTER', 'TAGFILES', 'INPUT_FILTER' ) - + default_file_patterns = ( '*.c', '*.cc', '*.cxx', '*.cpp', '*.c++', '*.java', '*.ii', '*.ixx', '*.ipp', '*.i++', '*.inl', '*.h', '*.hh ', '*.hxx', '*.hpp', '*.h++', @@ -162,7 +213,7 @@ def DoxySourceScan(node, env, path): for f in files: filename = os.path.normpath(os.path.join(root, f)) if ( reduce(lambda x, y: x or fnmatch(f, y), - file_patterns, False) + file_patterns, False) and not reduce(lambda x, y: x or fnmatch(f, y), exclude_patterns, False) ): sources.append(filename) @@ -204,17 +255,22 @@ def DoxyEmitter(source, target, env): out_dir = '.' # add our output locations + html_dir = None for (k, v) in output_formats.iteritems(): if data.get("GENERATE_" + k, v[0]).upper() == "YES": dir = env.Dir( os.path.join(source[0].dir.abspath, out_dir, data.get(k + "_OUTPUT", v[1])) ) + if k == "HTML" : html_dir = dir dir.sources = source node = env.File( os.path.join(dir.abspath, k.lower()+".stamp" ) ) targets.append(node) if env.GetOption('clean'): targets.append(dir) - if data.has_key("GENERATE_TAGFILE"): + if data.has_key("GENERATE_TAGFILE") and html_dir: targets.append(env.File( os.path.join(source[0].dir.abspath, data["GENERATE_TAGFILE"]) )) + if data.get("SEARCHENGINE","NO").upper() == "YES": + targets.append(env.File( os.path.join(html_dir.abspath, "search.idx") )) + # don't clobber targets for node in targets: env.Precious(node) @@ -245,8 +301,8 @@ def DoxyGenerator(source, target, env, for_signature): data = DoxyfileParse(env, source[0].abspath) - actions = [ env.Action("cd ${SOURCE.dir} && TOPDIR=%s ${DOXYGEN} ${SOURCE.file}" - % (relpath(source[0].dir.abspath, env.Dir('#').abspath),)) ] + actions = [ SCons.Action.Action("cd ${SOURCE.dir} && TOPDIR=%s ${DOXYGEN} ${SOURCE.file}" + % (relpath(source[0].dir.abspath, env.Dir('#').abspath),)) ] # This will add automatic 'installdox' calls. # @@ -266,7 +322,7 @@ def DoxyGenerator(source, target, env, for_signature): # If for any referenced tagfile no url can be found, 'installdox' # will *not* be called and a warning about the missing url is # generated. - + if data.get('GENERATE_HTML','YES').upper() == "YES": output_dir = os.path.normpath(os.path.join( source[0].dir.abspath, data.get("OUTPUT_DIRECTORY","."), @@ -285,16 +341,16 @@ def DoxyGenerator(source, target, env, for_signature): if args is not None and url: args.append("-l %s@%s" % ( os.path.basename(tagfile), url )) if args: - actions.append(env.Action('cd %s && ./installdox %s' % (output_dir, " ".join(args)))) - - actions.append(env.Action([ "touch $TARGETS" ])) + actions.append(SCons.Action.Action('cd %s && ./installdox %s' % (output_dir, " ".join(args)))) + + actions.append(SCons.Action.Action([ "touch $TARGETS" ])) return actions def generate(env): """ Add builders and construction variables for the - Doxygen tool. This is currently for Doxygen 1.4.6. + Doxygen tool. This is currently for Doxygen 1.4.6. """ doxyfile_scanner = env.Scanner( DoxySourceScan,