How to get more documentation on PPL?

Do you have all the documentation you need? If you don't or if you are unsure, the following is for you.

The Parma Polyhedra Library's documentation is partitioned in two subsets:

  • the `user' manuals, containing all and only the information needed by people willing to use the library;
  • the `devref' (developer reference) manuals, also containing details about the library implementation.

Each of the two subsets above contains:

  • the `core' library manual, devoted to the description of the C++ language interface but also including a (programming language independent) specification of the semantic domains and their operators;
  • a `configuration-independent' manual for each of the supported non-templatic (i.e., non-C++) language interfaces; typically, these manuals will only provide language specific information, restricted to a subset of the available semantic domains, while referring to the core manual for a high-level description of the domain themselves and the corresponding operators;
  • a `configuration-dependent' manual for each of the supported non-templatic (i.e., non-C++) language interfaces; these manuals differ from the ones above in that they will list all the datatypes and functions (resp., methods, predicates) that are available for the specific set of domain instances chosen at configuration time.

Each manual in either of the two subsets above can be obtained in several formats:

  • a PDF file suitable for printing or browsing on the screen;
  • a (gzipped) PostScript file suitable for printing;
  • a (tarred and gzipped) collection of HTML pages suitable for browsing.

The Documentation You May Already Have

First of all, you may already have some documentation and all you need is to find it.

If you have downloaded a source (tar or zip) archive for PPL version X.Y.Z, you will find in the doc subdirectory all of the configuration-independent user manuals:

ppl-user-X.Y.Z.pdf
ppl-user-X.Y.Z.ps.gz
ppl-user-X.Y.Z-html.tar.gz
ppl-user-c-interface-X.Y.Z.pdf
ppl-user-c-interface-X.Y.Z.ps.gz
ppl-user-c-interface-X.Y.Z-html.tar.gz
ppl-user-java-interface-X.Y.Z.pdf
ppl-user-java-interface-X.Y.Z.ps.gz
ppl-user-java-interface-X.Y.Z-html.tar.gz
ppl-user-ocaml-interface-X.Y.Z.pdf
ppl-user-ocaml-interface-X.Y.Z.ps.gz
ppl-user-ocaml-interface-X.Y.Z-html.tar.gz
ppl-user-prolog-interface-X.Y.Z.pdf
ppl-user-prolog-interface-X.Y.Z.ps.gz
ppl-user-prolog-interface-X.Y.Z-html.tar.gz

If you have installed a binary package, then you may have the same set of manuals. Note that sometimes the documentation is distributed in a separate package. In the case of RPM packages, you can locate the manuals with a command such as `rpm -ql ppl-docs' which will print, among other things, something like

/usr/share/doc/ppl-X.Y.Z
/usr/share/doc/ppl-X.Y.Z/README
/usr/share/doc/ppl-X.Y.Z/ppl-user-X.Y.Z.pdf
/usr/share/doc/ppl-X.Y.Z/ppl-user-X.Y.Z.ps.gz

The Documentation You May Download

If you are using the latest released version of the library, you will find all the documentation in all formats at [node:75,title="documentation page"].

The Documentation You May Build Yourself

When all else fails (which is the case, for example, when you are using a [node:82,title="Git version"]) then you may build the documentation by yourself. In order to do that, you should have recent versions of Doxygen and Graphviz (you will also need ocamldoc if you plan to build the OCaml interface manuals). When you have all the tools installed and running, you should follow the following procedure.

First, if you have not yet done it, build the library itself (see the building instructions in the files INSTALL and README.configure in the top source directory).

The default build process, while essential in order to produce the documentation, will not generate it directly. For this reason you should go to the doc subdirectory of your build directory (i.e., the one where you compiled the library) and build all the documents you want by executing a command of the form

make doc1 doc2 ...

Here, doc1, doc2 and so forth are either the exact names of the documents you want to build (this requires the knowledge of the library's version number), or any of the following (easier) aliases:

  • user: builds all the configuration-independent user manuals, in all available formats;
  • user-html: the same as above, but only builds the manuals in the (.tar.gz) HTML format;
  • user-pdf: the same as above, but only builds the manuals in the PDF format;
  • user-ps: the same as above, but only builds the manuals in the (gzipped) PostScript format.

If the configuration-dependent manuals are meant, then the following target aliases should be used instead:

  • user-configured: builds the configuration-dependent user manuals, in all available formats;
  • user-configured-html: the same as above, but only builds the manuals in the (.tar.gz) HTML format;
  • user-configured-pdf: the same as above, but only builds the manuals in the PDF format;
  • user-configured-ps: the same as above, but only builds the manuals in the (gzipped) PostScript format.

The target `user-all' will build both configuration-independent and configuration-dependent user manuals. Clearly, for the developer reference manuals, there are similar targets using the prefix `devref' instead of `user'. Finally, the command `make world' will build all the available documentation in all of the above formats.

A Common TeX Error Message and Its Solution

While compiling some PostScript or PDF documentation, it is possible that TeX dies with a TeX capacity exceeded error message. The error should contain the indication of the TeX buffer whose capacity has been exceeded, e.g.:

! TeX capacity exceeded, sorry [save size=5000].

You then need to edit the TeX configuration file that defines the buffer sizes so as to increase the value of the relevant buffer.

Note: the actual name and location of the configuration file will vary depending on the available TeX distribution: possible names include texmf.cnf, texmf.cfg and 20sizes.cnf.

Continuing our example, we can double save_size by editing the configuration file so that the relevant line becomes

save_size = 10000        % for saving values outside current group

Any change to such configuration files should be followed by running a command like

texconfig init

for the change to become effective (on some systems the texconfig-sys command should be used to configure TeX system-wide).

We are a passionate team of experts. Do not hesitate to let us have your feedback:
You may be surprised to discover just how much your suggestions matter to us.