1 |
>>>>> On Wed, 18 Jun 2014, Ciaran McCreesh wrote: |
2 |
|
3 |
> The spec is correct, and discusses what you can actually rely upon |
4 |
> working. It is unfortunate that the Council introduced this |
5 |
> confusion by approving "what Portage has implemented" for EAPI 4, |
6 |
> without considering the implications of approving (+) and (-) |
7 |
> without the stricter USE rules. |
8 |
|
9 |
Maybe it becomes clearer if we imagine for the moment that there never |
10 |
was an EAPI 4. |
11 |
|
12 |
Take an EAPI 5 ebuild for cat/foo-1 that defines the following |
13 |
dependency: |
14 |
|
15 |
RDEPEND="cat/bar-1[abi_x86_64(-)]" |
16 |
|
17 |
ABI_X86 is in USE_EXPAND of the profile, also abi_x86_64 is forced |
18 |
enabled via the profile's use.force. |
19 |
|
20 |
cat/bar-1 is EAPI 2 and has an empty IUSE. |
21 |
|
22 |
Now, according to the spec: |
23 |
| For EAPIs listed in table 5.2 as not supporting profile defined IUSE |
24 |
| injection, IUSE_REFERENCEABLE is equal to the calculated IUSE value. |
25 |
|
26 |
So in EAPI 2, IUSE_REFERENCEABLE is equal to IUSE, therefore for bar-1 |
27 |
it should be empty. |
28 |
|
29 |
Furthermore: |
30 |
| In a 4-style use dependency, the flag name may immediately be |
31 |
| followed by a default specified by either (+) or (-). The former |
32 |
| indicates that, when applying the use dependency to a package that |
33 |
| does not have the flag in question in IUSE_REFERENCEABLE, the |
34 |
| package manager shall behave as if the flag were present and |
35 |
| enabled; the latter, present and disabled. |
36 |
|
37 |
In the above RDEPEND, we have a default (-) specifier, and the flag is |
38 |
not in IUSE_REFERENCEABLE of bar-1. So the PM should behave as if the |
39 |
flag was disabled, and the dependency should not be matched. |
40 |
|
41 |
However, what we observe is that the PM behaves as if abi_x86_64 was |
42 |
in IUSE_REFERENCEABLE, so the dependency _is_ matched. |
43 |
|
44 |
What am I missing here? |
45 |
|
46 |
Ulrich |