diff options
author | Richard Purdie <richard.purdie@linuxfoundation.org> | 2012-02-22 22:15:59 +0000 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2012-02-23 22:36:09 +0000 |
commit | 91fc672756d45086cdf4e9c6de8e920dcd8cd14e (patch) | |
tree | 730a79ec2bba674a645bd205d650721472be53a7 /meta/lib | |
parent | bf1628286987ad6b4a762b0aeb6aece4a51e7255 (diff) | |
download | openembedded-core-91fc672756d45086cdf4e9c6de8e920dcd8cd14e.tar.gz openembedded-core-91fc672756d45086cdf4e9c6de8e920dcd8cd14e.tar.bz2 openembedded-core-91fc672756d45086cdf4e9c6de8e920dcd8cd14e.tar.xz openembedded-core-91fc672756d45086cdf4e9c6de8e920dcd8cd14e.zip |
sstatesig.py: Add handling for machine specific module dependencies
Adding dependencies on machine specific recipes from generic packages
causes a rebuild of the generic package per machine if using signatures
for the stamp files which is unacceptable.
We need to declare that RRECOMMENDS on kernel-module-* are safe
and that we shouldn't care about these machine specific dependencies
from a stamp perspective. This change adds code which does this.
It depends on a change in bitbake to expose the dataCache object
which can be used to make the calculations we need to allow this to
work correctly.
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/lib')
-rw-r--r-- | meta/lib/oe/sstatesig.py | 26 |
1 files changed, 20 insertions, 6 deletions
diff --git a/meta/lib/oe/sstatesig.py b/meta/lib/oe/sstatesig.py index ee7cbad0d..5a64882fb 100644 --- a/meta/lib/oe/sstatesig.py +++ b/meta/lib/oe/sstatesig.py @@ -1,6 +1,6 @@ import bb.siggen -def sstate_rundepfilter(fn, recipename, task, dep, depname): +def sstate_rundepfilter(fn, recipename, task, dep, depname, dataCache): # Return True if we should keep the dependency, False to drop it def isNative(x): return x.endswith("-native") @@ -8,13 +8,16 @@ def sstate_rundepfilter(fn, recipename, task, dep, depname): return x.endswith("-cross") or x.endswith("-cross-initial") or x.endswith("-cross-intermediate") def isNativeSDK(x): return x.endswith("-nativesdk") + def isKernel(fn): + inherits = " ".join(dataCache.inherits[fn]) + return inherits.find("module-base.bbclass") != -1 or inherits.find("linux-kernel-base.bbclass") != -1 # Always include our own inter-task dependencies if recipename == depname: return True # Quilt (patch application) changing isn't likely to affect anything - if depname == "quilt-native": + if depname == "quilt-native" and recipename != "quilt-native": return False # Don't change native/cross/nativesdk recipe dependencies any further if isNative(recipename) or isCross(recipename) or isNativeSDK(recipename): @@ -30,6 +33,17 @@ def sstate_rundepfilter(fn, recipename, task, dep, depname): if depname in ['sysvinit-inittab', 'shadow-securetty', 'opkg-config-base', 'netbase', 'formfactor', 'xserver-xf86-config', 'pointercal', 'base-files']: return False + # Kernel modules are well namespaced. We don't want to depend on the kernel's checksum + # if we're just doing an RRECOMMENDS_xxx = "kernel-module-*", not least because the checksum + # is machine specific. + # Therefore if we're not a kernel or a module recipe (inheriting the kernel classes) + # and we reccomend a kernel-module, we exclude the dependency. + depfn = dep.rsplit(".", 1)[0] + if dataCache and isKernel(depfn) and not isKernel(fn): + for pkg in dataCache.runrecs[fn]: + if " ".join(dataCache.runrecs[fn][pkg]).find("kernel-module-") != -1: + return False + # Default to keep dependencies return True @@ -37,15 +51,15 @@ class SignatureGeneratorOEBasic(bb.siggen.SignatureGeneratorBasic): name = "OEBasic" def init_rundepcheck(self, data): pass - def rundep_check(self, fn, recipename, task, dep, depname): - return sstate_rundepfilter(fn, recipename, task, dep, depname) + def rundep_check(self, fn, recipename, task, dep, depname, dataCache = None): + return sstate_rundepfilter(fn, recipename, task, dep, depname, dataCache) class SignatureGeneratorOEBasicHash(bb.siggen.SignatureGeneratorBasicHash): name = "OEBasicHash" def init_rundepcheck(self, data): pass - def rundep_check(self, fn, recipename, task, dep, depname): - return sstate_rundepfilter(fn, recipename, task, dep, depname) + def rundep_check(self, fn, recipename, task, dep, depname, dataCache = None): + return sstate_rundepfilter(fn, recipename, task, dep, depname, dataCache) # Insert these classes into siggen's namespace so it can see and select them bb.siggen.SignatureGeneratorOEBasic = SignatureGeneratorOEBasic |