summaryrefslogtreecommitdiff
path: root/poky/bitbake/lib/bb/runqueue.py
diff options
context:
space:
mode:
Diffstat (limited to 'poky/bitbake/lib/bb/runqueue.py')
-rw-r--r--poky/bitbake/lib/bb/runqueue.py31
1 files changed, 28 insertions, 3 deletions
diff --git a/poky/bitbake/lib/bb/runqueue.py b/poky/bitbake/lib/bb/runqueue.py
index 4d5d87679..383c18323 100644
--- a/poky/bitbake/lib/bb/runqueue.py
+++ b/poky/bitbake/lib/bb/runqueue.py
@@ -49,6 +49,11 @@ def fn_from_tid(tid):
def taskname_from_tid(tid):
return tid.rsplit(":", 1)[1]
+def mc_from_tid(tid):
+ if tid.startswith('multiconfig:'):
+ return tid.split(':')[1]
+ return ""
+
def split_tid(tid):
(mc, fn, taskname, _) = split_tid_mcfn(tid)
return (mc, fn, taskname)
@@ -405,6 +410,9 @@ class RunQueueData:
explored_deps = {}
msgs = []
+ class TooManyLoops(Exception):
+ pass
+
def chain_reorder(chain):
"""
Reorder a dependency chain so the lowest task id is first
@@ -457,7 +465,7 @@ class RunQueueData:
msgs.append("\n")
if len(valid_chains) > 10:
msgs.append("Aborted dependency loops search after 10 matches.\n")
- return msgs
+ raise TooManyLoops
continue
scan = False
if revdep not in explored_deps:
@@ -476,8 +484,11 @@ class RunQueueData:
explored_deps[tid] = total_deps
- for task in tasks:
- find_chains(task, [])
+ try:
+ for task in tasks:
+ find_chains(task, [])
+ except TooManyLoops:
+ pass
return msgs
@@ -2073,10 +2084,23 @@ class RunQueueExecuteTasks(RunQueueExecute):
return True
+ def filtermcdeps(self, task, deps):
+ ret = set()
+ mainmc = mc_from_tid(task)
+ for dep in deps:
+ mc = mc_from_tid(dep)
+ if mc != mainmc:
+ continue
+ ret.add(dep)
+ return ret
+
+ # We filter out multiconfig dependencies from taskdepdata we pass to the tasks
+ # as most code can't handle them
def build_taskdepdata(self, task):
taskdepdata = {}
next = self.rqdata.runtaskentries[task].depends
next.add(task)
+ next = self.filtermcdeps(task, next)
while next:
additional = []
for revdep in next:
@@ -2086,6 +2110,7 @@ class RunQueueExecuteTasks(RunQueueExecute):
provides = self.rqdata.dataCaches[mc].fn_provides[taskfn]
taskhash = self.rqdata.runtaskentries[revdep].hash
taskdepdata[revdep] = [pn, taskname, fn, deps, provides, taskhash]
+ deps = self.filtermcdeps(task, deps)
for revdep2 in deps:
if revdep2 not in taskdepdata:
additional.append(revdep2)