summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bitbake/lib/bb/data.py5
-rw-r--r--bitbake/lib/bb/siggen.py27
2 files changed, 22 insertions, 10 deletions
diff --git a/bitbake/lib/bb/data.py b/bitbake/lib/bb/data.py
index 198b628fad..50f2218a70 100644
--- a/bitbake/lib/bb/data.py
+++ b/bitbake/lib/bb/data.py
@@ -313,12 +313,10 @@ def generate_dependencies(d):
313 shelldeps = set(key for key in keys if d.getVarFlag(key, "export") and not d.getVarFlag(key, "unexport")) 313 shelldeps = set(key for key in keys if d.getVarFlag(key, "export") and not d.getVarFlag(key, "unexport"))
314 314
315 deps = {} 315 deps = {}
316 taskdeps = {}
317 316
318 tasklist = bb.data.getVar('__BBTASKS', d) or [] 317 tasklist = bb.data.getVar('__BBTASKS', d) or []
319 for task in tasklist: 318 for task in tasklist:
320 deps[task] = build_dependencies(task, keys, shelldeps, d) 319 deps[task] = build_dependencies(task, keys, shelldeps, d)
321
322 newdeps = deps[task] 320 newdeps = deps[task]
323 seen = set() 321 seen = set()
324 while newdeps: 322 while newdeps:
@@ -330,9 +328,8 @@ def generate_dependencies(d):
330 deps[dep] = build_dependencies(dep, keys, shelldeps, d) 328 deps[dep] = build_dependencies(dep, keys, shelldeps, d)
331 newdeps |= deps[dep] 329 newdeps |= deps[dep]
332 newdeps -= seen 330 newdeps -= seen
333 taskdeps[task] = seen | newdeps
334 #print "For %s: %s" % (task, str(taskdeps[task])) 331 #print "For %s: %s" % (task, str(taskdeps[task]))
335 return taskdeps, deps 332 return tasklist, deps
336 333
337def inherits_class(klass, d): 334def inherits_class(klass, d):
338 val = getVar('__inherit_cache', d) or [] 335 val = getVar('__inherit_cache', d) or []
diff --git a/bitbake/lib/bb/siggen.py b/bitbake/lib/bb/siggen.py
index 4dc09b3f9e..010c2cab26 100644
--- a/bitbake/lib/bb/siggen.py
+++ b/bitbake/lib/bb/siggen.py
@@ -57,7 +57,7 @@ class SignatureGeneratorBasic(SignatureGenerator):
57 self.runtaskdeps = {} 57 self.runtaskdeps = {}
58 self.gendeps = {} 58 self.gendeps = {}
59 self.lookupcache = {} 59 self.lookupcache = {}
60 self.basewhitelist = (data.getVar("BB_HASHBASE_WHITELIST", True) or "").split() 60 self.basewhitelist = set((data.getVar("BB_HASHBASE_WHITELIST", True) or "").split())
61 self.taskwhitelist = data.getVar("BB_HASHTASK_WHITELIST", True) or None 61 self.taskwhitelist = data.getVar("BB_HASHTASK_WHITELIST", True) or None
62 62
63 if self.taskwhitelist: 63 if self.taskwhitelist:
@@ -67,17 +67,31 @@ class SignatureGeneratorBasic(SignatureGenerator):
67 67
68 def _build_data(self, fn, d): 68 def _build_data(self, fn, d):
69 69
70 taskdeps, gendeps = bb.data.generate_dependencies(d) 70 tasklist, gendeps = bb.data.generate_dependencies(d)
71 71
72 taskdeps = {}
72 basehash = {} 73 basehash = {}
73 lookupcache = {} 74 lookupcache = {}
74 75
75 for task in taskdeps: 76 for task in tasklist:
76 data = d.getVar(task, False) 77 data = d.getVar(task, False)
77 lookupcache[task] = data 78 lookupcache[task] = data
78 for dep in sorted(taskdeps[task]): 79
79 if dep in self.basewhitelist: 80 newdeps = gendeps[task]
80 continue 81 seen = set()
82 while newdeps:
83 nextdeps = newdeps
84 seen |= nextdeps
85 newdeps = set()
86 for dep in nextdeps:
87 if dep in self.basewhitelist:
88 continue
89 newdeps |= gendeps[dep]
90 newdeps -= seen
91
92 alldeps = seen - self.basewhitelist
93
94 for dep in sorted(alldeps):
81 if dep in lookupcache: 95 if dep in lookupcache:
82 var = lookupcache[dep] 96 var = lookupcache[dep]
83 else: 97 else:
@@ -88,6 +102,7 @@ class SignatureGeneratorBasic(SignatureGenerator):
88 if data is None: 102 if data is None:
89 bb.error("Task %s from %s seems to be empty?!" % (task, fn)) 103 bb.error("Task %s from %s seems to be empty?!" % (task, fn))
90 self.basehash[fn + "." + task] = hashlib.md5(data).hexdigest() 104 self.basehash[fn + "." + task] = hashlib.md5(data).hexdigest()
105 taskdeps[task] = sorted(alldeps)
91 106
92 self.taskdeps[fn] = taskdeps 107 self.taskdeps[fn] = taskdeps
93 self.gendeps[fn] = gendeps 108 self.gendeps[fn] = gendeps