Doxygen is a documentation system for C++, C, Java, Objective-C, IDL
(Corba and Microsoft flavors) and to some extent PHP, C# and D.

It can generate an on-line documentation browser (in HTML) and/or an
off-line reference manual (in $\mbox{\LaTeX}$ ) from a set of documented
source files. There is also support for generating output in RTF
(MS-Word), PostScript, hyperlinked PDF, compressed HTML, and Unix man
pages. The documentation is extracted directly from the sources, which
makes it much easier to keep the documentation consistent with the
source code.

You can configure doxygen to extract the code structure from
undocumented source files. This is very useful to quickly find your way
in large source distributions. You can also visualize the relations
between the various elements by means of include dependency graphs,
inheritance diagrams, and collaboration diagrams, which are all
generated automatically.

To take full advantage of doxygen's features the following additional
ports should be installed:

 - print/texlive for generating LaTeX, Postscript, and PDF output.
 - math/graphviz for the include dependency graphs, the graphical
   inheritance graphs, and the collaboration graphs.
 - print/ghostscript

Note:

When generating certain filenames (for example directory listing with
the html backend), doxygen uses an md5 sum of the source path.  This
is a problem for the ports framework, as the sources location can vary
(/usr/obj/ports/..., usr/ports/.../w-..., /usr/ports/mystuff/.../w-...).

This port has been modified so that when running doxygen, the
DOXYGEN_ENCODE_PATH_STRIP environment variable can be set to a prefix
to be stripped from a path before its md5 sum is calculated.  Ports
using doxygen should use "DOXYGEN_ENCODE_PATH_STRIP=${WRKSRC}".
