[bitbake-devel] [PATCH] siggen.py: Abstract the runtime task dependency handling code in the generators
Richard Purdie
richard.purdie at linuxfoundation.org
Fri Jan 20 16:16:08 UTC 2012
This means that custom signature handlers can override specific parts
of the code without having to reimplement whole functions allowing them
more flexibility.
Signed-off-by: Richard Purdie <richard.purdie at linuxfoundation.org>
---
diff --git a/bitbake/lib/bb/siggen.py b/bitbake/lib/bb/siggen.py
index d9d0294..f31d66a 100644
--- a/bitbake/lib/bb/siggen.py
+++ b/bitbake/lib/bb/siggen.py
@@ -62,9 +62,13 @@ class SignatureGeneratorBasic(SignatureGenerator):
self.runtaskdeps = {}
self.gendeps = {}
self.lookupcache = {}
+ self.pkgnameextract = re.compile("(?P<fn>.*)\..*")
self.basewhitelist = set((data.getVar("BB_HASHBASE_WHITELIST", True) or "").split())
- self.taskwhitelist = data.getVar("BB_HASHTASK_WHITELIST", True) or None
+ self.taskwhitelist = None
+ self.init_rundepcheck(data)
+ def init_rundepcheck(self, data):
+ self.taskwhitelist = data.getVar("BB_HASHTASK_WHITELIST", True) or None
if self.taskwhitelist:
self.twl = re.compile(self.taskwhitelist)
else:
@@ -131,17 +135,24 @@ class SignatureGeneratorBasic(SignatureGenerator):
for task in taskdeps:
d.setVar("BB_BASEHASH_task-%s" % task, self.basehash[fn + "." + task])
+ def rundep_check(self, fn, recipename, task, dep, depname):
+ # Return True if we should keep the dependency, False to drop it
+ # We only manipulate the dependencies for packages not in the whitelist
+ if self.twl and not self.twl.search(recipename):
+ # then process the actual dependencies
+ if self.twl.search(depname):
+ return False
+ return True
+
def get_taskhash(self, fn, task, deps, dataCache):
k = fn + "." + task
data = dataCache.basetaskhash[k]
self.runtaskdeps[k] = []
+ recipename = dataCache.pkg_fn[fn]
for dep in sorted(deps, key=clean_basepath):
- # We only manipulate the dependencies for packages not in the whitelist
- if self.twl and not self.twl.search(dataCache.pkg_fn[fn]):
- # then process the actual dependencies
- dep_fn = re.search("(?P<fn>.*)\..*", dep).group('fn')
- if self.twl.search(dataCache.pkg_fn[dep_fn]):
- continue
+ depname = dataCache.pkg_fn[self.pkgnameextract.search(dep).group('fn')]
+ if not self.rundep_check(fn, recipename, task, dep, depname):
+ continue
if dep not in self.taskhash:
bb.fatal("%s is not in taskhash, caller isn't calling in dependency order?", dep)
data = data + self.taskhash[dep]
More information about the bitbake-devel
mailing list