8.5.自动创建软件包列表

首先,确保 port 几乎完成,只有 pkg-plist 缺失。 运行 make makeplist 将显示一个 pkg-plist 的示例。 makeplist 的输出必须仔细检查正确性,因为它尝试自动猜测一些事情,可能会出错。

用户配置文件应安装为 filename.sample,正如在配置文件中所述。 不得列出 info/dir,并且必须根据信息文件部分中的注释添加适当的 install-info 行。 由port安装的任何库都必须按照共享库部分中指定的方式列出。

8.5.1. 使用正则表达式扩展 PLIST_SUB

有时需要替换的字符串需要非常具体,以避免不受欢迎的替换。 这是较短值的常见问题。

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

示例 1. 使用 PLIST_SUB 与正则表达式

Perl ports 可以在特定树中安装与架构相关的文件。在 FreeBSD 上为了便于移植,这个树被称为 mach 。例如,一个port安装一个路径包含 mach 的文件,该路径字符串的部分可能被替换为错误的值。考虑这个 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

现在 make 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 中文社区 2024