--- portage/pym/portage.py +++ portage/pym/portage.py @@ -767,6 +767,7 @@ self.mycpv = None self.puseforce = [] self.puse = [] + self.penv = [] self.pusemask = [] self.modifiedkeys = [] self.uvlist = [] @@ -826,6 +827,7 @@ "env": self.configlist[7] } self.profiles = copy.deepcopy(clone.profiles) self.backupenv = self.configdict["backupenv"] + self.penvdict = copy.deepcopy(clone.penvdict) self.pusedict = copy.deepcopy(clone.pusedict) self.categories = copy.deepcopy(clone.categories) self.pkeywordsdict = copy.deepcopy(clone.pkeywordsdict) @@ -1080,6 +1082,7 @@ self["ROOT"] = target_root self.backup_changes("ROOT") + self.penvdict = {} self.pusedict = {} self.pkeywordsdict = {} self.punmaskdict = {} @@ -1106,6 +1109,14 @@ if os.environ.get("PORTAGE_CALLER","") != "repoman": locations.append(abs_user_config) pmask_locations.append(abs_user_config) + penvdict=grabdict_package( + os.path.join(abs_user_config, "package.env"), recursive=1) + self.penvdict = {} + for key in penvdict.keys(): + cp = dep_getkey(key) + if not self.penvdict.has_key(cp): + self.penvdict[cp] = {} + self.penvdict[cp][key] = penvdict[key] pusedict = grabdict_package( os.path.join(abs_user_config, "package.use"), recursive=1) for key in pusedict.keys(): @@ -1355,6 +1366,7 @@ if not keeping_pkg: self.mycpv = None self.puse = "" + self.penv = "" self.pusemask = [] self.puseforce = [] self.configdict["pkg"].clear() @@ -1411,6 +1423,11 @@ self.pusekey = best_match_to_list(self.mycpv, self.pusedict[cp].keys()) if self.pusekey: self.puse = " ".join(self.pusedict[cp][self.pusekey]) + self.penv = "" + if self.penvdict.has_key(cp): + self.penvkey = best_match_to_list(self.mycpv, self.penvdict[cp].keys()) + if self.penvkey: + self.penv = " ".join(self.penvdict[cp][self.penvkey]) self.pusemask = [] if cp in self.pusemaskdict: pusemaskkey = best_match_to_list(self.mycpv, @@ -1423,10 +1440,25 @@ self.puseforcedict[cp].keys()) if puseforcekey: self.puseforce = self.puseforcedict[cp][puseforcekey][:] + self.configdict["pkg"].clear() self.configdict["pkg"]["PKGUSE"] = self.puse[:] # For saving to PUSE file self.configdict["pkg"]["USE"] = self.puse[:] # this gets appended to USE # CATEGORY is essential for doebuild calls self.configdict["pkg"]["CATEGORY"] = mycpv.split("/")[0] + for envname in self.penv.split(): + penvfile = USER_CONFIG_PATH + "/env/" + envname + if not os.access(penvfile, os.R_OK): + writemsg("!!! Can't access package.env file %s\n" % penvfile) + else: + penvconfig = getconfig(penvfile) + if penvconfig is None: + writemsg("!!! Parsing error in %s\n" % penvfile) + else: + for penv in penvconfig.keys(): + if penv in self.configdict["pkg"] and penv in INCREMENTALS: + self.configdict["pkg"][penv] += " "+penvconfig[penv] + else: + self.configdict["pkg"][penv] = penvconfig[penv] self.reset(keeping_pkg=1,use_cache=use_cache) def setinst(self,mycpv,mydbapi):