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) |