--- /usr/lib/python2.2/site-packages/portage.py 2002-12-29 19:39:01.000000000 -0800 +++ /usr/local/portage/portage.py 2003-01-09 19:45:44.000000000 -0800 @@ -800,7 +800,7 @@ self.regenerate() def regenerate(self,useonly=0): - global incrementals,usesplit,profiledir + global incrementals,usesplit,pkgusesplit,profiledir if useonly: myincrementals=["USE"] else: @@ -817,6 +817,8 @@ continue #variables are already expanded mysplit=curdb[mykey].split() + if mykey=="USE": + mysplit=self.parseuse(mysplit) for x in mysplit: if x=="-*": # "-*" is a special "minus" var that means "unset all settings". so USE="-* gnome" will have *just* gnome enabled. @@ -850,7 +852,54 @@ if self.configdict["defaults"]["ARCH"] not in usesplit: usesplit.insert(0,self.configdict["defaults"]["ARCH"]) self.configlist[-1]["USE"]=string.join(usesplit," ") + mypkgusesplit=pkgusesplit + pkgusesplit={} + for x in mypkgusesplit: + mypos=0 + while myposfirstpos+3: + myitems=myusesplit[firstpos+2:mypos] + pkg=myusesplit[firstpos+1] + pkgusesplit[pkg]=[] + for x in myitems: + if x=="-*" or x=="*": + myusesplit[firstpos:mypos+1]=[] + mypos=firstpos-1 + break + if x[0]=="-": + y=x[1:] + else: + y="-"+x + if x not in pkgusesplit[pkg] and y not in pkgusesplit[pkg]: + pkgusesplit[pkg].append(x) + myusesplit[firstpos:mypos+1]=[] + mypos=firstpos-1 + break + mypos=mypos+1 + mypos=mypos+1 + return myusesplit + def __getitem__(self,mykey): if mykey=="CONFIG_PROTECT_MASK": suffix=" /etc/env.d" @@ -2218,15 +2267,28 @@ mydep=mydep[1:] return prefix+cpv_expand(mydep,mydb)+postfix -def dep_check(depstring,mydbapi,use="yes",mode=None): +def dep_check(depstring,mydbapi,use="yes",mode=None,parent=None): """Takes a depend string and parses the condition.""" - global usesplit + global usesplit,pkgusesplit if use=="all": #enable everything (for repoman) myusesplit=["*"] elif use=="yes": #default behavior myusesplit=usesplit + if parent and (pkgusesplit!={}): + myparent=string.split(parent)[2] + for x in pkgusesplit: + if string.count(myparent,x,0): + for y in pkgusesplit[x]: + if y[0]=="-": + z=y[1:] + else: + z="-"+y + if z in myusesplit: + myusesplit.remove(z) + if y not in myusesplit: + myusesplit.append(y) else: #we are being run by autouse(), don't consult USE vars yet. myusesplit=[]