summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2012-10-01 22:03:43 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2012-10-02 11:21:12 +0100
commitbabeeded21827d8d3e7c7b785a62332ee9d45d4f (patch)
treea96ec56988fb3bb8b7bbc22a991e01b59ad773d9
parent39c1c12c58fadd854098cf14ebe92f4d307a36dd (diff)
downloadbitbake-babeeded21827d8d3e7c7b785a62332ee9d45d4f.tar.gz
utils: Add explode_dep_versions2 to replace explode_dep_versions
The API for explode_dep_versions is flawed since there can only be one version constraint against any given dependency. This adds a new function with an API without this limitation. explode_dep_versions() is maintained with a warning printed when its used in a situation where information is lost. This should allow a simple transition to the new API to fix the lost dependency information. join_deps() is updated to deal with data in either format. Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--lib/bb/utils.py27
1 files changed, 21 insertions, 6 deletions
diff --git a/lib/bb/utils.py b/lib/bb/utils.py
index a53733832..cef0fdd5b 100644
--- a/lib/bb/utils.py
+++ b/lib/bb/utils.py
@@ -138,7 +138,7 @@ def explode_deps(s):
#r[-1] += ' ' + ' '.join(j)
return r
-def explode_dep_versions(s):
+def explode_dep_versions2(s):
"""
Take an RDEPENDS style string of format:
"DEPEND1 (optional version) DEPEND2 (optional version) ..."
@@ -188,9 +188,9 @@ def explode_dep_versions(s):
lastver += " "
if i:
lastver += i
- if lastdep in r and r[lastdep] and r[lastdep] != lastver:
- raise ValueError("Error, item %s appeared in dependency string '%s' multiple times with different values. explode_dep_versions cannot cope with this." % (lastdep, s))
- r[lastdep] = lastcmp + " " + lastver
+ if lastdep not in r:
+ r[lastdep] = []
+ r[lastdep].append(lastcmp + " " + lastver)
continue
#if not inversion:
@@ -198,8 +198,19 @@ def explode_dep_versions(s):
lastver = ""
lastcmp = ""
if not (i in r and r[i]):
- r[lastdep] = None
+ r[lastdep] = []
+
+ return r
+def explode_dep_versions(s):
+ r = explode_dep_versions2(s)
+ for d in r:
+ if not r[d]:
+ r[d] = None
+ continue
+ if len(r[d]) > 1:
+ bb.warn("explode_dep_versions(): Item %s appeared in dependency string '%s' multiple times with different values. explode_dep_versions cannot cope with this." % (d, s))
+ r[d] = r[d][0]
return r
def join_deps(deps, commasep=True):
@@ -209,7 +220,11 @@ def join_deps(deps, commasep=True):
result = []
for dep in deps:
if deps[dep]:
- result.append(dep + " (" + deps[dep] + ")")
+ if isinstance(deps[dep], list):
+ for v in deps[dep]:
+ result.append(dep + " (" + v + ")")
+ else:
+ result.append(dep + " (" + deps[dep] + ")")
else:
result.append(dep)
if commasep: