Patchwork [RFC] packagegroup.bbclass: Drop build-time dependencies

login
register
mail settings
Submitter Richard Purdie
Date Nov. 1, 2013, 6:14 p.m.
Message ID <1383329643.6271.63.camel@ted>
Download mbox | patch
Permalink /patch/61013/
State New
Headers show

Comments

Richard Purdie - Nov. 1, 2013, 6:14 p.m.
On Fri, 2013-11-01 at 13:37 +0000, Paul Eggleton wrote:
> Hi Martin,
> 
> On Friday 01 November 2013 13:12:12 Martin Jansa wrote:
> > * RFC because:
> >   packagegroup.bbclass inherits allarch and by default sets
> >   PACKAGE_ARCH = "all", but then it has runtime-dependency on
> >   TUNE_PKGARCH packages and different signatures, so instead
> >   of setting INHIBIT_DEFAULT_DEPS in addition to inherit allarch
> >   I would like to drop default allarch completely.
> 
> The fix looks OK, but I don't think we should be going further and removing the 
> inherit. To my mind, the question of dependencies comes down to whether or not 
> the packagegroup output changes depending on TUNE_PKGARCH, which in the 
> general case it should not do.
> 
> If we need to do some optimisation to avoid the packagegroup recipe rebuilding 
> when it shouldn't due to packages it "contains" changing, we can certainly 
> look at that.

A better idea might be something like:


although this is untested and needs more careful thought...

Cheers,

Richard
Paul Eggleton - Nov. 1, 2013, 7:06 p.m.
On Friday 01 November 2013 18:14:03 Richard Purdie wrote:
> On Fri, 2013-11-01 at 13:37 +0000, Paul Eggleton wrote:
> > On Friday 01 November 2013 13:12:12 Martin Jansa wrote:
> > > * RFC because:
> > >   packagegroup.bbclass inherits allarch and by default sets
> > >   PACKAGE_ARCH = "all", but then it has runtime-dependency on
> > >   TUNE_PKGARCH packages and different signatures, so instead
> > >   of setting INHIBIT_DEFAULT_DEPS in addition to inherit allarch
> > >   I would like to drop default allarch completely.
> > 
> > The fix looks OK, but I don't think we should be going further and
> > removing the inherit. To my mind, the question of dependencies comes down
> > to whether or not the packagegroup output changes depending on
> > TUNE_PKGARCH, which in the general case it should not do.
> > 
> > If we need to do some optimisation to avoid the packagegroup recipe
> > rebuilding when it shouldn't due to packages it "contains" changing, we
> > can certainly look at that.
> 
> A better idea might be something like:
> 
> diff --git a/meta/lib/oe/sstatesig.py b/meta/lib/oe/sstatesig.py
> index 852fb7e..23e28f0 100644
> --- a/meta/lib/oe/sstatesig.py
> +++ b/meta/lib/oe/sstatesig.py
> @@ -11,6 +11,8 @@ def sstate_rundepfilter(siggen, fn, recipename, task, dep,
> depname, dataCache): def isKernel(fn):
>          inherits = " ".join(dataCache.inherits[fn])
>          return inherits.find("module-base.bbclass") != -1 or
> inherits.find("linux-kernel-base.bbclass") != -1 
> +    def isPackageGroup(x):
> +        return "packagegroup-" in x

OK, but I think we can rely on checking inheritance for this. It didn't used 
to be the case but after my task -> packagegroup cleanup some time ago all of 
these recipes inherit the packagegroup class.

Cheers,
Paul

Patch

diff --git a/meta/lib/oe/sstatesig.py b/meta/lib/oe/sstatesig.py
index 852fb7e..23e28f0 100644
--- a/meta/lib/oe/sstatesig.py
+++ b/meta/lib/oe/sstatesig.py
@@ -11,6 +11,8 @@  def sstate_rundepfilter(siggen, fn, recipename, task, dep, depname, dataCache):
     def isKernel(fn):
         inherits = " ".join(dataCache.inherits[fn])
         return inherits.find("module-base.bbclass") != -1 or inherits.find("linux-kernel-base.bbclass") != -1
+    def isPackageGroup(x):
+        return "packagegroup-" in x
 
     # Always include our own inter-task dependencies
     if recipename == depname:
@@ -27,6 +29,10 @@  def sstate_rundepfilter(siggen, fn, recipename, task, dep, depname, dataCache):
 
     # Only target packages beyond here
 
+    # packagegroups are assumed to have well behaved names which don't change between architecures/tunes
+    if isPackageGroup(recipename):
+        return False  
+
     # Drop native/cross/nativesdk dependencies from target recipes
     if isNative(depname) or isCross(depname) or isNativeSDK(depname):
         return False