.. _sphinx_intro:

Sphinx Introduction for LLVM Developers
=======================================

This document is intended as a short and simple introduction to the Sphinx
documentation generation system for LLVM developers.

Quickstart
----------

To get started writing documentation, you will need to:

 1. Have the Sphinx tools :ref:`installed <installing_sphinx>`.

 2. Understand how to :ref:`build the documentation
    <building_the_documentation>`.

 3. Start :ref:`writing documentation <writing_documentation>`!

.. _installing_sphinx:

Installing Sphinx
~~~~~~~~~~~~~~~~~

You should be able to install Sphinx using the standard Python package
installation tool ``easy_install``, as follows::

  $ sudo easy_install sphinx
  Searching for sphinx
  Reading http://pypi.python.org/simple/sphinx/
  Reading http://sphinx.pocoo.org/
  Best match: Sphinx 1.1.3
  ... more lines here ..

If you do not have root access (or otherwise want to avoid installing Sphinx in
system directories) see the section on :ref:`installing_sphinx_in_a_venv` .

If you do not have the ``easy_install`` tool on your system, you should be able
to install it using:

  Linux
    Use your distribution's standard package management tool to install it,
    i.e., ``apt-get install easy_install`` or ``yum install easy_install``.

  Mac OS X
    All modern Mac OS X systems come with ``easy_install`` as part of the base
    system.

  Windows
    See the `setuptools <http://pypi.python.org/pypi/setuptools>`_ package web
    page for instructions.


.. _building_the_documentation:

Building the documentation
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

In order to build the documentation, all you should need to do is change to the
``docs`` directory and invoke make as follows::

  $ cd path/to/project/docs
  $ make html

Note that on Windows there is a ``make.bat`` command in the docs directory which
supplies the same interface as the ``Makefile``.

That command will invoke ``sphinx-build`` with the appropriate options for the
project, and generate the HTML documentation in a ``_build`` subdirectory. You
can browse it starting from the index page by visiting
``_build/html/index.html``.

Sphinx supports a wide variety of generation formats (including LaTeX, man
pages, and plain text). The ``Makefile`` includes a number of convenience
targets for invoking ``sphinx-build`` appropriately, the common ones are:

  make html
    Generate the HTML output.

  make latexpdf
    Generate LaTeX documentation and convert to a PDF.

  make man
    Generate man pages.


.. _writing_documentation:

Writing documentation
~~~~~~~~~~~~~~~~~~~~~

The documentation itself is written in the reStructuredText (ReST) format, and Sphinx
defines additional tags to support features like cross-referencing.

The ReST format itself is organized around documents mostly being readable
plaintext documents. You should generally be able to write new documentation
easily just by following the style of the existing documentation.

If you want to understand the formatting of the documents more, the best place
to start is Sphinx's own `ReST Primer <http://sphinx.pocoo.org/rest.html>`_.


Learning More
-------------

If you want to learn more about the Sphinx system, the best place to start is
the Sphinx documentation itself, available `here
<http://sphinx.pocoo.org/contents.html>`_.


.. _installing_sphinx_in_a_venv:

Installing Sphinx in a Virtual Environment
------------------------------------------

Most Python developers prefer to work with tools inside a *virtualenv* (virtual
environment) instance, which functions as an application sandbox. This avoids
polluting your system installation with different packages used by various
projects (and ensures that dependencies for different packages don't conflict
with one another). Of course, you need to first have the virtualenv software
itself which generally would be installed at the system level::

  $ sudo easy_install virtualenv

but after that you no longer need to install additional packages in the system
directories.

Once you have the *virtualenv* tool itself installed, you can create a
virtualenv for Sphinx using::

  $ virtualenv ~/my-sphinx-install
  New python executable in /Users/dummy/my-sphinx-install/bin/python
  Installing setuptools............done.
  Installing pip...............done.

  $ ~/my-sphinx-install/bin/easy_install sphinx
  ... install messages here ...

and from now on you can "activate" the *virtualenv* using::

  $ source ~/my-sphinx-install/bin/activate

which will change your PATH to ensure the sphinx-build tool from inside the
virtual environment will be used. See the `virtualenv website
<http://www.virtualenv.org/en/latest/index.html>`_ for more information on using
virtual environments.
