EAPI 3 makes IUSE strict: flags not listed in IUSE can't be used in
dependency strings, use queries and so on. However, the specification
includes ways of implicitly adding things to the effective value of
IUSE via the base profile make.defaults. What the specification doesn't
say, and what hasn't been formally decided, is what exactly will be
implicit.
First up is ARCH. Most people don't seem to want to explicitly list
IUSE="x86" etc to make 'use x86' and 'x86? ( ... )' work. Also, people
seem to want to continue the existing unprefixed behaviour rather than
starting to write 'arch_x86'. So we'll need:
USE_EXPAND_UNPREFIXED="ARCH"
USE_EXPAND_IMPLICIT="ARCH"
In addition, all the implicit values need to be listed. According to
arch.list, the values are:
USE_EXPAND_VALUES_ARCH="alpha amd64 amd64-fbsd arm hppa ia64 m68k \
mips ppc ppc64 s390 sh sparc sparc-fbsd x86 x86-fbsd ppc-aix \
x86-freebsd x64-freebsd ia64-hpux x86-interix mips-irix \
amd64-linux ia64-linux x86-linux ppc-macos x86-macos x64-macos \
m68k-mint x86-netbsd ppc-openbsd x86-openbsd x64-openbsd \
sparc-solaris sparc64-solaris x64-solaris x86-solaris x86-winnt"
I've no idea whether that list is accurate. With EAPI 3 it'll matter.
Of the normal USE_EXPAND flags, some appear to be routinely listed in
IUSE anyway, and some pretty much never are. I'd imagine USERLAND,
KERNEL and ELIBC will want to be implicit:
USE_EXPAND_IMPLICIT="${USE_EXPAND_IMPLICIT} USERLAND KERNEL ELIBC"
And again, the implicit values will have to be listed. According to the
desc files (which could be full of lies):
USE_EXPAND_VALUES_USERLAND="GNU BSD"
USE_EXPAND_VALUES_KERNEL="AIX Darwin FreeBSD freemint linux HPUX \
Interix IRIX NetBSD OpenBSD SunOS"
USE_EXPAND_VALUES_ELIBC="AIX Darwin DragonFly FreeBSD glibc HPUX \
Interix IRIX mintlib NetBSD OpenBSD SunOS uclibc"
Are there any other USE_EXPANDs that people want implicit behaviour
for? If so, which ones, and are the desc files accurate?
Finally, there's room to include plain old flags in IUSE automatically.
This was added to the specification as a hypothetical "we might want
this, and it's easy to specify and implement" rather than a "we'll
definitely be using this". Flags that I'm aware of that regularly get
abused are:
IUSE_IMPLICIT="build debug"
Are people wanting to make those implicit? Are there any other flags
that people really don't want to put in IUSE? Bear in mind that any
flag that's implicit can't ever be used for a use dependency default.
--
Ciaran McCreesh