[OE-core] [PATCH 2/5] package.bbclass: show warning when package is trying to provide already provided shlib

Martin Jansa martin.jansa at gmail.com
Sun Jan 19 13:13:00 UTC 2014


On Sat, Jan 18, 2014 at 03:02:07PM +0100, Martin Jansa wrote:
> * move read_shlib_providers before registering package as provider
>   and don't change provider if it already exists, show warning instead
> 
> [YOCTO #4628]
> 
> Signed-off-by: Martin Jansa <Martin.Jansa at gmail.com>
> ---
>  meta/classes/package.bbclass | 12 ++++++++++--
>  1 file changed, 10 insertions(+), 2 deletions(-)
> 
> diff --git a/meta/classes/package.bbclass b/meta/classes/package.bbclass
> index 7dcec5e..aa8156d 100644
> --- a/meta/classes/package.bbclass
> +++ b/meta/classes/package.bbclass
> @@ -1356,6 +1356,7 @@ python package_do_shlibs() {
>          list_re = re.compile('^(.*)\.list$')
>          # Go from least to most specific since the last one found wins
>          for dir in reversed(shlibs_dirs):
> +            bb.debug(2, "Reading shlib providers in %s" % (dir))
>              if not os.path.exists(dir):
>                  continue
>              for file in os.listdir(dir):
> @@ -1471,6 +1472,8 @@ python package_do_shlibs() {
>  
>      needed = {}
>      shlib_provider = {}
> +    read_shlib_providers()
> +
>      for pkg in packages.split():
>          private_libs = d.getVar('PRIVATE_LIBS_' + pkg, True) or d.getVar('PRIVATE_LIBS', True)
>          needs_ldconfig = False
> @@ -1504,6 +1507,12 @@ python package_do_shlibs() {
>          if len(sonames):
>              fd = open(shlibs_file, 'w')
>              for s in sonames:
> +                if s in shlib_provider:
> +                    (old_pkg, old_pkgver) = shlib_provider[s]
> +                    if old_pkg != pkg:
> +                        bb.warn('%s-%s is already registered as shlib provider for %s, ignoring %s-%s trying to register the same' % (old_pkg, old_pkgver, s, pkg, pkgver))
> +                        continue

I'll drop continue and update warning message, changing registered
provider for last built is still undeterministic but slightly better
e.g. when changing packaging and the shlib is moved between packages
(I've run into this in efl, when moving to split packages and they were
still getting runtime dependency on old efl package).

> +                bb.debug(1, 'registering %s-%s as shlib provider for %s' % (pkg, pkgver, s))
>                  fd.write(s + '\n')
>                  shlib_provider[s] = (pkg, pkgver)
>              fd.close()
> @@ -1517,8 +1526,7 @@ python package_do_shlibs() {
>                  postinst = '#!/bin/sh\n'
>              postinst += d.getVar('ldconfig_postinst_fragment', True)
>              d.setVar('pkg_postinst_%s' % pkg, postinst)
> -
> -    read_shlib_providers()
> +        bb.debug(1, 'LIBNAMES: pkg %s sonames %s' % (pkg, sonames))
>  
>      bb.utils.unlockfile(lf)
>  
> -- 
> 1.8.5.2
> 

-- 
Martin 'JaMa' Jansa     jabber: Martin.Jansa at gmail.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 198 bytes
Desc: Digital signature
URL: <http://lists.openembedded.org/pipermail/openembedded-core/attachments/20140119/c1dbf5c4/attachment-0002.sig>


More information about the Openembedded-core mailing list