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 <dongxiao...@intel.com>
---
 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
-- 
1.7.1


_______________________________________________
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core

Reply via email to