summaryrefslogtreecommitdiffstats
path: root/pym
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2006-08-04 18:57:01 +0000
committerZac Medico <zmedico@gentoo.org>2006-08-04 18:57:01 +0000
commit667d6c76bed30d1f9ffe55001e65ee7508b946da (patch)
tree38cefe4676d7b741133f63c905856deaf7e233d4 /pym
parent15c3f994e75859017a8deba60f084d41d2a7ee9c (diff)
downloadportage-667d6c76bed30d1f9ffe55001e65ee7508b946da.tar.gz
portage-667d6c76bed30d1f9ffe55001e65ee7508b946da.tar.bz2
portage-667d6c76bed30d1f9ffe55001e65ee7508b946da.zip
Add support for package.use.mask in the profile. It should behave exactly as use.mask currently does except that it allows USE flags to be masked for specific packages rather than for all packages. See bug #96368.
svn path=/main/trunk/; revision=4151
Diffstat (limited to 'pym')
-rw-r--r--pym/portage.py23
1 files changed, 22 insertions, 1 deletions
diff --git a/pym/portage.py b/pym/portage.py
index a348cdd4f..c3818310b 100644
--- a/pym/portage.py
+++ b/pym/portage.py
@@ -766,6 +766,7 @@ class config:
self.locked = 0
self.mycpv = None
self.puse = []
+ self.pusemask = []
self.modifiedkeys = []
self.uvlist = []
@@ -802,6 +803,8 @@ class config:
self.use_defs = copy.deepcopy(clone.use_defs)
self.usemask = copy.deepcopy(clone.usemask)
+ self.pusemaskdict = copy.deepcopy(clone.pusemaskdict)
+ self.pusemask = copy.deepcopy(clone.pusemask)
self.configlist = copy.deepcopy(clone.configlist)
self.lookuplist = self.configlist[:]
@@ -938,6 +941,17 @@ class config:
self.use_defs = stack_dictlist(use_defs_lists, incremental=True)
del use_defs_lists
+ self.pusemaskdict = {}
+ rawpusemask = [grabdict_package(
+ os.path.join(x, "package.use.mask")) \
+ for x in self.profiles]
+ rawpusemask = stack_dictlist(rawpusemask, incremental=True)
+ for k, v in rawpusemask.iteritems():
+ cp = dep_getkey(k)
+ self.pusemaskdict.setdefault(cp, {})
+ self.pusemaskdict[cp][k] = v
+ del rawpusemask
+
try:
mygcfg_dlists = [getconfig(os.path.join(x, "make.globals")) \
for x in self.profiles + [os.path.join(config_root, "etc")]]
@@ -1317,6 +1331,7 @@ class config:
if not keeping_pkg:
self.mycpv = None
self.puse = ""
+ self.pusemask = []
self.configdict["pkg"].clear()
self.regenerate(use_cache=use_cache)
@@ -1371,6 +1386,12 @@ class config:
self.pusekey = best_match_to_list(self.mycpv, self.pusedict[cp].keys())
if self.pusekey:
self.puse = " ".join(self.pusedict[cp][self.pusekey])
+ self.pusemask = []
+ if cp in self.pusemaskdict:
+ pusemaskkey = best_match_to_list(self.mycpv,
+ self.pusemaskdict[cp].keys())
+ if pusemaskkey:
+ self.pusemask = set(self.pusemaskdict[cp][pusemaskkey])
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
@@ -1510,7 +1531,7 @@ class config:
usesplit=[]
for x in string.split(self.configlist[-1]["USE"]):
- if x not in self.usemask:
+ if x not in self.usemask and x not in self.pusemask:
usesplit.append(x)
# Pre-Pend ARCH variable to USE settings so '-*' in env doesn't kill arch.