Chapter 7. Advanced `pkg-plist` Practices
Prev |  | Next

## Chapter 7. Advanced `pkg-plist` Practices

## 7.1. Changing `pkg-plist` Based on Make Variables

Some ports, particularly the `p5-` ports, need to change their `pkg-plist` depending on what options they are configured with (or version of `perl`, in the case of `p5-` ports). To make this easy, any instances in the `pkg-plist` of `%%OSREL%%`, `%%PERL_VER%%`, and `%%PERL_VERSION%%` will be substituted for appropriately. The value of `%%OSREL%%` is the numeric revision of the operating system (e.g., `4.9`). `%%PERL_VERSION%%` and `%%PERL_VER%%` is the full version number of `perl` (e.g., `5.8.9`). Several other `%%`VARS`%%` related to port's documentation files are described in the relevant section.

If you need to make other substitutions, you can set the `PLIST_SUB` variable with a list of ``VAR`=`VALUE`` pairs and instances of `%%`VAR`%%` will be substituted with `VALUE` in the `pkg-plist`.

For instance, if you have a port that installs many files in a version-specific subdirectory, you can put something like

OCTAVE_VERSION= 2.0.13 PLIST_SUB= OCTAVE_VERSION=${OCTAVE_VERSION}

in the `Makefile` and use `%%OCTAVE_VERSION%%` wherever the version shows up in `pkg-plist`. That way, when you upgrade the port, you will not have to change dozens (or in some cases, hundreds) of lines in the `pkg-plist`.

If your port installs files conditionally on the options set in the port, the usual way of handling it is prefixing the `pkg-plist` lines with a `%%TAG%%` and adding that `TAG` to the `PLIST_SUB` variable inside the `Makefile` with a special value of `@comment`, which makes package tools to ignore the line:

.if defined(WITH_X11) PLIST_SUB+= X11="" .else PLIST_SUB+= X11="@comment " .endif

and in the `pkg-plist`:

%%X11%%bin/foo-gui

This substitution (as well as addition of any manual pages) will be done between the `pre-install` and `do-install` targets, by reading from ``PLIST`` and writing to ``TMPPLIST`` (default: ``WRKDIR`/.PLIST.mktmp`). So if your port builds ``PLIST`` on the fly, do so in or before `pre-install`. Also, if your port needs to edit the resulting file, do so in `post-install` to a file named ``TMPPLIST``.

Another possibility to modify port's packing list is based on setting the variables `PLIST_FILES` and `PLIST_DIRS`. The value of each variable is regarded as a list of pathnames to write to ``TMPPLIST`` along with ``PLIST`` contents. Names listed in `PLIST_FILES` and `PLIST_DIRS` are subject to `%%`VAR`%%` substitution, as described above. Except for that, names from `PLIST_FILES` will appear in the final packing list unchanged, while `@dirrm` will be prepended to names from `PLIST_DIRS`. To take effect, `PLIST_FILES` and `PLIST_DIRS` must be set before ``TMPPLIST`` is written, i.e., in `pre-install` or earlier.

Prev |  | Next
6.25. Ports That Rely on Kernel Sources | Home | 7.2. Empty Directories

All FreeBSD documents are available for download at http://ftp.FreeBSD.org/pub/FreeBSD/doc/

Questions that are not answered by the documentation may be sent to <freebsd-questions@FreeBSD.org>.
Send questions about this document to <freebsd-doc@FreeBSD.org>.