Blame doc/external.doc

Packit Service 50c9f2
/******************************************************************************
Packit Service 50c9f2
 *
Packit Service 50c9f2
 * 
Packit Service 50c9f2
 *
Packit Service 50c9f2
 * Copyright (C) 1997-2015 by Dimitri van Heesch.
Packit Service 50c9f2
 *
Packit Service 50c9f2
 * Permission to use, copy, modify, and distribute this software and its
Packit Service 50c9f2
 * documentation under the terms of the GNU General Public License is hereby 
Packit Service 50c9f2
 * granted. No representations are made about the suitability of this software 
Packit Service 50c9f2
 * for any purpose. It is provided "as is" without express or implied warranty.
Packit Service 50c9f2
 * See the GNU General Public License for more details.
Packit Service 50c9f2
 *
Packit Service 50c9f2
 * Documents produced by Doxygen are derivative works derived from the
Packit Service 50c9f2
 * input used in their production; they are not affected by this license.
Packit Service 50c9f2
 *
Packit Service 50c9f2
 */
Packit Service 50c9f2
/*! \page external Linking to external documentation
Packit Service 50c9f2
Packit Service 50c9f2
If your project depends on external libraries or tools, there are several 
Packit Service 50c9f2
reasons to not include all sources for these with every run of doxygen:
Packit Service 50c9f2
Packit Service 50c9f2
Packit Service 50c9f2
Disk space:
Some documentation may be available outside of the output
Packit Service 50c9f2
    directory of doxygen already, for instance somewhere on the web. 
Packit Service 50c9f2
    You may want to link to these pages instead of generating the documentation 
Packit Service 50c9f2
    in your local output directory.
Packit Service 50c9f2
Compilation speed:
External projects typically have a different update
Packit Service 50c9f2
    frequency from your own project. It does not make much sense to let doxygen 
Packit Service 50c9f2
    parse the sources for these external project over and over again, even if 
Packit Service 50c9f2
    nothing has changed.
Packit Service 50c9f2
Memory:
For very large source trees, letting doxygen parse all sources
Packit Service 50c9f2
    may simply take too much of your system's memory. By dividing the sources 
Packit Service 50c9f2
    into several "packages", the sources of one package can be parsed by 
Packit Service 50c9f2
    doxygen, while all other packages that this package depends on, are 
Packit Service 50c9f2
    linked in externally. This saves a lot of memory.
Packit Service 50c9f2
Availability:
For some projects that are documented with doxygen,
Packit Service 50c9f2
    the sources may just not be available.
Packit Service 50c9f2
Copyright issues:
If the external
Packit Service 50c9f2
    package and its documentation are copyright someone else, it may be
Packit Service 50c9f2
    better - or even necessary - to reference it rather than include a
Packit Service 50c9f2
    copy of it with your project's documentation.  When the author forbids
Packit Service 50c9f2
    redistribution, this is necessary.  If the author requires compliance
Packit Service 50c9f2
    with some license condition as a precondition of redistribution, and
Packit Service 50c9f2
    you do not want to be bound by those conditions, referring to their
Packit Service 50c9f2
    copy of their documentation is preferable to including a copy.
Packit Service 50c9f2
Packit Service 50c9f2
Packit Service 50c9f2
Packit Service 50c9f2
If any of the above apply, you can use doxygen's tag file mechanism.
Packit Service 50c9f2
A tag file is basically a compact representation of the entities found in the
Packit Service 50c9f2
external sources. Doxygen can both generate and read tag files.
Packit Service 50c9f2
Packit Service 50c9f2
To generate a tag file for your project, simply put the name of the
Packit Service 50c9f2
tag file after the \ref cfg_generate_tagfile "GENERATE_TAGFILE" option in 
Packit Service 50c9f2
the configuration file. 
Packit Service 50c9f2
Packit Service 50c9f2
To combine the output of one or more external projects with your own project 
Packit Service 50c9f2
you should specify the name of the tag files after 
Packit Service 50c9f2
the \ref cfg_tagfiles "TAGFILES" option in the configuration file.
Packit Service 50c9f2
Packit Service 50c9f2
A tag file typically only contains a relative location of the documentation from the
Packit Service 50c9f2
point where doxygen was run. So when you include a tag file in other project 
Packit Service 50c9f2
you have to specify where the external documentation is located in relation this project.
Packit Service 50c9f2
You can do this in the configuration file by assigning the (relative) location to the
Packit Service 50c9f2
tag files specified after the \ref cfg_tagfiles "TAGFILES" configuration
Packit Service 50c9f2
option. If you use a relative path it should be relative with respect to 
Packit Service 50c9f2
the directory where the HTML output of your project is generated; so a relative path
Packit Service 50c9f2
from the HTML output directory of a project to the HTML output of the other project that 
Packit Service 50c9f2
is linked to.
Packit Service 50c9f2
Packit Service 50c9f2
\par Example: 
Packit Service 50c9f2
Suppose you have a project \c proj that uses two external 
Packit Service 50c9f2
projects called \c ext1 and \c ext2.
Packit Service 50c9f2
The directory structure looks as follows:
Packit Service 50c9f2
Packit Service 50c9f2
\par
Packit Service 50c9f2
\verbatim
Packit Service 50c9f2
<root>
Packit Service 50c9f2
  +- proj
Packit Service 50c9f2
  |   +- html               HTML output directory for proj
Packit Service 50c9f2
  |   +- src                sources for proj
Packit Service 50c9f2
  |   |- proj.cpp
Packit Service 50c9f2
  +- ext1
Packit Service 50c9f2
  |   +- html               HTML output directory for ext1
Packit Service 50c9f2
  |   |- ext1.tag           tag file for ext1
Packit Service 50c9f2
  +- ext2
Packit Service 50c9f2
  |   +- html               HTML output directory for ext2
Packit Service 50c9f2
  |   |- ext2.tag           tag file for ext2
Packit Service 50c9f2
  |- proj.cfg               doxygen configuration file for proj
Packit Service 50c9f2
  |- ext1.cfg               doxygen configuration file for ext1
Packit Service 50c9f2
  |- ext2.cfg               doxygen configuration file for ext2
Packit Service 50c9f2
\endverbatim
Packit Service 50c9f2
Packit Service 50c9f2
\par
Packit Service 50c9f2
Then the relevant parts of the configuration files look as follows:
Packit Service 50c9f2
\par
Packit Service 50c9f2
proj.cfg:
Packit Service 50c9f2
\verbatim
Packit Service 50c9f2
OUTPUT_DIRECTORY  = proj
Packit Service 50c9f2
INPUT             = proj/src
Packit Service 50c9f2
TAGFILES          = ext1/ext1.tag=../../ext1/html \
Packit Service 50c9f2
                    ext2/ext2.tag=../../ext2/html 
Packit Service 50c9f2
\endverbatim 
Packit Service 50c9f2
ext1.cfg:
Packit Service 50c9f2
\verbatim
Packit Service 50c9f2
OUTPUT_DIRECTORY  = ext1
Packit Service 50c9f2
GENERATE_TAGFILE  = ext1/ext1.tag 
Packit Service 50c9f2
\endverbatim 
Packit Service 50c9f2
ext2.cfg:
Packit Service 50c9f2
\verbatim
Packit Service 50c9f2
OUTPUT_DIRECTORY  = ext2
Packit Service 50c9f2
GENERATE_TAGFILE  = ext2/ext2.tag
Packit Service 50c9f2
\endverbatim
Packit Service 50c9f2
Packit Service 50c9f2
\htmlonly
Packit Service 50c9f2
Go to the next section or return to the
Packit Service 50c9f2
 index.
Packit Service 50c9f2
\endhtmlonly
Packit Service 50c9f2
Packit Service 50c9f2
*/