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

一些ports,特别是 p5- ports,需要根据它们配置的选项(或 p5- ports的版本)更改它们的 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 对列表,并将 %%VAR%% 的实例替换为 pkg-plist 中的 VALUE。

例如,如果port在特定版本子目录中安装了许多文件,请使用版本的占位符,这样每次更新port时就不必重新生成 pkg-plist。例如,设置:

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

在 Makefile 中使用 %%OCTAVE_VERSION%% ,在 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

在读取 PLIST 并写入 TMPPLIST(默认:WRKDIR/.PLIST.mktmp)之间,将在 pre-install 和 do-install 目标之间进行替换。因此,如果 port 在生成 PLIST 时,应在 pre-install 之前或之中这样做。另外,如果 port 需要编辑生成的文件,则应在 post-install 中将其编辑为名为 TMPPLIST 的文件。

另一种修改 port 打包清单的方法是基于设置变量 PLIST_FILES 和 PLIST_DIRS 。每个变量的值被视为要写入 TMPPLIST 的路径名列表,以及 PLIST 内容。虽然 PLIST_FILES 和 PLIST_DIRS 中列出的名称将按照上述描述进行 %%VAR%% 替换,但最好直接使用 ${VAR} 。除此之外, PLIST_FILES 中的名称将不经修改地出现在最终的打包清单中,而 @dir 将被添加到 PLIST_DIRS 中的名称之前。要生效,必须在写入 TMPPLIST 之前设置 PLIST_FILES 和 PLIST_DIRS ,也就是在 pre-install 或更早的时候。

有时候,仅使用 OPTIONS_SUB 是不够的。在这些情况下,在 Makefile 中添加特定的 TAG 到 PLIST_SUB ,并赋予特殊值 @comment ,使得软件包工具忽略该行。例如,如果仅当 X11 选项打开且架构为 i386 时才安装某些文件:

.include <bsd.port.pre.mk>

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

最后更新于

FreeBSD 中文社区