File: multi-components.rst

package info (click to toggle)
ghc 9.10.3-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 169,260 kB
  • sloc: haskell: 713,564; ansic: 84,184; cpp: 30,255; javascript: 9,003; sh: 7,870; fortran: 3,527; python: 3,228; asm: 2,523; makefile: 2,329; yacc: 1,570; lisp: 532; xml: 196; perl: 111; csh: 2
file content (48 lines) | stat: -rw-r--r-- 2,026 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
Haddocks of multiple components
===============================

Haddock supports building documentation of multiple components.  First, one
needs to build haddocks of all components which can be done with:

.. code-block:: none

    cabal haddock --haddock-html \
                  --haddock-quickjump \
                  --haddock-option="--use-index=../doc-index.html" \
                  --haddock-option="--use-contents=../index.html" \
                  --haddock-option="--base-url=.." \
                  all

The new ``--base-url`` option will allow to access the static files from the
main directory (in this example its the relative ``./..`` directory).  It will
also prevent ``haddock`` from copying its static files to each of the
documentation folders, we're only need a single copy of them where the
``--base-url`` option points to.

The second step requires to copy all the haddocks to a common directory, let's
say ``./docs``,  this will depend on your project and it might look like:

.. code-block:: none

    cp -r dist-newstyle/build/x86_64-linux/ghc-9.0.1/package-a-0.1.0.0/doc/html/package-a/ docs
    cp -r dist-newstyle/build/x86_64-linux/ghc-9.0.1/package-b-0.1.0.0/doc/html/package-b/ docs

Note that you can also include documentation of other packages in this way,
e.g. ``base``, but you need to know where it is hidden on your hard-drive.

To build html and js (``quickjump``) indexes one can now invoke ``haddock`` with:

.. code-block:: none

    haddock \
      -o docs \
      --quickjump --gen-index --gen-contents \
      --read-interface=package-a,docs/package-a/package-a.haddock \
      --read-interface=package-b,docs/package-b/package-b.haddock

Note: the ``PATH`` in ``--read-interface=PATH,...`` must be a relative url of
a package it points to (relative to the ``docs`` directory).

There's an example project which shows how to do that posted `here
<https://github.com/coot/haddock-example>`_, which haddocks are served on
`github-pages <https://coot.github.io/haddock-example>`_.