--- portage.py.orig 2003-06-23 23:20:06.000000000 -0700 +++ portage.py 2003-06-23 23:19:10.000000000 -0700 @@ -55,8 +55,8 @@ sys.stderr.write(red("*** Please add this user to the portage group if you wish to use portage.\n")) sys.stderr.write("\n") -incrementals=["USE","FEATURES","ACCEPT_KEYWORDS","ACCEPT_LICENSE","CONFIG_PROTECT_MASK","CONFIG_PROTECT","PRELINK_PATH","PRELINK_PATH_MASK"] -stickies=["KEYWORDS_ACCEPT","USE","CFLAGS","CXXFLAGS","MAKEOPTS","EXTRA_ECONF","EXTRA_EMAKE"] +incrementals=["USE","PKGUSE","FEATURES","ACCEPT_KEYWORDS","ACCEPT_LICENSE","CONFIG_PROTECT_MASK","CONFIG_PROTECT","PRELINK_PATH","PRELINK_PATH_MASK"] +stickies=["KEYWORDS_ACCEPT","USE","PKGUSE","CFLAGS","CXXFLAGS","MAKEOPTS","EXTRA_ECONF","EXTRA_EMAKE"] def getcwd(): "this fixes situations where the current directory doesn't exist" @@ -887,7 +887,7 @@ self.regenerate() def regenerate(self,useonly=0): - global incrementals,usesplit,profiledir + global incrementals,usesplit,pkgusesplit,profiledir if useonly: myincrementals=["USE"] else: @@ -904,6 +904,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. @@ -920,6 +922,7 @@ if mysetting[y]==remove: #we found a previously-defined variable; add it to our dellist for later removal. dellist.append(mysetting[y]) + for y in dellist: while y in mysetting: mysetting.remove(y) @@ -933,7 +936,19 @@ for x in string.split(self.configlist[-1]["USE"]): if x not in self.usemask: usesplit.append(x) - + + mypkgusesplit=pkgusesplit + pkgusesplit={} + for x in mypkgusesplit: + mypos=0 + while mypos "+string.join(pkgusesplit[x]," ")+" )" + + def parseuse(self,myusesplit,mypos=0): + global pkgusesplit + try: + if pkgusesplit: pass + except: + pkgusesplit={} + + if mypos==0: + while mypos 1: + if x in myusesplit[mypos]: + tmpstr=myusesplit[mypos].split(x) + if myusesplit[mypos][0]==x: + myusesplit[mypos:mypos+1]=[x,tmpstr[1]] + elif myusesplit[mypos][len(myusesplit[mypos])-1]==x: + myusesplit[mypos:mypos+1]=[tmpstr[0],x] + else: + myusesplit[mypos:mypos+1]=[tmpstr[0],x,tmpstr[1]] + mypos=mypos+1 + mypos=0 + + while myposfirstpos+3: + myitems=myusesplit[firstpos+2:mypos] + else: + print "parseuse(): USE flags error: not enough elements in ():",myusesplit[firstpos:mypos+1] + myusesplit[firstpos:mypos+1]=[] + break + 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" @@ -2507,15 +2583,27 @@ 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 + myusesplit=usesplit[:] + if parent and (pkgusesplit!={}): + myparent=pkgsplit(parent.split()[2])[0] + if pkgusesplit.has_key(myparent): + for x in pkgusesplit[myparent]: + if x[0]=="-": + y=x[1:] + else: + y="-"+x + if y in myusesplit: + myusesplit.remove(y) + if x not in myusesplit: + myusesplit.append(x) else: #we are being run by autouse(), don't consult USE vars yet. myusesplit=[]