diff options
| -rw-r--r-- | bitbake/lib/bb/cooker.py | 4 | ||||
| -rw-r--r-- | bitbake/lib/bb/parse/__init__.py | 4 | ||||
| -rw-r--r-- | bitbake/lib/bb/siggen.py | 29 |
3 files changed, 22 insertions, 15 deletions
diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py index 5cea9dba9d..44b9b2c31a 100644 --- a/bitbake/lib/bb/cooker.py +++ b/bitbake/lib/bb/cooker.py | |||
| @@ -497,7 +497,7 @@ class BBCooker: | |||
| 497 | try: | 497 | try: |
| 498 | data = self.configuration.data | 498 | data = self.configuration.data |
| 499 | 499 | ||
| 500 | bb.parse.init_parser(data) | 500 | bb.parse.init_parser(data, self.configuration.dump_signatures) |
| 501 | for f in files: | 501 | for f in files: |
| 502 | data = bb.parse.handle(f, data) | 502 | data = bb.parse.handle(f, data) |
| 503 | 503 | ||
| @@ -550,7 +550,7 @@ class BBCooker: | |||
| 550 | bb.fetch.fetcher_init(self.configuration.data) | 550 | bb.fetch.fetcher_init(self.configuration.data) |
| 551 | bb.codeparser.parser_cache_init(self.configuration.data) | 551 | bb.codeparser.parser_cache_init(self.configuration.data) |
| 552 | 552 | ||
| 553 | bb.parse.init_parser(data) | 553 | bb.parse.init_parser(data, self.configuration.dump_signatures) |
| 554 | 554 | ||
| 555 | bb.event.fire(bb.event.ConfigParsed(), self.configuration.data) | 555 | bb.event.fire(bb.event.ConfigParsed(), self.configuration.data) |
| 556 | 556 | ||
diff --git a/bitbake/lib/bb/parse/__init__.py b/bitbake/lib/bb/parse/__init__.py index c7249ef050..da160ceb27 100644 --- a/bitbake/lib/bb/parse/__init__.py +++ b/bitbake/lib/bb/parse/__init__.py | |||
| @@ -80,8 +80,8 @@ def init(fn, data): | |||
| 80 | if h['supports'](fn): | 80 | if h['supports'](fn): |
| 81 | return h['init'](data) | 81 | return h['init'](data) |
| 82 | 82 | ||
| 83 | def init_parser(d): | 83 | def init_parser(d, dumpsigs): |
| 84 | bb.parse.siggen = bb.siggen.init(d) | 84 | bb.parse.siggen = bb.siggen.init(d, dumpsigs) |
| 85 | 85 | ||
| 86 | def resolve_file(fn, d): | 86 | def resolve_file(fn, d): |
| 87 | if not os.path.isabs(fn): | 87 | if not os.path.isabs(fn): |
diff --git a/bitbake/lib/bb/siggen.py b/bitbake/lib/bb/siggen.py index eb624311a0..2948372c6a 100644 --- a/bitbake/lib/bb/siggen.py +++ b/bitbake/lib/bb/siggen.py | |||
| @@ -7,26 +7,26 @@ except ImportError: | |||
| 7 | import pickle | 7 | import pickle |
| 8 | bb.msg.note(1, bb.msg.domain.Cache, "Importing cPickle failed. Falling back to a very slow implementation.") | 8 | bb.msg.note(1, bb.msg.domain.Cache, "Importing cPickle failed. Falling back to a very slow implementation.") |
| 9 | 9 | ||
| 10 | def init(d): | 10 | def init(d, dumpsigs): |
| 11 | siggens = [obj for obj in globals().itervalues() | 11 | siggens = [obj for obj in globals().itervalues() |
| 12 | if type(obj) is type and issubclass(obj, SignatureGenerator)] | 12 | if type(obj) is type and issubclass(obj, SignatureGenerator)] |
| 13 | 13 | ||
| 14 | desired = bb.data.getVar("BB_SIGNATURE_HANDLER", d, True) or "noop" | 14 | desired = bb.data.getVar("BB_SIGNATURE_HANDLER", d, True) or "noop" |
| 15 | for sg in siggens: | 15 | for sg in siggens: |
| 16 | if desired == sg.name: | 16 | if desired == sg.name: |
| 17 | return sg(d) | 17 | return sg(d, dumpsigs) |
| 18 | break | 18 | break |
| 19 | else: | 19 | else: |
| 20 | bb.error("Invalid signature generator '%s', using default 'noop' generator" % desired) | 20 | bb.error("Invalid signature generator '%s', using default 'noop' generator" % desired) |
| 21 | bb.error("Available generators: %s" % ", ".join(obj.name for obj in siggens)) | 21 | bb.error("Available generators: %s" % ", ".join(obj.name for obj in siggens)) |
| 22 | return SignatureGenerator(d) | 22 | return SignatureGenerator(d, dumpsigs) |
| 23 | 23 | ||
| 24 | class SignatureGenerator(object): | 24 | class SignatureGenerator(object): |
| 25 | """ | 25 | """ |
| 26 | """ | 26 | """ |
| 27 | name = "noop" | 27 | name = "noop" |
| 28 | 28 | ||
| 29 | def __init__(self, data): | 29 | def __init__(self, data, dumpsigs): |
| 30 | return | 30 | return |
| 31 | 31 | ||
| 32 | def finalise(self, fn, d): | 32 | def finalise(self, fn, d): |
| @@ -37,7 +37,7 @@ class SignatureGeneratorBasic(SignatureGenerator): | |||
| 37 | """ | 37 | """ |
| 38 | name = "basic" | 38 | name = "basic" |
| 39 | 39 | ||
| 40 | def __init__(self, data): | 40 | def __init__(self, data, dumpsigs): |
| 41 | self.basehash = {} | 41 | self.basehash = {} |
| 42 | self.taskhash = {} | 42 | self.taskhash = {} |
| 43 | self.taskdeps = {} | 43 | self.taskdeps = {} |
| @@ -52,17 +52,19 @@ class SignatureGeneratorBasic(SignatureGenerator): | |||
| 52 | else: | 52 | else: |
| 53 | self.twl = None | 53 | self.twl = None |
| 54 | 54 | ||
| 55 | self.dumpsigs = dumpsigs | ||
| 56 | |||
| 55 | def _build_data(self, fn, d): | 57 | def _build_data(self, fn, d): |
| 56 | 58 | ||
| 57 | self.taskdeps[fn], self.gendeps[fn] = bb.data.generate_dependencies(d) | 59 | taskdeps, gendeps = bb.data.generate_dependencies(d) |
| 58 | 60 | ||
| 59 | basehash = {} | 61 | basehash = {} |
| 60 | lookupcache = {} | 62 | lookupcache = {} |
| 61 | 63 | ||
| 62 | for task in self.taskdeps[fn]: | 64 | for task in taskdeps: |
| 63 | data = d.getVar(task, False) | 65 | data = d.getVar(task, False) |
| 64 | lookupcache[task] = data | 66 | lookupcache[task] = data |
| 65 | for dep in sorted(self.taskdeps[fn][task]): | 67 | for dep in sorted(taskdeps[task]): |
| 66 | if dep in self.basewhitelist: | 68 | if dep in self.basewhitelist: |
| 67 | continue | 69 | continue |
| 68 | if dep in lookupcache: | 70 | if dep in lookupcache: |
| @@ -75,20 +77,25 @@ class SignatureGeneratorBasic(SignatureGenerator): | |||
| 75 | self.basehash[fn + "." + task] = hashlib.md5(data).hexdigest() | 77 | self.basehash[fn + "." + task] = hashlib.md5(data).hexdigest() |
| 76 | #bb.note("Hash for %s is %s" % (task, tashhash[task])) | 78 | #bb.note("Hash for %s is %s" % (task, tashhash[task])) |
| 77 | 79 | ||
| 78 | self.lookupcache[fn] = lookupcache | 80 | if self.dumpsigs: |
| 81 | self.taskdeps[fn] = taskdeps | ||
| 82 | self.gendeps[fn] = gendeps | ||
| 83 | self.lookupcache[fn] = lookupcache | ||
| 84 | |||
| 85 | return taskdeps | ||
| 79 | 86 | ||
| 80 | def finalise(self, fn, d, variant): | 87 | def finalise(self, fn, d, variant): |
| 81 | 88 | ||
| 82 | if variant: | 89 | if variant: |
| 83 | fn = "virtual:" + variant + ":" + fn | 90 | fn = "virtual:" + variant + ":" + fn |
| 84 | 91 | ||
| 85 | self._build_data(fn, d) | 92 | taskdeps = self._build_data(fn, d) |
| 86 | 93 | ||
| 87 | #Slow but can be useful for debugging mismatched basehashes | 94 | #Slow but can be useful for debugging mismatched basehashes |
| 88 | #for task in self.taskdeps[fn]: | 95 | #for task in self.taskdeps[fn]: |
| 89 | # self.dump_sigtask(fn, task, d.getVar("STAMP", True), False) | 96 | # self.dump_sigtask(fn, task, d.getVar("STAMP", True), False) |
| 90 | 97 | ||
| 91 | for task in self.taskdeps[fn]: | 98 | for task in taskdeps: |
| 92 | d.setVar("BB_BASEHASH_task-%s" % task, self.basehash[fn + "." + task]) | 99 | d.setVar("BB_BASEHASH_task-%s" % task, self.basehash[fn + "." + task]) |
| 93 | 100 | ||
| 94 | def get_taskhash(self, fn, task, deps, dataCache): | 101 | def get_taskhash(self, fn, task, deps, dataCache): |
