path: root/bitbake
diff options
authorChristopher Larson <>2012-04-03 18:23:49 -0500
committerRichard Purdie <>2013-02-14 11:14:06 +0000
commit34571f4c101cb977a038e1b3fc36bd49f08b9282 (patch)
treeccdfd9b056e67afb4bc7d9bb2e94a71b9c7732f3 /bitbake
parent83e101568434a099c8d9a3e626c3a37589c3a233 (diff)
bitbake: Remove whitelisted vars from non-task deps
Though the value of variables in the BB_BASEHASH_WHITELIST is kept out of the checksums, dependency on them is not, at least for variables and non-task functions. In the code, the whitelist is removed from the overall task dep list, but not the individual variable deps. The result of this is that functions like sysroot_stage_all and oe_runmake end up with whitelisted variables like TERM listed in their dependencies, which means that doing a 'unset TERM' before building will result in all checksums for tasks that depend on those changing, and shared state reuse not behaving correctly. This is only really a potential issue for variables from the environment, as it's the existance/removal of the variable that's an issue, not its value, and the other whitelisted variables are set in our metadata. This which means in practical terms the only cases where this is likely to be an issue are in environments where one of the following are unset: TERM, LOGNAME, HOME, USER, PWD, SHELL. This may seem like an unlikely circumstance, but is in fact a real issue for those of us using autobuilders. Jenkins does not set TERM when executing shell, which means shared state archives produced by your jenkins server would not be fully reused by an actual user. Fixed by removing the whitelisted elements from the individual variable deps, not just the accumulated result. (Bitbake rev: dac12560ac8431ee24609f8de25cb1645572d350) Signed-off-by: Christopher Larson <> Signed-off-by: Richard Purdie <>
Diffstat (limited to 'bitbake')
1 files changed, 5 insertions, 4 deletions
diff --git a/bitbake/lib/bb/ b/bitbake/lib/bb/
index ba149402bf..50e4558611 100644
--- a/bitbake/lib/bb/
+++ b/bitbake/lib/bb/
@@ -98,6 +98,7 @@ class SignatureGeneratorBasic(SignatureGenerator):
bb.error("Task %s from %s seems to be empty?!" % (task, fn))
data = ''
+ gendeps[task] -= self.basewhitelist
newdeps = gendeps[task]
seen = set()
while newdeps:
@@ -107,12 +108,12 @@ class SignatureGeneratorBasic(SignatureGenerator):
for dep in nextdeps:
if dep in self.basewhitelist:
+ gendeps[dep] -= self.basewhitelist
newdeps |= gendeps[dep]
newdeps -= seen
- alldeps = seen - self.basewhitelist
- for dep in sorted(alldeps):
+ alldeps = sorted(seen)
+ for dep in alldeps:
data = data + dep
if dep in lookupcache:
var = lookupcache[dep]
@@ -126,7 +127,7 @@ class SignatureGeneratorBasic(SignatureGenerator):
if var:
data = data + str(var)
self.basehash[fn + "." + task] = hashlib.md5(data).hexdigest()
- taskdeps[task] = sorted(alldeps)
+ taskdeps[task] = alldeps
self.taskdeps[fn] = taskdeps
self.gendeps[fn] = gendeps