1de51fbc6f
* doc/xml/manual/documentation_hacking.xml: Adjust link to docbook.org. From-SVN: r258636
1183 lines
34 KiB
XML
1183 lines
34 KiB
XML
<section xmlns="http://docbook.org/ns/docbook" version="5.0"
|
|
xml:id="appendix.porting.doc" xreflabel="Documentation Hacking">
|
|
<?dbhtml filename="documentation_hacking.html"?>
|
|
|
|
<info><title>Writing and Generating Documentation</title>
|
|
<keywordset>
|
|
<keyword>ISO C++</keyword>
|
|
<keyword>documentation</keyword>
|
|
<keyword>style</keyword>
|
|
<keyword>docbook</keyword>
|
|
<keyword>doxygen</keyword>
|
|
</keywordset>
|
|
</info>
|
|
|
|
<section xml:id="doc.intro">
|
|
<info>
|
|
<title>Introduction</title>
|
|
</info>
|
|
<para>
|
|
Documentation for the GNU C++ Library is created from three
|
|
independent sources: a manual, a FAQ, and an API reference.
|
|
</para>
|
|
<para>
|
|
The sub-directory <filename class="directory">doc</filename>
|
|
within the main source directory contains
|
|
<filename>Makefile.am</filename> and
|
|
<filename>Makefile.in</filename>, which provide rules for
|
|
generating documentation, described in excruciating detail
|
|
below. The <filename class="directory">doc</filename>
|
|
sub-directory also contains three directories: <filename
|
|
class="directory">doxygen</filename>, which contains scripts and
|
|
fragments for <command>doxygen</command>, <filename
|
|
class="directory">html</filename>, which contains an html
|
|
version of the manual, and <filename
|
|
class="directory">xml</filename>, which contains an xml version
|
|
of the manual.
|
|
</para>
|
|
<para>
|
|
Diverging from established documentation conventions in the rest
|
|
of the GCC project, libstdc++ does not use Texinfo as a markup
|
|
language. Instead, Docbook is used to create the manual and the
|
|
FAQ, and Doxygen is used to construct the API
|
|
reference. Although divergent, this conforms to the GNU Project
|
|
recommendations as long as the output is of sufficient quality,
|
|
as per
|
|
<link xmlns:xlink="http://www.w3.org/1999/xlink"
|
|
xlink:href="http://www.gnu.org/prep/standards/standards.html#Documentation">
|
|
GNU Manuals</link>.
|
|
</para>
|
|
</section>
|
|
|
|
<section xml:id="doc.generation">
|
|
<info>
|
|
<title>Generating Documentation</title>
|
|
</info>
|
|
|
|
<para>
|
|
Certain Makefile rules are required by the GNU Coding
|
|
Standards. These standard rules generate HTML, PDF, XML, or man
|
|
files. For each of the generative rules, there is an additional
|
|
install rule that is used to install any generated documentation
|
|
files into the prescribed installation directory. Files are
|
|
installed into <filename class="directory">share/doc</filename>
|
|
or <filename class="directory">share/man</filename> directories.
|
|
</para>
|
|
|
|
<para>
|
|
The standard Makefile rules are conditionally supported, based
|
|
on the results of examining the host environment for
|
|
prerequisites at configuration time. If requirements are not
|
|
found, the rule is aliased to a dummy rule that does nothing,
|
|
and produces no documentation. If the requirements are found,
|
|
the rule forwards to a private rule that produces the requested
|
|
documentation.
|
|
</para>
|
|
|
|
<para>
|
|
For more details on what prerequisites were found and where,
|
|
please consult the file <filename>config.log</filename> in the
|
|
libstdc++ build directory. Compare this log to what is expected
|
|
for the relevant Makefile conditionals:
|
|
<literal>BUILD_INFO</literal>, <literal>BUILD_XML</literal>,
|
|
<literal>BUILD_HTML</literal>, <literal>BUILD_MAN</literal>,
|
|
<literal>BUILD_PDF</literal>, and <literal>BUILD_EPUB</literal>.
|
|
</para>
|
|
|
|
<para>
|
|
Supported Makefile rules:
|
|
</para>
|
|
|
|
<variablelist>
|
|
<varlistentry>
|
|
<term>
|
|
<emphasis>make html</emphasis>
|
|
</term>
|
|
<term>
|
|
<emphasis>make install-html</emphasis>
|
|
</term>
|
|
<listitem>
|
|
<para>
|
|
Generates multi-page HTML documentation, and installs it
|
|
in the following directories:
|
|
</para>
|
|
<para>
|
|
<filename>doc/libstdc++/libstdc++-api.html</filename>
|
|
</para>
|
|
<para>
|
|
<filename>doc/libstdc++/libstdc++-manual.html</filename>
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term>
|
|
<emphasis>make pdf</emphasis>
|
|
</term>
|
|
<term>
|
|
<emphasis>make install-pdf</emphasis>
|
|
</term>
|
|
<listitem>
|
|
<para>
|
|
Generates indexed PDF documentation, and installs it as
|
|
the following files:
|
|
</para>
|
|
<para>
|
|
<filename>doc/libstdc++/libstdc++-api.pdf</filename>
|
|
</para>
|
|
<para>
|
|
<filename>doc/libstdc++/libstdc++-manual.pdf</filename>
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term>
|
|
<emphasis>make man</emphasis>
|
|
</term>
|
|
<term>
|
|
<emphasis>make install-man</emphasis>
|
|
</term>
|
|
<listitem>
|
|
<para>
|
|
Generates man pages, and installs it in the following directory:
|
|
</para>
|
|
<para>
|
|
<filename class="directory">man/man3/</filename>
|
|
</para>
|
|
<para>
|
|
The generated man pages are namespace-qualified, so to look at
|
|
the man page for <classname>vector</classname>, one would use
|
|
<command>man std::vector</command>.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term>
|
|
<emphasis>make epub</emphasis>
|
|
</term>
|
|
<term>
|
|
<emphasis>make install-epub</emphasis>
|
|
</term>
|
|
<listitem>
|
|
<para>
|
|
Generates documentation in the ebook/portable electronic
|
|
reader format called Epub, and installs it as the
|
|
following file.
|
|
</para>
|
|
<para>
|
|
<filename>doc/libstdc++/libstdc++-manual.epub</filename>
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term>
|
|
<emphasis>make xml</emphasis>
|
|
</term>
|
|
<term>
|
|
<emphasis>make install-xml</emphasis>
|
|
</term>
|
|
<listitem>
|
|
<para>
|
|
Generates single-file XML documentation, and installs it
|
|
as the following files:
|
|
</para>
|
|
<para>
|
|
<filename>doc/libstdc++/libstdc++-api-single.xml</filename>
|
|
</para>
|
|
<para>
|
|
<filename>doc/libstdc++/libstdc++-manual-single.xml</filename>
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
</variablelist>
|
|
|
|
<para>
|
|
Makefile rules for several other formats are explicitly not
|
|
supported, and are always aliased to dummy rules. These
|
|
unsupported formats are: <emphasis>info</emphasis>,
|
|
<emphasis>ps</emphasis>, and <emphasis>dvi</emphasis>.
|
|
</para>
|
|
</section>
|
|
|
|
<section xml:id="doc.doxygen"><info><title>Doxygen</title></info>
|
|
|
|
<section xml:id="doxygen.prereq"><info><title>Prerequisites</title></info>
|
|
|
|
<table frame="all" xml:id="table.doxygen_prereq">
|
|
<title>Doxygen Prerequisites</title>
|
|
|
|
<tgroup cols="3" align="center" colsep="1" rowsep="1">
|
|
<colspec colname="c1"/>
|
|
<colspec colname="c2"/>
|
|
<colspec colname="c3"/>
|
|
|
|
<thead>
|
|
<row>
|
|
<entry>Tool</entry>
|
|
<entry>Version</entry>
|
|
<entry>Required By</entry>
|
|
</row>
|
|
</thead>
|
|
|
|
<tbody>
|
|
|
|
<row>
|
|
<entry>coreutils</entry>
|
|
<entry>8.5</entry>
|
|
<entry>all</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>bash</entry>
|
|
<entry>4.1</entry>
|
|
<entry>all</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>doxygen</entry>
|
|
<entry>1.7.6.1</entry>
|
|
<entry>all</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>graphviz</entry>
|
|
<entry>2.26</entry>
|
|
<entry>graphical hierarchies</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>pdflatex</entry>
|
|
<entry>2007-59</entry>
|
|
<entry>pdf output</entry>
|
|
</row>
|
|
|
|
</tbody>
|
|
</tgroup>
|
|
</table>
|
|
|
|
|
|
<para>
|
|
Prerequisite tools are Bash 2.0 or later,
|
|
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.doxygen.org">Doxygen</link>, and
|
|
the <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.gnu.org/software/coreutils/">GNU
|
|
coreutils</link>. (GNU versions of find, xargs, and possibly
|
|
sed and grep are used, just because the GNU versions make
|
|
things very easy.)
|
|
</para>
|
|
|
|
<para>
|
|
To generate the pretty pictures and hierarchy
|
|
graphs, the
|
|
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.graphviz.org">Graphviz</link> package
|
|
will need to be installed. For PDF
|
|
output, <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.tug.org/applications/pdftex/">
|
|
pdflatex</link> is required as well as a number of TeX packages
|
|
such as <package>texlive-xtab</package> and
|
|
<package>texlive-tocloft</package>.
|
|
</para>
|
|
|
|
<para>
|
|
Be warned the PDF file generated via doxygen is extremely
|
|
large. At last count, the PDF file is over three thousand
|
|
pages. Generating this document taxes the underlying TeX
|
|
formatting system, and will require the expansion of TeX's memory
|
|
capacity. Specifically, the <literal>pool_size</literal>
|
|
variable in the configuration file <filename>texmf.cnf</filename> may
|
|
need to be increased by a minimum factor of two.
|
|
</para>
|
|
</section>
|
|
|
|
<section xml:id="doxygen.rules"><info><title>Generating the Doxygen Files</title></info>
|
|
|
|
<para>
|
|
The following Makefile rules run Doxygen to generate HTML
|
|
docs, XML docs, XML docs as a single file, PDF docs, and the
|
|
man pages. These rules are not conditional! If the required
|
|
tools are not found, or are the wrong versions, the rule may
|
|
end in an error.
|
|
</para>
|
|
|
|
<para>
|
|
<screen><userinput>make doc-html-doxygen</userinput></screen>
|
|
</para>
|
|
|
|
<para>
|
|
<screen><userinput>make doc-xml-doxygen</userinput></screen>
|
|
</para>
|
|
|
|
<para>
|
|
<screen><userinput>make doc-xml-single-doxygen</userinput></screen>
|
|
</para>
|
|
|
|
<para>
|
|
<screen><userinput>make doc-pdf-doxygen</userinput></screen>
|
|
</para>
|
|
|
|
<para>
|
|
<screen><userinput>make doc-man-doxygen</userinput></screen>
|
|
</para>
|
|
|
|
<para>
|
|
Generated files are output into separate sub directories of
|
|
<filename class="directory">doc/doxygen/</filename> in the
|
|
build directory, based on the output format. For instance, the
|
|
HTML docs will be in <filename class="directory">doc/doxygen/html</filename>.
|
|
</para>
|
|
|
|
<para>
|
|
Careful observers will see that the Makefile rules simply call
|
|
a script from the source tree, <filename>run_doxygen</filename>, which
|
|
does the actual work of running Doxygen and then (most
|
|
importantly) massaging the output files. If for some reason
|
|
you prefer to not go through the Makefile, you can call this
|
|
script directly. (Start by passing <literal>--help</literal>.)
|
|
</para>
|
|
|
|
<para>
|
|
If you wish to tweak the Doxygen settings, do so by editing
|
|
<filename>doc/doxygen/user.cfg.in</filename>. Notes to fellow
|
|
library hackers are written in triple-# comments.
|
|
</para>
|
|
|
|
</section>
|
|
|
|
<section xml:id="doxygen.debug">
|
|
<info><title>Debugging Generation</title></info>
|
|
|
|
<para>
|
|
Sometimes, mis-configuration of the pre-requisite tools can
|
|
lead to errors when attempting to build the
|
|
documentation. Here are some of the obvious errors, and ways
|
|
to fix some common issues that may appear quite cryptic.
|
|
</para>
|
|
|
|
<para>
|
|
First, if using a rule like <code>make pdf</code>, try to
|
|
narrow down the scope of the error to either docbook
|
|
(<code>make doc-pdf-docbook</code>) or doxygen (<code>make
|
|
doc-pdf-doxygen</code>).
|
|
</para>
|
|
<para>
|
|
Working on the doxygen path only, closely examine the
|
|
contents of the following build directory: <filename
|
|
class="directory">build/target/libstdc++-v3/doc/doxygen/latex</filename>.
|
|
Pay attention to three files enclosed within, annotated as follows.
|
|
</para>
|
|
<itemizedlist>
|
|
|
|
<listitem>
|
|
<para>
|
|
<emphasis>refman.tex</emphasis>
|
|
</para>
|
|
|
|
<para>
|
|
The actual latex file, or partial latex file. This is generated
|
|
via <command>doxygen</command>, and is the LaTeX version of the
|
|
Doxygen XML file <filename>libstdc++-api.xml</filename>. Go to a specific
|
|
line, and look at the generated LaTeX, and try to deduce what
|
|
markup in <filename>libstdc++-api.xml</filename> is causing it.
|
|
</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>
|
|
<emphasis>refman.log</emphasis>
|
|
</para>
|
|
|
|
<para>
|
|
A log created by <command>latex</command> as it processes the
|
|
<filename>refman.tex</filename> file. If generating the PDF fails
|
|
look at the end of this file for errors such as:
|
|
<screen>
|
|
! LaTeX Error: File `xtab.sty' not found.
|
|
</screen>
|
|
This indicates a required TeX package is missing. For the example
|
|
above the <package>texlive-xtab</package> package needs to be
|
|
installed.
|
|
</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>
|
|
<emphasis>refman.out</emphasis>
|
|
</para>
|
|
|
|
<para>
|
|
A log of the compilation of the converted LaTeX form to PDF. This
|
|
is a linear list, from the beginning of the
|
|
<filename>refman.tex</filename> file: the last entry of this file
|
|
should be the end of the LaTeX file. If it is truncated, then you
|
|
know that the last entry is the last part of the generated LaTeX
|
|
source file that is valid. Often this file contains an error with
|
|
a specific line number of <filename>refman.tex</filename> that is
|
|
incorrect, or will have clues at the end of the file with the dump
|
|
of the memory usage of LaTeX.
|
|
</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
|
|
<para>
|
|
If the error at hand is not obvious after examination, a
|
|
fall-back strategy is to start commenting out the doxygen
|
|
input sources, which can be found in
|
|
<filename>doc/doxygen/user.cfg.in</filename>, look for the
|
|
<literal>INPUT</literal> tag. Start by commenting out whole
|
|
directories of header files, until the offending header is
|
|
identified. Then, read the latex log files to try and find
|
|
surround text, and look for that in the offending header.
|
|
</para>
|
|
|
|
</section>
|
|
|
|
<section xml:id="doxygen.markup"><info><title>Markup</title></info>
|
|
|
|
|
|
<para>
|
|
In general, libstdc++ files should be formatted according to
|
|
the rules found in the
|
|
<link linkend="contrib.coding_style">Coding Standard</link>. Before
|
|
any doxygen-specific formatting tweaks are made, please try to
|
|
make sure that the initial formatting is sound.
|
|
</para>
|
|
|
|
<para>
|
|
Adding Doxygen markup to a file (informally called
|
|
<quote>doxygenating</quote>) is very simple. The Doxygen manual can be
|
|
found
|
|
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.stack.nl/~dimitri/doxygen/download.html#latestman">here</link>.
|
|
We try to use a very-recent version of Doxygen.
|
|
</para>
|
|
|
|
<para>
|
|
For classes, use
|
|
<classname>deque</classname>/<classname>vector</classname>/<classname>list</classname>
|
|
and <classname>std::pair</classname> as examples. For
|
|
functions, see their member functions, and the free functions
|
|
in <filename class="headerfile">stl_algobase.h</filename>. Member
|
|
functions of other container-like types should read similarly to
|
|
these member functions.
|
|
</para>
|
|
|
|
<para>
|
|
Some commentary to accompany
|
|
the first list in the <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.stack.nl/~dimitri/doxygen/manual/docblocks.html">Special
|
|
Documentation Blocks</link> section of the Doxygen manual:
|
|
</para>
|
|
|
|
<orderedlist inheritnum="ignore" continuation="restarts">
|
|
<listitem>
|
|
<para>For longer comments, use the Javadoc style...</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>
|
|
...not the Qt style. The intermediate *'s are preferred.
|
|
</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>
|
|
Use the triple-slash style only for one-line comments (the
|
|
<quote>brief</quote> mode).
|
|
</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>
|
|
This is disgusting. Don't do this.
|
|
</para>
|
|
</listitem>
|
|
</orderedlist>
|
|
|
|
<para>
|
|
Some specific guidelines:
|
|
</para>
|
|
|
|
<para>
|
|
Use the @-style of commands, not the !-style. Please be
|
|
careful about whitespace in your markup comments. Most of the
|
|
time it doesn't matter; doxygen absorbs most whitespace, and
|
|
both HTML and *roff are agnostic about whitespace. However,
|
|
in <pre> blocks and @code/@endcode sections, spacing can
|
|
have <quote>interesting</quote> effects.
|
|
</para>
|
|
|
|
<para>
|
|
Use either kind of grouping, as
|
|
appropriate. <filename>doxygroups.cc</filename> exists for this
|
|
purpose. See <filename class="headerfile">stl_iterator.h</filename>
|
|
for a good example of the <quote>other</quote> kind of grouping.
|
|
</para>
|
|
|
|
<para>
|
|
Please use markup tags like @p and @a when referring to things
|
|
such as the names of function parameters. Use @e for emphasis
|
|
when necessary. Use @c to refer to other standard names.
|
|
(Examples of all these abound in the present code.)
|
|
</para>
|
|
|
|
<para>
|
|
Complicated math functions should use the multi-line format.
|
|
An example from <filename class="headerfile">random.h</filename>:
|
|
</para>
|
|
|
|
<para>
|
|
<literallayout class="normal">
|
|
/**
|
|
* @brief A model of a linear congruential random number generator.
|
|
*
|
|
* @f[
|
|
* x_{i+1}\leftarrow(ax_{i} + c) \bmod m
|
|
* @f]
|
|
*/
|
|
</literallayout>
|
|
</para>
|
|
|
|
<para>
|
|
One area of note is the markup required for
|
|
<literal>@file</literal> markup in header files. Two details
|
|
are important: for filenames that have the same name in
|
|
multiple directories, include part of the installed path to
|
|
disambiguate. For example:
|
|
</para>
|
|
|
|
<para>
|
|
<literallayout class="normal">
|
|
/** @file debug/vector
|
|
* This file is a GNU debug extension to the Standard C++ Library.
|
|
*/
|
|
</literallayout>
|
|
</para>
|
|
|
|
<para>
|
|
The other relevant detail for header files is the use of a
|
|
libstdc++-specific doxygen alias that helps distinguish
|
|
between public header files (like <filename class="headerfile">random</filename>)
|
|
from implementation or private header files (like
|
|
<filename class="headerfile">bits/c++config.h</filename>.) This alias is spelled
|
|
<literal>@headername</literal> and can take one or two
|
|
arguments that detail the public header file or files that
|
|
should be included to use the contents of the file. All header
|
|
files that are not intended for direct inclusion must use
|
|
<literal>headername</literal> in the <literal>file</literal>
|
|
block. An example:
|
|
</para>
|
|
|
|
<para>
|
|
<literallayout class="normal">
|
|
/** @file bits/basic_string.h
|
|
* This is an internal header file, included by other library headers.
|
|
* Do not attempt to use it directly. @headername{string}
|
|
*/
|
|
</literallayout>
|
|
</para>
|
|
|
|
<para>
|
|
Be careful about using certain, special characters when
|
|
writing Doxygen comments. Single and double quotes, and
|
|
separators in filenames are two common trouble spots. When in
|
|
doubt, consult the following table.
|
|
</para>
|
|
|
|
<table frame="all" xml:id="table.doxygen_cmp">
|
|
<title>HTML to Doxygen Markup Comparison</title>
|
|
|
|
<tgroup cols="2" align="left" colsep="1" rowsep="1">
|
|
<colspec colname="c1"/>
|
|
<colspec colname="c2"/>
|
|
|
|
<thead>
|
|
<row>
|
|
<entry>HTML</entry>
|
|
<entry>Doxygen</entry>
|
|
</row>
|
|
</thead>
|
|
|
|
<tbody>
|
|
<row>
|
|
<entry>\</entry>
|
|
<entry>\\</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>"</entry>
|
|
<entry>\"</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>'</entry>
|
|
<entry>\'</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><i></entry>
|
|
<entry>@a word</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><b></entry>
|
|
<entry>@b word</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><code></entry>
|
|
<entry>@c word</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><em></entry>
|
|
<entry>@a word</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><em></entry>
|
|
<entry><em>two words or more</em></entry>
|
|
</row>
|
|
</tbody>
|
|
|
|
</tgroup>
|
|
</table>
|
|
|
|
|
|
</section>
|
|
|
|
</section>
|
|
|
|
<section xml:id="doc.docbook"><info><title>Docbook</title></info>
|
|
|
|
|
|
<section xml:id="docbook.prereq"><info><title>Prerequisites</title></info>
|
|
|
|
|
|
<table frame="all" xml:id="table.docbook_prereq">
|
|
<title>Docbook Prerequisites</title>
|
|
|
|
<tgroup cols="3" align="center" colsep="1" rowsep="1">
|
|
<colspec colname="c1"/>
|
|
<colspec colname="c2"/>
|
|
<colspec colname="c3"/>
|
|
|
|
<thead>
|
|
<row>
|
|
<entry>Tool</entry>
|
|
<entry>Version</entry>
|
|
<entry>Required By</entry>
|
|
</row>
|
|
</thead>
|
|
|
|
<tbody>
|
|
|
|
<row>
|
|
<entry>docbook5-style-xsl</entry>
|
|
<entry>1.76.1</entry>
|
|
<entry>all</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>xsltproc</entry>
|
|
<entry>1.1.26</entry>
|
|
<entry>all</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>xmllint</entry>
|
|
<entry>2.7.7</entry>
|
|
<entry>validation</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>dblatex</entry>
|
|
<entry>0.3</entry>
|
|
<entry>pdf output</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>pdflatex</entry>
|
|
<entry>2007-59</entry>
|
|
<entry>pdf output</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>docbook2X</entry>
|
|
<entry>0.8.8</entry>
|
|
<entry>info output</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>epub3 stylesheets</entry>
|
|
<entry>b3</entry>
|
|
<entry>epub output</entry>
|
|
</row>
|
|
|
|
</tbody>
|
|
</tgroup>
|
|
</table>
|
|
|
|
<para>
|
|
Editing the DocBook sources requires an XML editor. Many
|
|
exist: some notable options
|
|
include <command>emacs</command>, <application>Kate</application>,
|
|
or <application>Conglomerate</application>.
|
|
</para>
|
|
|
|
<para>
|
|
Some editors support special <quote>XML Validation</quote>
|
|
modes that can validate the file as it is
|
|
produced. Recommended is the <command>nXML Mode</command>
|
|
for <command>emacs</command>.
|
|
</para>
|
|
|
|
<para>
|
|
Besides an editor, additional DocBook files and XML tools are
|
|
also required.
|
|
</para>
|
|
|
|
<para>
|
|
Access to the DocBook 5.0 stylesheets and schema is required. The
|
|
stylesheets are usually packaged by vendor, in something
|
|
like <filename>docbook5-style-xsl</filename>. To exactly match
|
|
generated output, please use a version of the stylesheets
|
|
equivalent
|
|
to <filename>docbook5-style-xsl-1.75.2-3</filename>. The
|
|
installation directory for this package corresponds to
|
|
the <literal>XSL_STYLE_DIR</literal>
|
|
in <filename>doc/Makefile.am</filename> and defaults
|
|
to <filename class="directory">/usr/share/sgml/docbook/xsl-ns-stylesheets</filename>.
|
|
</para>
|
|
|
|
<para>
|
|
For processing XML, an XSLT processor and some style
|
|
sheets are necessary. Defaults are <command>xsltproc</command>
|
|
provided by <filename>libxslt</filename>.
|
|
</para>
|
|
|
|
<para>
|
|
For validating the XML document, you'll need
|
|
something like <command>xmllint</command> and access to the
|
|
relevant DocBook schema. These are provided
|
|
by a vendor package like <filename>libxml2</filename> and <filename>docbook5-schemas-5.0-4</filename>
|
|
</para>
|
|
|
|
<para>
|
|
For PDF output, something that transforms valid Docbook XML to PDF is
|
|
required. Possible solutions include <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://dblatex.sourceforge.net">dblatex</link>,
|
|
<command>xmlto</command>, or <command>prince</command>. Of
|
|
these, <command>dblatex</command> is the default.
|
|
Please consult the <email>libstdc++@gcc.gnu.org</email> list when
|
|
preparing printed manuals for current best practice and
|
|
suggestions.
|
|
</para>
|
|
|
|
<para>
|
|
For Texinfo output, something that transforms valid Docbook
|
|
XML to Texinfo is required. The default choice is <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://docbook2x.sourceforge.net/">docbook2X</link>.
|
|
</para>
|
|
|
|
<para>
|
|
For epub output, the <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://sourceforge.net/projects/docbook/files/epub3/">stylesheets</link> for EPUB3 are required. These stylesheets are still in development. To validate the created file, <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://github.com/IDPF/epubcheck">epubcheck</link> is necessary.
|
|
</para>
|
|
</section>
|
|
|
|
<section xml:id="docbook.rules"><info><title>Generating the DocBook Files</title></info>
|
|
|
|
|
|
<para>
|
|
The following Makefile rules generate (in order): an HTML
|
|
version of all the DocBook documentation, a PDF version of the
|
|
same, and a single XML document. These rules are not
|
|
conditional! If the required tools are not found, or are the
|
|
wrong versions, the rule may end in an error.
|
|
</para>
|
|
|
|
<para>
|
|
<screen><userinput>make doc-html-docbook</userinput></screen>
|
|
</para>
|
|
|
|
<para>
|
|
<screen><userinput>make doc-pdf-docbook</userinput></screen>
|
|
</para>
|
|
|
|
<para>
|
|
<screen><userinput>make doc-xml-single-docbook</userinput></screen>
|
|
</para>
|
|
|
|
<para>
|
|
Generated files are output into separate sub directores of
|
|
<filename class="directory">doc/docbook/</filename> in the
|
|
build directory, based on the output format. For instance, the
|
|
HTML docs will be in <filename
|
|
class="directory">doc/docbook/html</filename>.
|
|
</para>
|
|
|
|
<para>
|
|
If the Docbook stylesheets are installed in a custom location,
|
|
one can use the variable <literal>XSL_STYLE_DIR</literal> to
|
|
override the Makefile defaults. For example:
|
|
</para>
|
|
|
|
<screen>
|
|
<userinput>
|
|
make <literal>XSL_STYLE_DIR="/usr/share/xml/docbook/stylesheet/nwalsh"</literal> doc-html-docbook
|
|
</userinput>
|
|
</screen>
|
|
|
|
</section>
|
|
|
|
<section xml:id="docbook.debug">
|
|
<info><title>Debugging Generation</title></info>
|
|
|
|
<para>
|
|
Sometimes, mis-configuration of the pre-requisite tools can
|
|
lead to errors when attempting to build the
|
|
documentation. Here are some of the obvious errors, and ways
|
|
to fix some common issues that may appear quite cryptic.
|
|
</para>
|
|
|
|
<para>
|
|
First, if using a rule like <code>make pdf</code>, try to
|
|
narrow down the scope of the error to either docbook
|
|
(<code>make doc-pdf-docbook</code>) or doxygen (<code>make
|
|
doc-pdf-doxygen</code>).
|
|
</para>
|
|
|
|
<para>
|
|
Working on the docbook path only, closely examine the
|
|
contents of the following build directory:
|
|
<filename class="directory">build/target/libstdc++-v3/doc/docbook/latex</filename>.
|
|
Pay attention to three files enclosed within, annotated as follows.
|
|
</para>
|
|
|
|
<itemizedlist>
|
|
|
|
<listitem>
|
|
<para>
|
|
<emphasis>spine.tex</emphasis>
|
|
</para>
|
|
|
|
<para>
|
|
The actual latex file, or partial latex file. This is generated
|
|
via <command>dblatex</command>, and is the LaTeX version of the
|
|
DocBook XML file <filename>spine.xml</filename>. Go to a specific
|
|
line, and look at the generated LaTeX, and try to deduce what
|
|
markup in <filename>spine.xml</filename> is causing it.
|
|
</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>
|
|
<emphasis>spine.out</emphasis>
|
|
</para>
|
|
|
|
<para>
|
|
A log of the conversion from the XML form to the LaTeX form. This
|
|
is a linear list, from the beginning of the
|
|
<filename>spine.xml</filename> file: the last entry of this file
|
|
should be the end of the DocBook file. If it is truncated, then
|
|
you know that the last entry is the last part of the XML source
|
|
file that is valid. The error is after this point.
|
|
</para>
|
|
</listitem>
|
|
|
|
|
|
<listitem>
|
|
<para>
|
|
<emphasis>spine.log</emphasis>
|
|
</para>
|
|
|
|
<para>
|
|
A log of the compilation of the converted LaTeX form to pdf. This
|
|
is a linear list, from the beginning of the
|
|
<filename>spine.tex</filename> file: the last entry of this file
|
|
should be the end of the LaTeX file. If it is truncated, then you
|
|
know that the last entry is the last part of the generated LaTeX
|
|
source file that is valid. Often this file contains an error with
|
|
a specific line number of <filename>spine.tex</filename> that is
|
|
incorrect.
|
|
</para>
|
|
</listitem>
|
|
|
|
</itemizedlist>
|
|
|
|
<para>
|
|
If the error at hand is not obvious after examination, or if one
|
|
encounters the inscruitable <quote>Incomplete
|
|
\ifmmode</quote> error, a fall-back strategy is to start
|
|
commenting out parts of the XML document (regardless of what
|
|
this does to over-all document validity). Start by
|
|
commenting out each of the largest parts of the
|
|
<filename>spine.xml</filename> file, section by section,
|
|
until the offending section is identified.
|
|
</para>
|
|
|
|
|
|
</section>
|
|
|
|
<section xml:id="docbook.validation"><info><title>Editing and Validation</title></info>
|
|
|
|
<para>
|
|
After editing the xml sources, please make sure that the XML
|
|
documentation and markup is still valid. This can be
|
|
done easily, with the following validation rule:
|
|
</para>
|
|
|
|
<screen>
|
|
<userinput>make doc-xml-validate-docbook</userinput>
|
|
</screen>
|
|
|
|
<para>
|
|
This is equivalent to doing:
|
|
</para>
|
|
|
|
<screen>
|
|
<userinput>
|
|
xmllint --noout --valid <filename>xml/index.xml</filename>
|
|
</userinput>
|
|
</screen>
|
|
|
|
<para>
|
|
Please note that individual sections and chapters of the
|
|
manual can be validated by substituting the file desired for
|
|
<filename>xml/index.xml</filename> in the command
|
|
above. Reducing scope in this manner can be helpful when
|
|
validation on the entire manual fails.
|
|
</para>
|
|
|
|
<para>
|
|
All Docbook xml sources should always validate. No excuses!
|
|
</para>
|
|
|
|
</section>
|
|
|
|
<section xml:id="docbook.examples"><info><title>File Organization and Basics</title></info>
|
|
|
|
|
|
<literallayout class="normal">
|
|
<emphasis>Which files are important</emphasis>
|
|
|
|
All Docbook files are in the directory
|
|
libstdc++-v3/doc/xml
|
|
|
|
Inside this directory, the files of importance:
|
|
spine.xml - index to documentation set
|
|
manual/spine.xml - index to manual
|
|
manual/*.xml - individual chapters and sections of the manual
|
|
faq.xml - index to FAQ
|
|
api.xml - index to source level / API
|
|
|
|
All *.txml files are template xml files, i.e., otherwise empty files with
|
|
the correct structure, suitable for filling in with new information.
|
|
|
|
<emphasis>Canonical Writing Style</emphasis>
|
|
|
|
class template
|
|
function template
|
|
member function template
|
|
(via C++ Templates, Vandevoorde)
|
|
|
|
class in namespace std: allocator, not std::allocator
|
|
|
|
header file: iostream, not <iostream>
|
|
|
|
|
|
<emphasis>General structure</emphasis>
|
|
|
|
<set>
|
|
<book>
|
|
</book>
|
|
|
|
<book>
|
|
<chapter>
|
|
</chapter>
|
|
</book>
|
|
|
|
<book>
|
|
<part>
|
|
<chapter>
|
|
<section>
|
|
</section>
|
|
|
|
<sect1>
|
|
</sect1>
|
|
|
|
<sect1>
|
|
<sect2>
|
|
</sect2>
|
|
</sect1>
|
|
</chapter>
|
|
|
|
<chapter>
|
|
</chapter>
|
|
</part>
|
|
</book>
|
|
|
|
</set>
|
|
</literallayout>
|
|
</section>
|
|
|
|
<section xml:id="docbook.markup"><info><title>Markup By Example</title></info>
|
|
|
|
|
|
<para>
|
|
Complete details on Docbook markup can be found in the
|
|
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://tdg.docbook.org/tdg/5.0/ref-elements.html">DocBook Element Reference</link>.
|
|
An incomplete reference for HTML to Docbook conversion is
|
|
detailed in the table below.
|
|
</para>
|
|
|
|
<table frame="all" xml:id="table.docbook_cmp">
|
|
<title>HTML to Docbook XML Markup Comparison</title>
|
|
|
|
<tgroup cols="2" align="left" colsep="1" rowsep="1">
|
|
<colspec colname="c1"/>
|
|
<colspec colname="c2"/>
|
|
|
|
<thead>
|
|
<row>
|
|
<entry>HTML</entry>
|
|
<entry>Docbook</entry>
|
|
</row>
|
|
</thead>
|
|
|
|
<tbody>
|
|
<row>
|
|
<entry><p></entry>
|
|
<entry><para></entry>
|
|
</row>
|
|
<row>
|
|
<entry><pre></entry>
|
|
<entry><computeroutput>, <programlisting>,
|
|
<literallayout></entry>
|
|
</row>
|
|
<row>
|
|
<entry><ul></entry>
|
|
<entry><itemizedlist></entry>
|
|
</row>
|
|
<row>
|
|
<entry><ol></entry>
|
|
<entry><orderedlist></entry>
|
|
</row>
|
|
<row>
|
|
<entry><il></entry>
|
|
<entry><listitem></entry>
|
|
</row>
|
|
<row>
|
|
<entry><dl></entry>
|
|
<entry><variablelist></entry>
|
|
</row>
|
|
<row>
|
|
<entry><dt></entry>
|
|
<entry><term></entry>
|
|
</row>
|
|
<row>
|
|
<entry><dd></entry>
|
|
<entry><listitem></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><a href=""></entry>
|
|
<entry><ulink url=""></entry>
|
|
</row>
|
|
<row>
|
|
<entry><code></entry>
|
|
<entry><literal>, <programlisting></entry>
|
|
</row>
|
|
<row>
|
|
<entry><strong></entry>
|
|
<entry><emphasis></entry>
|
|
</row>
|
|
<row>
|
|
<entry><em></entry>
|
|
<entry><emphasis></entry>
|
|
</row>
|
|
<row>
|
|
<entry>"</entry>
|
|
<entry><quote></entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</table>
|
|
|
|
<para>
|
|
And examples of detailed markup for which there are no real HTML
|
|
equivalents are listed in the table below.
|
|
</para>
|
|
|
|
<table frame="all" xml:id="table.docbook_elem">
|
|
<title>Docbook XML Element Use</title>
|
|
|
|
<tgroup cols="2" align="left" colsep="1" rowsep="1">
|
|
<colspec colname="c1"/>
|
|
<colspec colname="c2"/>
|
|
|
|
<thead>
|
|
<row>
|
|
<entry>Element</entry>
|
|
<entry>Use</entry>
|
|
</row>
|
|
</thead>
|
|
|
|
<tbody>
|
|
<row>
|
|
<entry><structname></entry>
|
|
<entry><structname>char_traits</structname></entry>
|
|
</row>
|
|
<row>
|
|
<entry><classname></entry>
|
|
<entry><classname>string</classname></entry>
|
|
</row>
|
|
<row>
|
|
<entry><function></entry>
|
|
<entry>
|
|
<para><function>clear()</function></para>
|
|
<para><function>fs.clear()</function></para>
|
|
</entry>
|
|
</row>
|
|
<row>
|
|
<entry><type></entry>
|
|
<entry><type>long long</type></entry>
|
|
</row>
|
|
<row>
|
|
<entry><varname></entry>
|
|
<entry><varname>fs</varname></entry>
|
|
</row>
|
|
<row>
|
|
<entry><literal></entry>
|
|
<entry>
|
|
<para><literal>-Weffc++</literal></para>
|
|
<para><literal>rel_ops</literal></para>
|
|
</entry>
|
|
</row>
|
|
<row>
|
|
<entry><constant></entry>
|
|
<entry>
|
|
<para><constant>_GNU_SOURCE</constant></para>
|
|
<para><constant>3.0</constant></para>
|
|
</entry>
|
|
</row>
|
|
<row>
|
|
<entry><command></entry>
|
|
<entry><command>g++</command></entry>
|
|
</row>
|
|
<row>
|
|
<entry><errortext></entry>
|
|
<entry><errortext>In instantiation of</errortext></entry>
|
|
</row>
|
|
<row>
|
|
<entry><filename></entry>
|
|
<entry>
|
|
<para><filename class="headerfile">ctype.h</filename></para>
|
|
<para><filename class="directory">/home/gcc/build</filename></para>
|
|
<para><filename class="libraryfile">libstdc++.so</filename></para>
|
|
</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</table>
|
|
|
|
</section>
|
|
</section>
|
|
</section>
|