He's not dead, he's resting
EAPI 3: A Preview
Gentoo is shuffling its way towards EAPI 3. The details haven’t been worked out yet, but there’s a provisional list of things likely to show up that’s mostly been agreed upon. This post will provide a summary; when EAPI 3’s finalised, I’ll do a series of posts with full descriptions as I did for EAPI 2. PMS will remain the definitive definition; I’ve put together a a draft branch (I’ll be rebasing this, so don’t base work off it if you don’t know how to deal with that).
Everything on this list is subject to removal, arbitrary change or nuking from orbit. We’re looking for a finalisation reasonably soon, so if it turns out Portage is unable to support any of these, they’ll be dropped rather than holding the EAPI up.
EAPI 3 will be defined in terms of differences to EAPI 2. These differences may include:
pkg_pretendsupport. This will let ebuilds signal a lot more errors at pretend-time, rather than midway through an install of a hundred packages that you’ve left running overnight. This feature is already in
- Slot operator dependencies. This will let ebuilds specify what to do when they depend upon a package that has multiple slots available — using
:*deps will mean “I can use any slot, and it can change at runtime”, whilst
:=means “I need the best slot that was there at compile time”. This feature is already in
- Use dependency defaults. With EAPI 2 use dependencies, it’s illegal to reference a flag in another package unless that package has that flag in
IUSE. With use dependency defaults, you’ll be able to use
foo/bar[flag(-)]to mean “pretend it’s enabled (disabled) if it’s not present”. This feature is already in
PROPERTIESwill become mandatory (they’re currently optional). This won’t have any effect for users (although without the former,
pkg_pretendwould be slooooow).
- There’s going to be a default
src_installof some kind. Details are yet to be entirely worked out.
- Ebuilds will be able to tell the package manager that it’s ok or not ok to compress certain documentation things using the new
dodocwill have a
-r, for recursively installing directories.
doinswill support symlinks properly.
|| ( use? ( ... ) )will be banned.
dosedwill be banned. (Maybe. This one’s still under discussion.)
doincludefunctions. (Again, maybe. Quite a few people think these’re icky and unnecessary.)
unpackwill support a few new extensions, probably
--disable-dependency-tracking --enable-fast-install. This is already done for
pkg_infowill be usable on uninstalled packages too. This is already in
USEand friends will no longer contain arbitrary extra values. (Possibly. Not sure Portage will have this one done in time.)
KVwill be removed.
REPLACING_VERSIONSvariables, to let packages work out whether they’re upgrading / downgrading / reinstalling.
exheres-0has a more sophisticated version.
- The automatic
WORKDIRfallback will no longer happen under certain conditions.
exheres-0already has this.
unpackwill consider unrecognised suffixes an error unless
--if-compressedis specified, and the default
src_unpackwill pass this.
exheres-0already has this. (Maybe. Not everyone’s seen the light on this one yet.)
- The automagic
RDEPEND=DEPENDick will be gone.
- Utilities will die on failure unless prefixed by
exheres-0already has this.
Unless, of course, something completely different happens.