summaryrefslogtreecommitdiffstats
path: root/bitbake/lib
diff options
context:
space:
mode:
Diffstat (limited to 'bitbake/lib')
-rw-r--r--bitbake/lib/bb/siggen.py77
1 files changed, 39 insertions, 38 deletions
diff --git a/bitbake/lib/bb/siggen.py b/bitbake/lib/bb/siggen.py
index 513f3811a1..f551c74890 100644
--- a/bitbake/lib/bb/siggen.py
+++ b/bitbake/lib/bb/siggen.py
@@ -144,7 +144,7 @@ class SignatureGenerator(object):
144 def stampcleanmask(self, stampbase, file_name, taskname, extrainfo): 144 def stampcleanmask(self, stampbase, file_name, taskname, extrainfo):
145 return ("%s.%s.%s" % (stampbase, taskname, extrainfo)).rstrip('.') 145 return ("%s.%s.%s" % (stampbase, taskname, extrainfo)).rstrip('.')
146 146
147 def dump_sigtask(self, fn, task, stampbase, runtime): 147 def dump_sigtask(self, mcfn, task, stampbase, runtime):
148 return 148 return
149 149
150 def invalidate_task(self, task, mcfn): 150 def invalidate_task(self, task, mcfn):
@@ -217,15 +217,15 @@ class SignatureGeneratorBasic(SignatureGenerator):
217 else: 217 else:
218 self.twl = None 218 self.twl = None
219 219
220 def _build_data(self, fn, d): 220 def _build_data(self, mcfn, d):
221 221
222 ignore_mismatch = ((d.getVar("BB_HASH_IGNORE_MISMATCH") or '') == '1') 222 ignore_mismatch = ((d.getVar("BB_HASH_IGNORE_MISMATCH") or '') == '1')
223 tasklist, gendeps, lookupcache = bb.data.generate_dependencies(d, self.basehash_ignore_vars) 223 tasklist, gendeps, lookupcache = bb.data.generate_dependencies(d, self.basehash_ignore_vars)
224 224
225 taskdeps, basehash = bb.data.generate_dependency_hash(tasklist, gendeps, lookupcache, self.basehash_ignore_vars, fn) 225 taskdeps, basehash = bb.data.generate_dependency_hash(tasklist, gendeps, lookupcache, self.basehash_ignore_vars, mcfn)
226 226
227 for task in tasklist: 227 for task in tasklist:
228 tid = fn + ":" + task 228 tid = mcfn + ":" + task
229 if not ignore_mismatch and tid in self.basehash and self.basehash[tid] != basehash[tid]: 229 if not ignore_mismatch and tid in self.basehash and self.basehash[tid] != basehash[tid]:
230 bb.error("When reparsing %s, the basehash value changed from %s to %s. The metadata is not deterministic and this needs to be fixed." % (tid, self.basehash[tid], basehash[tid])) 230 bb.error("When reparsing %s, the basehash value changed from %s to %s. The metadata is not deterministic and this needs to be fixed." % (tid, self.basehash[tid], basehash[tid]))
231 bb.error("The following commands may help:") 231 bb.error("The following commands may help:")
@@ -244,24 +244,25 @@ class SignatureGeneratorBasic(SignatureGenerator):
244 def finalise(self, fn, d, variant): 244 def finalise(self, fn, d, variant):
245 245
246 mc = d.getVar("__BBMULTICONFIG", False) or "" 246 mc = d.getVar("__BBMULTICONFIG", False) or ""
247 mcfn = fn
247 if variant or mc: 248 if variant or mc:
248 fn = bb.cache.realfn2virtual(fn, variant, mc) 249 mcfn = bb.cache.realfn2virtual(fn, variant, mc)
249 250
250 try: 251 try:
251 taskdeps, gendeps, lookupcache = self._build_data(fn, d) 252 taskdeps, gendeps, lookupcache = self._build_data(mcfn, d)
252 except bb.parse.SkipRecipe: 253 except bb.parse.SkipRecipe:
253 raise 254 raise
254 except: 255 except:
255 bb.warn("Error during finalise of %s" % fn) 256 bb.warn("Error during finalise of %s" % mcfn)
256 raise 257 raise
257 258
258 #Slow but can be useful for debugging mismatched basehashes 259 #Slow but can be useful for debugging mismatched basehashes
259 #for task in self.taskdeps[fn]: 260 #for task in self.taskdeps[mcfn]:
260 # self.dump_sigtask(fn, task, d.getVar("STAMP"), False) 261 # self.dump_sigtask(mcfn, task, d.getVar("STAMP"), False)
261 262
262 basehashes = {} 263 basehashes = {}
263 for task in taskdeps: 264 for task in taskdeps:
264 basehashes[task] = self.basehash[fn + ":" + task] 265 basehashes[task] = self.basehash[mcfn + ":" + task]
265 266
266 d.setVar("__siggen_basehashes", basehashes) 267 d.setVar("__siggen_basehashes", basehashes)
267 d.setVar("__siggen_gendeps", gendeps) 268 d.setVar("__siggen_gendeps", gendeps)
@@ -300,33 +301,33 @@ class SignatureGeneratorBasic(SignatureGenerator):
300 301
301 def prep_taskhash(self, tid, deps, dataCaches): 302 def prep_taskhash(self, tid, deps, dataCaches):
302 303
303 (mc, _, task, fn) = bb.runqueue.split_tid_mcfn(tid) 304 (mc, _, task, mcfn) = bb.runqueue.split_tid_mcfn(tid)
304 305
305 self.basehash[tid] = dataCaches[mc].basetaskhash[tid] 306 self.basehash[tid] = dataCaches[mc].basetaskhash[tid]
306 self.runtaskdeps[tid] = [] 307 self.runtaskdeps[tid] = []
307 self.file_checksum_values[tid] = [] 308 self.file_checksum_values[tid] = []
308 recipename = dataCaches[mc].pkg_fn[fn] 309 recipename = dataCaches[mc].pkg_fn[mcfn]
309 310
310 self.tidtopn[tid] = recipename 311 self.tidtopn[tid] = recipename
311 312
312 for dep in sorted(deps, key=clean_basepath): 313 for dep in sorted(deps, key=clean_basepath):
313 (depmc, _, _, depmcfn) = bb.runqueue.split_tid_mcfn(dep) 314 (depmc, _, _, depmcfn) = bb.runqueue.split_tid_mcfn(dep)
314 depname = dataCaches[depmc].pkg_fn[depmcfn] 315 depname = dataCaches[depmc].pkg_fn[depmcfn]
315 if not self.rundep_check(fn, recipename, task, dep, depname, dataCaches): 316 if not self.rundep_check(mcfn, recipename, task, dep, depname, dataCaches):
316 continue 317 continue
317 if dep not in self.taskhash: 318 if dep not in self.taskhash:
318 bb.fatal("%s is not in taskhash, caller isn't calling in dependency order?" % dep) 319 bb.fatal("%s is not in taskhash, caller isn't calling in dependency order?" % dep)
319 self.runtaskdeps[tid].append(dep) 320 self.runtaskdeps[tid].append(dep)
320 321
321 if task in dataCaches[mc].file_checksums[fn]: 322 if task in dataCaches[mc].file_checksums[mcfn]:
322 if self.checksum_cache: 323 if self.checksum_cache:
323 checksums = self.checksum_cache.get_checksums(dataCaches[mc].file_checksums[fn][task], recipename, self.localdirsexclude) 324 checksums = self.checksum_cache.get_checksums(dataCaches[mc].file_checksums[mcfn][task], recipename, self.localdirsexclude)
324 else: 325 else:
325 checksums = bb.fetch2.get_file_checksums(dataCaches[mc].file_checksums[fn][task], recipename, self.localdirsexclude) 326 checksums = bb.fetch2.get_file_checksums(dataCaches[mc].file_checksums[mcfn][task], recipename, self.localdirsexclude)
326 for (f,cs) in checksums: 327 for (f,cs) in checksums:
327 self.file_checksum_values[tid].append((f,cs)) 328 self.file_checksum_values[tid].append((f,cs))
328 329
329 taskdep = dataCaches[mc].task_deps[fn] 330 taskdep = dataCaches[mc].task_deps[mcfn]
330 if 'nostamp' in taskdep and task in taskdep['nostamp']: 331 if 'nostamp' in taskdep and task in taskdep['nostamp']:
331 # Nostamp tasks need an implicit taint so that they force any dependent tasks to run 332 # Nostamp tasks need an implicit taint so that they force any dependent tasks to run
332 if tid in self.taints and self.taints[tid].startswith("nostamp:"): 333 if tid in self.taints and self.taints[tid].startswith("nostamp:"):
@@ -337,7 +338,7 @@ class SignatureGeneratorBasic(SignatureGenerator):
337 taint = str(uuid.uuid4()) 338 taint = str(uuid.uuid4())
338 self.taints[tid] = "nostamp:" + taint 339 self.taints[tid] = "nostamp:" + taint
339 340
340 taint = self.read_taint(fn, task, dataCaches[mc].stamp[fn]) 341 taint = self.read_taint(mcfn, task, dataCaches[mc].stamp[mcfn])
341 if taint: 342 if taint:
342 self.taints[tid] = taint 343 self.taints[tid] = taint
343 logger.warning("%s is tainted from a forced run" % tid) 344 logger.warning("%s is tainted from a forced run" % tid)
@@ -382,9 +383,9 @@ class SignatureGeneratorBasic(SignatureGenerator):
382 def copy_unitaskhashes(self, targetdir): 383 def copy_unitaskhashes(self, targetdir):
383 self.unihash_cache.copyfile(targetdir) 384 self.unihash_cache.copyfile(targetdir)
384 385
385 def dump_sigtask(self, fn, task, stampbase, runtime): 386 def dump_sigtask(self, mcfn, task, stampbase, runtime):
386 tid = fn + ":" + task 387 tid = mcfn + ":" + task
387 mc = bb.runqueue.mc_from_tid(fn) 388 mc = bb.runqueue.mc_from_tid(mcfn)
388 referencestamp = stampbase 389 referencestamp = stampbase
389 if isinstance(runtime, str) and runtime.startswith("customfile"): 390 if isinstance(runtime, str) and runtime.startswith("customfile"):
390 sigfile = stampbase 391 sigfile = stampbase
@@ -401,16 +402,16 @@ class SignatureGeneratorBasic(SignatureGenerator):
401 data['task'] = task 402 data['task'] = task
402 data['basehash_ignore_vars'] = self.basehash_ignore_vars 403 data['basehash_ignore_vars'] = self.basehash_ignore_vars
403 data['taskhash_ignore_tasks'] = self.taskhash_ignore_tasks 404 data['taskhash_ignore_tasks'] = self.taskhash_ignore_tasks
404 data['taskdeps'] = self.datacaches[mc].siggen_taskdeps[fn][task] 405 data['taskdeps'] = self.datacaches[mc].siggen_taskdeps[mcfn][task]
405 data['basehash'] = self.basehash[tid] 406 data['basehash'] = self.basehash[tid]
406 data['gendeps'] = {} 407 data['gendeps'] = {}
407 data['varvals'] = {} 408 data['varvals'] = {}
408 data['varvals'][task] = self.datacaches[mc].siggen_varvals[fn][task] 409 data['varvals'][task] = self.datacaches[mc].siggen_varvals[mcfn][task]
409 for dep in self.datacaches[mc].siggen_taskdeps[fn][task]: 410 for dep in self.datacaches[mc].siggen_taskdeps[mcfn][task]:
410 if dep in self.basehash_ignore_vars: 411 if dep in self.basehash_ignore_vars:
411 continue 412 continue
412 data['gendeps'][dep] = self.datacaches[mc].siggen_gendeps[fn][dep] 413 data['gendeps'][dep] = self.datacaches[mc].siggen_gendeps[mcfn][dep]
413 data['varvals'][dep] = self.datacaches[mc].siggen_varvals[fn][dep] 414 data['varvals'][dep] = self.datacaches[mc].siggen_varvals[mcfn][dep]
414 415
415 if runtime and tid in self.taskhash: 416 if runtime and tid in self.taskhash:
416 data['runtaskdeps'] = self.runtaskdeps[tid] 417 data['runtaskdeps'] = self.runtaskdeps[tid]
@@ -426,7 +427,7 @@ class SignatureGeneratorBasic(SignatureGenerator):
426 data['taskhash'] = self.taskhash[tid] 427 data['taskhash'] = self.taskhash[tid]
427 data['unihash'] = self.get_unihash(tid) 428 data['unihash'] = self.get_unihash(tid)
428 429
429 taint = self.read_taint(fn, task, referencestamp) 430 taint = self.read_taint(mcfn, task, referencestamp)
430 if taint: 431 if taint:
431 data['taint'] = taint 432 data['taint'] = taint
432 433
@@ -467,11 +468,11 @@ class SignatureGeneratorBasicHash(SignatureGeneratorBasic):
467 # If task is not in basehash, then error 468 # If task is not in basehash, then error
468 return self.basehash[tid] 469 return self.basehash[tid]
469 470
470 def stampfile(self, stampbase, fn, taskname, extrainfo, clean=False): 471 def stampfile(self, stampbase, mcfn, taskname, extrainfo, clean=False):
471 if taskname.endswith("_setscene"): 472 if taskname.endswith("_setscene"):
472 tid = fn + ":" + taskname[:-9] 473 tid = mcfn + ":" + taskname[:-9]
473 else: 474 else:
474 tid = fn + ":" + taskname 475 tid = mcfn + ":" + taskname
475 if clean: 476 if clean:
476 h = "*" 477 h = "*"
477 else: 478 else:
@@ -479,8 +480,8 @@ class SignatureGeneratorBasicHash(SignatureGeneratorBasic):
479 480
480 return ("%s.%s.%s.%s" % (stampbase, taskname, h, extrainfo)).rstrip('.') 481 return ("%s.%s.%s.%s" % (stampbase, taskname, h, extrainfo)).rstrip('.')
481 482
482 def stampcleanmask(self, stampbase, fn, taskname, extrainfo): 483 def stampcleanmask(self, stampbase, mcfn, taskname, extrainfo):
483 return self.stampfile(stampbase, fn, taskname, extrainfo, clean=True) 484 return self.stampfile(stampbase, mcfn, taskname, extrainfo, clean=True)
484 485
485 def invalidate_task(self, task, mcfn): 486 def invalidate_task(self, task, mcfn):
486 bb.note("Tainting hash to force rebuild of task %s, %s" % (mcfn, task)) 487 bb.note("Tainting hash to force rebuild of task %s, %s" % (mcfn, task))
@@ -614,8 +615,8 @@ class SignatureGeneratorUniHashMixIn(object):
614 unihash = d.getVar('BB_UNIHASH') 615 unihash = d.getVar('BB_UNIHASH')
615 report_taskdata = d.getVar('SSTATE_HASHEQUIV_REPORT_TASKDATA') == '1' 616 report_taskdata = d.getVar('SSTATE_HASHEQUIV_REPORT_TASKDATA') == '1'
616 tempdir = d.getVar('T') 617 tempdir = d.getVar('T')
617 fn = d.getVar('BB_FILENAME') 618 mcfn = d.getVar('BB_FILENAME')
618 tid = fn + ':do_' + task 619 tid = mcfn + ':do_' + task
619 key = tid + ':' + taskhash 620 key = tid + ':' + taskhash
620 621
621 if self.setscenetasks and tid not in self.setscenetasks: 622 if self.setscenetasks and tid not in self.setscenetasks:
@@ -674,7 +675,7 @@ class SignatureGeneratorUniHashMixIn(object):
674 675
675 if new_unihash != unihash: 676 if new_unihash != unihash:
676 hashequiv_logger.debug('Task %s unihash changed %s -> %s by server %s' % (taskhash, unihash, new_unihash, self.server)) 677 hashequiv_logger.debug('Task %s unihash changed %s -> %s by server %s' % (taskhash, unihash, new_unihash, self.server))
677 bb.event.fire(bb.runqueue.taskUniHashUpdate(fn + ':do_' + task, new_unihash), d) 678 bb.event.fire(bb.runqueue.taskUniHashUpdate(mcfn + ':do_' + task, new_unihash), d)
678 self.set_unihash(tid, new_unihash) 679 self.set_unihash(tid, new_unihash)
679 d.setVar('BB_UNIHASH', new_unihash) 680 d.setVar('BB_UNIHASH', new_unihash)
680 else: 681 else:
@@ -736,10 +737,10 @@ class SignatureGeneratorTestEquivHash(SignatureGeneratorUniHashMixIn, SignatureG
736 737
737def dump_this_task(outfile, d): 738def dump_this_task(outfile, d):
738 import bb.parse 739 import bb.parse
739 fn = d.getVar("BB_FILENAME") 740 mcfn = d.getVar("BB_FILENAME")
740 task = "do_" + d.getVar("BB_CURRENTTASK") 741 task = "do_" + d.getVar("BB_CURRENTTASK")
741 referencestamp = bb.parse.siggen.stampfile_base(fn) 742 referencestamp = bb.parse.siggen.stampfile_base(mcfn)
742 bb.parse.siggen.dump_sigtask(fn, task, outfile, "customfile:" + referencestamp) 743 bb.parse.siggen.dump_sigtask(mcfn, task, outfile, "customfile:" + referencestamp)
743 744
744def init_colors(enable_color): 745def init_colors(enable_color):
745 """Initialise colour dict for passing to compare_sigfiles()""" 746 """Initialise colour dict for passing to compare_sigfiles()"""