# EAPI 5

## Metadata

### REQUIRED_USE supports new at-most-one-of operator

The new at-most-one-of operator consists of the string '??', and is satisfied if zero or one (but no more) of its child elements is matched.

### SLOT supports optional "sub-slot" part

The SLOT variable may contain an optional sub-slot part that follows the regular slot and is delimited by a / character. The sub-slot must be a valid slot name. The sub-slot is used to represent cases in which an upgrade to a new version of a package with a different sub-slot may require dependent packages to be rebuilt. When the sub-slot part is omitted from the SLOT definition, the package is considered to have an implicit sub-slot which is equal to the regular slot.

Refer to the slot operators documentation for more information about sub-slot usage.

### Dependency atom slot operators

A slot dependency may contain an optional sub-slot part that follows the regular slot and is delimited by a / character. An operator slot dependency consists of a colon followed by one of the following operators:

- * Indicates that any slot value is acceptable. In addition, for runtime dependencies, indicates that the package will not break if the matched package is uninstalled and replaced by a different matching package in a different slot.

- = Indicates that any slot value is acceptable. In addition, for runtime dependencies, indicates that the package will break unless a matching package with slot and sub-slot equal to the slot and sub-slot of the best installed version at the time the package was installed is available.

- slot= Indicates that only a specific slot value is acceptable, and otherwise behaves identically to the plain equals slot operator.

To implement the equals slot operator, the package manager will need to store the slot/sub-slot pair of the best installed version of the matching package. This syntax is only for package manager use and must not be used by ebuilds. The package manager may do this by inserting the appropriate slot/sub-slot pair between the colon and equals sign when saving the package's dependencies. The sub-slot part must not be omitted here (when the SLOT variable omits the sub-slot part, the package is considered to have an implicit sub-slot which is equal to the regular slot).

## Profiles

### Profile IUSE Injection

IUSE_EFFECTIVE is a variable calculated from IUSE and a variety of other sources described below. It is purely a conceptual variable; it is not exported to the ebuild environment. Values in IUSE_EFFECTIVE may legally be used in queries about an ebuild's state (for example, for use dependencies, for the use function, and for use in dependency specification conditional blocks).

For EAPIs that support profile defined IUSE injection, IUSE_EFFECTIVE contains the following values:

- All values in the calculated IUSE value.

- All values in the profile IUSE_IMPLICIT variable.

- All values in the profile variable named USE_EXPAND_VALUES_${v}, where ${v} is any value in the intersection of the profile USE_EXPAND_UNPREFIXED and USE_EXPAND_IMPLICIT variables.

- All values for ${lower_v}_${x}, where ${x} is all values in the profile variable named USE_EXPAND_VALUES_${v}, where ${v} is any value in the intersection of the profile USE_EXPAND and USE_EXPAND_IMPLICIT variables and ${lower_v} is the lowercase equivalent of ${v}.

#### Example Variable Settings

Variable | Value
--- | ---
IUSE_IMPLICIT | prefix selinux
USE_EXPAND | ELIBC KERNEL USERLAND
USE_EXPAND_UNPREFIXED | ARCH
USE_EXPAND_IMPLICIT | ARCH ELIBC KERNEL USERLAND
USE_EXPAND_VALUES_ARCH | amd64 ppc ppc64 x86 x86-fbsd x86-solaris
USE_EXPAND_VALUES_ELIBC | FreeBSD glibc
USE_EXPAND_VALUES_KERNEL | FreeBSD linux SunOS
USE_EXPAND_VALUES_USERLAND | BSD GNU

### Profile stable USE forcing and masking

In profile directories with an EAPI supporting stable masking, new USE configuration files are supported: use.stable.mask, use.stable.force, package.use.stable.mask and package.use.stable.force. These files behave similarly to previously supported USE configuration files, except that they only influence packages that are merged due to a stable keyword.

## Helpers

### econf adds --disable-silent-rules

This option will automatically be passed if --disable-silent-rules occurs in the output of configure --help.

### new* commands can read from standard input

Standard input is read when the first parameter is - (a hyphen).

### New option --host-root for {has,best}_version

This option --host-root will cause the query to apply to the host root instead of ROOT.

### New doheader helper function

Installs the given header files into /usr/include/, by default with file mode 0644. This can be overridden by setting INSOPTIONS with the insopts function.

### New usex helper function

    USAGE: usex <USE flag> [true output] [false output] [true suffix] [false suffix]
    DESCRIPTION:
     If USE flag is set, echo [true output][true suffix] (defaults to "yes"),
     otherwise echo [false output][false suffix] (defaults to "no").

## Phases

### src_test supports parallel tests

Unlike older EAPIs, the default src_test implementation will not pass the -j1 option to emake.

## Ebuild Environment Variables

### New EBUILD_PHASE_FUNC variable

During execution of an ebuild phase function (such as pkg_setup or src_unpack), the EBUILD_PHASE_FUNC variable will contain the name of the phase function that is currently executing.