--- portage.py.orig 2003-07-31 11:22:12.000000000 -0700 +++ portage.py 2003-07-31 11:22:01.000000000 -0700 @@ -895,6 +895,7 @@ sys.exit(1) self.configlist.append(self.mygcfg) self.configdict["conf"]=self.configlist[-1] + self.configdict["conf"]["PKGUSE"]=grabdict("/etc/portage/package.use") for x in incrementals: if os.environ.has_key(x): @@ -923,7 +924,11 @@ self.regenerate() def regenerate(self,useonly=0): - global incrementals,usesplit,profiledir + global incrementals,usesplit,pkgusesplit,profiledir + + # initialize per-package use variables to an empty dictionary + pkgusesplit={} + if useonly: myincrementals=["USE"] else: @@ -966,6 +971,32 @@ #now append our new setting if add: mysetting.append(add) + #override per-package use flags + if mykey=="USE" and pkgusesplit!={}: + for y in pkgusesplit: + if add in pkgusesplit[y]: + pkgusesplit[y].remove(add) + if add[0]=="-" and add[1:] in pkgusesplit[y]: + pkgusesplit[y].remove(add[1:]) + if add[0]!="-" and "-"+add in pkgusesplit[y]: + pkgusesplit[y].remove("-"+add) + + # initialize per-package use flags + if mykey=="USE" and curdb.has_key("PKGUSE"): + for x in curdb["PKGUSE"]: + mypkgusesplit=[] + for y in curdb["PKGUSE"][x]: + if y=="-*" or y=="*": + continue + if y[0]=="-": + z=y[1:] + else: + z="-"+y + if y not in mysetting and y not in mypkgusesplit and z not in mypkgusesplit: + mypkgusesplit.append(y) + if mypkgusesplit: + pkgusesplit[x]=mypkgusesplit + #store setting in last element of configlist, the original environment: self.configlist[-1][mykey]=string.join(mysetting," ") #cache split-up USE var in a global @@ -991,6 +1022,15 @@ usesplit.insert(0,self.configdict["defaults"]["ARCH"]) self.configlist[-1]["USE"]=string.join(usesplit," ") + # Store per-package setting in configlist for display in emerge --info + self.configlist[-1]["PKGUSE"]="" + mypkgusesplit=pkgusesplit.copy() + for x in mypkgusesplit: + if pkgusesplit[x]==[]: + del(pkgusesplit[x]) + else: + self.configlist[-1]["PKGUSE"]=self.configlist[-1]["PKGUSE"]+"( "+x+" => "+string.join(pkgusesplit[x]," ")+" )" + def __getitem__(self,mykey): if mykey=="CONFIG_PROTECT_MASK": suffix=" /etc/env.d" @@ -1501,7 +1541,7 @@ actionmap[mydo]["args"][1]) def doebuild(myebuild,mydo,myroot,debug=0,listonly=0,fetchonly=0): - global settings + global settings,pkgusesplit if mydo not in ["help","clean","prerm","postrm","preinst","postinst", "config","touch","setup","depend","fetch","digest", @@ -1545,6 +1585,12 @@ settings["PVR"]=mysplit[1] else: settings["PVR"]=mysplit[1]+"-"+mysplit[2] + + if pkgusesplit.has_key(category+"/"+mysplit[0]): + settings["PUSE"]=string.join(pkgusesplit[category+"/"+mysplit[0]], ' ') + else: + settings["PUSE"]="" + settings["SLOT"]="" if settings.has_key("PATH"): mysplit=string.split(settings["PATH"],":") @@ -2564,15 +2610,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=[]