bitbake: runqueue/build: Add recideptask flag

Currently, tasks like fetchall are slightly broken since if a recipe
has specific [depends] which occur after do_fetch and add items not listed
in DEPENDS and RDEPENDS, they are not caught by recrdeptask. We've gone
around in circles on this issue (e.g
http://git.yoctoproject.org/cgit.cgi/poky/commit/bitbake/lib/bb/runqueue.py?id=5fa6036d49ed7befe6ad50ec95c61a50aec48195
) and in many cases the behaviour of recrdepends is correct but tasks like
fetchall need the other behaviour.

To address this we add a recideptask flag which can be used in conjuction
with the recrdeptask flag to specify which task to to the inspection upon.
This means entries like do_rootfs[depends] which have do_fetch tasks are
caught and run.

I'm not 100% happy with needing another flag but I don't see any rational
way to get the correct behaviour in all cases without it.

[YOCTO #4597]

(Bitbake rev: f8c9b292b02ce2c28741b74901205f5e5807ca87)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Richard Purdie 2013-06-19 14:03:39 +01:00
parent de1841d9c2
commit 5af68d42ba
2 changed files with 12 additions and 0 deletions

View File

@ -602,6 +602,7 @@ def add_tasks(tasklist, d):
getTask('deptask')
getTask('rdeptask')
getTask('recrdeptask')
getTask('recideptask')
getTask('nostamp')
getTask('fakeroot')
getTask('noexec')

View File

@ -382,6 +382,7 @@ class RunQueueData:
runq_build = []
recursivetasks = {}
recursiveitasks = {}
recursivetasksselfref = set()
taskData = self.taskData
@ -504,6 +505,12 @@ class RunQueueData:
if taskData.tasks_name[task] in tasknames:
recursivetasksselfref.add(task)
if 'recideptask' in task_deps and taskData.tasks_name[task] in task_deps['recideptask']:
recursiveitasks[task] = []
for t in task_deps['recideptask'][taskData.tasks_name[task]].split():
newdep = taskData.gettask_id_fromfnid(fnid, t)
recursiveitasks[task].append(newdep)
self.runq_fnid.append(taskData.tasks_fnid[task])
self.runq_task.append(taskData.tasks_name[task])
self.runq_depends.append(depends)
@ -536,6 +543,10 @@ class RunQueueData:
generate_recdeps(n)
generate_recdeps(task)
if task in recursiveitasks:
for dep in recursiveitasks[task]:
generate_recdeps(dep)
# Remove circular references so that do_a[recrdeptask] = "do_a do_b" can work
for task in recursivetasks:
extradeps[task].difference_update(recursivetasksselfref)