Openembedded Core Discussions
 help / color / mirror / Atom feed
From: Martin Jansa <martin.jansa@gmail.com>
To: Phil Blundell <pb@pbcl.net>
Cc: openembedded-core@lists.openembedded.org
Subject: Re: is sstate-cache really deterministic together with shlibs providers?
Date: Fri, 7 Jun 2013 22:43:05 +0200	[thread overview]
Message-ID: <20130607204305.GM22710@jama> (raw)
In-Reply-To: <1370636049.4141.22.camel@pb-ThinkPad-R50e>

[-- Attachment #1: Type: text/plain, Size: 3269 bytes --]

On Fri, Jun 07, 2013 at 09:14:09PM +0100, Phil Blundell wrote:
> On Fri, 2013-06-07 at 21:20 +0200, Martin Jansa wrote:
> > Imagine this process
> > 
> > foo.bb DEPENDS on libabc.bb to provide libabc.1.so
> > 
> > evil recipe bar.bb installs some binary crap in /opt/crap and because it's
> > picky about libabc version it bundles own compy of libabc.so.1 and
> > installs it to /opt/crap/lib/libabc.so.1
> > 
> > At the time of first build nobody notices libabc.1.so and foo, bar and
> > libabc are happily populated to sysroot.
> > 
> > foo.bb is rebuilt because of some unrelated change, but this times it
> > uses bar as shlibs provider for libabc.so.1
> 
> It sounds like the real bug here is that the shlibdeps code doesn't
> issue a diagnostic when it encounters this kind of ambiguous situation.
> It ought to be perfectly capable of figuring out that there are two
> copies of libabc.so.1 at large which belong to different packages and,
> absent additional guidance, it has no reliable way of knowing which one
> of those is going to satisfy the DT_NEEDED in any random binary.
> 
> If shlibdeps stopped with an error in that situation, which arguably it
> ought to, then the erroneous dependency would never get into sstate and
> the scenario that you describe would not be able to happen.

I like both suggestions from you and from Richard, there is another
slightly related issue with
https://bugzilla.yoctoproject.org/show_bug.cgi?id=4102

It's probably possible to create test case where I create sstate package
with libabc.so.1 provided by MACHINE_ARCH foo and then try to reuse this
sstate but with libabc.so.1 provided by TUNE_PKGARCH foo (e.g. with
different version) shlibs code will still find it provider by
MACHINE_ARCH foo and there isn't way to clean foo from incremental build
(only manually).

I'll create bug report and try to sum it there:
1) RP1: We should perhaps limit shlibs to the default linker search paths?
2) RP2+PB: Warning/Error if two things provide the same shlibs
   - probably better to error out when bar.bb is being built and tries
     to provide the same libabc libabc.bb, it can be in different order
     as bar does not depends on libabc, so next time it can show error
     when building libabc, but IMHO better then showing error when foo 
     finds out 2 possible libabc providers
3) Restrict possible providers to stuff included in dependencies - 
   I don't know how difficult it will be to implement this (to see all
   dependencies including transitive), but IMHO this one is most 
   important and can also solve #4102, most tricky part would be to 
   prevent shlib providers silently disappearing from RDEPENDS - 
   when something doesn't declare dependency explicitly, but it was
   always there when do_package was executed - now missing providers
   are silently ignored IIRC. Buildhistory can probably help a lot to
   find missing explicit deps for shlibs providers when we restrict it.

   This will also ensure that when shlibs provider is changed, the
   package which is automagically RDEPENDing on it gets rebuilt too.

https://bugzilla.yoctoproject.org/show_bug.cgi?id=4628
-- 
Martin 'JaMa' Jansa     jabber: Martin.Jansa@gmail.com

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 205 bytes --]

  reply	other threads:[~2013-06-07 20:42 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-06-07 19:20 is sstate-cache really deterministic together with shlibs providers? Martin Jansa
2013-06-07 20:11 ` Richard Purdie
2013-06-07 20:14 ` Phil Blundell
2013-06-07 20:43   ` Martin Jansa [this message]
2013-06-08 13:23     ` Phil Blundell

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20130607204305.GM22710@jama \
    --to=martin.jansa@gmail.com \
    --cc=openembedded-core@lists.openembedded.org \
    --cc=pb@pbcl.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox