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-20 13:10:47 +0100 |
commit | 5af68d42ba62a2a18d1b0cdacad8e32c2b119255 (patch) | |
tree | 46d8d1c8fc154ad31798ec94b7665c121747ee58 /bitbake/lib | |
parent | de1841d9c2a0ec1d7103335d450b5fbc2273804e (diff) | |
download | poky-5af68d42ba62a2a18d1b0cdacad8e32c2b119255.tar.gz |
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>
Diffstat (limited to 'bitbake/lib')
-rw-r--r-- | bitbake/lib/bb/build.py | 1 | ||||
-rw-r--r-- | bitbake/lib/bb/runqueue.py | 11 |
2 files changed, 12 insertions, 0 deletions
diff --git a/bitbake/lib/bb/build.py b/bitbake/lib/bb/build.py index bfc176d4bb..70d7165fcf 100644 --- a/bitbake/lib/bb/build.py +++ b/bitbake/lib/bb/build.py | |||
@@ -602,6 +602,7 @@ def add_tasks(tasklist, d): | |||
602 | getTask('deptask') | 602 | getTask('deptask') |
603 | getTask('rdeptask') | 603 | getTask('rdeptask') |
604 | getTask('recrdeptask') | 604 | getTask('recrdeptask') |
605 | getTask('recideptask') | ||
605 | getTask('nostamp') | 606 | getTask('nostamp') |
606 | getTask('fakeroot') | 607 | getTask('fakeroot') |
607 | getTask('noexec') | 608 | getTask('noexec') |
diff --git a/bitbake/lib/bb/runqueue.py b/bitbake/lib/bb/runqueue.py index dcf90044a2..fce08eefa6 100644 --- a/bitbake/lib/bb/runqueue.py +++ b/bitbake/lib/bb/runqueue.py | |||
@@ -382,6 +382,7 @@ class RunQueueData: | |||
382 | 382 | ||
383 | runq_build = [] | 383 | runq_build = [] |
384 | recursivetasks = {} | 384 | recursivetasks = {} |
385 | recursiveitasks = {} | ||
385 | recursivetasksselfref = set() | 386 | recursivetasksselfref = set() |
386 | 387 | ||
387 | taskData = self.taskData | 388 | taskData = self.taskData |
@@ -504,6 +505,12 @@ class RunQueueData: | |||
504 | if taskData.tasks_name[task] in tasknames: | 505 | if taskData.tasks_name[task] in tasknames: |
505 | recursivetasksselfref.add(task) | 506 | recursivetasksselfref.add(task) |
506 | 507 | ||
508 | if 'recideptask' in task_deps and taskData.tasks_name[task] in task_deps['recideptask']: | ||
509 | recursiveitasks[task] = [] | ||
510 | for t in task_deps['recideptask'][taskData.tasks_name[task]].split(): | ||
511 | newdep = taskData.gettask_id_fromfnid(fnid, t) | ||
512 | recursiveitasks[task].append(newdep) | ||
513 | |||
507 | self.runq_fnid.append(taskData.tasks_fnid[task]) | 514 | self.runq_fnid.append(taskData.tasks_fnid[task]) |
508 | self.runq_task.append(taskData.tasks_name[task]) | 515 | self.runq_task.append(taskData.tasks_name[task]) |
509 | self.runq_depends.append(depends) | 516 | self.runq_depends.append(depends) |
@@ -536,6 +543,10 @@ class RunQueueData: | |||
536 | generate_recdeps(n) | 543 | generate_recdeps(n) |
537 | generate_recdeps(task) | 544 | generate_recdeps(task) |
538 | 545 | ||
546 | if task in recursiveitasks: | ||
547 | for dep in recursiveitasks[task]: | ||
548 | generate_recdeps(dep) | ||
549 | |||
539 | # Remove circular references so that do_a[recrdeptask] = "do_a do_b" can work | 550 | # Remove circular references so that do_a[recrdeptask] = "do_a do_b" can work |
540 | for task in recursivetasks: | 551 | for task in recursivetasks: |
541 | extradeps[task].difference_update(recursivetasksselfref) | 552 | extradeps[task].difference_update(recursivetasksselfref) |