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

有些 port, 特别是 p5- port, 需要根据其配置的选项 (或 perl 的版本, 在 p5- port 的情况下) 来改变其 pkg-plist 。为了简化此过程, 在pkg-plist 中的 %%OSREL%%, %%PERL_VER%%%%PERL_VERSION%% 的任可实例都会被适当地替换掉。%%OSREL%% 的值是操作系统的版本号(例如,4.9)。%%PERL_VERSION%%%%PERL_VER%%perl 的完整版本号(例如,5.8.9)。在相关章节中有其他几个与 port 的文档文件有关的 %%VARS%% 介绍。

要进行其他的替换, 可以在 PLIST_SUB 中设置 VAR=VALUE 对的列表, 在 pkg-plist%%VAR%% 的实例将被替换为 VALUE

例如, 如果一个 port 在一个特定版本的子目录中安装了许多文件, 则应使用一个版本占位符, 以便在每次更新 port 时不必重新生成 pkg-plist 。例如,set:

OCTAVE_VERSION=	${PORTREVISION}
PLIST_SUB=	OCTAVE_VERSION=${OCTAVE_VERSION}

Makefile 中, 并在 pkg-plist 中显示的版本中使用 %%OCTAVE_VERSION%% 。在升级 port 时,就不需要在 pkg-plist 中编辑几十行 (或在某些情况下几百行) 的内容了。

如果文件的安装取决于在 port 中设置的选项, 通常的处理方法是在 pkg-plist 中为选项启用时需要的行加上 %%OPT%% 前缀,或在选项禁用时加上 %%NO_OPT%% 前缀,并在 Makefile 中加入 OPTIONS_SUB=yes 。参见 OPTIONS_SUB 以了解更多信息。

例如, 如果有一些文件只有在启用 X11 选项时才会安装, 而 Makefile 中有。

OPTIONS_DEFINE=	X11
OPTIONS_SUB=	yes

pkg-plist 中, 将 %%X11%% 放在只有在启用该选项时才会安装的行前面,像这样:

%%X11%%bin/foo-gui

这种替换将在 pre-installdo-install 目标之间进行,通过从 PLIST 读取并写入 TMPPLIST (默认是 WRKDIR/.PLIST.mktmp )。因此,如果 port 需要临时建立 PLIST ,应在 pre-install 中或之前完成。另外,如果 port 需要编辑生成的文件, 则应在 post-install 中进行, 并在名为 TMPPLIST 的文件中进行。

另一种修改 port 的打包清单的方法是基于设置 PLIST_FILESPLIST_DIRS 这两个变量。每个变量的值都被看作是一个路径名的列表, 以便与 PLIST 的内容一起写入 TMPPLIST。虽然在 PLIST_FILESPLIST_DIRS 中列出的名字会受到上述 %VAR%% 的替换,但最好还是直接使用 ${VAR} 。除此以外,PLIST_FILES 中的名字将在最终的打包清单中出现,不会有任何变化,而 @dir 将被预加到 PLIST_DIRS 中的名字上。为了生效,PLIST_FILESPLIST_DIRS 必须在编写 TMPPLIST 之前设置,也就是在 pre-install 或更早的时候。

有时,使用 OPTIONS_SUB 是不够的。在这些情况下,在 Makefile 里面给 PLIST_SUB 添加一个特殊的 TAG,并加上 @comment 的特殊值,使软件包工具忽略这一行。例如,如果某些文件只有在 X11 选项打开且架构为 i386 时才会被安装。

.include <bsd.port.pre.mk>

.if ${PORT_OPTIONS:MX11} && ${ARCH} == "i386"
PLIST_SUB+=	X11I386=""
.else
PLIST_SUB+=	X11I386="@comment "
.endif

最后更新于

FreeBSD 中文社区