summaryrefslogtreecommitdiffstats
path: root/pym
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2007-06-09 23:06:19 +0000
committerZac Medico <zmedico@gentoo.org>2007-06-09 23:06:19 +0000
commit119524d9807e8c573e16ff25369080df98f3aa74 (patch)
treeb826724a515d90f73979e5aefcd39abe5a120d98 /pym
parentda8f4b7a512879d7cec9577d032e75d0e42aeb27 (diff)
downloadportage-119524d9807e8c573e16ff25369080df98f3aa74.tar.gz
portage-119524d9807e8c573e16ff25369080df98f3aa74.tar.bz2
portage-119524d9807e8c573e16ff25369080df98f3aa74.zip
For bug #148702, use the * token to trigger wildcard expansion of IUSE. This adds flexibility and prevents flags from being enabled unexpectedly.
svn path=/main/trunk/; revision=6784
Diffstat (limited to 'pym')
-rw-r--r--pym/portage/__init__.py39
1 files changed, 26 insertions, 13 deletions
diff --git a/pym/portage/__init__.py b/pym/portage/__init__.py
index 7e1d200f5..8bf342248 100644
--- a/pym/portage/__init__.py
+++ b/pym/portage/__init__.py
@@ -2035,6 +2035,8 @@ class config:
# Use the calculated USE flags to regenerate the USE_EXPAND flags so
# that they are consistent.
+ iuse = self.configdict["pkg"].get("IUSE","").split()
+ iuse = set([ x.lstrip("+-") for x in iuse ])
for var in use_expand:
prefix = var.lower() + "_"
prefix_len = len(prefix)
@@ -2045,23 +2047,34 @@ class config:
# like LINGUAS.
var_split = [ x for x in var_split if x in expand_flags ]
var_split.extend(expand_flags.difference(var_split))
- if var_split or var in self:
+ if (var_split or var in self) and \
+ "*" not in var_split:
# 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.
self[var] = " ".join(var_split)
- else:
- # if unset, we enable everything in IUSE that's not masked
- iuse = self.configdict["pkg"].get("IUSE")
- if iuse:
- var_split = []
- for x in iuse.split():
- x = x.lstrip("+-")
- if x.startswith(prefix) and x not in self.usemask:
- var_split.append(x[prefix_len:])
- usesplit.append(x)
- if var_split:
- self[var] = " ".join(var_split)
+ elif "*" in var_split:
+ # * means to enable everything in IUSE that's not masked
+ filtered_split = []
+ for x in var_split:
+ if x == "*":
+ continue
+ if (prefix + x) in iuse:
+ filtered_split.append(x)
+ var_split = filtered_split
+ for x in iuse:
+ if x.startswith(prefix) and x not in self.usemask:
+ suffix = x[prefix_len:]
+ if suffix in var_split:
+ continue
+ var_split.append(suffix)
+ usesplit.append(x)
+ if var_split:
+ self[var] = " ".join(var_split)
+ elif var in self:
+ # ebuild.sh will see this and unset the variable so
+ # that things like LINGUAS work properly
+ self[var] = "*"
# Pre-Pend ARCH variable to USE settings so '-*' in env doesn't kill arch.
if self.configdict["defaults"].has_key("ARCH"):