Gentoo Archives: gentoo-portage-dev

From: "Michał Górny" <mgorny@g.o>
To: gentoo-portage-dev@l.g.o
Cc: "Michał Górny" <mgorny@g.o>
Subject: [gentoo-portage-dev] [PATCH 2/2] ebuild.config: Fix filtering all USE_EXPAND variables in EAPI 5+
Date: Fri, 20 May 2016 22:26:58
Message-Id: 1463783200-9039-2-git-send-email-mgorny@gentoo.org
In Reply to: [gentoo-portage-dev] [PATCH 1/2] portage.package.ebuild.config: Rename iuse_implicit -> iuse_effective by "Michał Górny"
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

Replies