diff options
author | Richard Purdie <richard.purdie@linuxfoundation.org> | 2018-09-07 17:41:27 +0100 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2018-09-10 12:13:38 +0100 |
commit | 530aceebc1743b6e279bf9d1c13c841739b6bb14 (patch) | |
tree | ce1124ad16dcd44418e25e6836b92f489ed38f79 /bitbake/lib | |
parent | 479a059c96882817a7f7b3765257f7acdf112348 (diff) | |
download | poky-530aceebc1743b6e279bf9d1c13c841739b6bb14.tar.gz |
bitbake: runqueue: Ensure setscene tasks that aren't covered get built
Running "bitbake gconf-native -c cleansstate; bitbake core-image-sato:do_populate_sdk"
results in a build where it fails to find gconf-native and fails to build it,
merrily trying to build the SDK without gconf being present.
The issue is the missing setscene tasks are effectively ignored as the later
code in runqueue thinks that since other sstate tasks are present, these
'cover' the missing one. In reality we need to call BB_SETSCENE_DEPVALID
to make that decision. To do that we need a "reduced" setscene dependency
graph which we don't have in main task graph context.
Since that was already done in setscene, we should just assume anything
in the non-covered list needs to be built.
(Bitbake rev: 464d0339add15bc8b4344ddd1e4c49706e3c0a02)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/lib')
-rw-r--r-- | bitbake/lib/bb/runqueue.py | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/bitbake/lib/bb/runqueue.py b/bitbake/lib/bb/runqueue.py index 91911aff89..9ce06c4085 100644 --- a/bitbake/lib/bb/runqueue.py +++ b/bitbake/lib/bb/runqueue.py | |||
@@ -1831,13 +1831,14 @@ class RunQueueExecuteTasks(RunQueueExecute): | |||
1831 | bb.build.del_stamp(taskname, self.rqdata.dataCaches[mc], taskfn) | 1831 | bb.build.del_stamp(taskname, self.rqdata.dataCaches[mc], taskfn) |
1832 | self.rq.scenequeue_covered.remove(tid) | 1832 | self.rq.scenequeue_covered.remove(tid) |
1833 | 1833 | ||
1834 | toremove = covered_remove | 1834 | toremove = covered_remove | self.rq.scenequeue_notcovered |
1835 | for task in toremove: | 1835 | for task in toremove: |
1836 | logger.debug(1, 'Not skipping task %s due to setsceneverify', task) | 1836 | logger.debug(1, 'Not skipping task %s due to setsceneverify', task) |
1837 | while toremove: | 1837 | while toremove: |
1838 | covered_remove = [] | 1838 | covered_remove = [] |
1839 | for task in toremove: | 1839 | for task in toremove: |
1840 | removecoveredtask(task) | 1840 | if task in self.rq.scenequeue_covered: |
1841 | removecoveredtask(task) | ||
1841 | for deptask in self.rqdata.runtaskentries[task].depends: | 1842 | for deptask in self.rqdata.runtaskentries[task].depends: |
1842 | if deptask not in self.rq.scenequeue_covered: | 1843 | if deptask not in self.rq.scenequeue_covered: |
1843 | continue | 1844 | continue |
@@ -2103,6 +2104,7 @@ class RunQueueExecuteScenequeue(RunQueueExecute): | |||
2103 | # If we don't have any setscene functions, skip this step | 2104 | # If we don't have any setscene functions, skip this step |
2104 | if len(self.rqdata.runq_setscene_tids) == 0: | 2105 | if len(self.rqdata.runq_setscene_tids) == 0: |
2105 | rq.scenequeue_covered = set() | 2106 | rq.scenequeue_covered = set() |
2107 | rq.scenequeue_notcovered = set() | ||
2106 | rq.state = runQueueRunInit | 2108 | rq.state = runQueueRunInit |
2107 | return | 2109 | return |
2108 | 2110 | ||