Configuring a package
Many packages come with an autoconf-generated ./configure
script for checking the build environment and configuring optional
support for libraries. The econf
function should be used where
possible — this will provide correct build and path specifications for
a Gentoo environment.
Often the configure script will try to automatically enable support
for optional components based upon installed packages. This
must not be allowed to happen. For example, if a user has Perl
installed but has USE="-perl"
, packages with optional
Perl support must not link against Perl. This automatic detection can
usually be overridden using --enable-
and --disable
or --with-
and --without-
switches (but note that these
don't always work — make sure these are tested properly!).
The use_enable
and use_with
utility functions should,
where appropriate, be used to generate these switches.
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)
}
Sometimes the package's choice of name for the option will not exactly
match the name or case of the USE
flag. This is very often the
case with the X
flag. For these situations, there are two
argument forms:
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)
}
To check for an unset USE
flag, the use_enable !flag
form can be used.
econf
options
econf
is designed to work with configure scripts generated by
GNU Autoconf. It first passes the default options listed below to the configure
script, followed by any additional parameters passed to 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}"
(only passed ifCBUILD
is non-empty) --host="${CHOST}"
-
--target="${CTARGET}"
(only passed ifCTARGET
is non-empty) -
--libdir
is set from the value of theLIBDIR_${ABI}
variable in profiles. --disable-dependency-tracking
--disable-silent-rules
In EAPI 6 and later, the following options are passed in addition:
--docdir="${EPREFIX}"/usr/share/doc/${PF}
--htmldir="${EPREFIX}"/usr/share/doc/${PF}/html
In EAPI 7 and later, the following option is passed in addition:
--with-sysroot="${ESYSROOT:-/}"