Hi Mark, > -----Original Message----- > From: Mark Hatle [mailto:mark.ha...@windriver.com] > Sent: Tuesday, September 13, 2011 11:29 PM > To: Xu, Dongxiao > Cc: Patches and discussions about the oe-core layer > Subject: Re: [OE-core] [PATCH 1/3] package_rpm: add architecture info in rpm > spec file > > On 9/12/11 9:24 PM, Xu, Dongxiao wrote: > > Hi Mark, > > > >> -----Original Message----- > >> From: openembedded-core-boun...@lists.openembedded.org > >> [mailto:openembedded-core-boun...@lists.openembedded.org] On Behalf > >> Of Mark Hatle > >> Sent: Monday, September 12, 2011 10:52 PM > >> To: openembedded-core@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". > > In this case, it should not matter which one it uses. If the dependency is on > "tinylogin", then either of them fulfills the dependency. RPM should be > selecting which one to bring in using it's internal policy manager. (I > believe > the default is that 64-bit wins...)
I think it DOES matter on which one it uses. Thinking the case that if a user wants to build a pure 64 bit system, and if it could not correctly choose the 64 bit of tinylogin, then his system will be contaminated with 32bit programs/libraries. Also during my testings, I found rpm will select the "wrong" version (x86 tinylogin). Thanks, Dongxiao > > For libraries where it does matter, the dependency system should already be > finding the correct architecture for the library. > > This does raise an issue in my mind though. Is an architecture for "tasks" > justifiable? Why isn't the task-core-boot an all or noarch package? > > Is there any difference between a task-core-boot and "lib32-task-core-boot"? > > Should we expect a difference between the two? > > --Mark > > > 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...@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@lists.openembedded.org > >> http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core _______________________________________________ Openembedded-core mailing list Openembedded-core@lists.openembedded.org http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core