mirror of
https://git.yoctoproject.org/poky
synced 2026-04-27 21:32:13 +02:00
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. (From OE-Core rev: 91fc672756d45086cdf4e9c6de8e920dcd8cd14e) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user