diff options
-rw-r--r-- | ChangeLog | 2 | ||||
-rw-r--r-- | lib/bb/runqueue.py | 24 | ||||
-rw-r--r-- | lib/bb/taskdata.py | 10 |
3 files changed, 19 insertions, 17 deletions
@@ -116,6 +116,8 @@ Changes in Bitbake 1.9.x: the way bitbake schedules tasks - Add BB_STAMP_POLICY variable/option ("perfile" or "full") controlling how extensively stamps are looked at for validity + - When handling build target failures make sure idepends are checked and + failed where needed. Fixes --continue mode crashes. Changes in Bitbake 1.8.0: - Release 1.7.x as a stable series diff --git a/lib/bb/runqueue.py b/lib/bb/runqueue.py index a516fcfcf..2a3da797e 100644 --- a/lib/bb/runqueue.py +++ b/lib/bb/runqueue.py @@ -402,14 +402,13 @@ class RunQueue: # e.g. do_sometask[depends] = "targetname:do_someothertask" # (makes sure sometask runs after targetname's someothertask) idepends = taskData.tasks_idepends[task] - for idepend in idepends: - depid = int(idepend.split(":")[0]) + for (depid, idependtask) in idepends: if depid in taskData.build_targets: # Won't be in build_targets if ASSUME_PROVIDED depdata = taskData.build_targets[depid][0] if depdata is not None: dep = taskData.fn_index[depdata] - depends.append(taskData.gettask_id(dep, idepend.split(":")[1])) + depends.append(taskData.gettask_id(dep, idependtask)) def add_recursive_build(depid, depfnid): """ @@ -440,10 +439,9 @@ class RunQueue: for nextdepid in taskData.rdepids[fnid]: if nextdepid not in rdep_seen: add_recursive_run(nextdepid, fnid) - for idepend in idepends: - nextdepid = int(idepend.split(":")[0]) - if nextdepid not in dep_seen: - add_recursive_build(nextdepid, fnid) + for (idependid, idependtask) in idepends: + if idependid not in dep_seen: + add_recursive_build(idependid, fnid) def add_recursive_run(rdepid, depfnid): """ @@ -474,10 +472,9 @@ class RunQueue: for nextdepid in taskData.rdepids[fnid]: if nextdepid not in rdep_seen: add_recursive_run(nextdepid, fnid) - for idepend in idepends: - nextdepid = int(idepend.split(":")[0]) - if nextdepid not in dep_seen: - add_recursive_build(nextdepid, fnid) + for (idependid, idependtask) in idepends: + if idependid not in dep_seen: + add_recursive_build(idependid, fnid) # Resolve recursive 'recrdeptask' dependencies # @@ -492,9 +489,8 @@ class RunQueue: add_recursive_build(depid, fnid) for rdepid in taskData.rdepids[fnid]: add_recursive_run(rdepid, fnid) - for idepend in idepends: - depid = int(idepend.split(":")[0]) - add_recursive_build(depid, fnid) + for (idependid, idependtask) in idepends: + add_recursive_build(idependid, fnid) # Rmove all self references if task in depends: diff --git a/lib/bb/taskdata.py b/lib/bb/taskdata.py index 4a79e7a56..a50188b41 100644 --- a/lib/bb/taskdata.py +++ b/lib/bb/taskdata.py @@ -150,7 +150,7 @@ class TaskData: ids = [] for dep in task_deps['depends'][task].split(): if dep: - ids.append(str(self.getbuild_id(dep.split(":")[0])) + ":" + dep.split(":")[1]) + ids.append(((self.getbuild_id(dep.split(":")[0])), dep.split(":")[1])) self.tasks_idepends[taskid].extend(ids) # Work out build dependencies @@ -458,8 +458,6 @@ class TaskData: """ if fnid in self.failed_fnids: return - if not missing_list: - missing_list = [fnid] bb.msg.debug(1, bb.msg.domain.Provider, "File '%s' is unbuildable, removing..." % self.fn_index[fnid]) self.failed_fnids.append(fnid) for target in self.build_targets: @@ -487,6 +485,12 @@ class TaskData: dependees = self.get_dependees(targetid) for fnid in dependees: self.fail_fnid(fnid, missing_list) + for taskid in range(len(self.tasks_idepends)): + idepends = self.tasks_idepends[taskid] + for (idependid, idependtask) in idepends: + if idependid == targetid: + self.fail_fnid(self.tasks_fnid[taskid], missing_list) + if self.abort and targetid in self.external_targets: 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)) raise bb.providers.NoProvider |