diff options
Diffstat (limited to 'bitbake/lib/bb/taskdata.py')
| -rw-r--r-- | bitbake/lib/bb/taskdata.py | 65 |
1 files changed, 21 insertions, 44 deletions
diff --git a/bitbake/lib/bb/taskdata.py b/bitbake/lib/bb/taskdata.py index 3e5e006f5f..e31f967850 100644 --- a/bitbake/lib/bb/taskdata.py +++ b/bitbake/lib/bb/taskdata.py | |||
| @@ -34,7 +34,7 @@ def re_match_strings(target, strings): | |||
| 34 | 34 | ||
| 35 | for name in strings: | 35 | for name in strings: |
| 36 | if (name==target or | 36 | if (name==target or |
| 37 | re.search(name,target)!=None): | 37 | re.search(name, target)!=None): |
| 38 | return True | 38 | return True |
| 39 | return False | 39 | return False |
| 40 | 40 | ||
| @@ -84,7 +84,7 @@ class TaskData: | |||
| 84 | 84 | ||
| 85 | def getrun_id(self, name): | 85 | def getrun_id(self, name): |
| 86 | """ | 86 | """ |
| 87 | Return an ID number for the run target name. | 87 | Return an ID number for the run target name. |
| 88 | If it doesn't exist, create one. | 88 | If it doesn't exist, create one. |
| 89 | """ | 89 | """ |
| 90 | if not name in self.run_names_index: | 90 | if not name in self.run_names_index: |
| @@ -95,7 +95,7 @@ class TaskData: | |||
| 95 | 95 | ||
| 96 | def getfn_id(self, name): | 96 | def getfn_id(self, name): |
| 97 | """ | 97 | """ |
| 98 | Return an ID number for the filename. | 98 | Return an ID number for the filename. |
| 99 | If it doesn't exist, create one. | 99 | If it doesn't exist, create one. |
| 100 | """ | 100 | """ |
| 101 | if not name in self.fn_index: | 101 | if not name in self.fn_index: |
| @@ -271,7 +271,7 @@ class TaskData: | |||
| 271 | 271 | ||
| 272 | def get_unresolved_build_targets(self, dataCache): | 272 | def get_unresolved_build_targets(self, dataCache): |
| 273 | """ | 273 | """ |
| 274 | Return a list of build targets who's providers | 274 | Return a list of build targets who's providers |
| 275 | are unknown. | 275 | are unknown. |
| 276 | """ | 276 | """ |
| 277 | unresolved = [] | 277 | unresolved = [] |
| @@ -286,7 +286,7 @@ class TaskData: | |||
| 286 | 286 | ||
| 287 | def get_unresolved_run_targets(self, dataCache): | 287 | def get_unresolved_run_targets(self, dataCache): |
| 288 | """ | 288 | """ |
| 289 | Return a list of runtime targets who's providers | 289 | Return a list of runtime targets who's providers |
| 290 | are unknown. | 290 | are unknown. |
| 291 | """ | 291 | """ |
| 292 | unresolved = [] | 292 | unresolved = [] |
| @@ -304,7 +304,7 @@ class TaskData: | |||
| 304 | Return a list of providers of item | 304 | Return a list of providers of item |
| 305 | """ | 305 | """ |
| 306 | targetid = self.getbuild_id(item) | 306 | targetid = self.getbuild_id(item) |
| 307 | 307 | ||
| 308 | return self.build_targets[targetid] | 308 | return self.build_targets[targetid] |
| 309 | 309 | ||
| 310 | def get_dependees(self, itemid): | 310 | def get_dependees(self, itemid): |
| @@ -354,20 +354,15 @@ class TaskData: | |||
| 354 | self.add_provider_internal(cfgData, dataCache, item) | 354 | self.add_provider_internal(cfgData, dataCache, item) |
| 355 | except bb.providers.NoProvider: | 355 | except bb.providers.NoProvider: |
| 356 | if self.abort: | 356 | if self.abort: |
| 357 | if self.get_rdependees_str(item): | ||
| 358 | bb.msg.error(bb.msg.domain.Provider, "Nothing PROVIDES '%s' (but '%s' DEPENDS on or otherwise requires it)" % (item, self.get_dependees_str(item))) | ||
| 359 | else: | ||
| 360 | bb.msg.error(bb.msg.domain.Provider, "Nothing PROVIDES '%s'" % (item)) | ||
| 361 | raise | 357 | raise |
| 362 | targetid = self.getbuild_id(item) | 358 | self.remove_buildtarget(self.getbuild_id(item)) |
| 363 | self.remove_buildtarget(targetid) | ||
| 364 | 359 | ||
| 365 | self.mark_external_target(item) | 360 | self.mark_external_target(item) |
| 366 | 361 | ||
| 367 | def add_provider_internal(self, cfgData, dataCache, item): | 362 | def add_provider_internal(self, cfgData, dataCache, item): |
| 368 | """ | 363 | """ |
| 369 | Add the providers of item to the task data | 364 | Add the providers of item to the task data |
| 370 | Mark entries were specifically added externally as against dependencies | 365 | Mark entries were specifically added externally as against dependencies |
| 371 | added internally during dependency resolution | 366 | added internally during dependency resolution |
| 372 | """ | 367 | """ |
| 373 | 368 | ||
| @@ -375,11 +370,7 @@ class TaskData: | |||
| 375 | return | 370 | return |
| 376 | 371 | ||
| 377 | if not item in dataCache.providers: | 372 | if not item in dataCache.providers: |
| 378 | if self.get_rdependees_str(item): | 373 | bb.event.fire(bb.event.NoProvider(item, dependees=self.get_rdependees_str(item)), cfgData) |
| 379 | bb.msg.note(2, bb.msg.domain.Provider, "Nothing PROVIDES '%s' (but '%s' DEPENDS on or otherwise requires it)" % (item, self.get_dependees_str(item))) | ||
| 380 | else: | ||
| 381 | bb.msg.note(2, bb.msg.domain.Provider, "Nothing PROVIDES '%s'" % (item)) | ||
| 382 | bb.event.fire(bb.event.NoProvider(item), cfgData) | ||
| 383 | raise bb.providers.NoProvider(item) | 374 | raise bb.providers.NoProvider(item) |
| 384 | 375 | ||
| 385 | if self.have_build_target(item): | 376 | if self.have_build_target(item): |
| @@ -391,8 +382,7 @@ class TaskData: | |||
| 391 | eligible = [p for p in eligible if not self.getfn_id(p) in self.failed_fnids] | 382 | eligible = [p for p in eligible if not self.getfn_id(p) in self.failed_fnids] |
| 392 | 383 | ||
| 393 | if not eligible: | 384 | if not eligible: |
| 394 | bb.msg.note(2, bb.msg.domain.Provider, "No buildable provider PROVIDES '%s' but '%s' DEPENDS on or otherwise requires it. Enable debugging and see earlier logs to find unbuildable providers." % (item, self.get_dependees_str(item))) | 385 | bb.event.fire(bb.event.NoProvider(item, dependees=self.get_dependees_str(item)), cfgData) |
| 395 | bb.event.fire(bb.event.NoProvider(item), cfgData) | ||
| 396 | raise bb.providers.NoProvider(item) | 386 | raise bb.providers.NoProvider(item) |
| 397 | 387 | ||
| 398 | if len(eligible) > 1 and foundUnique == False: | 388 | if len(eligible) > 1 and foundUnique == False: |
| @@ -400,8 +390,6 @@ class TaskData: | |||
| 400 | providers_list = [] | 390 | providers_list = [] |
| 401 | for fn in eligible: | 391 | for fn in eligible: |
| 402 | providers_list.append(dataCache.pkg_fn[fn]) | 392 | providers_list.append(dataCache.pkg_fn[fn]) |
| 403 | bb.msg.note(1, bb.msg.domain.Provider, "multiple providers are available for %s (%s);" % (item, ", ".join(providers_list))) | ||
| 404 | bb.msg.note(1, bb.msg.domain.Provider, "consider defining PREFERRED_PROVIDER_%s" % item) | ||
| 405 | bb.event.fire(bb.event.MultipleProviders(item, providers_list), cfgData) | 393 | bb.event.fire(bb.event.MultipleProviders(item, providers_list), cfgData) |
| 406 | self.consider_msgs_cache.append(item) | 394 | self.consider_msgs_cache.append(item) |
| 407 | 395 | ||
| @@ -431,16 +419,14 @@ class TaskData: | |||
| 431 | all_p = bb.providers.getRuntimeProviders(dataCache, item) | 419 | all_p = bb.providers.getRuntimeProviders(dataCache, item) |
| 432 | 420 | ||
| 433 | if not all_p: | 421 | if not all_p: |
| 434 | bb.msg.error(bb.msg.domain.Provider, "'%s' RDEPENDS/RRECOMMENDS or otherwise requires the runtime entity '%s' but it wasn't found in any PACKAGE or RPROVIDES variables" % (self.get_rdependees_str(item), item)) | 422 | bb.event.fire(bb.event.NoProvider(item, runtime=True, dependees=self.get_rdependees_str(item)), cfgData) |
| 435 | bb.event.fire(bb.event.NoProvider(item, runtime=True), cfgData) | ||
| 436 | raise bb.providers.NoRProvider(item) | 423 | raise bb.providers.NoRProvider(item) |
| 437 | 424 | ||
| 438 | eligible, numberPreferred = bb.providers.filterProvidersRunTime(all_p, item, cfgData, dataCache) | 425 | eligible, numberPreferred = bb.providers.filterProvidersRunTime(all_p, item, cfgData, dataCache) |
| 439 | eligible = [p for p in eligible if not self.getfn_id(p) in self.failed_fnids] | 426 | eligible = [p for p in eligible if not self.getfn_id(p) in self.failed_fnids] |
| 440 | 427 | ||
| 441 | if not eligible: | 428 | if not eligible: |
| 442 | bb.msg.error(bb.msg.domain.Provider, "'%s' RDEPENDS/RRECOMMENDS or otherwise requires the runtime entity '%s' but it wasn't found in any PACKAGE or RPROVIDES variables of any buildable targets.\nEnable debugging and see earlier logs to find unbuildable targets." % (self.get_rdependees_str(item), item)) | 429 | bb.event.fire(bb.event.NoProvider(item, runtime=True, dependees=self.get_rdependees_str(item)), cfgData) |
| 443 | bb.event.fire(bb.event.NoProvider(item, runtime=True), cfgData) | ||
| 444 | raise bb.providers.NoRProvider(item) | 430 | raise bb.providers.NoRProvider(item) |
| 445 | 431 | ||
| 446 | if len(eligible) > 1 and numberPreferred == 0: | 432 | if len(eligible) > 1 and numberPreferred == 0: |
| @@ -448,9 +434,7 @@ class TaskData: | |||
| 448 | providers_list = [] | 434 | providers_list = [] |
| 449 | for fn in eligible: | 435 | for fn in eligible: |
| 450 | providers_list.append(dataCache.pkg_fn[fn]) | 436 | providers_list.append(dataCache.pkg_fn[fn]) |
| 451 | bb.msg.note(2, bb.msg.domain.Provider, "multiple providers are available for runtime %s (%s);" % (item, ", ".join(providers_list))) | 437 | bb.event.fire(bb.event.MultipleProviders(item, providers_list, runtime=True), cfgData) |
| 452 | bb.msg.note(2, bb.msg.domain.Provider, "consider defining a PREFERRED_PROVIDER entry to match runtime %s" % item) | ||
| 453 | bb.event.fire(bb.event.MultipleProviders(item,providers_list, runtime=True), cfgData) | ||
| 454 | self.consider_msgs_cache.append(item) | 438 | self.consider_msgs_cache.append(item) |
| 455 | 439 | ||
| 456 | if numberPreferred > 1: | 440 | if numberPreferred > 1: |
| @@ -458,9 +442,7 @@ class TaskData: | |||
| 458 | providers_list = [] | 442 | providers_list = [] |
| 459 | for fn in eligible: | 443 | for fn in eligible: |
| 460 | providers_list.append(dataCache.pkg_fn[fn]) | 444 | providers_list.append(dataCache.pkg_fn[fn]) |
| 461 | bb.msg.note(2, bb.msg.domain.Provider, "multiple providers are available for runtime %s (top %s entries preferred) (%s);" % (item, numberPreferred, ", ".join(providers_list))) | 445 | bb.event.fire(bb.event.MultipleProviders(item, providers_list, runtime=True), cfgData) |
| 462 | bb.msg.note(2, bb.msg.domain.Provider, "consider defining only one PREFERRED_PROVIDER entry to match runtime %s" % item) | ||
| 463 | bb.event.fire(bb.event.MultipleProviders(item,providers_list, runtime=True), cfgData) | ||
| 464 | self.consider_msgs_cache.append(item) | 446 | self.consider_msgs_cache.append(item) |
| 465 | 447 | ||
| 466 | # run through the list until we find one that we can build | 448 | # run through the list until we find one that we can build |
| @@ -515,8 +497,9 @@ class TaskData: | |||
| 515 | self.fail_fnid(self.tasks_fnid[taskid], missing_list) | 497 | self.fail_fnid(self.tasks_fnid[taskid], missing_list) |
| 516 | 498 | ||
| 517 | if self.abort and targetid in self.external_targets: | 499 | if self.abort and targetid in self.external_targets: |
| 518 | bb.msg.error(bb.msg.domain.Provider, "Required build target '%s' has no buildable providers.\nMissing or unbuildable dependency chain was: %s" % (self.build_names_index[targetid], missing_list)) | 500 | target = self.build_names_index[targetid] |
| 519 | raise bb.providers.NoProvider | 501 | bb.msg.error(bb.msg.domain.Provider, "Required build target '%s' has no buildable providers.\nMissing or unbuildable dependency chain was: %s" % (target, missing_list)) |
| 502 | raise bb.providers.NoProvider(target) | ||
| 520 | 503 | ||
| 521 | def remove_runtarget(self, targetid, missing_list = []): | 504 | def remove_runtarget(self, targetid, missing_list = []): |
| 522 | """ | 505 | """ |
| @@ -539,7 +522,7 @@ class TaskData: | |||
| 539 | Resolve all unresolved build and runtime targets | 522 | Resolve all unresolved build and runtime targets |
| 540 | """ | 523 | """ |
| 541 | bb.msg.note(1, bb.msg.domain.TaskData, "Resolving any missing task queue dependencies") | 524 | bb.msg.note(1, bb.msg.domain.TaskData, "Resolving any missing task queue dependencies") |
| 542 | while 1: | 525 | while True: |
| 543 | added = 0 | 526 | added = 0 |
| 544 | for target in self.get_unresolved_build_targets(dataCache): | 527 | for target in self.get_unresolved_build_targets(dataCache): |
| 545 | try: | 528 | try: |
| @@ -548,10 +531,6 @@ class TaskData: | |||
| 548 | except bb.providers.NoProvider: | 531 | except bb.providers.NoProvider: |
| 549 | targetid = self.getbuild_id(target) | 532 | targetid = self.getbuild_id(target) |
| 550 | if self.abort and targetid in self.external_targets: | 533 | if self.abort and targetid in self.external_targets: |
| 551 | if self.get_rdependees_str(target): | ||
| 552 | bb.msg.error(bb.msg.domain.Provider, "Nothing PROVIDES '%s' (but '%s' DEPENDS on or otherwise requires it)" % (target, self.get_dependees_str(target))) | ||
| 553 | else: | ||
| 554 | bb.msg.error(bb.msg.domain.Provider, "Nothing PROVIDES '%s'" % (target)) | ||
| 555 | raise | 534 | raise |
| 556 | self.remove_buildtarget(targetid) | 535 | self.remove_buildtarget(targetid) |
| 557 | for target in self.get_unresolved_run_targets(dataCache): | 536 | for target in self.get_unresolved_run_targets(dataCache): |
| @@ -594,9 +573,9 @@ class TaskData: | |||
| 594 | bb.msg.debug(3, bb.msg.domain.TaskData, "tasks:") | 573 | bb.msg.debug(3, bb.msg.domain.TaskData, "tasks:") |
| 595 | for task in range(len(self.tasks_name)): | 574 | for task in range(len(self.tasks_name)): |
| 596 | bb.msg.debug(3, bb.msg.domain.TaskData, " (%s)%s - %s: %s" % ( | 575 | bb.msg.debug(3, bb.msg.domain.TaskData, " (%s)%s - %s: %s" % ( |
| 597 | task, | 576 | task, |
| 598 | self.fn_index[self.tasks_fnid[task]], | 577 | self.fn_index[self.tasks_fnid[task]], |
| 599 | self.tasks_name[task], | 578 | self.tasks_name[task], |
| 600 | self.tasks_tdepends[task])) | 579 | self.tasks_tdepends[task])) |
| 601 | 580 | ||
| 602 | bb.msg.debug(3, bb.msg.domain.TaskData, "dependency ids (per fn):") | 581 | bb.msg.debug(3, bb.msg.domain.TaskData, "dependency ids (per fn):") |
| @@ -606,5 +585,3 @@ class TaskData: | |||
| 606 | bb.msg.debug(3, bb.msg.domain.TaskData, "runtime dependency ids (per fn):") | 585 | bb.msg.debug(3, bb.msg.domain.TaskData, "runtime dependency ids (per fn):") |
| 607 | for fnid in self.rdepids: | 586 | for fnid in self.rdepids: |
| 608 | bb.msg.debug(3, bb.msg.domain.TaskData, " %s %s: %s" % (fnid, self.fn_index[fnid], self.rdepids[fnid])) | 587 | bb.msg.debug(3, bb.msg.domain.TaskData, " %s %s: %s" % (fnid, self.fn_index[fnid], self.rdepids[fnid])) |
| 609 | |||
| 610 | |||
