For bug #179766, expand USE_EXPAND variables inside the USE incremental loop so that...
authorZac Medico <zmedico@gentoo.org>
Fri, 25 May 2007 19:15:20 +0000 (19:15 -0000)
committerZac Medico <zmedico@gentoo.org>
Fri, 25 May 2007 19:15:20 +0000 (19:15 -0000)
svn path=/main/branches/2.1.2/; revision=6624

pym/portage.py

index 8fda7ba138174d9682a77cc1d9b3a1e441233917..d6c6a0b82123d424f35385a52b4d663014b582f0 100644 (file)
@@ -1860,26 +1860,7 @@ class config:
                else:
                        self.configdict["auto"]["USE"] = ""
 
-               use_expand_protected = []
                use_expand = self.get("USE_EXPAND", "").split()
-               for var in use_expand:
-                       var_lower = var.lower()
-                       for x in self.get(var, "").split():
-                               # Any incremental USE_EXPAND variables have already been
-                               # processed, so leading +/- operators are invalid here.
-                               if x[0] == "+":
-                                       writemsg(colorize("BAD", "Invalid '+' operator in " + \
-                                               "non-incremental variable '%s': '%s'\n" % (var, x)),
-                                               noiselevel=-1)
-                                       x = x[1:]
-                               if x[0] == "-":
-                                       writemsg(colorize("BAD", "Invalid '-' operator in " + \
-                                               "non-incremental variable '%s': '%s'\n" % (var, x)),
-                                               noiselevel=-1)
-                                       continue
-                               mystr = var_lower + "_" + x
-                               if mystr not in use_expand_protected:
-                                       use_expand_protected.append(mystr)
 
                if not self.uvlist:
                        for x in self["USE_ORDER"].split(":"):
@@ -1887,11 +1868,12 @@ class config:
                                        self.uvlist.append(self.configdict[x])
                        self.uvlist.reverse()
 
-               myflags = use_expand_protected[:]
+               myflags = []
                for curdb in self.uvlist:
-                       if "USE" not in curdb:
+                       cur_use_expand = [x for x in use_expand if x in curdb]
+                       mysplit = curdb.get("USE", "").split()
+                       if not mysplit and not cur_use_expand:
                                continue
-                       mysplit = curdb["USE"].split()
                        for x in mysplit:
                                if x == "-*":
                                        myflags = []
@@ -1911,8 +1893,27 @@ class config:
                                                pass
                                        continue
 
-                               if x not in myflags:
-                                       myflags.append(x)
+                               myflags.append(x)
+
+                       for var in cur_use_expand:
+                               var_lower = var.lower()
+                               if var not in myincrementals:
+                                       prefix = var_lower + "_"
+                                       myflags = [x for x in myflags if not x.startswith(prefix)]
+                               for x in curdb[var].split():
+                                       # Any incremental USE_EXPAND variables have already been
+                                       # processed, so leading +/- operators are invalid here.
+                                       if x[0] == "+":
+                                               writemsg(colorize("BAD", "Invalid '+' operator in " + \
+                                                       "non-incremental variable '%s': '%s'\n" % (var, x)),
+                                                       noiselevel=-1)
+                                               x = x[1:]
+                                       if x[0] == "-":
+                                               writemsg(colorize("BAD", "Invalid '-' operator in " + \
+                                                       "non-incremental variable '%s': '%s'\n" % (var, x)),
+                                                       noiselevel=-1)
+                                               continue
+                                       myflags.append(var_lower + "_" + x)
 
                myflags = set(myflags)
                myflags.update(self.useforce)