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:
parent
de1841d9c2
commit
5af68d42ba
|
@ -602,6 +602,7 @@ def add_tasks(tasklist, d):
|
|||
getTask('deptask')
|
||||
getTask('rdeptask')
|
||||
getTask('recrdeptask')
|
||||
getTask('recideptask')
|
||||
getTask('nostamp')
|
||||
getTask('fakeroot')
|
||||
getTask('noexec')
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue