diff options
Diffstat (limited to 'bitbake/lib/bb/taskdata.py')
| -rw-r--r-- | bitbake/lib/bb/taskdata.py | 28 |
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: |
