[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