Writing Documentation
Introduction
This page describes which tools are available for the various types of documentation one can contribute to.
Doxygen
If you're describing an API, the best choice is probably Doxygen. Doxygen allows you to comment your C files and headers inline, and later generates documents from same. For a good example of how to use Doxygen, take a look at the X server Distributed Multihead X Design.
DocBook
Larger documents are maintained in DocBook/XML format. As of X11R7.6, almost all documentation have been converted from DocBook/SGML, Framemaker, troff, Linuxdoc and TeX to DocBook/XML. The doc/xorg-docs module contains general X Window System documentation, anything specific has been moved to the appropriate module.
Man Pages (troff with "man" macros)
Commands and public API in client-side libraries are documented in the traditional roff man page format which involves a significant learning curve.
Commands:
.\"
Comment: the rest of the line is a comment..TH
Text Header: This is the header of a line. It contains the name of the page in capital letters followed by the section the page is to be located in. Then it contains__vendorversion__
which is replaced by the vendor version when the system is built..SH
Section Header: Man pages contain several sections. Some are ordered according to a standard conventions. Their names are capitalized..B
: Boldface: Print following text in boldface..I
: Italic: Italic/underline the following text..P
: Paragraph: Start a new paragraph..PP
Double paragraph (?)..br
: Break: insert a linebreak..R
: Roman: Non-italic non-bold font- `.BR : alternating bold and regular font
- `.RB : alternating regular and bold font
.TP
Tabulator: May optionally be followed by a indentation width. The next line is indented normally, any lines following this line up to the next paragraph command (ie..SH
,.TP
,.P
are indented according to the number following the command relative to the normal indentation..fi
: (?).nf
: (?)- Characters
.
,-
,\
need to be escaped with a\
. Ie:\.
,\-
.
Man Page Skeleton
.TH THISCOMMAND 1 ''''vendorstring'''' .SH NAME thiscommand \- describe this command .SH SYNOPSIS .B "thiscommand" .RB [ -help ] .SH DESCRIPTION Here we describe what .I thiscommand does. .PP .SH OPTIONS The following options are supported: .TP .B \-h Help. .SH FILES .SH KNOWN BUGS .SH "SEE ALSO" OTHERCOMMAND(1)
One may add additional commands between DESCRIPTION and FILES section as fit.
Conditional Text
Just like C code is conditionally included using #ifdef, manual page text can be conditionally included as well. Use .if to test a variable and place the text between .ig and '..'.
.if !'x.VARNAME'x.' .ig If $(VARNAME) is empty, this text is shown ..
.if 'VARNAME'' .ig If $(VARNAME) is empty, this text is skipped ..
Current Module Documents (January 2014)
This table summarizes modules with User's documentation, Developer's documentation or functional specifications in DocBook/XML format. The DocBook/XML input format is converted to HTML, PDF, PS and plain text. When installed, the documentation input source (xml) is also installed as it can be read directly by platform help delivery system such as gnome-help.
Module | Dir | In Fmt | Tool | Out Fmt | Inst Fmt | Dist Fmt | Options |
app/xfs | doc | xml | xmlto | txt/ps/pdf/html | not installed | xml | enable-devel-docs |
app/xrx | specs | xml | xmlto | txt/ps/pdf/html | txt/ps/pdf/html/xml | xml | enable-specs |
doc/xorg-docs | general | xml | xmlto | txt/ps/pdf/html | txt/ps/pdf/html/xml | xml | enable-docs |
specs | enable-specs | ||||||
lib/libICE | doc | xml | xmlto | txt/ps/pdf/html | txt/ps/pdf/html/xml | xml | enable-docs |
specs | enable-specs | ||||||
lib/libSM | doc | xml | xmlto | txt/ps/pdf/html | txt/ps/pdf/html/xml | xml | enable-docs |
lib/libX11 | specs | xml | xmlto | txt/ps/pdf/html | txt/ps/pdf/html/xml | xml | enable-specs |
lib/libXaw | specs | xml | xmlto | txt/ps/pdf/html | txt/ps/pdf/html/xml | xml | enable-specs |
lib/libXdmcp | doc | xml | xmlto | txt/ps/pdf/html | txt/ps/pdf/html/xml | xml | enable-docs |
lib/libXext | specs | xml | xmlto | txt/ps/pdf/html | txt/ps/pdf/html/xml | xml | enable-specs |
lib/libXfont | doc | xml | xmlto | txt/ps/pdf/html | txt/ps/pdf/html/xml | xml | enable-devel-docs |
lib/libXi | doc | xml | xmlto | txt/ps/pdf/html | txt/ps/pdf/html/xml | xml | enable-docs |
specs | enable-specs | ||||||
lib/libXmu | doc | xml | xmlto | txt/ps/pdf/html | txt/ps/pdf/html/xml | xml | enable-docs |
lib/libXt | specs | xml | xmlto | txt/ps/pdf/html | txt/ps/pdf/html/xml | xml | enable-specs |
lib/libxtrans | doc | xml | xmlto | txt/ps/pdf/html | txt/ps/pdf/html/xml | xml | enable-docs |
lib/libXtst | specs | xml | xmlto | txt/ps/pdf/html | txt/ps/pdf/html/xml | xml | enable-specs |
proto/bigreqsproto | specs | xml | xmlto | txt/ps/pdf/html | txt/ps/pdf/html/xml | xml | enable-specs |
proto/fontsproto | specs | xml | xmlto | txt/ps/pdf/html | txt/ps/pdf/html/xml | xml | enable-specs |
proto/inputproto | specs | txt | asciidoc | txt/html | txt/html | txt | enable-specs |
proto/kbproto | specs | xml | xmlto | txt/ps/pdf/html | txt/ps/pdf/html/xml | xml | enable-specs |
proto/recordproto | specs | xml | xmlto | txt/ps/pdf/html | txt/ps/pdf/html/xml | xml | enable-specs |
proto/scrnsaverproto | specs | xml | xmlto | txt/ps/pdf/html | txt/ps/pdf/html/xml | xml | enable-specs |
proto/x11proto | specs | xml | xmlto | txt/ps/pdf/html | txt/ps/pdf/html/xml | xml | enable-specs |
proto/xcmiscproto | specs | xml | xmlto | txt/ps/pdf/html | txt/ps/pdf/html/xml | xml | enable-specs |
proto/xextproto | specs | xml | xmlto | txt/ps/pdf/html | txt/ps/pdf/html/xml | xml | enable-specs |
xserver | doc | xml | xmlto | txt/pdf/html | not installed | xml | enable-devel-docs |
xserver | doc/dtrace | xml | xmlto | txt/pdf/html | installed | xml | enable-docs |
xserver | hw/dmx/doc | xml | xmlto | txt/pdf/html | not installed | xml | enable-devel-docs |
xserver | hw/xfree86/doc | xml | xmlto | txt/pdf/html | not installed | xml | enable-devel-docs |
This table summarizes modules with man pages that are not hand written in the troff format. The input format may be DocBook/XML or asciidoc. The generated man pages files are included in the tarball.
Module | Dir | In Fmt | Tool | Mid Fmt | Tool | Out Fmt | Inst Fmt | Dist Fmt |
lib/libXcomposite | man | xml | N/A | N/A | xmlto | troff | troff | xml+troff |
lib/libXi | man | txt | asciidoc | xml | xmlto | troff | troff | txt+troff |
lib/libXtst | man | xml | N/A | N/A | xmlto | troff | troff | xml+troff |
This table summarizes modules with API Developer's documentation generated using Doxygen. The source for the generated HTML files is the C code which is already included in the tarball.
Module | Dir | In Fmt | Tool | Out Fmt | Inst Fmt | Options |
xserver | hw/dmx/doxygen | *.[hc] | doxygen | html | not installed | enable-devel-docs |
xcb/libxcb | doc/manual | *.[hc] | doxygen | html | not installed | enable-devel-docs |
- In Fnt
- the original source format stored in git (xml refers to docbook xml)
- Mid Fmt
- an intermediate format that is sometimes distributed in the tarball with the original source format
- Out Fmt
- the final format generated by the named tool
- Inst Fmt
- the formats in which the documents are installed in $docdir
- Dist Fmt
- the formats in which documents are included in the tarball. May contain generated formats (shown in bold)
- Options
- the name of the (./configure --help) option used to control the generation of documents
- Default
- the default value of the configure option if none is supplied
Documentation Tooling
A number of tools are required to generate the documentation. They are not all available on all platforms, and if they are, not always at a recent enough level. It is already common practice to skip the generation process if a tool is missing. In addition, some platforms have asked for a configure option to turn any tool off. This prevents breaking the build when the level of the tool is known to be too old.
A number of macros have been written in the util-macros package which provide such facility. When used consistently, it makes controlling the documentation build process easier. Some macros can be invoked with a desired minimum version. The documentation will not be generated if the installed tool does not meet this request. Consult util/macros/xorg-macros.m4.
XORG_WITH_XMLTO --with-xmlto XORG_WITH_ASCIIDOC --with-asciidoc XORG_WITH_DOXYGEN --with-doxygen XORG_WITH_FOP --with-fop XORG_WITH_XSLTPROC --with-xsltproc XORG_CHECK_SGML_DOCTOOLS
Installing and Distributing
In the simpler scenario, when a document is generated in it's output format, say pdf, it is installed in a location known by it's makefile variable $docdir. This is done by the makefile target install
.
Distributing refers to the creation of a compressed archive file (tarball) containing all the package source suitable to be independently built by a third party. These are published on the X.Org web site. It must contain the documentation input format, so the output can be regenerated and installed on the target computer.
Generated files in the tarball
As discussed above, some platforms do not have all the documentation tools to generate the documents from a tarball. This prevents them from installing the documents to the target computer. To solve this issue, generated files have been added in the tarball, either in the final output format or in a format for which tools are known to be available on all platforms.
The makefiles have to tweak the targets to take the availability of the tools into consideration. This is where the macros are useful in providing the necessary makefile variables. It is understood that platforms lacking documentation tools will not be able to create a tarball for distribution, as it would be missing the generated files.
Directory structure
The wiki New Module Guidelines describes the directory structure for each module. It generally states that man pages are to be in the man
directory and that documents of any kind go in the doc
directory. There are a number of modules where documents and man pages are in the same directory. Sometimes man
is under doc
, sometimes doc
is named spec
or specs
. The guidelines should be followed. When multiple documents are to be generated, subdirectories can be used as appropriate.