第7章  高级 pkg-plist 用法

目录
7.1 根据 make 变量对 pkg-plist 进行修改
7.2 空目录
7.3 配置文件
7.4 动态装箱单与静态装箱单的对比
7.5 装箱单 (package list) 的自动化制作

7.1 根据 make 变量对 pkg-plist 进行修改

  某些 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-installdo-install 两个 target 之间, 通过读取 PLIST 并写入 TMPPLIST (默认情况下, 是: WRKDIR/.PLIST.mktmp) 来完成。 因此, 如果您的 port 动态生成 PLIST, 就需要在 pre-install 之前完成。 另外, 如果您的 port 需要编辑所生成的文件, 则需要在 post-install 中操作名为 TMPPLIST 的那个文件。

  另一种可行的修改装箱单的方法, 则是根据 PLIST_FILESPLIST_DIRS 这两个变量的设置来进行。 它们的值会作为目录名连同 PLIST 的内容一起写入 TMPPLIST。 在 PLIST_FILESPLIST_DIRS 中列出的名字, 会经历前面所介绍的 %%变量%% 替换过程。 除此之外, 在 PLIST_FILES 中列出的文件, 会不加任何修改第出现在最终的装箱单中, 而 @dirrm 将作为前缀加到 PLIST_DIRS 所列的名字之前。 为了达到目的, PLIST_FILESPLIST_DIRS 必须在写 TMPPLIST 之前, 也就是在 pre-install 或更早的阶段进行设置。

若您有关于 FreeBSD ports 系统的问题, 请发送电子邮件至 <ports@FreeBSD.org>。
关于此文档的任何问题, 请致函 <doc@FreeBSD.org>。