配置软件包

许多软件包都带有由 autoconf 生成的 ./configure 脚本,用于检查构建环境并配置对库的可选支持。在可能的情况下,应使用 econf 函数 - 这将为 Gentoo 环境提供正确的构建和路径规范。

配置脚本通常会尝试根据已安装的软件包自动启用对可选组件的支持。这**不能**被允许发生。例如,如果用户安装了 Perl 但使用了 USE="-perl",则具有可选 Perl 支持的软件包不能链接到 Perl。这种自动检测通常可以使用 --enable---disable--with---without- 开关来覆盖(但请注意,这些并不总是有效 - 确保对其进行了正确的测试!)。

在适当的情况下,应使用 use_enableuse_with 实用程序函数来生成这些开关。

src_configure() {
	# We have optional perl, python and ruby support
	econf \
		$(use_enable perl) \
		$(use_enable python) \
		$(use_enable ruby)
}

src_configure() {
	# Our package optional IPv6 support which uses --with rather than
	# --enable / --disable

	econf $(use_with ipv6)
}

有时,软件包为选项选择的名称不会完全匹配 USE 标志的名称或大小写。对于 X 标志,这种情况非常常见。对于这些情况,有两种参数形式

src_configure() {
	# Our package has optional perl, python and ruby support
	econf \
		$(use_enable perl perlinterp) \
		$(use_enable python pythoninterp) \
		$(use_enable ruby rubyinterp)

	# ...
}

src_configure() {
	econf $(use_with X x11)
}

要检查未设置的 USE 标志,可以使用 use_enable !flag 形式。

econf 选项

econf 旨在与由 GNU Autoconf 生成的配置脚本一起使用。它首先将下面列出的默认选项传递给配置脚本,然后传递给 econf 的任何其他参数。

  • --prefix="${EPREFIX}"/usr
  • --mandir="${EPREFIX}"/usr/share/man
  • --infodir="${EPREFIX}"/usr/share/info
  • --datadir="${EPREFIX}"/usr/share
  • --sysconfdir="${EPREFIX}"/etc
  • --localstatedir="${EPREFIX}"/var/lib
  • --build="${CBUILD}"(仅在 CBUILD 非空时传递)
  • --host="${CHOST}"
  • --target="${CTARGET}"(仅在 CTARGET 非空时传递)
  • --libdir 从配置文件中 LIBDIR_${ABI} 变量的值设置。
  • --disable-dependency-tracking
  • --disable-silent-rules

在 EAPI 6 及更高版本中,还会传递以下选项

  • --docdir="${EPREFIX}"/usr/share/doc/${PF}
  • --htmldir="${EPREFIX}"/usr/share/doc/${PF}/html

在 EAPI 7 及更高版本中,还会传递以下选项

  • --with-sysroot="${ESYSROOT:-/}"