summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/bb/taskdata.py
diff options
context:
space:
mode:
Diffstat (limited to 'bitbake/lib/bb/taskdata.py')
-rw-r--r--bitbake/lib/bb/taskdata.py28
1 files changed, 23 insertions, 5 deletions
diff --git a/bitbake/lib/bb/taskdata.py b/bitbake/lib/bb/taskdata.py
index 81a42b7b53..e857f9afcb 100644
--- a/bitbake/lib/bb/taskdata.py
+++ b/bitbake/lib/bb/taskdata.py
@@ -41,7 +41,7 @@ class TaskData:
41 """ 41 """
42 BitBake Task Data implementation 42 BitBake Task Data implementation
43 """ 43 """
44 def __init__(self, abort = True, tryaltconfigs = False): 44 def __init__(self, abort = True, tryaltconfigs = False, skiplist = None):
45 self.build_names_index = [] 45 self.build_names_index = []
46 self.run_names_index = [] 46 self.run_names_index = []
47 self.fn_index = [] 47 self.fn_index = []
@@ -70,6 +70,8 @@ class TaskData:
70 self.abort = abort 70 self.abort = abort
71 self.tryaltconfigs = tryaltconfigs 71 self.tryaltconfigs = tryaltconfigs
72 72
73 self.skiplist = skiplist
74
73 def getbuild_id(self, name): 75 def getbuild_id(self, name):
74 """ 76 """
75 Return an ID number for the build target name. 77 Return an ID number for the build target name.
@@ -348,6 +350,22 @@ class TaskData:
348 dependees.append(self.fn_index[fnid]) 350 dependees.append(self.fn_index[fnid])
349 return dependees 351 return dependees
350 352
353 def get_reasons(self, item, runtime=False):
354 """
355 Get the reason(s) for an item not being provided, if any
356 """
357 reasons = []
358 if self.skiplist:
359 for fn in self.skiplist:
360 skipitem = self.skiplist[fn]
361 if skipitem.pn == item:
362 reasons.append("%s was skipped: %s" % (skipitem.pn, skipitem.skipreason))
363 elif runtime and item in skipitem.rprovides:
364 reasons.append("%s RPROVIDES %s but was skipped: %s" % (skipitem.pn, item, skipitem.skipreason))
365 elif not runtime and item in skipitem.provides:
366 reasons.append("%s PROVIDES %s but was skipped: %s" % (skipitem.pn, item, skipitem.skipreason))
367 return reasons
368
351 def add_provider(self, cfgData, dataCache, item): 369 def add_provider(self, cfgData, dataCache, item):
352 try: 370 try:
353 self.add_provider_internal(cfgData, dataCache, item) 371 self.add_provider_internal(cfgData, dataCache, item)
@@ -369,7 +387,7 @@ class TaskData:
369 return 387 return
370 388
371 if not item in dataCache.providers: 389 if not item in dataCache.providers:
372 bb.event.fire(bb.event.NoProvider(item, dependees=self.get_rdependees_str(item)), cfgData) 390 bb.event.fire(bb.event.NoProvider(item, dependees=self.get_rdependees_str(item), reasons=self.get_reasons(item)), cfgData)
373 raise bb.providers.NoProvider(item) 391 raise bb.providers.NoProvider(item)
374 392
375 if self.have_build_target(item): 393 if self.have_build_target(item):
@@ -381,7 +399,7 @@ class TaskData:
381 eligible = [p for p in eligible if not self.getfn_id(p) in self.failed_fnids] 399 eligible = [p for p in eligible if not self.getfn_id(p) in self.failed_fnids]
382 400
383 if not eligible: 401 if not eligible:
384 bb.event.fire(bb.event.NoProvider(item, dependees=self.get_dependees_str(item)), cfgData) 402 bb.event.fire(bb.event.NoProvider(item, dependees=self.get_dependees_str(item), reasons=["No eligible PROVIDERs exist for '%s'" % item]), cfgData)
385 raise bb.providers.NoProvider(item) 403 raise bb.providers.NoProvider(item)
386 404
387 if len(eligible) > 1 and foundUnique == False: 405 if len(eligible) > 1 and foundUnique == False:
@@ -418,14 +436,14 @@ class TaskData:
418 all_p = bb.providers.getRuntimeProviders(dataCache, item) 436 all_p = bb.providers.getRuntimeProviders(dataCache, item)
419 437
420 if not all_p: 438 if not all_p:
421 bb.event.fire(bb.event.NoProvider(item, runtime=True, dependees=self.get_rdependees_str(item)), cfgData) 439 bb.event.fire(bb.event.NoProvider(item, runtime=True, dependees=self.get_rdependees_str(item), reasons=self.get_reasons(item, True)), cfgData)
422 raise bb.providers.NoRProvider(item) 440 raise bb.providers.NoRProvider(item)
423 441
424 eligible, numberPreferred = bb.providers.filterProvidersRunTime(all_p, item, cfgData, dataCache) 442 eligible, numberPreferred = bb.providers.filterProvidersRunTime(all_p, item, cfgData, dataCache)
425 eligible = [p for p in eligible if not self.getfn_id(p) in self.failed_fnids] 443 eligible = [p for p in eligible if not self.getfn_id(p) in self.failed_fnids]
426 444
427 if not eligible: 445 if not eligible:
428 bb.event.fire(bb.event.NoProvider(item, runtime=True, dependees=self.get_rdependees_str(item)), cfgData) 446 bb.event.fire(bb.event.NoProvider(item, runtime=True, dependees=self.get_rdependees_str(item), reasons=["No eligible RPROVIDERs exist for '%s'" % item]), cfgData)
429 raise bb.providers.NoRProvider(item) 447 raise bb.providers.NoRProvider(item)
430 448
431 if len(eligible) > 1 and numberPreferred == 0: 449 if len(eligible) > 1 and numberPreferred == 0: