某些 port, 特别是 p5- port, 会需要根据配置选项 (或对于 p5- port 而言, perl 的版本) 来修改它们的 pkg-plist。 为简化这一工作, 在 pkg-plist 中的 %%OSREL%%、 %%PERL_VER%%, 以及 %%PERL_VERSION%% 将自动进行相应的替换。 其中, %%OSREL%% 的值是操作系统以数值表示的版本 (例如 4.9)。 %%PERL_VERSION%% 和 %%PERL_VER%% 是 perl 的完整版本号 (例如 5.8.9)。许多其它与 port 文档文件有关的 %%变量%% 在 相应章节 中进行了介绍。
如果您还需要进行其它的替换, 可以通过将 PLIST_SUB 变量设置为一组 变量=值 对来实现。 其中, %%VAR%% 表示在 pkg-plist 中将被 值 替换的那些文字。
举例来说, 如果 port 需要把很多文件放到和版本有关的目录中, 可以在 Makefile 中按照类似下面的例子:
OCTAVE_VERSION= 2.0.13 PLIST_SUB= OCTAVE_VERSION=${OCTAVE_VERSION}
并在 pkg-plist 中将具体的版本替换为 %%OCTAVE_VERSION%%。 这样, 在升级 port 时, 就不需要再到 pkg-plist 中修改那几十 (或者, 有时甚至是上百) 行的内容了。
如果您的 port 需要根据一定的配置来有条件地安装一些文件, 通常的做法是在 pkg-plist 中列出这些文件时, 在对应行的开头加上 %%TAG%%, 并将 TAG 写到 Makefile 中的 PLIST_SUB 变量中, 根据需要替换掉, 或替换为 @comment, 后者表示让打包工具忽略这行:
.if defined(WITH_X11) PLIST_SUB+= X11="" .else PLIST_SUB+= X11="@comment " .endif
与之对应, 在 pkg-plist 中:
%%X11%%bin/foo-gui
这一替换过程 (以及加入 联机手册 的过程), 会在 pre-install 和 do-install 两个 target 之间, 通过读取 PLIST 并写入 TMPPLIST (默认情况下, 是: WRKDIR/.PLIST.mktmp) 来完成。 因此, 如果您的 port 动态生成 PLIST, 就需要在 pre-install 之前完成。 另外, 如果您的 port 需要编辑所生成的文件, 则需要在 post-install 中操作名为 TMPPLIST 的那个文件。
另一种可行的修改装箱单的方法, 则是根据 PLIST_FILES 和 PLIST_DIRS 这两个变量的设置来进行。 它们的值会作为目录名连同 PLIST 的内容一起写入 TMPPLIST。 在 PLIST_FILES 和 PLIST_DIRS 中列出的名字, 会经历前面所介绍的 %%变量%% 替换过程。 除此之外, 在 PLIST_FILES 中列出的文件, 会不加任何修改第出现在最终的装箱单中, 而 @dirrm 将作为前缀加到 PLIST_DIRS 所列的名字之前。 为了达到目的, PLIST_FILES 和 PLIST_DIRS 必须在写 TMPPLIST 之前, 也就是在 pre-install 或更早的阶段进行设置。