code: def DoxyEmitter(source, target, env):
     
     # possible output formats and their default values and output locations
     output_formats = {
        "HTML": ("YES", "html"),
        "LATEX": ("YES", "latex"),
        "RTF": ("NO", "rtf"),
        "MAN": ("YES", "man"),
        "XML": ("NO", "xml"),
     }
  
     data = DoxyfileParse(source[0].get_contents())
  
     targets = []
     out_dir = data.get("OUTPUT_DIRECTORY", ".")
     if not os.path.isabs(out_dir):
        conf_dir = os.path.dirname(str(source[0]))
        out_dir = os.path.join(conf_dir, out_dir)
  
     # add our output locations
     for (k, v) in output_formats.items():
        if data.get("GENERATE_" + k, v[0]) == "YES":
           targets.append(env.Dir( os.path.join(out_dir, data.get(k + "_OUTPUT", v[1]))) )
  
     # add the tag file if neccessary:
     tagfile = data.get("GENERATE_TAGFILE", "")
     if tagfile != "":
        if not os.path.isabs(tagfile):
           conf_dir = os.path.dirname(str(source[0]))
           tagfile = os.path.join(conf_dir, tagfile)
        targets.append(env.File(tagfile))
  
     # don't clobber targets
     for node in targets:
        env.Precious(node)
  
     # set up cleaning stuff
     for node in targets:
        env.Clean(node, node)
  
     return (targets, source)
docs: Doxygen Doxyfile emitter