From 48f5b7eae5a9e8bca89958a36b0c8204b2659f59 Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Sat, 9 Jun 2007 23:09:15 +0000 Subject: [PATCH] For bug #148702, use the * token to trigger wildcard expansion of IUSE. This adds flexibility and prevents flags from being enabled unexpectedly. (trunk r6784) svn path=/main/branches/2.1.2/; revision=6785 --- bin/ebuild.sh | 5 +++++ pym/portage.py | 39 ++++++++++++++++++++++++++------------- 2 files changed, 31 insertions(+), 13 deletions(-) diff --git a/bin/ebuild.sh b/bin/ebuild.sh index 5b9abd7a6..029d46a2f 100755 --- a/bin/ebuild.sh +++ b/bin/ebuild.sh @@ -1585,6 +1585,11 @@ if [ "${EBUILD_PHASE}" != "depend" ]; then done export IUSE=${iuse_temp} unset iuse_temp + # unset USE_EXPAND variables that contain only the special "*" token + for x in ${USE_EXPAND} ; do + [ "${!x}" == "*" ] && unset ${x} + done + unset x # Lock the dbkey variables after the global phase declare -r DEPEND RDEPEND SLOT SRC_URI RESTRICT HOMEPAGE LICENSE DESCRIPTION declare -r KEYWORDS INHERITED IUSE PDEPEND PROVIDE diff --git a/pym/portage.py b/pym/portage.py index 21861eac3..f34ff5887 100644 --- a/pym/portage.py +++ b/pym/portage.py @@ -1961,6 +1961,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) @@ -1971,23 +1973,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"): -- 2.26.2