Hello, all. The late multilib ppc issues made me re-check our stable masks on abi_x86_* flags and, honestly, I'm not sure if we're doing things the right way. First, a quick summary. Let's consider dev-libs/elfutils that has a dependency on app-arch/bzip2. If we're building 32-bit elfutils, it needs 32-bit libbz2. This is enforced through a dep in form of: app-arch/bzip2[${MULTILIB_USEDEP}] that gets expanded into: app-arch/bzip2[abi_x86_32(-)?,abi_x86_64(-)?,...,abi_mips_o32(-)?,...] which means that any of the ABI_* flags that gets enabled on elfutils, needs to be enabled on bzip2 as well. Of course, some of use.forcing and masking gets applied here but that doesn't really matter. Now, since we're pretty much converting a lot of different packages, some of them are eligible for stabilization earlier than the others. However, the extra MULTILIB_USEDEPs enforce stabilizing multilib dependencies before the actual packages which made a few developers unhappy. That's why we decided to stable-mask the flags on affected packages. Since the flags are masked on stable, people can stabilize packages independently of whether their converted deps are stable or not. We will be worrying about that consistency once we decide to unmask the flags. The extra advantage of that is that we can avoid pushing stable users into the mess involved with partial conversion of emul-linux. The idea is pretty simple: we keep emul-linux for stable, and once everything is ready, we stable-unmask the flags and let stable users grok multilib. Now, to the problem. Currently we're just stable-masking abi_x86_32 on amd64. This serves the latter purpose well and seems to work for the former. This is probably because the remaining flag is use.forced (abi_x86_64 on amd64, and abi_x86_32 on x86) which seems to add it to implicit IUSE somehow. floppym has done some research w/ stable elfutils and no stable converted bzip2. It seems that if abi_x86_32 is stable.use.masked and abi_x86_64 is use.forced, repoman groks it. However, if we remove abi_x86_64 from use.force, it properly reports flag mismatch error (since no stable bzip2 has IUSE=abi_x86_64). Now, I honestly have no idea if this implicit use.force behavior is PMS-y or not, and how other PMs handle it. I can't find something like this in the PMS but that doc is horribly hard to cross-reference, so I might be missing something. I'd appreciate if someone could help me with that. That said, I have an alternate idea inspired by the ppc breakage. I'm thinking of replacing the amd64 abi_x86_32 mask with a global stable mask of all abi_*_* flags on the relevant packages. Differences: 1) old solution: native flag is forced, other flags are masked. new solution: all flags are masked. 2) old solution: we need to replicate the masks properly for different arches/profiles. new solution: we can keep a single mask for all arches. 3) old solution: MULTILIB_USEDEP magically works (w/ portage at least). new solution: since all flags are disabled, MULTILIB_USEDEP is a no-op and old packages match correctly. 4) old solution: forced native flag runs the native build. new solution: fallback code runs the native build (since no flags are enabled). Your thoughts? -- Best regards, Michał Górny