[OE-core] [PATCH 1/3] package_rpm: add architecture info in rpm spec file

Xu, Dongxiao dongxiao.xu at intel.com
Tue Sep 13 02:24:32 UTC 2011


Hi Mark,

> -----Original Message-----
> From: openembedded-core-bounces at lists.openembedded.org
> [mailto:openembedded-core-bounces at lists.openembedded.org] On Behalf Of
> Mark Hatle
> Sent: Monday, September 12, 2011 10:52 PM
> To: openembedded-core at lists.openembedded.org
> Subject: Re: [OE-core] [PATCH 1/3] package_rpm: add architecture info in rpm
> spec file
> 
> 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.

Take "task-core-boot-1.0-r8.qemux86_64.rpm" as an example, and it has dependency on tinylogin, how can it determine whether it is depends on " tinylogin-1.4-r7.x86_64.rpm" or "tinylogin-1.4-r7.x86.rpm".

Thanks,
Dongxiao

> 
> --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
> 
> 
> _______________________________________________
> Openembedded-core mailing list
> Openembedded-core at lists.openembedded.org
> http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core




More information about the Openembedded-core mailing list