[OE-core] [PATCH] classes: Update to use corrected bb.utils.explode_dep_versions2 API
Richard Purdie
richard.purdie at linuxfoundation.org
Tue Oct 2 00:10:58 UTC 2012
The bb.utils.explode_dep_versions function has issues where dependency information
can be lost. The API doesn't support maintaining the correct information so this
changes to use a new function which correctly handles the data.
Signed-off-by: Richard Purdie <richard.purdie at linuxfoundation.org>
---
NB: This applies on top of Mark's patch and reverts some components of
it. When it comes to finally applying it, I may squash them together.
diff --git a/meta/classes/insane.bbclass b/meta/classes/insane.bbclass
index dddcd66..4f87c93 100644
--- a/meta/classes/insane.bbclass
+++ b/meta/classes/insane.bbclass
@@ -656,14 +656,15 @@ def package_qa_check_deps(pkg, pkgdest, skip, d):
def check_valid_deps(var):
sane = True
try:
- rvar = bb.utils.explode_dep_versions(localdata.getVar(var, True) or "")
+ rvar = bb.utils.explode_dep_versions2(localdata.getVar(var, True) or "")
except ValueError as e:
bb.fatal("%s_%s: %s" % (var, pkg, e))
raise e
for dep in rvar:
- if rvar[dep] and not rvar[dep].startswith(('< ', '= ', '> ', '<= ', '>=')):
- error_msg = "%s_%s is invalid: %s (%s) only comparisons <, =, >, <=, and >= are allowed" % (var, pkg, dep, rvar[dep])
- sane = package_qa_handle_error("dep-cmp", error_msg, d)
+ for v in rvar[dep]:
+ if v and not v.startswith(('< ', '= ', '> ', '<= ', '>=')):
+ error_msg = "%s_%s is invalid: %s (%s) only comparisons <, =, >, <=, and >= are allowed" % (var, pkg, dep, v)
+ sane = package_qa_handle_error("dep-cmp", error_msg, d)
return sane
sane = True
diff --git a/meta/classes/kernel.bbclass b/meta/classes/kernel.bbclass
index 878fd6c..36bc3c7 100644
--- a/meta/classes/kernel.bbclass
+++ b/meta/classes/kernel.bbclass
@@ -20,13 +20,6 @@ python __anonymous () {
image = d.getVar('INITRAMFS_IMAGE', True)
if image:
d.setVar('INITRAMFS_TASK', '${INITRAMFS_IMAGE}:do_rootfs')
-
- # RPROVIDES_kernel-base += "kernel-${KERNEL_VERSION}"
- rprovides = bb.utils.explode_dep_versions(d.getVar("RPROVIDES_kernel-base", True) or "")
- dep = d.expand("kernel-${KERNEL_VERSION}")
- if not dep in rprovides:
- rprovides[dep] = ""
- d.setVar("RPROVIDES_kernel-base", bb.utils.join_deps(rprovides, commasep=False))
}
inherit kernel-arch deploy
@@ -276,6 +269,7 @@ RDEPENDS_kernel = "kernel-base"
RDEPENDS_kernel-base ?= "kernel-image"
PKG_kernel-image = "kernel-image-${@legitimize_package_name('${KERNEL_VERSION}')}"
PKG_kernel-base = "kernel-${@legitimize_package_name('${KERNEL_VERSION}')}"
+RPROVIDES_kernel-base += "kernel-${KERNEL_VERSION}"
ALLOW_EMPTY_kernel = "1"
ALLOW_EMPTY_kernel-base = "1"
ALLOW_EMPTY_kernel-image = "1"
@@ -435,10 +429,10 @@ python populate_packages_prepend () {
old_desc = d.getVar('DESCRIPTION_' + pkg, True) or ""
d.setVar('DESCRIPTION_' + pkg, old_desc + "; " + vals["description"])
- rdepends = bb.utils.explode_dep_versions(d.getVar('RDEPENDS_' + pkg, True) or "")
+ rdepends = bb.utils.explode_dep_versions2(d.getVar('RDEPENDS_' + pkg, True) or "")
for dep in get_dependencies(file, pattern, format):
if not dep in rdepends:
- rdepends[dep] = ""
+ rdepends[dep] = []
d.setVar('RDEPENDS_' + pkg, bb.utils.join_deps(rdepends, commasep=False))
module_deps = parse_depmod()
diff --git a/meta/classes/libc-common.bbclass b/meta/classes/libc-common.bbclass
index dc32c81..0f49936 100644
--- a/meta/classes/libc-common.bbclass
+++ b/meta/classes/libc-common.bbclass
@@ -29,14 +29,7 @@ python populate_packages_prepend () {
d.setVar('PKG_'+bpn+'-dev', 'libc6-dev')
d.setVar('PKG_'+bpn+'-dbg', 'libc6-dbg')
# For backward compatibility with old -dbg package
-
- def add_dep(var, dep):
- deps = bb.utils.explode_dep_versions(d.getVar(var + '_' + bpn, True) or "")
- if not dep in deps:
- deps[dep] = ""
- d.setVar(var + '_' + bpn, bb.utils.join_deps(deps, commasep=False))
-
- add_dep('RPROVIDES', 'libc-dbg')
- add_dep('RCONFLICTS', 'libc-dbg')
- add_dep('RREPLACES', 'libc-dbg')
+ d.appendVar('RPROVIDES_' + bpn + '-dbg', ' libc-dbg')
+ d.appendVar('RCONFLICTS_' + bpn + '-dbg', ' libc-dbg')
+ d.appendVar('RREPLACES_' + bpn + '-dbg', ' libc-dbg')
}
diff --git a/meta/classes/multilib.bbclass b/meta/classes/multilib.bbclass
index f162293..eaaad5f 100644
--- a/meta/classes/multilib.bbclass
+++ b/meta/classes/multilib.bbclass
@@ -85,9 +85,9 @@ PACKAGEFUNCS_append = "do_package_qa_multilib"
python do_package_qa_multilib() {
def check_mlprefix(pkg, var, mlprefix):
- values = bb.utils.explode_dep_versions(d.getVar('%s_%s' % (var, pkg), True) or d.getVar(var, True) or "")
+ values = bb.utils.explode_deps(d.getVar('%s_%s' % (var, pkg), True) or d.getVar(var, True) or "")
candidates = []
- for i in values.keys():
+ for i in values:
if i.startswith('virtual/'):
i = i[len('virtual/'):]
if (not i.startswith('kernel-module')) and (not i.startswith(mlprefix)):
diff --git a/meta/classes/package.bbclass b/meta/classes/package.bbclass
index 6b28a15..a14561d 100644
--- a/meta/classes/package.bbclass
+++ b/meta/classes/package.bbclass
@@ -375,17 +375,13 @@ def get_package_mapping (pkg, d):
def runtime_mapping_rename (varname, d):
#bb.note("%s before: %s" % (varname, d.getVar(varname, True)))
- new_depends = []
- deps = bb.utils.explode_dep_versions(d.getVar(varname, True) or "")
+ new_depends = {}
+ deps = bb.utils.explode_dep_versions2(d.getVar(varname, True) or "")
for depend in deps:
- # Have to be careful with any version component of the depend
new_depend = get_package_mapping(depend, d)
- if deps[depend]:
- new_depends.append("%s (%s)" % (new_depend, deps[depend]))
- else:
- new_depends.append(new_depend)
+ new_depends[new_depend] = deps[depend]
- d.setVar(varname, " ".join(new_depends) or None)
+ d.setVar(varname, bb.utils.join_deps(new_depends, commasep=False))
#bb.note("%s after: %s" % (varname, d.getVar(varname, True)))
@@ -1078,7 +1074,7 @@ python populate_packages () {
dangling_links[pkg].append(os.path.normpath(target))
for pkg in package_list:
- rdepends = bb.utils.explode_dep_versions(d.getVar('RDEPENDS_' + pkg, True) or d.getVar('RDEPENDS', True) or "")
+ rdepends = bb.utils.explode_dep_versions2(d.getVar('RDEPENDS_' + pkg, True) or d.getVar('RDEPENDS', True) or "")
for l in dangling_links[pkg]:
found = False
@@ -1091,7 +1087,7 @@ python populate_packages () {
if p == pkg:
break
if p not in rdepends:
- rdepends[p] = ""
+ rdepends[p] = []
break
if found == False:
bb.note("%s contains dangling symlink to %s" % (pkg, l))
@@ -1646,7 +1642,7 @@ def read_libdep_files(d):
fd.close()
for l in lines:
l.rstrip()
- deps = bb.utils.explode_dep_versions(l)
+ deps = bb.utils.explode_dep_versions2(l)
for dep in deps:
if not dep in pkglibdeps[pkg]:
pkglibdeps[pkg][dep] = deps[dep]
@@ -1657,12 +1653,14 @@ python read_shlibdeps () {
packages = d.getVar('PACKAGES', True).split()
for pkg in packages:
- rdepends = bb.utils.explode_dep_versions(d.getVar('RDEPENDS_' + pkg, False) or d.getVar('RDEPENDS', False) or "")
+ rdepends = bb.utils.explode_dep_versions2(d.getVar('RDEPENDS_' + pkg, False) or d.getVar('RDEPENDS', False) or "")
for dep in pkglibdeps[pkg]:
# Add the dep if it's not already there, or if no comparison is set
- if not dep in rdepends or not rdepends[dep]:
- rdepends[dep] = pkglibdeps[pkg][dep]
-
+ if dep not in rdepends:
+ rdepends[dep] = []
+ for v in pkglibdeps[pkg][dep]:
+ if v not in rdepends[dep]:
+ rdepends[dep].append(v)
d.setVar('RDEPENDS_' + pkg, bb.utils.join_deps(rdepends, commasep=False))
}
@@ -1687,7 +1685,7 @@ python package_depchains() {
def pkg_adddeprrecs(pkg, base, suffix, getname, depends, d):
#bb.note('depends for %s is %s' % (base, depends))
- rreclist = bb.utils.explode_dep_versions(d.getVar('RRECOMMENDS_' + pkg, True) or d.getVar('RRECOMMENDS', True) or "")
+ rreclist = bb.utils.explode_dep_versions2(d.getVar('RRECOMMENDS_' + pkg, True) or d.getVar('RRECOMMENDS', True) or "")
for depend in depends:
if depend.find('-native') != -1 or depend.find('-cross') != -1 or depend.startswith('virtual/'):
@@ -1700,7 +1698,7 @@ python package_depchains() {
pkgname = getname(depend, suffix)
#bb.note("Adding %s for %s" % (pkgname, depend))
if pkgname not in rreclist and pkgname != pkg:
- rreclist[pkgname] = ""
+ rreclist[pkgname] = []
#bb.note('setting: RRECOMMENDS_%s=%s' % (pkg, ' '.join(rreclist)))
d.setVar('RRECOMMENDS_%s' % pkg, bb.utils.join_deps(rreclist, commasep=False))
@@ -1708,7 +1706,7 @@ python package_depchains() {
def pkg_addrrecs(pkg, base, suffix, getname, rdepends, d):
#bb.note('rdepends for %s is %s' % (base, rdepends))
- rreclist = bb.utils.explode_dep_versions(d.getVar('RRECOMMENDS_' + pkg, True) or d.getVar('RRECOMMENDS', True) or "")
+ rreclist = bb.utils.explode_dep_versions2(d.getVar('RRECOMMENDS_' + pkg, True) or d.getVar('RRECOMMENDS', True) or "")
for depend in rdepends:
if depend.find('virtual-locale-') != -1:
@@ -1721,13 +1719,12 @@ python package_depchains() {
pkgname = getname(depend, suffix)
#bb.note("Adding %s for %s" % (pkgname, depend))
if pkgname not in rreclist and pkgname != pkg:
- rreclist[pkgname] = ""
+ rreclist[pkgname] = []
#bb.note('setting: RRECOMMENDS_%s=%s' % (pkg, ' '.join(rreclist)))
d.setVar('RRECOMMENDS_%s' % pkg, bb.utils.join_deps(rreclist, commasep=False))
def add_dep(list, dep):
- dep = dep.split(' (')[0].strip()
if dep not in list:
list.append(dep)
@@ -1766,14 +1763,7 @@ python package_depchains() {
if "-dbg" in pkgs:
pkglibdeps = read_libdep_files(d)
- pkglibdeplist = []
- for pkg in pkglibdeps:
- for dep in pkglibdeps[pkg]:
- cmp = pkglibdeps[pkg][dep]
- if cmp:
- add_dep(pkglibdeplist, dep)
- else:
- add_dep(pkglibdeplist, "%s (%s)" % (dep, cmp))
+ pkglibdeplist = pkglibdeps.keys()
# FIXME this should not look at PN once all task recipes inherit from task.bbclass
dbgdefaultdeps = ((d.getVar('DEPCHAIN_DBGDEFAULTDEPS', True) == '1') or (d.getVar('PN', True) or '').startswith('packagegroup-'))
diff --git a/meta/classes/package_deb.bbclass b/meta/classes/package_deb.bbclass
index a25e5d7..d273cb0 100644
--- a/meta/classes/package_deb.bbclass
+++ b/meta/classes/package_deb.bbclass
@@ -341,28 +341,29 @@ python do_package_deb () {
# adjust these to the '<<' and '>>' equivalents
#
for dep in var:
- if (var[dep] or "").startswith("< "):
- var[dep] = var[dep].replace("< ", "<< ")
- elif (var[dep] or "").startswith("> "):
- var[dep] = var[dep].replace("> ", ">> ")
+ for i, v in enumerate(var[dep]):
+ if (v or "").startswith("< "):
+ var[dep][i] = var[dep][i].replace("< ", "<< ")
+ elif (v or "").startswith("> "):
+ var[dep][i] = var[dep][i].replace("> ", ">> ")
- rdepends = bb.utils.explode_dep_versions(localdata.getVar("RDEPENDS", True) or "")
+ rdepends = bb.utils.explode_dep_versions2(localdata.getVar("RDEPENDS", True) or "")
debian_cmp_remap(rdepends)
for dep in rdepends:
if '*' in dep:
del rdepends[dep]
- rrecommends = bb.utils.explode_dep_versions(localdata.getVar("RRECOMMENDS", True) or "")
+ rrecommends = bb.utils.explode_dep_versions2(localdata.getVar("RRECOMMENDS", True) or "")
debian_cmp_remap(rrecommends)
for dep in rrecommends:
if '*' in dep:
del rrecommends[dep]
- rsuggests = bb.utils.explode_dep_versions(localdata.getVar("RSUGGESTS", True) or "")
+ rsuggests = bb.utils.explode_dep_versions2(localdata.getVar("RSUGGESTS", True) or "")
debian_cmp_remap(rsuggests)
- rprovides = bb.utils.explode_dep_versions(localdata.getVar("RPROVIDES", True) or "")
+ rprovides = bb.utils.explode_dep_versions2(localdata.getVar("RPROVIDES", True) or "")
debian_cmp_remap(rprovides)
- rreplaces = bb.utils.explode_dep_versions(localdata.getVar("RREPLACES", True) or "")
+ rreplaces = bb.utils.explode_dep_versions2(localdata.getVar("RREPLACES", True) or "")
debian_cmp_remap(rreplaces)
- rconflicts = bb.utils.explode_dep_versions(localdata.getVar("RCONFLICTS", True) or "")
+ rconflicts = bb.utils.explode_dep_versions2(localdata.getVar("RCONFLICTS", True) or "")
debian_cmp_remap(rconflicts)
if rdepends:
ctrlfile.write("Depends: %s\n" % unicode(bb.utils.join_deps(rdepends)))
diff --git a/meta/classes/package_ipk.bbclass b/meta/classes/package_ipk.bbclass
index 281ce59..019bd7c 100644
--- a/meta/classes/package_ipk.bbclass
+++ b/meta/classes/package_ipk.bbclass
@@ -379,22 +379,23 @@ python do_package_ipk () {
# adjust these to the '<<' and '>>' equivalents
#
for dep in var:
- if (var[dep] or "").startswith("< "):
- var[dep] = var[dep].replace("< ", "<< ")
- elif (var[dep] or "").startswith("> "):
- var[dep] = var[dep].replace("> ", ">> ")
+ for i, v in enumerate(var[dep]):
+ if (v or "").startswith("< "):
+ var[dep][i] = var[dep][i].replace("< ", "<< ")
+ elif (v or "").startswith("> "):
+ var[dep][i] = var[dep][i].replace("> ", ">> ")
- rdepends = bb.utils.explode_dep_versions(localdata.getVar("RDEPENDS", True) or "")
+ rdepends = bb.utils.explode_dep_versions2(localdata.getVar("RDEPENDS", True) or "")
debian_cmp_remap(rdepends)
- rrecommends = bb.utils.explode_dep_versions(localdata.getVar("RRECOMMENDS", True) or "")
+ rrecommends = bb.utils.explode_dep_versions2(localdata.getVar("RRECOMMENDS", True) or "")
debian_cmp_remap(rrecommends)
- rsuggests = bb.utils.explode_dep_versions(localdata.getVar("RSUGGESTS", True) or "")
+ rsuggests = bb.utils.explode_dep_versions2(localdata.getVar("RSUGGESTS", True) or "")
debian_cmp_remap(rsuggests)
- rprovides = bb.utils.explode_dep_versions(localdata.getVar("RPROVIDES", True) or "")
+ rprovides = bb.utils.explode_dep_versions2(localdata.getVar("RPROVIDES", True) or "")
debian_cmp_remap(rprovides)
- rreplaces = bb.utils.explode_dep_versions(localdata.getVar("RREPLACES", True) or "")
+ rreplaces = bb.utils.explode_dep_versions2(localdata.getVar("RREPLACES", True) or "")
debian_cmp_remap(rreplaces)
- rconflicts = bb.utils.explode_dep_versions(localdata.getVar("RCONFLICTS", True) or "")
+ rconflicts = bb.utils.explode_dep_versions2(localdata.getVar("RCONFLICTS", True) or "")
debian_cmp_remap(rconflicts)
if rdepends:
diff --git a/meta/classes/package_rpm.bbclass b/meta/classes/package_rpm.bbclass
index 6256d6f..c491775 100644
--- a/meta/classes/package_rpm.bbclass
+++ b/meta/classes/package_rpm.bbclass
@@ -609,7 +609,7 @@ python write_specfile () {
return name
def strip_multilib_deps(deps, d):
- depends = bb.utils.explode_dep_versions(deps or "")
+ depends = bb.utils.explode_dep_versions2(deps or "")
newdeps = {}
for dep in depends:
newdeps[strip_multilib(dep, d)] = depends[dep]
@@ -637,18 +637,20 @@ python write_specfile () {
def translate_vers(varname, d):
depends = d.getVar(varname, True)
if depends:
- depends_dict = bb.utils.explode_dep_versions(depends)
+ depends_dict = bb.utils.explode_dep_versions2(depends)
newdeps_dict = {}
for dep in depends_dict:
- ver = depends_dict[dep]
- if dep and ver:
+ verlist = []
+ for ver in depends_dict[dep]:
if '-' in ver:
subd = oe.packagedata.read_subpkgdata_dict(dep, d)
if 'PKGV' in subd:
pv = subd['PKGV']
reppv = pv.replace('-', '+')
- ver = ver.replace(pv, reppv)
- newdeps_dict[dep] = ver
+ verlist.append(ver.replace(pv, reppv))
+ else:
+ verlist.append(ver)
+ newdeps_dict[dep] = verlist
depends = bb.utils.join_deps(newdeps_dict)
d.setVar(varname, depends.strip())
@@ -657,14 +659,13 @@ python write_specfile () {
def print_deps(variable, tag, array, d):
depends = variable
if depends:
- depends_dict = bb.utils.explode_dep_versions(depends)
+ depends_dict = bb.utils.explode_dep_versions2(depends)
for dep in depends_dict:
- ver = depends_dict[dep]
- if dep and ver:
+ for ver in depends_dict[dep]:
ver = ver.replace('(', '')
ver = ver.replace(')', '')
array.append("%s: %s %s" % (tag, dep, ver))
- else:
+ if not len(depends_dict[dep]):
array.append("%s: %s" % (tag, dep))
def walk_files(walkpath, target, conffiles):
@@ -833,9 +834,9 @@ python write_specfile () {
spec_preamble_bottom.append('Group: %s' % splitsection)
# Replaces == Obsoletes && Provides
- robsoletes = bb.utils.explode_dep_versions(splitrobsoletes or "")
- rprovides = bb.utils.explode_dep_versions(splitrprovides or "")
- rreplaces = bb.utils.explode_dep_versions(splitrreplaces or "")
+ robsoletes = bb.utils.explode_dep_versions2(splitrobsoletes or "")
+ rprovides = bb.utils.explode_dep_versions2(splitrprovides or "")
+ rreplaces = bb.utils.explode_dep_versions2(splitrreplaces or "")
for dep in rreplaces:
if not dep in robsoletes:
robsoletes[dep] = rreplaces[dep]
@@ -854,7 +855,7 @@ python write_specfile () {
# conflicts can not be in a provide! We will need to filter it.
if splitrconflicts:
- depends_dict = bb.utils.explode_dep_versions(splitrconflicts)
+ depends_dict = bb.utils.explode_dep_versions2(splitrconflicts)
newdeps_dict = {}
for dep in depends_dict:
if dep not in splitrprovides:
@@ -925,9 +926,9 @@ python write_specfile () {
tail_source(d)
# Replaces == Obsoletes && Provides
- robsoletes = bb.utils.explode_dep_versions(srcrobsoletes or "")
- rprovides = bb.utils.explode_dep_versions(srcrprovides or "")
- rreplaces = bb.utils.explode_dep_versions(srcrreplaces or "")
+ robsoletes = bb.utils.explode_dep_versions2(srcrobsoletes or "")
+ rprovides = bb.utils.explode_dep_versions2(srcrprovides or "")
+ rreplaces = bb.utils.explode_dep_versions2(srcrreplaces or "")
for dep in rreplaces:
if not dep in robsoletes:
robsoletes[dep] = rreplaces[dep]
@@ -947,7 +948,7 @@ python write_specfile () {
# conflicts can not be in a provide! We will need to filter it.
if srcrconflicts:
- depends_dict = bb.utils.explode_dep_versions(srcrconflicts)
+ depends_dict = bb.utils.explode_dep_versions2(srcrconflicts)
newdeps_dict = {}
for dep in depends_dict:
if dep not in srcrprovides:
More information about the Openembedded-core
mailing list