For bug #148702, use the * token to trigger wildcard expansion of IUSE. This adds...
authorZac Medico <zmedico@gentoo.org>
Sat, 9 Jun 2007 23:09:15 +0000 (23:09 -0000)
committerZac Medico <zmedico@gentoo.org>
Sat, 9 Jun 2007 23:09:15 +0000 (23:09 -0000)
svn path=/main/branches/2.1.2/; revision=6785

bin/ebuild.sh
pym/portage.py

index 5b9abd7a6145953bee0caeb6040498c55140bdfe..029d46a2f47539673f3a20fd72c082f80c184c2e 100755 (executable)
@@ -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
index 21861eac3a788f0e427efc2499989832af367b18..f34ff58874d1a9695baa2e3c08e866a1f9e1e3f8 100644 (file)
@@ -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"):