8.5.自动创建软件包列表

首先,要确保 port 基本上是完整的,只缺 pkg-plist 。运行 make makeplist 会显示 pkg-plist 的例子。必须仔细检查 makeplist 的输出是否正确,因为它试图自动猜测一些东西,并可能会出错。

用户的配置文件应作为 filename.sample 来安装,如同在 Configuration Files 中所描述的那样。 info/dir 不能被列出,并且必须按照 info files 一节中所提到的那样加入适当的 install-info 行。 任何由 port 安装的库都必须按照共享库一节中的规定列出。

8.5.1. 用正则表达式扩展 PLIST_SUB

要被替换的字符串有时需要非常具体,以避免不必要的替换。这是对较短数值的一个常见问题。

为了解决这个问题,对于每个 PLACEHOLDER=value,可以设置一个 PLACEHOLDER_regex=regex,其中 regex 部分可以更精确地匹配 value

例1. 使用 PLIST_SUB 和正则表达式

Perl ports 可以在一个特定的树中安装依赖于体系结构相关的文件。在 FreeBSD 上, 为了便于移植, 这个树被称为 mach。例如, 一个安装路径中包含 mach 的安装文件的 port 可能会将路径字符串的这一部分替换成错误的值。考虑一下这个 Makefile

PORTNAME=	Machine-Build
DISTVERSION=	1
CATEGORIES=	devel perl5
MASTER_SITES=	CPAN
PKGNAMEPREFIX=	p5-

MAINTAINER=	perl@FreeBSD.org
COMMENT=	Building machine
WWW=		https://search.cpan.org/dist/Machine-Build

USES=		perl5
USE_PERL5=	configure

PLIST_SUB=	PERL_ARCH=mach

port 所安装的文件是:

/usr/local/bin/machine-build
/usr/local/lib/perl5/site_perl/man/man1/machine-build.1.gz
/usr/local/lib/perl5/site_perl/man/man3/Machine::Build.3.gz
/usr/local/lib/perl5/site_perl/Machine/Build.pm
/usr/local/lib/perl5/site_perl/mach/5.20/Machine/Build/Build.so

运行 make makeplist 时,错误地生成了:

bin/%%PERL_ARCH%%ine-build
%%PERL5_MAN1%%/%%PERL_ARCH%%ine-build.1.gz
%%PERL5_MAN3%%/Machine::Build.3.gz
%%SITE_PERL%%/Machine/Build.pm
%%SITE_PERL%%/%%PERL_ARCH%%/%%PERL_VER%%/Machine/Build/Build.so

Makefile 中的 PLIST_SUB 行改为:

PLIST_SUB=	PERL_ARCH=mach \
  	PERL_ARCH_regex=\bmach\b

现在 makeplist 可以正确生成:

bin/machine-build
%%PERL5_MAN1%%/machine-build.1.gz
%%PERL5_MAN3%%/Machine::Build.3.gz
%%SITE_PERL%%/Machine/Build.pm
%%SITE_PERL%%/%%PERL_ARCH%%/%%PERL_VER%%/Machine/Build/Build.so

最后更新于

FreeBSD 中文社区