Re: [gentoo-portage-dev] [PATCH 2/2] portage.package.ebuild.config: Always export filtered USE_EXPAND vars

2018-02-04 Thread Zac Medico
On 02/04/2018 05:40 AM, Michał Górny wrote:
> Ensure that all USE_EXPAND variables are always exported with filtered
> USE flags inside, even if none of those flags are declared in IUSE.
> This is the behavior required for EAPI 5+ by the PMS.
> 
> Since the behavior for earlier EAPIs is left undefined and having
> different behavior would be confusing to users, apply it in earlier
> EAPIs as well.
> ---
>  bin/ebuild.sh|  6 
>  pym/portage/package/ebuild/config.py | 55 
> ++--
>  2 files changed, 3 insertions(+), 58 deletions(-)
> 
> diff --git a/bin/ebuild.sh b/bin/ebuild.sh
> index 94a44d534..a914384d6 100755
> --- a/bin/ebuild.sh
> +++ b/bin/ebuild.sh
> @@ -704,12 +704,6 @@ if ! has "$EBUILD_PHASE" clean cleanrm ; then
>   fi
>  fi
>  
> -# unset USE_EXPAND variables that contain only the special "*" token
> -for x in ${USE_EXPAND} ; do
> - [ "${!x}" == "*" ] && unset ${x}
> -done
> -unset x
> -
>  if has nostrip ${FEATURES} ${RESTRICT} || has strip ${RESTRICT}
>  then
>   export DEBUGBUILD=1
> diff --git a/pym/portage/package/ebuild/config.py 
> b/pym/portage/package/ebuild/config.py
> index 35cf4f614..739896923 100644
> --- a/pym/portage/package/ebuild/config.py
> +++ b/pym/portage/package/ebuild/config.py
> @@ -1359,47 +1359,7 @@ class config(object):
>   filtered_var_split.append(x)
>   var_split = filtered_var_split
>  
> - if var_split:
> - value = ' '.join(var_split)
> - else:
> - # Don't export empty USE_EXPAND vars unless the 
> user config
> - # exports them as empty.  This is required for 
> vars such as
> - # LINGUAS, where unset and empty have different 
> meanings.
> - # The special '*' token is understood by 
> ebuild.sh, which
> - # will unset the variable so that things like 
> LINGUAS work
> - # properly (see bug #459350).
> - if has_wildcard:
> - value = '*'
> - else:
> - if has_iuse:
> - already_set = False
> - # Skip the first 'env' 
> configdict, in order to
> - # avoid infinite recursion 
> here, since that dict's
> - # __getitem__ calls the current 
> __getitem__.
> - for d in 
> self._settings.lookuplist[1:]:
> - if key in d:
> - already_set = 
> True
> - break
> -
> - if not already_set:
> - for x in 
> self._unfiltered_use:
> - if 
> x[:prefix_len] == prefix:
> - 
> already_set = True
> - break
> -
> - if already_set:
> - value = ''
> - else:
> - value = '*'
> - else:
> - # It's not in IUSE, so just 
> allow the variable content
> - # to pass through if it is 
> defined somewhere.  This
> - # allows packages that support 
> LINGUAS but don't
> - # declare it in IUSE to use the 
> variable outside of the
> - # USE_EXPAND context.
> - value = None
> -
> - return value
> + return ' '.join(var_split)
>  
>   def _setcpv_recursion_gate(f):
>   """
> @@ -1775,7 +1735,7 @@ class config(object):
>   self, unfiltered_use, use, self.usemask,
>   portage_iuse, use_expand_split, self._use_expand_dict)
>  
> - use_expand_iuses = {}
> + use_expand_iuses = dict((k, set()) for k in use_expand_split)
>   for x in portage_iuse:
>   x_split = x.split('_')
>   if len(x_split) == 1:
> @@ -1783,18 +1743,9 @@ class config(object):
>   for i in range(len(x_split) - 1):
>  

[gentoo-portage-dev] [PATCH 2/2] portage.package.ebuild.config: Always export filtered USE_EXPAND vars

2018-02-04 Thread Michał Górny
Ensure that all USE_EXPAND variables are always exported with filtered
USE flags inside, even if none of those flags are declared in IUSE.
This is the behavior required for EAPI 5+ by the PMS.

Since the behavior for earlier EAPIs is left undefined and having
different behavior would be confusing to users, apply it in earlier
EAPIs as well.
---
 bin/ebuild.sh|  6 
 pym/portage/package/ebuild/config.py | 55 ++--
 2 files changed, 3 insertions(+), 58 deletions(-)

diff --git a/bin/ebuild.sh b/bin/ebuild.sh
index 94a44d534..a914384d6 100755
--- a/bin/ebuild.sh
+++ b/bin/ebuild.sh
@@ -704,12 +704,6 @@ if ! has "$EBUILD_PHASE" clean cleanrm ; then
fi
 fi
 
-# unset USE_EXPAND variables that contain only the special "*" token
-for x in ${USE_EXPAND} ; do
-   [ "${!x}" == "*" ] && unset ${x}
-done
-unset x
-
 if has nostrip ${FEATURES} ${RESTRICT} || has strip ${RESTRICT}
 then
export DEBUGBUILD=1
diff --git a/pym/portage/package/ebuild/config.py 
b/pym/portage/package/ebuild/config.py
index 35cf4f614..739896923 100644
--- a/pym/portage/package/ebuild/config.py
+++ b/pym/portage/package/ebuild/config.py
@@ -1359,47 +1359,7 @@ class config(object):
filtered_var_split.append(x)
var_split = filtered_var_split
 
-   if var_split:
-   value = ' '.join(var_split)
-   else:
-   # Don't export empty USE_EXPAND vars unless the 
user config
-   # exports them as empty.  This is required for 
vars such as
-   # LINGUAS, where unset and empty have different 
meanings.
-   # The special '*' token is understood by 
ebuild.sh, which
-   # will unset the variable so that things like 
LINGUAS work
-   # properly (see bug #459350).
-   if has_wildcard:
-   value = '*'
-   else:
-   if has_iuse:
-   already_set = False
-   # Skip the first 'env' 
configdict, in order to
-   # avoid infinite recursion 
here, since that dict's
-   # __getitem__ calls the current 
__getitem__.
-   for d in 
self._settings.lookuplist[1:]:
-   if key in d:
-   already_set = 
True
-   break
-
-   if not already_set:
-   for x in 
self._unfiltered_use:
-   if 
x[:prefix_len] == prefix:
-   
already_set = True
-   break
-
-   if already_set:
-   value = ''
-   else:
-   value = '*'
-   else:
-   # It's not in IUSE, so just 
allow the variable content
-   # to pass through if it is 
defined somewhere.  This
-   # allows packages that support 
LINGUAS but don't
-   # declare it in IUSE to use the 
variable outside of the
-   # USE_EXPAND context.
-   value = None
-
-   return value
+   return ' '.join(var_split)
 
def _setcpv_recursion_gate(f):
"""
@@ -1775,7 +1735,7 @@ class config(object):
self, unfiltered_use, use, self.usemask,
portage_iuse, use_expand_split, self._use_expand_dict)
 
-   use_expand_iuses = {}
+   use_expand_iuses = dict((k, set()) for k in use_expand_split)
for x in portage_iuse:
x_split = x.split('_')
if len(x_split) == 1:
@@ -1783,18 +1743,9 @@ class config(object):
for i in range(len(x_split) - 1):
k = '_'.join(x_split[:i+1])
if k in use_expand_split:
-   v =