This patch is incorrect. Architectural information should not be in the dependencies within RPM packages.
RPM is expected to find the proper version of a package to install based on the existing dependency information. I'm in the process of investigating why certain items are not found properly. --Mark On 9/12/11 3:33 AM, Dongxiao Xu wrote: > For supporting multilib, architecture information is needed in package > require/provide/suggest/recommend fields. > > Use DEFAULTTUNE value as the postfix. > > For "all" arch recipe, it requires "all" arch recipe with no postfix, > but provides all possible multilib archs. > > For example, qemu-config: > > Requires: rsync > Requires: update-rc.d > Requires: task-core-nfs-server > Requires: distcc > Requires: oprofileui-server > Requires: dbus-x11 > Requires: bash > Provides: qemu-config.x86 > Provides: qemu-config.x86-64 > > For other recipe like zlib: > > Requires: libc6.x86-64 >= 2.13 > Provides: zlib.x86-64 > > [YOCTO #1457] > > Signed-off-by: Dongxiao Xu <[email protected]> > --- > meta/classes/multilib.bbclass | 1 + > meta/classes/package_rpm.bbclass | 36 ++++++++++++++++++++++++++++++++++++ > 2 files changed, 37 insertions(+), 0 deletions(-) > > diff --git a/meta/classes/multilib.bbclass b/meta/classes/multilib.bbclass > index 583d76b..76c86b2 100644 > --- a/meta/classes/multilib.bbclass > +++ b/meta/classes/multilib.bbclass > @@ -23,6 +23,7 @@ python multilib_virtclass_handler () { > e.data.setVar("PN", variant + "-" + e.data.getVar("PN", False)) > e.data.setVar("SHLIBSDIR_virtclass-multilib-" + variant > ,e.data.getVar("SHLIBSDIR", False) + "/" + variant) > e.data.setVar("TARGET_VENDOR_virtclass-multilib-" + variant, > e.data.getVar("TARGET_VENDOR", False) + "ml" + variant) > + e.data.setVar("SAVED_DEFAULTTUNE", e.data.getVar("DEFAULTTUNE", True)) > e.data.setVar("OVERRIDES", e.data.getVar("OVERRIDES", False) + override) > } > > diff --git a/meta/classes/package_rpm.bbclass > b/meta/classes/package_rpm.bbclass > index 9ef1acd..ea0a079 100644 > --- a/meta/classes/package_rpm.bbclass > +++ b/meta/classes/package_rpm.bbclass > @@ -350,6 +350,7 @@ package_install_internal_rpm () { > python write_specfile () { > import textwrap > import oe.packagedata > + import re > > # We need a simple way to remove the MLPREFIX from the package name, > # and dependency information... > @@ -498,6 +499,8 @@ python write_specfile () { > > splitname = strip_multilib(pkgname, d) > > + defaulttune = bb.data.getVar('DEFAULTTUNE', localdata, True) > + > splitsummary = (bb.data.getVar('SUMMARY', localdata, True) or > bb.data.getVar('DESCRIPTION', localdata, True) or ".") > splitversion = (bb.data.getVar('PKGV', localdata, True) or > "").replace('-', '+') > splitrelease = (bb.data.getVar('PKGR', localdata, True) or "") > @@ -528,6 +531,39 @@ python write_specfile () { > if pkg == d.getVar("PN", True): > splitrprovides = splitrprovides + " " + > (d.getVar('ALTERNATIVE_LINK', True) or '') + " " + > (d.getVar('ALTERNATIVE_LINKS', True) or '') > > + package_arch = bb.data.getVar('PACKAGE_ARCH', localdata, True) > + > + splitrprovides = splitrprovides + " " + splitname + "." + > defaulttune > + if package_arch != "all": > + pattern = '\([^()]*\)' > + prog = re.compile(pattern) > + > + str_list = [splitrdepends, splitrrecommends, > splitrsuggests] > + for e in range(len(str_list)): > + brackets = prog.findall(str_list[e]) > + for i in range(len(brackets)): > + str_list[e] = > str_list[e].replace(brackets[i], "#BRACKETS"+str(i)+"#") > + tmp = "" > + for i in str_list[e].split(): > + if i.startswith("#BRACKETS"): > + tmp += " " + str(i) > + continue > + tmp += " " + str(i) + "." + defaulttune > + str_list[e] = tmp > + for i in range(len(brackets)): > + str_list[e] = > str_list[e].replace("#BRACKETS"+str(i)+"#", brackets[i]) > + > + [splitrdepends, splitrrecommends, splitrsuggests] = > str_list > + else: > + variants = (bb.data.getVar("MULTILIB_VARIANTS", > localdata, True) or "").split() > + for variant in variants: > + tune = > bb.data.getVar("DEFAULTTUNE_virtclass-multilib-" + variant, localdata, True) > or "" > + if tune: > + splitrprovides = splitrprovides + " " + > splitname + "." + tune > + tune = bb.data.getVar("SAVED_DEFAULTTUNE", localdata, > True) or "" > + if tune: > + splitrprovides = splitrprovides + " " + > splitname + "." + tune > + > # Gather special src/first package data > if srcname == splitname: > srcrdepends = splitrdepends _______________________________________________ Openembedded-core mailing list [email protected] http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core
