# EAPI 4-slot-abi

## Metadata

### SLOT Supports Optional "sub-slot" ABI part

In order to represent cases in which an upgrade to a new version of a package requires reverse dependencies to be rebuilt, the SLOT variable may contain an optional "sub-slot" ABI part that is delimited by a '/' character.

For example, the package 'dev-libs/glib-2.30.2' may set SLOT="2/2.30" in order to indicate a sub-slot value of "2.30". This package will be matched by dependency atoms such as 'dev-libs/glib:2' or 'dev-libs/glib:2/2.30', where the sub-slot part of the atom is optional.

If SLOT does not contain a sub-slot part, then it is considered to have an implicit sub-slot that is equal to the SLOT value. For example, SLOT="0" is implicitly equal to SLOT="0/0".

Refer to the := operator documentation for more information about sub-slot usage.

### Dependency Atom slot/sub-slot := Operator

Dependency atom syntax now supports slot/sub-slot := operators which allow the specific slot/sub-slot that a package is built against to be recorded, so that it's possible to automatically determine when a package needs to be rebuilt due to having a dependency upgraded to a different slot/sub-slot.

For example, if a package is built against the package 'dev-libs/glib-2.30.2' with SLOT="2/2.30", then dependency atoms such as 'dev-libs/glib:=' or 'dev-libs/glib:2=' will be rewritten at build time to be recorded as 'dev-libs/glib:2/2.30='.

For another example, if a package is built against the package 'sys-libs/db-4.8.30' with SLOT="4.8", then a dependency atom such as 'sys-libs/db:=' will be rewritten at build time to be recorded as 'sys-libs/db:4.8/4.8='. In this case, since SLOT="4.8" does not contain a sub-slot part, the sub-slot is considered to be implicitly equal to "4.8".

When dependencies are rewritten as described above, the slot/sub-slot recorded in the atom is always equal to that of the highest matched version that is installed at build time.

### Dependency Atom slot/sub-slot :* Operator

The new :* operator is used to express dependencies that can change versions at runtime without requiring reverse dependencies to be rebuilt. For example, a dependency atom such as 'dev-libs/glib:*' can be used to match any slot of the 'dev-libs/glib' package, and dependency atom such as 'dev-libs/glib:2*' can be used to specifically match slot '2' of the same package (ignoring its sub-slot).