.. _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``.

  macOS
    All modern macOS 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 need to add ``-DLLVM_ENABLE_SPHINX=ON`` to
your ``cmake`` command.  Once you do this you can build the docs using
``docs-lld-html`` build (``ninja`` or ``make``) target.

That build target will invoke ``sphinx-build`` with the appropriate options for
the project, and generate the HTML documentation in a ``tools/lld/docs/html``
subdirectory.

.. _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.
