diff options
Diffstat (limited to 'bitbake/lib/bb/cooker.py')
| -rw-r--r-- | bitbake/lib/bb/cooker.py | 34 |
1 files changed, 31 insertions, 3 deletions
diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py index 1fda40dd41..946ba9ca06 100644 --- a/bitbake/lib/bb/cooker.py +++ b/bitbake/lib/bb/cooker.py | |||
| @@ -609,7 +609,14 @@ class BBCooker: | |||
| 609 | k2 = k.split(":do_") | 609 | k2 = k.split(":do_") |
| 610 | k = k2[0] | 610 | k = k2[0] |
| 611 | ktask = k2[1] | 611 | ktask = k2[1] |
| 612 | taskdata[mc].add_provider(localdata[mc], self.recipecaches[mc], k) | 612 | if mc: |
| 613 | # Provider might be from another mc | ||
| 614 | for mcavailable in self.multiconfigs: | ||
| 615 | # The first element is empty | ||
| 616 | if mcavailable: | ||
| 617 | taskdata[mcavailable].add_provider(localdata[mcavailable], self.recipecaches[mcavailable], k) | ||
| 618 | else: | ||
| 619 | taskdata[mc].add_provider(localdata[mc], self.recipecaches[mc], k) | ||
| 613 | current += 1 | 620 | current += 1 |
| 614 | if not ktask.startswith("do_"): | 621 | if not ktask.startswith("do_"): |
| 615 | ktask = "do_%s" % ktask | 622 | ktask = "do_%s" % ktask |
| @@ -620,6 +627,27 @@ class BBCooker: | |||
| 620 | runlist.append([mc, k, ktask, fn]) | 627 | runlist.append([mc, k, ktask, fn]) |
| 621 | bb.event.fire(bb.event.TreeDataPreparationProgress(current, len(fulltargetlist)), self.data) | 628 | bb.event.fire(bb.event.TreeDataPreparationProgress(current, len(fulltargetlist)), self.data) |
| 622 | 629 | ||
| 630 | mcdeps = taskdata[mc].get_mcdepends() | ||
| 631 | # No need to do check providers if there are no mcdeps or not an mc build | ||
| 632 | if mcdeps and mc: | ||
| 633 | # Make sure we can provide the multiconfig dependency | ||
| 634 | seen = set() | ||
| 635 | new = True | ||
| 636 | while new: | ||
| 637 | new = False | ||
| 638 | for mc in self.multiconfigs: | ||
| 639 | for k in mcdeps: | ||
| 640 | if k in seen: | ||
| 641 | continue | ||
| 642 | l = k.split(':') | ||
| 643 | depmc = l[2] | ||
| 644 | if depmc not in self.multiconfigs: | ||
| 645 | bb.fatal("Multiconfig dependency %s depends on nonexistent mc configuration %s" % (k,depmc)) | ||
| 646 | else: | ||
| 647 | logger.debug(1, "Adding providers for multiconfig dependency %s" % l[3]) | ||
| 648 | taskdata[depmc].add_provider(localdata[depmc], self.recipecaches[depmc], l[3]) | ||
| 649 | seen.add(k) | ||
| 650 | new = True | ||
| 623 | for mc in self.multiconfigs: | 651 | for mc in self.multiconfigs: |
| 624 | taskdata[mc].add_unresolved(localdata[mc], self.recipecaches[mc]) | 652 | taskdata[mc].add_unresolved(localdata[mc], self.recipecaches[mc]) |
| 625 | 653 | ||
| @@ -706,8 +734,8 @@ class BBCooker: | |||
| 706 | if not dotname in depend_tree["tdepends"]: | 734 | if not dotname in depend_tree["tdepends"]: |
| 707 | depend_tree["tdepends"][dotname] = [] | 735 | depend_tree["tdepends"][dotname] = [] |
| 708 | for dep in rq.rqdata.runtaskentries[tid].depends: | 736 | for dep in rq.rqdata.runtaskentries[tid].depends: |
| 709 | (depmc, depfn, deptaskname, deptaskfn) = bb.runqueue.split_tid_mcfn(dep) | 737 | (depmc, depfn, _, deptaskfn) = bb.runqueue.split_tid_mcfn(dep) |
| 710 | deppn = self.recipecaches[mc].pkg_fn[deptaskfn] | 738 | deppn = self.recipecaches[depmc].pkg_fn[deptaskfn] |
| 711 | depend_tree["tdepends"][dotname].append("%s.%s" % (deppn, bb.runqueue.taskname_from_tid(dep))) | 739 | depend_tree["tdepends"][dotname].append("%s.%s" % (deppn, bb.runqueue.taskname_from_tid(dep))) |
| 712 | if taskfn not in seen_fns: | 740 | if taskfn not in seen_fns: |
| 713 | seen_fns.append(taskfn) | 741 | seen_fns.append(taskfn) |
