diff options
Diffstat (limited to 'bitbake/lib/bb/siggen.py')
-rw-r--r-- | bitbake/lib/bb/siggen.py | 27 |
1 files changed, 21 insertions, 6 deletions
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 |