From c4d857debf35c9aa98b6db5605365a900dea7370 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Mon, 1 Oct 2012 22:03:43 +0000 Subject: bitbake: 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. (Bitbake rev: babeeded21827d8d3e7c7b785a62332ee9d45d4f) Signed-off-by: Richard Purdie --- bitbake/lib/bb/utils.py | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) (limited to 'bitbake') diff --git a/bitbake/lib/bb/utils.py b/bitbake/lib/bb/utils.py index a537338326..cef0fdd5b8 100644 --- a/bitbake/lib/bb/utils.py +++ b/bitbake/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: -- cgit v1.2.3-54-g00ecf