8.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 文档文件相关的 %%VARS%% 替换项,在相关章节中有说明。

要进行自定义替换,可以在 Makefile 中设置 PLIST_SUBVAR=VALUE 形式的列表,pkg-plist 中出现的 %%VAR%% 就会被替换为 VALUE

例如,如果一个 Port 在按版本划分的子目录中安装了多个文件,可以使用占位符表示版本号,这样 Port 升级时就无需每次都重新生成 pkg-plist。可以这样设置:

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

然后在 pkg-plist 中使用 %%OCTAVE_VERSION%% 来代表版本号出现的位置。这样当 Port 升级时,就无需编辑成百上千的 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 或之前完成此操作。如果需要修改生成后的文件,应在 post-install 阶段操作,并针对 TMPPLIST 文件。

另一种修改 Port 安装清单的方式是设置变量 PLIST_FILESPLIST_DIRS。它们的值被视为路径列表,将连同 PLIST 内容一并写入 TMPPLIST。尽管这些名称同样支持 %%VAR%% 替换,但建议直接使用 ${VAR}。除此之外,PLIST_FILES 中的名称会原样出现在最终的安装清单中,而 PLIST_DIRS 中的名称前会加上 @dir。这两个变量必须在写入 TMPPLIST 之前设置,也就是要在 pre-install 或更早的时候设置。

有时,仅使用 OPTIONS_SUB 并不够。在这些情况下,可以在 MakefilePLIST_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

最后更新于

这有帮助吗?