使用 eclasses

Eclass 是一个函数或功能的集合(库),在软件包之间共享。请参阅 Eclass 编写指南,了解有关 eclasses 功能、工作原理和编写方法的完整信息,以及 Eclass 参考,获取有关各种常用 eclasses 的文档。本节仅解释如何使用已编写的 eclass。

inherit 函数

要使用 eclass,必须对其进行“继承”。这通过 inherit 函数完成,该函数由 ebuild.sh 提供。inherit 语句必须位于 ebuild 的顶部,任何函数之前。条件继承是非法的(除非继承条件是缓存常量 - 请参阅 Portage 缓存)。

在使用 inherit 时,最佳做法是按字母顺序对参数(eclasses)进行排序。例外情况是,eclass 导出的阶段会受到后续参数的影响。例如,multilib-minimal.eclass 在其 文档 中提到,它应该最后继承,因为它覆盖了大多数阶段。

继承 eclass 后,可以使用其提供的函数。以下是一个使用三个 eclasses 的示例 ebuild,foomatic-0.1-r2.ebuild

# Copyright 1999-2021 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=7

inherit autotools bash-completion-r1 flag-o-matic

DESCRIPTION="Tool for foo"
HOMEPAGE="https://foomatic.sf.net"
SRC_URI="mirror://sourceforge/${PN}/${P}.tar.gz"

LICENSE="GPL-2"
SLOT="0"
KEYWORDS="alpha ~amd64 ~x86 ~x64-macos"

RDEPEND="sys-libs/ncurses:0=
	>=sys-libs/readline:0="
DEPEND="${RDEPEND}"

src_prepare() {
	eapply "${FILESDIR}/${P}-gentoo.patch"
	eapply_user
	eautoreconf
}

src_configure() {
	econf --sysconfdir="${EPREFIX}"/etc/devtodo
}

src_compile() {
	replace-flags -O? -O1
	default
}

src_install() {
	default
	dobashcomp "${FILESDIR}/${PN}.bash-completion" ${PN}
}

请注意,标题后立即使用 inherit

需要 autotools eclass(请参阅 autotools.eclass)来获取 eautoreconf 函数。需要 flag-o-matic eclass(请参阅 flag-o-matic.eclass)用于 replace-flags,以及 bash-completion-r1 eclass (bash-completion-r1.eclass) 用于通过 dobashcomp 处理 bash 完成文件。