diff options
author | Richard Purdie <richard.purdie@linuxfoundation.org> | 2013-06-19 14:03:39 +0100 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2013-06-19 14:13:57 +0100 |
commit | f8c9b292b02ce2c28741b74901205f5e5807ca87 (patch) | |
tree | 501ccbc054db1b2ca6ac4071e4cd31bea2a289b0 /lib/bb/runqueue.py | |
parent | 81929f86c57ed0a4ad0cda7aaa820fceabaa61e9 (diff) | |
download | bitbake-contrib-f8c9b292b02ce2c28741b74901205f5e5807ca87.tar.gz |
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]
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'lib/bb/runqueue.py')
-rw-r--r-- | lib/bb/runqueue.py | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/lib/bb/runqueue.py b/lib/bb/runqueue.py index dcf90044a..fce08eefa 100644 --- a/lib/bb/runqueue.py +++ b/lib/bb/runqueue.py @@ -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) |