[OE-core] [PATCH 1/3] package_rpm: add architecture info in rpm spec file
Mark Hatle
mark.hatle at windriver.com
Mon Sep 12 14:51:54 UTC 2011
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 <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
More information about the Openembedded-core
mailing list