使用 eapply 打补丁

在 ebuild 中应用补丁的规范方法是使用包管理器命令 eapply,可以通过显式调用它,也可以通过分配默认 src_prepare 实现支持的 PATCHES 变量。

命令 eapply 接受一个或多个正则文件或目录路径作为其参数。 这些参数可以选择在前面加上 GNU patch 选项。

eapply 是在 EAPI 6 中添加的。 它与之前可用的 epatch 有几个不同之处

基本 eapply

在最简单的形式中,eapply 接受一个文件名并应用该补丁。 如果应用失败,它将自动 die。 以下内容摘自 sys-libs/gpm

	eapply "${FILESDIR}"/${P}-musl.patch

在以下摘自 www-client/firefox 的简化示例中,补丁集被添加到 SRC_URI 中以便获取和解压缩它。 然后,eapply 被调用,并带有一个目录参数。 它将应用在该目录中找到的所有补丁

SRC_URI+="https://dev.gentoo.org/~larry/patchsets/${P}-patches-01.tar.xz"

src_prepare() {
	eapply "${WORKDIR}/firefox-patches"
	eapply_user
}

补丁 一章提供了一些关于补丁应该托管在哪里以及它们的格式的指南。

默认的 src_prepare 函数将查找全局 PATCHES 数组,以为您应用补丁列表。

PATCHES=(
	# Fix install location
	"${FILESDIR}/${P}-destdir.patch"
	# Respect MAKEOPTS #876543
	"${FILESDIR}/${P}-parallel_build.patch"
)

高级 eapply

此示例显示了如何应用不同的补丁级别

src_prepare() {
	eapply -p2 "${WORKDIR}/${P}-suse-update.patch"
	eapply -p0 "${FILESDIR}/${PV}-no-TIOCGDEV.patch"
	eapply "${FILESDIR}/${PV}-gcc-6.patch"
	eapply_user
}