summaryrefslogtreecommitdiff
path: root/trunk
diff options
context:
space:
mode:
authorfuzzyray <fuzzyray@gentoo.org>2006-03-01 18:01:41 +0000
committerfuzzyray <fuzzyray@gentoo.org>2006-03-01 18:01:41 +0000
commit8c8e0b3f6a1cc39b9761f8e0947aa8630400986c (patch)
tree9ec74ab0c68e1994cd0bcd4d5328bfc4a42c84c4 /trunk
parent5f3dd352bd8e5fe1ab5dd2debf5e8d97e6ccc2de (diff)
downloadgentoolkit-8c8e0b3f6a1cc39b9761f8e0947aa8630400986c.tar.gz
Fixes for dependency parsing (bug 123725). Added function to get PDEPENDS
svn path=/; revision=282
Diffstat (limited to 'trunk')
-rw-r--r--trunk/src/gentoolkit/package.py21
1 files changed, 19 insertions, 2 deletions
diff --git a/trunk/src/gentoolkit/package.py b/trunk/src/gentoolkit/package.py
index e4c3463..1e5b6cb 100644
--- a/trunk/src/gentoolkit/package.py
+++ b/trunk/src/gentoolkit/package.py
@@ -63,7 +63,7 @@ class Package:
raise "Not implemented yet!"
def get_runtime_deps(self):
- """Returns a linearised list of first-level compile time dependencies for this package, on
+ """Returns a linearised list of first-level run time dependencies for this package, on
the form [(comparator, [use flags], cpv), ...]"""
cd = self.get_env_var("RDEPEND").split()
r,i = self._parse_deps(cd)
@@ -76,6 +76,13 @@ class Package:
r,i = self._parse_deps(rd)
return r
+ def get_postmerge_deps(self):
+ """Returns a linearised list of first-level post merge dependencies for this package, on
+ the form [(comparator, [use flags], cpv), ...]"""
+ pd = self.get_env_var("PDEPEND").split()
+ r,i = self._parse_deps(pd)
+ return r
+
def _parse_deps(self,deps,curuse=[],level=0):
# store (comparator, [use predicates], cpv)
r = []
@@ -86,7 +93,7 @@ class Package:
tok = deps[i]
if tok == ')':
return r,i
- if tok[-1] == "?" or tok[0] == "!":
+ if tok[-1] == "?":
tok = tok.replace("?","")
sr,l = self._parse_deps(deps[i+2:],curuse=curuse+[tok],level=level+1)
r += sr
@@ -97,6 +104,16 @@ class Package:
r += sr
i += l + 3
continue
+ # conjunction, like in "|| ( ( foo bar ) baz )" => recurse
+ if tok == "(":
+ sr,l = self._parse_deps(deps[i+1:],curuse,level=level+1)
+ r += sr
+ i += l + 2
+ continue
+ # pkg block "!foo/bar" => ignore it
+ if tok[0] == "!":
+ i += 1
+ continue
# pick out comparator, if any
cmp = ""
for c in comparators: