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.py65
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