FreeBSD Porter's Handbook
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`.

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 | Home | Next
Starting and stopping services (rc scripts) |  | Empty directories

For questions about the FreeBSD ports system, e-mail <ports@FreeBSD.org>.
For questions about this documentation, e-mail <doc@FreeBSD.org>.