.. SPDX-License-Identifier: GPL-2.0+:

Building documentation
======================

The U-Boot documentation is based on the Sphinx documentation generator.

In addition to the Python packages listed in ``doc/sphinx/requirements.txt``,
the following dependencies are needed to build the documentation:

* fontconfig

* graphviz

* imagemagick

* texinfo (if building the `Infodoc documentation`_)

When submitting patches for documentation always build with KDOC_WERROR=1 to
treat warnings as errors.

HTML documentation
------------------

The *htmldocs* target is used to build the HTML documentation. It uses the
`Read the Docs Sphinx theme <https://sphinx-rtd-theme.readthedocs.io/en/stable/>`_.

.. code-block:: bash

    # Create Python environment 'myenv'
    python3 -m venv myenv
    # Activate the Python environment
    . myenv/bin/activate
    # Install build requirements
    python3 -m pip install -r doc/sphinx/requirements.txt
    # Build the documentation
    make htmldocs
    # Deactivate the Python environment
    deactivate
    # Display the documentation in a graphical web browser
    x-www-browser doc/output/index.html

The HTML documentation is published at https://docs.u-boot.org. The build
process for that site is controlled by the file *.readthedocs.yml*.

Infodoc documentation
---------------------

The *infodocs* target builds both a texinfo and an info file:

.. code-block:: bash

    # Create Python environment 'myenv'
    python3 -m venv myenv
    # Activate the Python environment
    . myenv/bin/activate
    # Install build requirements
    python3 -m pip install -r doc/sphinx/requirements.txt
    # Build the documentation
    make infodocs
    # Deactivate the Python environment
    deactivate
    # Display the documentation
    info doc/output/texinfo/u-boot.info

PDF documentation
-----------------

The *pdfdocs* target is meant to be used to build PDF documenation.
As v2023.01 it fails with 'LaTeX Error: Too deeply nested'.

We can use texi2pdf instead:

.. code-block:: bash

    # Create Python environment 'myenv'
    python3 -m venv myenv
    # Activate the Python environment
    . myenv/bin/activate
    # Install build requirements
    python3 -m pip install -r doc/sphinx/requirements.txt
    # Build the documentation
    make texinfodocs
    # Deactivate the Python environment
    deactivate
    # Convert to PDF
    texi2pdf doc/output/texinfo/u-boot.texi

Texinfo documentation
---------------------

To build only the texinfo documentation the *texinfodocs* target is used:

.. code-block:: bash

    # Create Python environment 'myenv'
    python3 -m venv myenv
    # Activate the Python environment
    . myenv/bin/activate
    # Install build requirements
    python3 -m pip install -r doc/sphinx/requirements.txt
    # Build the documentation
    make texinfodocs
    # Deactivate the Python environment
    deactivate

The output is in file *doc/output/texinfo/u-boot.texi*.
