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 <[email protected]>
> ---
>  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
[email protected]
http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core

Reply via email to