1
0
mirror of https://git.yoctoproject.org/poky synced 2026-05-30 00:20:08 +00:00

classes: Update to use corrected bb.utils.explode_dep_versions2 API

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.

This patch also fixes various points in the code to ensure that we do not have any
duplicates in things that use explode_dep_versions.

A new sanity test to test the contents of the R* variables is also added.

[Some changes from Mark Hatle <mark.hatle@windriver.com>]

(From OE-Core rev: 16a892431d0c0d03f8b561b92909cf2f11af4918)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Richard Purdie
2012-10-02 11:37:07 +01:00
parent 0bfb2094e3
commit 5fdbda6922
7 changed files with 142 additions and 92 deletions
+46 -38
View File
@@ -608,6 +608,13 @@ python write_specfile () {
name = "".join(name.split(eext[1] + '-'))
return name
def strip_multilib_deps(deps, d):
depends = bb.utils.explode_dep_versions2(deps or "")
newdeps = {}
for dep in depends:
newdeps[strip_multilib(dep, d)] = depends[dep]
return bb.utils.join_deps(newdeps)
# ml = d.getVar("MLPREFIX", True)
# if ml and name and len(ml) != 0 and name.find(ml) == 0:
# return ml.join(name.split(ml, 1)[1:])
@@ -630,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())
@@ -650,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):
@@ -709,7 +717,7 @@ python write_specfile () {
srchomepage = d.getVar('HOMEPAGE', True)
srcdescription = d.getVar('DESCRIPTION', True) or "."
srcdepends = strip_multilib(d.getVar('DEPENDS', True), d)
srcdepends = strip_multilib_deps(d.getVar('DEPENDS', True), d)
srcrdepends = []
srcrrecommends = []
srcrsuggests = []
@@ -772,12 +780,12 @@ python write_specfile () {
# Map the dependencies into their final form
mapping_rename_hook(localdata)
splitrdepends = strip_multilib(localdata.getVar('RDEPENDS', True), d) or ""
splitrrecommends = strip_multilib(localdata.getVar('RRECOMMENDS', True), d) or ""
splitrsuggests = strip_multilib(localdata.getVar('RSUGGESTS', True), d) or ""
splitrprovides = strip_multilib(localdata.getVar('RPROVIDES', True), d) or ""
splitrreplaces = strip_multilib(localdata.getVar('RREPLACES', True), d) or ""
splitrconflicts = strip_multilib(localdata.getVar('RCONFLICTS', True), d) or ""
splitrdepends = strip_multilib_deps(localdata.getVar('RDEPENDS', True), d)
splitrrecommends = strip_multilib_deps(localdata.getVar('RRECOMMENDS', True), d)
splitrsuggests = strip_multilib_deps(localdata.getVar('RSUGGESTS', True), d)
splitrprovides = strip_multilib_deps(localdata.getVar('RPROVIDES', True), d)
splitrreplaces = strip_multilib_deps(localdata.getVar('RREPLACES', True), d)
splitrconflicts = strip_multilib_deps(localdata.getVar('RCONFLICTS', True), d)
splitrobsoletes = []
# Gather special src/first package data
@@ -826,16 +834,16 @@ python write_specfile () {
spec_preamble_bottom.append('Group: %s' % splitsection)
# Replaces == Obsoletes && Provides
if splitrreplaces and splitrreplaces.strip() != "":
for dep in splitrreplaces.split(','):
if splitrprovides:
splitrprovides = splitrprovides + ", " + dep
else:
splitrprovides = dep
if splitrobsoletes:
splitrobsoletes = splitrobsoletes + ", " + dep
else:
splitrobsoletes = dep
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]
if not dep in rprovides:
rprovides[dep] = rreplaces[dep]
splitrobsoletes = bb.utils.join_deps(robsoletes, commasep=False)
splitrprovides = bb.utils.join_deps(rprovides, commasep=False)
print_deps(splitrdepends, "Requires", spec_preamble_bottom, d)
# Suggests in RPM are like recommends in OE-core!
@@ -847,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:
@@ -918,16 +926,16 @@ python write_specfile () {
tail_source(d)
# Replaces == Obsoletes && Provides
if srcrreplaces and srcrreplaces.strip() != "":
for dep in srcrreplaces.split(','):
if srcrprovides:
srcrprovides = srcrprovides + ", " + dep
else:
srcrprovides = dep
if srcrobsoletes:
srcrobsoletes = srcrobsoletes + ", " + dep
else:
srcrobsoletes = dep
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]
if not dep in rprovides:
rprovides[dep] = rreplaces[dep]
srcrobsoletes = bb.utils.join_deps(robsoletes, commasep=False)
srcrprovides = bb.utils.join_deps(rprovides, commasep=False)
print_deps(srcdepends, "BuildRequires", spec_preamble_top, d)
print_deps(srcrdepends, "Requires", spec_preamble_top, d)
@@ -940,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: