diff options
Diffstat (limited to 'bitbake/lib/bb/taskdata.py')
| -rw-r--r-- | bitbake/lib/bb/taskdata.py | 46 |
1 files changed, 9 insertions, 37 deletions
diff --git a/bitbake/lib/bb/taskdata.py b/bitbake/lib/bb/taskdata.py index 632a842763..f448b5b666 100644 --- a/bitbake/lib/bb/taskdata.py +++ b/bitbake/lib/bb/taskdata.py | |||
| @@ -23,7 +23,7 @@ Task data collection and handling | |||
| 23 | # with this program; if not, write to the Free Software Foundation, Inc., | 23 | # with this program; if not, write to the Free Software Foundation, Inc., |
| 24 | # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | 24 | # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
| 25 | 25 | ||
| 26 | from bb import data, fetch, event, mkdirhier, utils | 26 | from bb import data, event, mkdirhier, utils |
| 27 | import bb, os | 27 | import bb, os |
| 28 | 28 | ||
| 29 | class TaskData: | 29 | class TaskData: |
| @@ -357,7 +357,7 @@ class TaskData: | |||
| 357 | 357 | ||
| 358 | all_p = dataCache.providers[item] | 358 | all_p = dataCache.providers[item] |
| 359 | 359 | ||
| 360 | eligible = bb.providers.filterProviders(all_p, item, cfgData, dataCache) | 360 | eligible, foundUnique = bb.providers.filterProviders(all_p, item, cfgData, dataCache) |
| 361 | 361 | ||
| 362 | for p in eligible: | 362 | for p in eligible: |
| 363 | fnid = self.getfn_id(p) | 363 | fnid = self.getfn_id(p) |
| @@ -369,22 +369,7 @@ class TaskData: | |||
| 369 | bb.event.fire(bb.event.NoProvider(item, cfgData)) | 369 | bb.event.fire(bb.event.NoProvider(item, cfgData)) |
| 370 | raise bb.providers.NoProvider(item) | 370 | raise bb.providers.NoProvider(item) |
| 371 | 371 | ||
| 372 | prefervar = bb.data.getVar('PREFERRED_PROVIDER_%s' % item, cfgData, 1) | 372 | if len(eligible) > 1 and foundUnique == False: |
| 373 | if prefervar: | ||
| 374 | dataCache.preferred[item] = prefervar | ||
| 375 | |||
| 376 | discriminated = False | ||
| 377 | if item in dataCache.preferred: | ||
| 378 | for p in eligible: | ||
| 379 | pn = dataCache.pkg_fn[p] | ||
| 380 | if dataCache.preferred[item] == pn: | ||
| 381 | bb.msg.note(2, bb.msg.domain.Provider, "selecting %s to satisfy %s due to PREFERRED_PROVIDERS" % (pn, item)) | ||
| 382 | eligible.remove(p) | ||
| 383 | eligible = [p] + eligible | ||
| 384 | discriminated = True | ||
| 385 | break | ||
| 386 | |||
| 387 | if len(eligible) > 1 and discriminated == False: | ||
| 388 | if item not in self.consider_msgs_cache: | 373 | if item not in self.consider_msgs_cache: |
| 389 | providers_list = [] | 374 | providers_list = [] |
| 390 | for fn in eligible: | 375 | for fn in eligible: |
| @@ -424,7 +409,7 @@ class TaskData: | |||
| 424 | bb.event.fire(bb.event.NoProvider(item, cfgData, runtime=True)) | 409 | bb.event.fire(bb.event.NoProvider(item, cfgData, runtime=True)) |
| 425 | raise bb.providers.NoRProvider(item) | 410 | raise bb.providers.NoRProvider(item) |
| 426 | 411 | ||
| 427 | eligible = bb.providers.filterProviders(all_p, item, cfgData, dataCache) | 412 | eligible, numberPreferred = bb.providers.filterProvidersRunTime(all_p, item, cfgData, dataCache) |
| 428 | 413 | ||
| 429 | for p in eligible: | 414 | for p in eligible: |
| 430 | fnid = self.getfn_id(p) | 415 | fnid = self.getfn_id(p) |
| @@ -436,21 +421,7 @@ class TaskData: | |||
| 436 | bb.event.fire(bb.event.NoProvider(item, cfgData, runtime=True)) | 421 | bb.event.fire(bb.event.NoProvider(item, cfgData, runtime=True)) |
| 437 | raise bb.providers.NoRProvider(item) | 422 | raise bb.providers.NoRProvider(item) |
| 438 | 423 | ||
| 439 | # Should use dataCache.preferred here? | 424 | if len(eligible) > 1 and numberPreferred == 0: |
| 440 | preferred = [] | ||
| 441 | for p in eligible: | ||
| 442 | pn = dataCache.pkg_fn[p] | ||
| 443 | provides = dataCache.pn_provides[pn] | ||
| 444 | for provide in provides: | ||
| 445 | prefervar = bb.data.getVar('PREFERRED_PROVIDER_%s' % provide, cfgData, 1) | ||
| 446 | if prefervar == pn: | ||
| 447 | bb.msg.note(2, bb.msg.domain.Provider, "selecting %s to satisfy runtime %s due to PREFERRED_PROVIDERS" % (pn, item)) | ||
| 448 | eligible.remove(p) | ||
| 449 | eligible = [p] + eligible | ||
| 450 | preferred.append(p) | ||
| 451 | break | ||
| 452 | |||
| 453 | if len(eligible) > 1 and len(preferred) == 0: | ||
| 454 | if item not in self.consider_msgs_cache: | 425 | if item not in self.consider_msgs_cache: |
| 455 | providers_list = [] | 426 | providers_list = [] |
| 456 | for fn in eligible: | 427 | for fn in eligible: |
| @@ -460,12 +431,12 @@ class TaskData: | |||
| 460 | bb.event.fire(bb.event.MultipleProviders(item,providers_list, cfgData, runtime=True)) | 431 | bb.event.fire(bb.event.MultipleProviders(item,providers_list, cfgData, runtime=True)) |
| 461 | self.consider_msgs_cache.append(item) | 432 | self.consider_msgs_cache.append(item) |
| 462 | 433 | ||
| 463 | if len(preferred) > 1: | 434 | if numberPreferred > 1: |
| 464 | if item not in self.consider_msgs_cache: | 435 | if item not in self.consider_msgs_cache: |
| 465 | providers_list = [] | 436 | providers_list = [] |
| 466 | for fn in preferred: | 437 | for fn in eligible: |
| 467 | providers_list.append(dataCache.pkg_fn[fn]) | 438 | providers_list.append(dataCache.pkg_fn[fn]) |
| 468 | bb.msg.note(2, bb.msg.domain.Provider, "multiple preferred providers are available for runtime %s (%s);" % (item, ", ".join(providers_list))) | 439 | 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))) |
| 469 | bb.msg.note(2, bb.msg.domain.Provider, "consider defining only one PREFERRED_PROVIDER entry to match runtime %s" % item) | 440 | bb.msg.note(2, bb.msg.domain.Provider, "consider defining only one PREFERRED_PROVIDER entry to match runtime %s" % item) |
| 470 | bb.event.fire(bb.event.MultipleProviders(item,providers_list, cfgData, runtime=True)) | 441 | bb.event.fire(bb.event.MultipleProviders(item,providers_list, cfgData, runtime=True)) |
| 471 | self.consider_msgs_cache.append(item) | 442 | self.consider_msgs_cache.append(item) |
| @@ -538,6 +509,7 @@ class TaskData: | |||
| 538 | except bb.providers.NoProvider: | 509 | except bb.providers.NoProvider: |
| 539 | targetid = self.getbuild_id(target) | 510 | targetid = self.getbuild_id(target) |
| 540 | if self.abort and targetid in self.external_targets: | 511 | if self.abort and targetid in self.external_targets: |
| 512 | bb.msg.error(bb.msg.domain.Provider, "No providers of build target %s (for %s)" % (target, self.get_dependees_str(target))) | ||
| 541 | raise | 513 | raise |
| 542 | self.remove_buildtarget(targetid) | 514 | self.remove_buildtarget(targetid) |
| 543 | for target in self.get_unresolved_run_targets(dataCache): | 515 | for target in self.get_unresolved_run_targets(dataCache): |
