1 |
Ensure that all USE_EXPAND variables are properly filtered and exported |
2 |
in EAPI 5 and newer, as required by the PMS. This includes exporting |
3 |
an empty value if no matching flag is provided in IUSE. |
4 |
|
5 |
Bug: https://bugs.gentoo.org/show_bug.cgi?id=582140 |
6 |
--- |
7 |
pym/portage/eapi.py | 6 +++++- |
8 |
pym/portage/package/ebuild/config.py | 11 ++++++++--- |
9 |
2 files changed, 13 insertions(+), 4 deletions(-) |
10 |
|
11 |
diff --git a/pym/portage/eapi.py b/pym/portage/eapi.py |
12 |
index 1709026..c4fb374 100644 |
13 |
--- a/pym/portage/eapi.py |
14 |
+++ b/pym/portage/eapi.py |
15 |
@@ -50,6 +50,9 @@ def eapi_exports_EBUILD_PHASE_FUNC(eapi): |
16 |
def eapi_exports_REPOSITORY(eapi): |
17 |
return eapi in ("4-python", "5-progress") |
18 |
|
19 |
+def eapi_exports_USE_EXPAND_variables(eapi): |
20 |
+ return eapi not in ("0", "1", "2", "3", "4", "4-python", "4-slot-abi") |
21 |
+ |
22 |
def eapi_has_pkg_pretend(eapi): |
23 |
return eapi not in ("0", "1", "2", "3") |
24 |
|
25 |
@@ -101,7 +104,7 @@ def eapi_has_targetroot(eapi): |
26 |
|
27 |
_eapi_attrs = collections.namedtuple('_eapi_attrs', |
28 |
'dots_in_PN dots_in_use_flags exports_EBUILD_PHASE_FUNC ' |
29 |
- 'feature_flag_test feature_flag_targetroot ' |
30 |
+ 'exports_USE_EXPAND_variables feature_flag_test feature_flag_targetroot ' |
31 |
'hdepend iuse_defaults iuse_effective posixish_locale ' |
32 |
'repo_deps required_use required_use_at_most_one_of slot_operator slot_deps ' |
33 |
'src_uri_arrows strong_blocks use_deps use_dep_defaults') |
34 |
@@ -128,6 +131,7 @@ def _get_eapi_attrs(eapi): |
35 |
dots_in_PN = (eapi is None or eapi_allows_dots_in_PN(eapi)), |
36 |
dots_in_use_flags = (eapi is None or eapi_allows_dots_in_use_flags(eapi)), |
37 |
exports_EBUILD_PHASE_FUNC = (eapi is None or eapi_exports_EBUILD_PHASE_FUNC(eapi)), |
38 |
+ exports_USE_EXPAND_variables = (eapi is None or eapi_exports_USE_EXPAND_variables(eapi)), |
39 |
feature_flag_test = True, |
40 |
feature_flag_targetroot = (eapi is not None and eapi_has_targetroot(eapi)), |
41 |
hdepend = (eapi is not None and eapi_has_hdepend(eapi)), |
42 |
diff --git a/pym/portage/package/ebuild/config.py b/pym/portage/package/ebuild/config.py |
43 |
index 5f19996..ee1fadb 100644 |
44 |
--- a/pym/portage/package/ebuild/config.py |
45 |
+++ b/pym/portage/package/ebuild/config.py |
46 |
@@ -1279,7 +1279,7 @@ class config(object): |
47 |
|
48 |
def __init__(self, settings, unfiltered_use, |
49 |
use, usemask, iuse_effective, |
50 |
- use_expand_split, use_expand_dict): |
51 |
+ use_expand_split, use_expand_dict, eapi_exports_USE_EXPAND_variables): |
52 |
self._settings = settings |
53 |
self._unfiltered_use = unfiltered_use |
54 |
self._use = use |
55 |
@@ -1287,6 +1287,7 @@ class config(object): |
56 |
self._iuse_effective = iuse_effective |
57 |
self._use_expand_split = use_expand_split |
58 |
self._use_expand_dict = use_expand_dict |
59 |
+ self._eapi_exports_USE_EXPAND_variables = eapi_exports_USE_EXPAND_variables |
60 |
|
61 |
def __getitem__(self, key): |
62 |
prefix = key.lower() + '_' |
63 |
@@ -1330,7 +1331,7 @@ class config(object): |
64 |
filtered_var_split.append(x) |
65 |
var_split = filtered_var_split |
66 |
|
67 |
- if var_split: |
68 |
+ if var_split or self._eapi_exports_USE_EXPAND_variables: |
69 |
value = ' '.join(var_split) |
70 |
else: |
71 |
# Don't export empty USE_EXPAND vars unless the user config |
72 |
@@ -1725,9 +1726,13 @@ class config(object): |
73 |
x in self.get('USE_EXPAND', '').split()) |
74 |
lazy_use_expand = self._lazy_use_expand( |
75 |
self, unfiltered_use, use, self.usemask, |
76 |
- portage_iuse, use_expand_split, self._use_expand_dict) |
77 |
+ portage_iuse, use_expand_split, self._use_expand_dict, |
78 |
+ eapi_attrs.exports_USE_EXPAND_variables) |
79 |
|
80 |
use_expand_iuses = {} |
81 |
+ if eapi_attrs.exports_USE_EXPAND_variables: |
82 |
+ for k in use_expand_split: |
83 |
+ use_expand_iuses[k] = set() |
84 |
for x in portage_iuse: |
85 |
x_split = x.split('_') |
86 |
if len(x_split) == 1: |
87 |
-- |
88 |
2.8.2 |