aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog2
-rw-r--r--lib/bb/runqueue.py24
-rw-r--r--lib/bb/taskdata.py10
3 files changed, 19 insertions, 17 deletions
diff --git a/ChangeLog b/ChangeLog
index a83b13f57..38aef1c8a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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