Ciaran McCreesh’s Blag
Now with 17% more caffeine
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 inexheres-0.- 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 inexheres-0andkdebuild-1. - 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 usefoo/bar[flag(+)]andfoo/bar[flag(-)]to mean “pretend it’s enabled (disabled) if it’s not present”. This feature is already inexheres-0. DEFINED_PHASESandPROPERTIESwill 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
docompressfunction. dodocwill have a-r, for recursively installing directories.doinswill support symlinks properly.|| ( use? ( ... ) )will be banned.dohardanddosedwill be banned. (Maybe. This one’s still under discussion.)- New
doexampleanddoincludefunctions. (Again, maybe. Quite a few people think these’re icky and unnecessary.) unpackwill support a few new extensions, probablyxz,tar.xzand maybexpi.econfwill pass--disable-dependency-tracking --enable-fast-install. This is already done forexheres-0.pkg_infowill be usable on uninstalled packages too. This is already inexheres-0andkdebuild-1.USEand friends will no longer contain arbitrary extra values. (Possibly. Not sure Portage will have this one done in time.)AAandKVwill be removed.- New
REPLACED_BY_VERSIONandREPLACING_VERSIONSvariables, to let packages work out whether they’re upgrading / downgrading / reinstalling.exheres-0has a more sophisticated version. - The automatic
StoWORKDIRfallback will no longer happen under certain conditions.exheres-0already has this. unpackwill consider unrecognised suffixes an error unless--if-compressedis specified, and the defaultsrc_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
nonfatal.exheres-0already has this.
Unless, of course, something completely different happens.