[OE-core] [PATCH 1/3] package_rpm: add architecture info in rpm spec file
Dongxiao Xu
dongxiao.xu at intel.com
Mon Sep 12 08:33:59 UTC 2011
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.xu at 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
More information about the Openembedded-core
mailing list