summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bitbake/lib/bb/runqueue.py468
1 files changed, 244 insertions, 224 deletions
diff --git a/bitbake/lib/bb/runqueue.py b/bitbake/lib/bb/runqueue.py
index 6ac9fb1678..c9335195cb 100644
--- a/bitbake/lib/bb/runqueue.py
+++ b/bitbake/lib/bb/runqueue.py
@@ -2080,267 +2080,287 @@ class RunQueueExecuteTasks(RunQueueExecute):
2080 #bb.note("Task %s: " % task + str(taskdepdata).replace("], ", "],\n")) 2080 #bb.note("Task %s: " % task + str(taskdepdata).replace("], ", "],\n"))
2081 return taskdepdata 2081 return taskdepdata
2082 2082
2083class RunQueueExecuteScenequeue(RunQueueExecute): 2083class SQData(object):
2084 def __init__(self, rq): 2084 def __init__(self):
2085 RunQueueExecute.__init__(self, rq) 2085 # SceneQueue dependencies
2086 2086 self.sq_deps = {}
2087 self.scenequeue_covered = set() 2087 # SceneQueue reverse dependencies
2088 self.scenequeue_notcovered = set() 2088 self.sq_revdeps = {}
2089 self.scenequeue_notneeded = set() 2089 # Copy of reverse dependencies used by sq processing code
2090 2090 self.sq_revdeps2 = {}
2091 # If we don't have any setscene functions, skip this step 2091 # Injected inter-setscene task dependencies
2092 if len(self.rqdata.runq_setscene_tids) == 0:
2093 rq.scenequeue_covered = set()
2094 rq.scenequeue_notcovered = set()
2095 rq.state = runQueueRunInit
2096 return
2097
2098 self.stats = RunQueueStats(len(self.rqdata.runq_setscene_tids))
2099
2100 sq_revdeps = {}
2101 sq_revdeps_new = {}
2102 sq_revdeps_squash = {}
2103 self.sq_harddeps = {} 2092 self.sq_harddeps = {}
2093 # Cache of stamp files so duplicates can't run in parallel
2104 self.stamps = {} 2094 self.stamps = {}
2095 # Setscene tasks directly depended upon by the build
2096 self.unskippable = []
2097 # List of setscene tasks which aren't present
2098 self.outrightfail = []
2099 # A list of normal tasks a setscene task covers
2100 self.sq_covered_tasks = {}
2101
2102def build_scenequeue_data(sqdata, rqdata, rq, cooker, stampcache, sqrq):
2103
2104 sq_revdeps = {}
2105 sq_revdeps_new = {}
2106 sq_revdeps_squash = {}
2107
2108 # We need to construct a dependency graph for the setscene functions. Intermediate
2109 # dependencies between the setscene tasks only complicate the code. This code
2110 # therefore aims to collapse the huge runqueue dependency tree into a smaller one
2111 # only containing the setscene functions.
2112
2113 rqdata.init_progress_reporter.next_stage()
2114
2115 # First process the chains up to the first setscene task.
2116 endpoints = {}
2117 for tid in rqdata.runtaskentries:
2118 sq_revdeps[tid] = copy.copy(rqdata.runtaskentries[tid].revdeps)
2119 sq_revdeps_new[tid] = set()
2120 if (len(sq_revdeps[tid]) == 0) and tid not in rqdata.runq_setscene_tids:
2121 #bb.warn("Added endpoint %s" % (tid))
2122 endpoints[tid] = set()
2123
2124 rqdata.init_progress_reporter.next_stage()
2125
2126 # Secondly process the chains between setscene tasks.
2127 for tid in rqdata.runq_setscene_tids:
2128 #bb.warn("Added endpoint 2 %s" % (tid))
2129 for dep in rqdata.runtaskentries[tid].depends:
2130 if tid in sq_revdeps[dep]:
2131 sq_revdeps[dep].remove(tid)
2132 if dep not in endpoints:
2133 endpoints[dep] = set()
2134 #bb.warn(" Added endpoint 3 %s" % (dep))
2135 endpoints[dep].add(tid)
2136
2137 rqdata.init_progress_reporter.next_stage()
2138
2139 def process_endpoints(endpoints):
2140 newendpoints = {}
2141 for point, task in endpoints.items():
2142 tasks = set()
2143 if task:
2144 tasks |= task
2145 if sq_revdeps_new[point]:
2146 tasks |= sq_revdeps_new[point]
2147 sq_revdeps_new[point] = set()
2148 if point in rqdata.runq_setscene_tids:
2149 sq_revdeps_new[point] = tasks
2150 tasks = set()
2151 continue
2152 for dep in rqdata.runtaskentries[point].depends:
2153 if point in sq_revdeps[dep]:
2154 sq_revdeps[dep].remove(point)
2155 if tasks:
2156 sq_revdeps_new[dep] |= tasks
2157 if len(sq_revdeps[dep]) == 0 and dep not in rqdata.runq_setscene_tids:
2158 newendpoints[dep] = task
2159 if len(newendpoints) != 0:
2160 process_endpoints(newendpoints)
2161
2162 process_endpoints(endpoints)
2163
2164 rqdata.init_progress_reporter.next_stage()
2165
2166 # Build a list of setscene tasks which are "unskippable"
2167 # These are direct endpoints referenced by the build
2168 endpoints2 = {}
2169 sq_revdeps2 = {}
2170 sq_revdeps_new2 = {}
2171 def process_endpoints2(endpoints):
2172 newendpoints = {}
2173 for point, task in endpoints.items():
2174 tasks = set([point])
2175 if task:
2176 tasks |= task
2177 if sq_revdeps_new2[point]:
2178 tasks |= sq_revdeps_new2[point]
2179 sq_revdeps_new2[point] = set()
2180 if point in rqdata.runq_setscene_tids:
2181 sq_revdeps_new2[point] = tasks
2182 for dep in rqdata.runtaskentries[point].depends:
2183 if point in sq_revdeps2[dep]:
2184 sq_revdeps2[dep].remove(point)
2185 if tasks:
2186 sq_revdeps_new2[dep] |= tasks
2187 if (len(sq_revdeps2[dep]) == 0 or len(sq_revdeps_new2[dep]) != 0) and dep not in rqdata.runq_setscene_tids:
2188 newendpoints[dep] = tasks
2189 if len(newendpoints) != 0:
2190 process_endpoints2(newendpoints)
2191 for tid in rqdata.runtaskentries:
2192 sq_revdeps2[tid] = copy.copy(rqdata.runtaskentries[tid].revdeps)
2193 sq_revdeps_new2[tid] = set()
2194 if (len(sq_revdeps2[tid]) == 0) and tid not in rqdata.runq_setscene_tids:
2195 endpoints2[tid] = set()
2196 process_endpoints2(endpoints2)
2197 for tid in rqdata.runq_setscene_tids:
2198 if sq_revdeps_new2[tid]:
2199 sqdata.unskippable.append(tid)
2200
2201 rqdata.init_progress_reporter.next_stage(len(rqdata.runtaskentries))
2202
2203 for taskcounter, tid in enumerate(rqdata.runtaskentries):
2204 if tid in rqdata.runq_setscene_tids:
2205 deps = set()
2206 for dep in sq_revdeps_new[tid]:
2207 deps.add(dep)
2208 sq_revdeps_squash[tid] = deps
2209 elif len(sq_revdeps_new[tid]) != 0:
2210 bb.msg.fatal("RunQueue", "Something went badly wrong during scenequeue generation, aborting. Please report this problem.")
2211 rqdata.init_progress_reporter.update(taskcounter)
2212
2213 rqdata.init_progress_reporter.next_stage()
2214
2215 # Resolve setscene inter-task dependencies
2216 # e.g. do_sometask_setscene[depends] = "targetname:do_someothertask_setscene"
2217 # Note that anything explicitly depended upon will have its reverse dependencies removed to avoid circular dependencies
2218 for tid in rqdata.runq_setscene_tids:
2219 (mc, fn, taskname, taskfn) = split_tid_mcfn(tid)
2220 realtid = tid + "_setscene"
2221 idepends = rqdata.taskData[mc].taskentries[realtid].idepends
2222 sqdata.stamps[tid] = bb.build.stampfile(taskname + "_setscene", rqdata.dataCaches[mc], taskfn, noextra=True)
2223 for (depname, idependtask) in idepends:
2105 2224
2106 # We need to construct a dependency graph for the setscene functions. Intermediate 2225 if depname not in rqdata.taskData[mc].build_targets:
2107 # dependencies between the setscene tasks only complicate the code. This code 2226 continue
2108 # therefore aims to collapse the huge runqueue dependency tree into a smaller one
2109 # only containing the setscene functions.
2110
2111 self.rqdata.init_progress_reporter.next_stage()
2112 2227
2113 # First process the chains up to the first setscene task. 2228 depfn = rqdata.taskData[mc].build_targets[depname][0]
2114 endpoints = {} 2229 if depfn is None:
2115 for tid in self.rqdata.runtaskentries: 2230 continue
2116 sq_revdeps[tid] = copy.copy(self.rqdata.runtaskentries[tid].revdeps) 2231 deptid = depfn + ":" + idependtask.replace("_setscene", "")
2117 sq_revdeps_new[tid] = set() 2232 if deptid not in rqdata.runtaskentries:
2118 if (len(sq_revdeps[tid]) == 0) and tid not in self.rqdata.runq_setscene_tids: 2233 bb.msg.fatal("RunQueue", "Task %s depends upon non-existent task %s:%s" % (realtid, depfn, idependtask))
2119 #bb.warn("Added endpoint %s" % (tid))
2120 endpoints[tid] = set()
2121 2234
2122 self.rqdata.init_progress_reporter.next_stage() 2235 if not deptid in sqdata.sq_harddeps:
2236 sqdata.sq_harddeps[deptid] = set()
2237 sqdata.sq_harddeps[deptid].add(tid)
2123 2238
2124 # Secondly process the chains between setscene tasks. 2239 sq_revdeps_squash[tid].add(deptid)
2125 for tid in self.rqdata.runq_setscene_tids: 2240 # Have to zero this to avoid circular dependencies
2126 #bb.warn("Added endpoint 2 %s" % (tid)) 2241 sq_revdeps_squash[deptid] = set()
2127 for dep in self.rqdata.runtaskentries[tid].depends:
2128 if tid in sq_revdeps[dep]:
2129 sq_revdeps[dep].remove(tid)
2130 if dep not in endpoints:
2131 endpoints[dep] = set()
2132 #bb.warn(" Added endpoint 3 %s" % (dep))
2133 endpoints[dep].add(tid)
2134
2135 self.rqdata.init_progress_reporter.next_stage()
2136
2137 def process_endpoints(endpoints):
2138 newendpoints = {}
2139 for point, task in endpoints.items():
2140 tasks = set()
2141 if task:
2142 tasks |= task
2143 if sq_revdeps_new[point]:
2144 tasks |= sq_revdeps_new[point]
2145 sq_revdeps_new[point] = set()
2146 if point in self.rqdata.runq_setscene_tids:
2147 sq_revdeps_new[point] = tasks
2148 tasks = set()
2149 continue
2150 for dep in self.rqdata.runtaskentries[point].depends:
2151 if point in sq_revdeps[dep]:
2152 sq_revdeps[dep].remove(point)
2153 if tasks:
2154 sq_revdeps_new[dep] |= tasks
2155 if len(sq_revdeps[dep]) == 0 and dep not in self.rqdata.runq_setscene_tids:
2156 newendpoints[dep] = task
2157 if len(newendpoints) != 0:
2158 process_endpoints(newendpoints)
2159
2160 process_endpoints(endpoints)
2161
2162 self.rqdata.init_progress_reporter.next_stage()
2163
2164 # Build a list of setscene tasks which are "unskippable"
2165 # These are direct endpoints referenced by the build
2166 endpoints2 = {}
2167 sq_revdeps2 = {}
2168 sq_revdeps_new2 = {}
2169 def process_endpoints2(endpoints):
2170 newendpoints = {}
2171 for point, task in endpoints.items():
2172 tasks = set([point])
2173 if task:
2174 tasks |= task
2175 if sq_revdeps_new2[point]:
2176 tasks |= sq_revdeps_new2[point]
2177 sq_revdeps_new2[point] = set()
2178 if point in self.rqdata.runq_setscene_tids:
2179 sq_revdeps_new2[point] = tasks
2180 for dep in self.rqdata.runtaskentries[point].depends:
2181 if point in sq_revdeps2[dep]:
2182 sq_revdeps2[dep].remove(point)
2183 if tasks:
2184 sq_revdeps_new2[dep] |= tasks
2185 if (len(sq_revdeps2[dep]) == 0 or len(sq_revdeps_new2[dep]) != 0) and dep not in self.rqdata.runq_setscene_tids:
2186 newendpoints[dep] = tasks
2187 if len(newendpoints) != 0:
2188 process_endpoints2(newendpoints)
2189 for tid in self.rqdata.runtaskentries:
2190 sq_revdeps2[tid] = copy.copy(self.rqdata.runtaskentries[tid].revdeps)
2191 sq_revdeps_new2[tid] = set()
2192 if (len(sq_revdeps2[tid]) == 0) and tid not in self.rqdata.runq_setscene_tids:
2193 endpoints2[tid] = set()
2194 process_endpoints2(endpoints2)
2195 self.unskippable = []
2196 for tid in self.rqdata.runq_setscene_tids:
2197 if sq_revdeps_new2[tid]:
2198 self.unskippable.append(tid)
2199 2242
2200 self.rqdata.init_progress_reporter.next_stage(len(self.rqdata.runtaskentries)) 2243 rqdata.init_progress_reporter.next_stage()
2201 2244
2202 for taskcounter, tid in enumerate(self.rqdata.runtaskentries): 2245 for task in sqdata.sq_harddeps:
2203 if tid in self.rqdata.runq_setscene_tids: 2246 for dep in sqdata.sq_harddeps[task]:
2204 deps = set() 2247 sq_revdeps_squash[dep].add(task)
2205 for dep in sq_revdeps_new[tid]:
2206 deps.add(dep)
2207 sq_revdeps_squash[tid] = deps
2208 elif len(sq_revdeps_new[tid]) != 0:
2209 bb.msg.fatal("RunQueue", "Something went badly wrong during scenequeue generation, aborting. Please report this problem.")
2210 self.rqdata.init_progress_reporter.update(taskcounter)
2211
2212 self.rqdata.init_progress_reporter.next_stage()
2213
2214 # Resolve setscene inter-task dependencies
2215 # e.g. do_sometask_setscene[depends] = "targetname:do_someothertask_setscene"
2216 # Note that anything explicitly depended upon will have its reverse dependencies removed to avoid circular dependencies
2217 for tid in self.rqdata.runq_setscene_tids:
2218 (mc, fn, taskname, taskfn) = split_tid_mcfn(tid)
2219 realtid = tid + "_setscene"
2220 idepends = self.rqdata.taskData[mc].taskentries[realtid].idepends
2221 self.stamps[tid] = bb.build.stampfile(taskname + "_setscene", self.rqdata.dataCaches[mc], taskfn, noextra=True)
2222 for (depname, idependtask) in idepends:
2223 2248
2224 if depname not in self.rqdata.taskData[mc].build_targets: 2249 rqdata.init_progress_reporter.next_stage()
2225 continue
2226 2250
2227 depfn = self.rqdata.taskData[mc].build_targets[depname][0] 2251 #for tid in sq_revdeps_squash:
2228 if depfn is None: 2252 # for dep in sq_revdeps_squash[tid]:
2229 continue 2253 # data = data + "\n %s" % dep
2230 deptid = depfn + ":" + idependtask.replace("_setscene", "") 2254 # bb.warn("Task %s_setscene: is %s " % (tid, data
2231 if deptid not in self.rqdata.runtaskentries:
2232 bb.msg.fatal("RunQueue", "Task %s depends upon non-existent task %s:%s" % (realtid, depfn, idependtask))
2233 2255
2234 if not deptid in self.sq_harddeps: 2256 sqdata.sq_revdeps = sq_revdeps_squash
2235 self.sq_harddeps[deptid] = set() 2257 sqdata.sq_revdeps2 = copy.deepcopy(sqdata.sq_revdeps)
2236 self.sq_harddeps[deptid].add(tid)
2237 2258
2238 sq_revdeps_squash[tid].add(deptid) 2259 for tid in sqdata.sq_revdeps:
2239 # Have to zero this to avoid circular dependencies 2260 sqdata.sq_deps[tid] = set()
2240 sq_revdeps_squash[deptid] = set() 2261 for tid in sqdata.sq_revdeps:
2262 for dep in sqdata.sq_revdeps[tid]:
2263 sqdata.sq_deps[dep].add(tid)
2241 2264
2242 self.rqdata.init_progress_reporter.next_stage() 2265 rqdata.init_progress_reporter.next_stage()
2243 2266
2244 for task in self.sq_harddeps: 2267 for tid in sqdata.sq_revdeps:
2245 for dep in self.sq_harddeps[task]: 2268 if len(sqdata.sq_revdeps[tid]) == 0:
2246 sq_revdeps_squash[dep].add(task) 2269 sqrq.runq_buildable.add(tid)
2247 2270
2248 self.rqdata.init_progress_reporter.next_stage() 2271 rqdata.init_progress_reporter.finish()
2249 2272
2250 #for tid in sq_revdeps_squash: 2273 if rq.hashvalidate:
2251 # for dep in sq_revdeps_squash[tid]: 2274 sq_hash = []
2252 # data = data + "\n %s" % dep 2275 sq_hashfn = []
2253 # bb.warn("Task %s_setscene: is %s " % (tid, data 2276 sq_unihash = []
2277 sq_fn = []
2278 sq_taskname = []
2279 sq_task = []
2280 noexec = []
2281 stamppresent = []
2282 for tid in sqdata.sq_revdeps:
2283 (mc, fn, taskname, taskfn) = split_tid_mcfn(tid)
2254 2284
2255 self.sq_deps = {} 2285 taskdep = rqdata.dataCaches[mc].task_deps[taskfn]
2256 self.sq_revdeps = sq_revdeps_squash
2257 self.sq_revdeps2 = copy.deepcopy(self.sq_revdeps)
2258 2286
2259 for tid in self.sq_revdeps: 2287 if 'noexec' in taskdep and taskname in taskdep['noexec']:
2260 self.sq_deps[tid] = set() 2288 noexec.append(tid)
2261 for tid in self.sq_revdeps: 2289 sqrq.task_skip(tid)
2262 for dep in self.sq_revdeps[tid]: 2290 bb.build.make_stamp(taskname + "_setscene", rqdata.dataCaches[mc], taskfn)
2263 self.sq_deps[dep].add(tid) 2291 continue
2264 2292
2265 self.rqdata.init_progress_reporter.next_stage() 2293 if rq.check_stamp_task(tid, taskname + "_setscene", cache=stampcache):
2294 logger.debug(2, 'Setscene stamp current for task %s', tid)
2295 stamppresent.append(tid)
2296 sqrq.task_skip(tid)
2297 continue
2266 2298
2267 for tid in self.sq_revdeps: 2299 if rq.check_stamp_task(tid, taskname, recurse = True, cache=stampcache):
2268 if len(self.sq_revdeps[tid]) == 0: 2300 logger.debug(2, 'Normal stamp current for task %s', tid)
2269 self.runq_buildable.add(tid) 2301 stamppresent.append(tid)
2302 sqrq.task_skip(tid)
2303 continue
2270 2304
2271 self.rqdata.init_progress_reporter.finish() 2305 sq_fn.append(fn)
2306 sq_hashfn.append(rqdata.dataCaches[mc].hashfn[taskfn])
2307 sq_hash.append(rqdata.runtaskentries[tid].hash)
2308 sq_unihash.append(rqdata.runtaskentries[tid].unihash)
2309 sq_taskname.append(taskname)
2310 sq_task.append(tid)
2272 2311
2273 self.outrightfail = [] 2312 cooker.data.setVar("BB_SETSCENE_STAMPCURRENT_COUNT", len(stamppresent))
2274 if self.rq.hashvalidate:
2275 sq_hash = []
2276 sq_hashfn = []
2277 sq_unihash = []
2278 sq_fn = []
2279 sq_taskname = []
2280 sq_task = []
2281 noexec = []
2282 stamppresent = []
2283 for tid in self.sq_revdeps:
2284 (mc, fn, taskname, taskfn) = split_tid_mcfn(tid)
2285 2313
2286 taskdep = self.rqdata.dataCaches[mc].task_deps[taskfn] 2314 valid = rq.validate_hash(sq_fn=sq_fn, sq_task=sq_taskname, sq_hash=sq_hash, sq_hashfn=sq_hashfn,
2315 siginfo=False, sq_unihash=sq_unihash, d=cooker.data)
2287 2316
2288 if 'noexec' in taskdep and taskname in taskdep['noexec']: 2317 cooker.data.delVar("BB_SETSCENE_STAMPCURRENT_COUNT")
2289 noexec.append(tid)
2290 self.task_skip(tid)
2291 bb.build.make_stamp(taskname + "_setscene", self.rqdata.dataCaches[mc], taskfn)
2292 continue
2293 2318
2294 if self.rq.check_stamp_task(tid, taskname + "_setscene", cache=self.stampcache): 2319 valid_new = stamppresent
2295 logger.debug(2, 'Setscene stamp current for task %s', tid) 2320 for v in valid:
2296 stamppresent.append(tid) 2321 valid_new.append(sq_task[v])
2297 self.task_skip(tid)
2298 continue
2299 2322
2300 if self.rq.check_stamp_task(tid, taskname, recurse = True, cache=self.stampcache): 2323 for tid in sqdata.sq_revdeps:
2301 logger.debug(2, 'Normal stamp current for task %s', tid) 2324 if tid not in valid_new and tid not in noexec:
2302 stamppresent.append(tid) 2325 logger.debug(2, 'No package found, so skipping setscene task %s', tid)
2303 self.task_skip(tid) 2326 sqdata.outrightfail.append(tid)
2304 continue
2305 2327
2306 sq_fn.append(fn)
2307 sq_hashfn.append(self.rqdata.dataCaches[mc].hashfn[taskfn])
2308 sq_hash.append(self.rqdata.runtaskentries[tid].hash)
2309 sq_unihash.append(self.rqdata.runtaskentries[tid].unihash)
2310 sq_taskname.append(taskname)
2311 sq_task.append(tid)
2312 2328
2313 self.cooker.data.setVar("BB_SETSCENE_STAMPCURRENT_COUNT", len(stamppresent)) 2329class RunQueueExecuteScenequeue(RunQueueExecute):
2330 def __init__(self, rq):
2331 RunQueueExecute.__init__(self, rq)
2314 2332
2315 valid = self.rq.validate_hash(sq_fn=sq_fn, sq_task=sq_taskname, sq_hash=sq_hash, sq_hashfn=sq_hashfn, 2333 self.scenequeue_covered = set()
2316 siginfo=False, sq_unihash=sq_unihash, d=self.cooker.data) 2334 self.scenequeue_notcovered = set()
2335 self.scenequeue_notneeded = set()
2317 2336
2318 self.cooker.data.delVar("BB_SETSCENE_STAMPCURRENT_COUNT") 2337 # If we don't have any setscene functions, skip this step
2338 if len(self.rqdata.runq_setscene_tids) == 0:
2339 rq.scenequeue_covered = set()
2340 rq.scenequeue_notcovered = set()
2341 rq.state = runQueueRunInit
2342 return
2319 2343
2320 valid_new = stamppresent 2344 self.stats = RunQueueStats(len(self.rqdata.runq_setscene_tids))
2321 for v in valid:
2322 valid_new.append(sq_task[v])
2323 2345
2324 for tid in self.sq_revdeps: 2346 self.sqdata = SQData()
2325 if tid not in valid_new and tid not in noexec: 2347 build_scenequeue_data(self.sqdata, self.rqdata, self.rq, self.cooker, self.stampcache, self)
2326 logger.debug(2, 'No package found, so skipping setscene task %s', tid)
2327 self.outrightfail.append(tid)
2328 2348
2329 logger.info('Executing SetScene Tasks') 2349 logger.info('Executing SetScene Tasks')
2330 2350
2331 self.rq.state = runQueueSceneRun 2351 self.rq.state = runQueueSceneRun
2332 2352
2333 def scenequeue_updatecounters(self, task, fail = False): 2353 def scenequeue_updatecounters(self, task, fail = False):
2334 for dep in self.sq_deps[task]: 2354 for dep in self.sqdata.sq_deps[task]:
2335 if fail and task in self.sq_harddeps and dep in self.sq_harddeps[task]: 2355 if fail and task in self.sqdata.sq_harddeps and dep in self.sqdata.sq_harddeps[task]:
2336 logger.debug(2, "%s was unavailable and is a hard dependency of %s so skipping" % (task, dep)) 2356 logger.debug(2, "%s was unavailable and is a hard dependency of %s so skipping" % (task, dep))
2337 self.scenequeue_updatecounters(dep, fail) 2357 self.scenequeue_updatecounters(dep, fail)
2338 continue 2358 continue
2339 if task not in self.sq_revdeps2[dep]: 2359 if task not in self.sqdata.sq_revdeps2[dep]:
2340 # May already have been removed by the fail case above 2360 # May already have been removed by the fail case above
2341 continue 2361 continue
2342 self.sq_revdeps2[dep].remove(task) 2362 self.sqdata.sq_revdeps2[dep].remove(task)
2343 if len(self.sq_revdeps2[dep]) == 0: 2363 if len(self.sqdata.sq_revdeps2[dep]) == 0:
2344 self.runq_buildable.add(dep) 2364 self.runq_buildable.add(dep)
2345 2365
2346 def task_completeoutright(self, task): 2366 def task_completeoutright(self, task):
@@ -2401,10 +2421,10 @@ class RunQueueExecuteScenequeue(RunQueueExecute):
2401 if self.can_start_task(): 2421 if self.can_start_task():
2402 # Find the next setscene to run 2422 # Find the next setscene to run
2403 for nexttask in self.rqdata.runq_setscene_tids: 2423 for nexttask in self.rqdata.runq_setscene_tids:
2404 if nexttask in self.runq_buildable and nexttask not in self.runq_running and self.stamps[nexttask] not in self.build_stamps.values(): 2424 if nexttask in self.runq_buildable and nexttask not in self.runq_running and self.sqdata.stamps[nexttask] not in self.build_stamps.values():
2405 if nexttask in self.unskippable: 2425 if nexttask in self.sqdata.unskippable:
2406 logger.debug(2, "Setscene task %s is unskippable" % nexttask) 2426 logger.debug(2, "Setscene task %s is unskippable" % nexttask)
2407 if nexttask not in self.unskippable and len(self.sq_revdeps[nexttask]) > 0 and self.sq_revdeps[nexttask].issubset(self.scenequeue_covered) and self.check_dependencies(nexttask, self.sq_revdeps[nexttask], True): 2427 if nexttask not in self.sqdata.unskippable and len(self.sqdata.sq_revdeps[nexttask]) > 0 and self.sqdata.sq_revdeps[nexttask].issubset(self.scenequeue_covered) and self.check_dependencies(nexttask, self.sqdata.sq_revdeps[nexttask], True):
2408 fn = fn_from_tid(nexttask) 2428 fn = fn_from_tid(nexttask)
2409 foundtarget = False 2429 foundtarget = False
2410 2430
@@ -2415,7 +2435,7 @@ class RunQueueExecuteScenequeue(RunQueueExecute):
2415 self.task_skip(nexttask) 2435 self.task_skip(nexttask)
2416 self.scenequeue_notneeded.add(nexttask) 2436 self.scenequeue_notneeded.add(nexttask)
2417 return True 2437 return True
2418 if nexttask in self.outrightfail: 2438 if nexttask in self.sqdata.outrightfail:
2419 self.task_failoutright(nexttask) 2439 self.task_failoutright(nexttask)
2420 return True 2440 return True
2421 task = nexttask 2441 task = nexttask
@@ -2471,10 +2491,10 @@ class RunQueueExecuteScenequeue(RunQueueExecute):
2471 self.rq.read_workers() 2491 self.rq.read_workers()
2472 return self.rq.active_fds() 2492 return self.rq.active_fds()
2473 2493
2474 #for tid in self.sq_revdeps: 2494 #for tid in self.sqdata.sq_revdeps:
2475 # if tid not in self.runq_running: 2495 # if tid not in self.runq_running:
2476 # buildable = tid in self.runq_buildable 2496 # buildable = tid in self.runq_buildable
2477 # revdeps = self.sq_revdeps[tid] 2497 # revdeps = self.sqdata.sq_revdeps[tid]
2478 # bb.warn("Found we didn't run %s %s %s" % (tid, buildable, str(revdeps))) 2498 # bb.warn("Found we didn't run %s %s %s" % (tid, buildable, str(revdeps)))
2479 2499
2480 self.rq.scenequeue_covered = self.scenequeue_covered 2500 self.rq.scenequeue_covered = self.scenequeue_covered