summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/bb/runqueue.py
diff options
context:
space:
mode:
Diffstat (limited to 'bitbake/lib/bb/runqueue.py')
-rw-r--r--bitbake/lib/bb/runqueue.py117
1 files changed, 56 insertions, 61 deletions
diff --git a/bitbake/lib/bb/runqueue.py b/bitbake/lib/bb/runqueue.py
index 5ab7e97088..376c9f51e8 100644
--- a/bitbake/lib/bb/runqueue.py
+++ b/bitbake/lib/bb/runqueue.py
@@ -35,11 +35,7 @@ import bb
35from bb import msg, data, event 35from bb import msg, data, event
36from bb import monitordisk 36from bb import monitordisk
37import subprocess 37import subprocess
38 38import pickle
39try:
40 import cPickle as pickle
41except ImportError:
42 import pickle
43 39
44bblogger = logging.getLogger("BitBake") 40bblogger = logging.getLogger("BitBake")
45logger = logging.getLogger("BitBake.RunQueue") 41logger = logging.getLogger("BitBake.RunQueue")
@@ -108,7 +104,7 @@ class RunQueueScheduler(object):
108 104
109 self.buildable = [] 105 self.buildable = []
110 self.stamps = {} 106 self.stamps = {}
111 for taskid in xrange(self.numTasks): 107 for taskid in range(self.numTasks):
112 fn = self.rqdata.taskData.fn_index[self.rqdata.runq_fnid[taskid]] 108 fn = self.rqdata.taskData.fn_index[self.rqdata.runq_fnid[taskid]]
113 taskname = self.rqdata.runq_task[taskid] 109 taskname = self.rqdata.runq_task[taskid]
114 self.stamps[taskid] = bb.build.stampfile(taskname, self.rqdata.dataCache, fn) 110 self.stamps[taskid] = bb.build.stampfile(taskname, self.rqdata.dataCache, fn)
@@ -127,12 +123,12 @@ class RunQueueScheduler(object):
127 if len(self.buildable) == 1: 123 if len(self.buildable) == 1:
128 taskid = self.buildable[0] 124 taskid = self.buildable[0]
129 stamp = self.stamps[taskid] 125 stamp = self.stamps[taskid]
130 if stamp not in self.rq.build_stamps.itervalues(): 126 if stamp not in self.rq.build_stamps.values():
131 return taskid 127 return taskid
132 128
133 if not self.rev_prio_map: 129 if not self.rev_prio_map:
134 self.rev_prio_map = range(self.numTasks) 130 self.rev_prio_map = list(range(self.numTasks))
135 for taskid in xrange(self.numTasks): 131 for taskid in range(self.numTasks):
136 self.rev_prio_map[self.prio_map[taskid]] = taskid 132 self.rev_prio_map[self.prio_map[taskid]] = taskid
137 133
138 best = None 134 best = None
@@ -141,7 +137,7 @@ class RunQueueScheduler(object):
141 prio = self.rev_prio_map[taskid] 137 prio = self.rev_prio_map[taskid]
142 if bestprio is None or bestprio > prio: 138 if bestprio is None or bestprio > prio:
143 stamp = self.stamps[taskid] 139 stamp = self.stamps[taskid]
144 if stamp in self.rq.build_stamps.itervalues(): 140 if stamp in self.rq.build_stamps.values():
145 continue 141 continue
146 bestprio = prio 142 bestprio = prio
147 best = taskid 143 best = taskid
@@ -269,7 +265,7 @@ class RunQueueData:
269 265
270 266
271 def get_task_id(self, fnid, taskname): 267 def get_task_id(self, fnid, taskname):
272 for listid in xrange(len(self.runq_fnid)): 268 for listid in range(len(self.runq_fnid)):
273 if self.runq_fnid[listid] == fnid and self.runq_task[listid] == taskname: 269 if self.runq_fnid[listid] == fnid and self.runq_task[listid] == taskname:
274 return listid 270 return listid
275 return None 271 return None
@@ -291,7 +287,7 @@ class RunQueueData:
291 """ 287 """
292 lowest = 0 288 lowest = 0
293 new_chain = [] 289 new_chain = []
294 for entry in xrange(len(chain)): 290 for entry in range(len(chain)):
295 if chain[entry] < chain[lowest]: 291 if chain[entry] < chain[lowest]:
296 lowest = entry 292 lowest = entry
297 new_chain.extend(chain[lowest:]) 293 new_chain.extend(chain[lowest:])
@@ -304,7 +300,7 @@ class RunQueueData:
304 """ 300 """
305 if len(chain1) != len(chain2): 301 if len(chain1) != len(chain2):
306 return False 302 return False
307 for index in xrange(len(chain1)): 303 for index in range(len(chain1)):
308 if chain1[index] != chain2[index]: 304 if chain1[index] != chain2[index]:
309 return False 305 return False
310 return True 306 return True
@@ -375,7 +371,7 @@ class RunQueueData:
375 deps_left = [] 371 deps_left = []
376 task_done = [] 372 task_done = []
377 373
378 for listid in xrange(numTasks): 374 for listid in range(numTasks):
379 task_done.append(False) 375 task_done.append(False)
380 weight.append(1) 376 weight.append(1)
381 deps_left.append(len(self.runq_revdeps[listid])) 377 deps_left.append(len(self.runq_revdeps[listid]))
@@ -399,7 +395,7 @@ class RunQueueData:
399 395
400 # Circular dependency sanity check 396 # Circular dependency sanity check
401 problem_tasks = [] 397 problem_tasks = []
402 for task in xrange(numTasks): 398 for task in range(numTasks):
403 if task_done[task] is False or deps_left[task] != 0: 399 if task_done[task] is False or deps_left[task] != 0:
404 problem_tasks.append(task) 400 problem_tasks.append(task)
405 logger.debug(2, "Task %s (%s) is not buildable", task, self.get_user_idstring(task)) 401 logger.debug(2, "Task %s (%s) is not buildable", task, self.get_user_idstring(task))
@@ -482,7 +478,7 @@ class RunQueueData:
482 if taskid is not None: 478 if taskid is not None:
483 depends.add(taskid) 479 depends.add(taskid)
484 480
485 for task in xrange(len(taskData.tasks_name)): 481 for task in range(len(taskData.tasks_name)):
486 depends = set() 482 depends = set()
487 fnid = taskData.tasks_fnid[task] 483 fnid = taskData.tasks_fnid[task]
488 fn = taskData.fn_index[fnid] 484 fn = taskData.fn_index[fnid]
@@ -597,7 +593,7 @@ class RunQueueData:
597 for task in recursivetasks: 593 for task in recursivetasks:
598 extradeps[task].difference_update(recursivetasksselfref) 594 extradeps[task].difference_update(recursivetasksselfref)
599 595
600 for task in xrange(len(taskData.tasks_name)): 596 for task in range(len(taskData.tasks_name)):
601 # Add in extra dependencies 597 # Add in extra dependencies
602 if task in extradeps: 598 if task in extradeps:
603 self.runq_depends[task] = extradeps[task] 599 self.runq_depends[task] = extradeps[task]
@@ -675,7 +671,7 @@ class RunQueueData:
675 671
676 maps = [] 672 maps = []
677 delcount = 0 673 delcount = 0
678 for listid in xrange(len(self.runq_fnid)): 674 for listid in range(len(self.runq_fnid)):
679 if runq_build[listid-delcount] == 1: 675 if runq_build[listid-delcount] == 1:
680 maps.append(listid-delcount) 676 maps.append(listid-delcount)
681 else: 677 else:
@@ -703,7 +699,7 @@ class RunQueueData:
703 699
704 # Remap the dependencies to account for the deleted tasks 700 # Remap the dependencies to account for the deleted tasks
705 # Check we didn't delete a task we depend on 701 # Check we didn't delete a task we depend on
706 for listid in xrange(len(self.runq_fnid)): 702 for listid in range(len(self.runq_fnid)):
707 newdeps = [] 703 newdeps = []
708 origdeps = self.runq_depends[listid] 704 origdeps = self.runq_depends[listid]
709 for origdep in origdeps: 705 for origdep in origdeps:
@@ -715,14 +711,14 @@ class RunQueueData:
715 logger.verbose("Assign Weightings") 711 logger.verbose("Assign Weightings")
716 712
717 # Generate a list of reverse dependencies to ease future calculations 713 # Generate a list of reverse dependencies to ease future calculations
718 for listid in xrange(len(self.runq_fnid)): 714 for listid in range(len(self.runq_fnid)):
719 for dep in self.runq_depends[listid]: 715 for dep in self.runq_depends[listid]:
720 self.runq_revdeps[dep].add(listid) 716 self.runq_revdeps[dep].add(listid)
721 717
722 # Identify tasks at the end of dependency chains 718 # Identify tasks at the end of dependency chains
723 # Error on circular dependency loops (length two) 719 # Error on circular dependency loops (length two)
724 endpoints = [] 720 endpoints = []
725 for listid in xrange(len(self.runq_fnid)): 721 for listid in range(len(self.runq_fnid)):
726 revdeps = self.runq_revdeps[listid] 722 revdeps = self.runq_revdeps[listid]
727 if len(revdeps) == 0: 723 if len(revdeps) == 0:
728 endpoints.append(listid) 724 endpoints.append(listid)
@@ -740,7 +736,7 @@ class RunQueueData:
740 # Sanity Check - Check for multiple tasks building the same provider 736 # Sanity Check - Check for multiple tasks building the same provider
741 prov_list = {} 737 prov_list = {}
742 seen_fn = [] 738 seen_fn = []
743 for task in xrange(len(self.runq_fnid)): 739 for task in range(len(self.runq_fnid)):
744 fn = taskData.fn_index[self.runq_fnid[task]] 740 fn = taskData.fn_index[self.runq_fnid[task]]
745 if fn in seen_fn: 741 if fn in seen_fn:
746 continue 742 continue
@@ -905,7 +901,7 @@ class RunQueueData:
905 Dump some debug information on the internal data structures 901 Dump some debug information on the internal data structures
906 """ 902 """
907 logger.debug(3, "run_tasks:") 903 logger.debug(3, "run_tasks:")
908 for task in xrange(len(self.rqdata.runq_task)): 904 for task in range(len(self.rqdata.runq_task)):
909 logger.debug(3, " (%s)%s - %s: %s Deps %s RevDeps %s", task, 905 logger.debug(3, " (%s)%s - %s: %s Deps %s RevDeps %s", task,
910 taskQueue.fn_index[self.rqdata.runq_fnid[task]], 906 taskQueue.fn_index[self.rqdata.runq_fnid[task]],
911 self.rqdata.runq_task[task], 907 self.rqdata.runq_task[task],
@@ -914,7 +910,7 @@ class RunQueueData:
914 self.rqdata.runq_revdeps[task]) 910 self.rqdata.runq_revdeps[task])
915 911
916 logger.debug(3, "sorted_tasks:") 912 logger.debug(3, "sorted_tasks:")
917 for task1 in xrange(len(self.rqdata.runq_task)): 913 for task1 in range(len(self.rqdata.runq_task)):
918 if task1 in self.prio_map: 914 if task1 in self.prio_map:
919 task = self.prio_map[task1] 915 task = self.prio_map[task1]
920 logger.debug(3, " (%s)%s - %s: %s Deps %s RevDeps %s", task, 916 logger.debug(3, " (%s)%s - %s: %s Deps %s RevDeps %s", task,
@@ -982,8 +978,8 @@ class RunQueue:
982 "time" : self.cfgData.getVar("TIME", True), 978 "time" : self.cfgData.getVar("TIME", True),
983 } 979 }
984 980
985 worker.stdin.write("<cookerconfig>" + pickle.dumps(self.cooker.configuration) + "</cookerconfig>") 981 worker.stdin.write(b"<cookerconfig>" + pickle.dumps(self.cooker.configuration) + b"</cookerconfig>")
986 worker.stdin.write("<workerdata>" + pickle.dumps(workerdata) + "</workerdata>") 982 worker.stdin.write(b"<workerdata>" + pickle.dumps(workerdata) + b"</workerdata>")
987 worker.stdin.flush() 983 worker.stdin.flush()
988 984
989 return worker, workerpipe 985 return worker, workerpipe
@@ -993,8 +989,9 @@ class RunQueue:
993 return 989 return
994 logger.debug(1, "Teardown for bitbake-worker") 990 logger.debug(1, "Teardown for bitbake-worker")
995 try: 991 try:
996 worker.stdin.write("<quit></quit>") 992 worker.stdin.write(b"<quit></quit>")
997 worker.stdin.flush() 993 worker.stdin.flush()
994 worker.stdin.close()
998 except IOError: 995 except IOError:
999 pass 996 pass
1000 while worker.returncode is None: 997 while worker.returncode is None:
@@ -1245,7 +1242,7 @@ class RunQueue:
1245 stamppresent = [] 1242 stamppresent = []
1246 valid_new = set() 1243 valid_new = set()
1247 1244
1248 for task in xrange(len(self.rqdata.runq_fnid)): 1245 for task in range(len(self.rqdata.runq_fnid)):
1249 fn = self.rqdata.taskData.fn_index[self.rqdata.runq_fnid[task]] 1246 fn = self.rqdata.taskData.fn_index[self.rqdata.runq_fnid[task]]
1250 taskname = self.rqdata.runq_task[task] 1247 taskname = self.rqdata.runq_task[task]
1251 taskdep = self.rqdata.dataCache.task_deps[fn] 1248 taskdep = self.rqdata.dataCache.task_deps[fn]
@@ -1287,7 +1284,7 @@ class RunQueue:
1287 valid_new.add(dep) 1284 valid_new.add(dep)
1288 1285
1289 invalidtasks = set() 1286 invalidtasks = set()
1290 for task in xrange(len(self.rqdata.runq_fnid)): 1287 for task in range(len(self.rqdata.runq_fnid)):
1291 if task not in valid_new and task not in noexec: 1288 if task not in valid_new and task not in noexec:
1292 invalidtasks.add(task) 1289 invalidtasks.add(task)
1293 1290
@@ -1346,7 +1343,7 @@ class RunQueue:
1346 match = m 1343 match = m
1347 if match is None: 1344 if match is None:
1348 bb.fatal("Can't find a task we're supposed to have written out? (hash: %s)?" % h) 1345 bb.fatal("Can't find a task we're supposed to have written out? (hash: %s)?" % h)
1349 matches = {k : v for k, v in matches.iteritems() if h not in k} 1346 matches = {k : v for k, v in iter(matches.items()) if h not in k}
1350 if matches: 1347 if matches:
1351 latestmatch = sorted(matches.keys(), key=lambda f: matches[f])[-1] 1348 latestmatch = sorted(matches.keys(), key=lambda f: matches[f])[-1]
1352 prevh = __find_md5__.search(latestmatch).group(0) 1349 prevh = __find_md5__.search(latestmatch).group(0)
@@ -1395,17 +1392,15 @@ class RunQueueExecute:
1395 return True 1392 return True
1396 1393
1397 def finish_now(self): 1394 def finish_now(self):
1398
1399 for worker in [self.rq.worker, self.rq.fakeworker]: 1395 for worker in [self.rq.worker, self.rq.fakeworker]:
1400 if not worker: 1396 if not worker:
1401 continue 1397 continue
1402 try: 1398 try:
1403 worker.stdin.write("<finishnow></finishnow>") 1399 worker.stdin.write(b"<finishnow></finishnow>")
1404 worker.stdin.flush() 1400 worker.stdin.flush()
1405 except IOError: 1401 except IOError:
1406 # worker must have died? 1402 # worker must have died?
1407 pass 1403 pass
1408
1409 if len(self.failed_fnids) != 0: 1404 if len(self.failed_fnids) != 0:
1410 self.rq.state = runQueueFailed 1405 self.rq.state = runQueueFailed
1411 return 1406 return
@@ -1468,7 +1463,7 @@ class RunQueueExecuteTasks(RunQueueExecute):
1468 initial_covered = self.rq.scenequeue_covered.copy() 1463 initial_covered = self.rq.scenequeue_covered.copy()
1469 1464
1470 # Mark initial buildable tasks 1465 # Mark initial buildable tasks
1471 for task in xrange(self.stats.total): 1466 for task in range(self.stats.total):
1472 self.runq_running.append(0) 1467 self.runq_running.append(0)
1473 self.runq_complete.append(0) 1468 self.runq_complete.append(0)
1474 if len(self.rqdata.runq_depends[task]) == 0: 1469 if len(self.rqdata.runq_depends[task]) == 0:
@@ -1481,7 +1476,7 @@ class RunQueueExecuteTasks(RunQueueExecute):
1481 found = True 1476 found = True
1482 while found: 1477 while found:
1483 found = False 1478 found = False
1484 for task in xrange(self.stats.total): 1479 for task in range(self.stats.total):
1485 if task in self.rq.scenequeue_covered: 1480 if task in self.rq.scenequeue_covered:
1486 continue 1481 continue
1487 logger.debug(1, 'Considering %s (%s): %s' % (task, self.rqdata.get_user_idstring(task), str(self.rqdata.runq_revdeps[task]))) 1482 logger.debug(1, 'Considering %s (%s): %s' % (task, self.rqdata.get_user_idstring(task), str(self.rqdata.runq_revdeps[task])))
@@ -1496,7 +1491,7 @@ class RunQueueExecuteTasks(RunQueueExecute):
1496 covered_remove = set() 1491 covered_remove = set()
1497 if self.rq.setsceneverify: 1492 if self.rq.setsceneverify:
1498 invalidtasks = [] 1493 invalidtasks = []
1499 for task in xrange(len(self.rqdata.runq_task)): 1494 for task in range(len(self.rqdata.runq_task)):
1500 fn = self.rqdata.taskData.fn_index[self.rqdata.runq_fnid[task]] 1495 fn = self.rqdata.taskData.fn_index[self.rqdata.runq_fnid[task]]
1501 taskname = self.rqdata.runq_task[task] 1496 taskname = self.rqdata.runq_task[task]
1502 taskdep = self.rqdata.dataCache.task_deps[fn] 1497 taskdep = self.rqdata.dataCache.task_deps[fn]
@@ -1684,10 +1679,10 @@ class RunQueueExecuteTasks(RunQueueExecute):
1684 logger.critical("Failed to spawn fakeroot worker to run %s:%s: %s" % (fn, taskname, str(exc))) 1679 logger.critical("Failed to spawn fakeroot worker to run %s:%s: %s" % (fn, taskname, str(exc)))
1685 self.rq.state = runQueueFailed 1680 self.rq.state = runQueueFailed
1686 return True 1681 return True
1687 self.rq.fakeworker.stdin.write("<runtask>" + pickle.dumps((fn, task, taskname, False, self.cooker.collection.get_file_appends(fn), taskdepdata)) + "</runtask>") 1682 self.rq.fakeworker.stdin.write(b"<runtask>" + pickle.dumps((fn, task, taskname, False, self.cooker.collection.get_file_appends(fn), taskdepdata)) + b"</runtask>")
1688 self.rq.fakeworker.stdin.flush() 1683 self.rq.fakeworker.stdin.flush()
1689 else: 1684 else:
1690 self.rq.worker.stdin.write("<runtask>" + pickle.dumps((fn, task, taskname, False, self.cooker.collection.get_file_appends(fn), taskdepdata)) + "</runtask>") 1685 self.rq.worker.stdin.write(b"<runtask>" + pickle.dumps((fn, task, taskname, False, self.cooker.collection.get_file_appends(fn), taskdepdata)) + b"</runtask>")
1691 self.rq.worker.stdin.flush() 1686 self.rq.worker.stdin.flush()
1692 1687
1693 self.build_stamps[task] = bb.build.stampfile(taskname, self.rqdata.dataCache, fn) 1688 self.build_stamps[task] = bb.build.stampfile(taskname, self.rqdata.dataCache, fn)
@@ -1706,7 +1701,7 @@ class RunQueueExecuteTasks(RunQueueExecute):
1706 return True 1701 return True
1707 1702
1708 # Sanity Checks 1703 # Sanity Checks
1709 for task in xrange(self.stats.total): 1704 for task in range(self.stats.total):
1710 if self.runq_buildable[task] == 0: 1705 if self.runq_buildable[task] == 0:
1711 logger.error("Task %s never buildable!", task) 1706 logger.error("Task %s never buildable!", task)
1712 if self.runq_running[task] == 0: 1707 if self.runq_running[task] == 0:
@@ -1764,14 +1759,14 @@ class RunQueueExecuteScenequeue(RunQueueExecute):
1764 # therefore aims to collapse the huge runqueue dependency tree into a smaller one 1759 # therefore aims to collapse the huge runqueue dependency tree into a smaller one
1765 # only containing the setscene functions. 1760 # only containing the setscene functions.
1766 1761
1767 for task in xrange(self.stats.total): 1762 for task in range(self.stats.total):
1768 self.runq_running.append(0) 1763 self.runq_running.append(0)
1769 self.runq_complete.append(0) 1764 self.runq_complete.append(0)
1770 self.runq_buildable.append(0) 1765 self.runq_buildable.append(0)
1771 1766
1772 # First process the chains up to the first setscene task. 1767 # First process the chains up to the first setscene task.
1773 endpoints = {} 1768 endpoints = {}
1774 for task in xrange(len(self.rqdata.runq_fnid)): 1769 for task in range(len(self.rqdata.runq_fnid)):
1775 sq_revdeps.append(copy.copy(self.rqdata.runq_revdeps[task])) 1770 sq_revdeps.append(copy.copy(self.rqdata.runq_revdeps[task]))
1776 sq_revdeps_new.append(set()) 1771 sq_revdeps_new.append(set())
1777 if (len(self.rqdata.runq_revdeps[task]) == 0) and task not in self.rqdata.runq_setscene: 1772 if (len(self.rqdata.runq_revdeps[task]) == 0) and task not in self.rqdata.runq_setscene:
@@ -1833,7 +1828,7 @@ class RunQueueExecuteScenequeue(RunQueueExecute):
1833 newendpoints[dep] = tasks 1828 newendpoints[dep] = tasks
1834 if len(newendpoints) != 0: 1829 if len(newendpoints) != 0:
1835 process_endpoints2(newendpoints) 1830 process_endpoints2(newendpoints)
1836 for task in xrange(len(self.rqdata.runq_fnid)): 1831 for task in range(len(self.rqdata.runq_fnid)):
1837 sq_revdeps2.append(copy.copy(self.rqdata.runq_revdeps[task])) 1832 sq_revdeps2.append(copy.copy(self.rqdata.runq_revdeps[task]))
1838 sq_revdeps_new2.append(set()) 1833 sq_revdeps_new2.append(set())
1839 if (len(self.rqdata.runq_revdeps[task]) == 0) and task not in self.rqdata.runq_setscene: 1834 if (len(self.rqdata.runq_revdeps[task]) == 0) and task not in self.rqdata.runq_setscene:
@@ -1844,7 +1839,7 @@ class RunQueueExecuteScenequeue(RunQueueExecute):
1844 if sq_revdeps_new2[task]: 1839 if sq_revdeps_new2[task]:
1845 self.unskippable.append(self.rqdata.runq_setscene.index(task)) 1840 self.unskippable.append(self.rqdata.runq_setscene.index(task))
1846 1841
1847 for task in xrange(len(self.rqdata.runq_fnid)): 1842 for task in range(len(self.rqdata.runq_fnid)):
1848 if task in self.rqdata.runq_setscene: 1843 if task in self.rqdata.runq_setscene:
1849 deps = set() 1844 deps = set()
1850 for dep in sq_revdeps_new[task]: 1845 for dep in sq_revdeps_new[task]:
@@ -1883,7 +1878,7 @@ class RunQueueExecuteScenequeue(RunQueueExecute):
1883 for dep in self.sq_harddeps[task]: 1878 for dep in self.sq_harddeps[task]:
1884 sq_revdeps_squash[dep].add(task) 1879 sq_revdeps_squash[dep].add(task)
1885 1880
1886 #for task in xrange(len(sq_revdeps_squash)): 1881 #for task in range(len(sq_revdeps_squash)):
1887 # realtask = self.rqdata.runq_setscene[task] 1882 # realtask = self.rqdata.runq_setscene[task]
1888 # bb.warn("Task %s: %s_setscene is %s " % (task, self.rqdata.get_user_idstring(realtask) , sq_revdeps_squash[task])) 1883 # bb.warn("Task %s: %s_setscene is %s " % (task, self.rqdata.get_user_idstring(realtask) , sq_revdeps_squash[task]))
1889 1884
@@ -1891,13 +1886,13 @@ class RunQueueExecuteScenequeue(RunQueueExecute):
1891 self.sq_revdeps = sq_revdeps_squash 1886 self.sq_revdeps = sq_revdeps_squash
1892 self.sq_revdeps2 = copy.deepcopy(self.sq_revdeps) 1887 self.sq_revdeps2 = copy.deepcopy(self.sq_revdeps)
1893 1888
1894 for task in xrange(len(self.sq_revdeps)): 1889 for task in range(len(self.sq_revdeps)):
1895 self.sq_deps.append(set()) 1890 self.sq_deps.append(set())
1896 for task in xrange(len(self.sq_revdeps)): 1891 for task in range(len(self.sq_revdeps)):
1897 for dep in self.sq_revdeps[task]: 1892 for dep in self.sq_revdeps[task]:
1898 self.sq_deps[dep].add(task) 1893 self.sq_deps[dep].add(task)
1899 1894
1900 for task in xrange(len(self.sq_revdeps)): 1895 for task in range(len(self.sq_revdeps)):
1901 if len(self.sq_revdeps[task]) == 0: 1896 if len(self.sq_revdeps[task]) == 0:
1902 self.runq_buildable[task] = 1 1897 self.runq_buildable[task] = 1
1903 1898
@@ -1910,7 +1905,7 @@ class RunQueueExecuteScenequeue(RunQueueExecute):
1910 sq_task = [] 1905 sq_task = []
1911 noexec = [] 1906 noexec = []
1912 stamppresent = [] 1907 stamppresent = []
1913 for task in xrange(len(self.sq_revdeps)): 1908 for task in range(len(self.sq_revdeps)):
1914 realtask = self.rqdata.runq_setscene[task] 1909 realtask = self.rqdata.runq_setscene[task]
1915 fn = self.rqdata.taskData.fn_index[self.rqdata.runq_fnid[realtask]] 1910 fn = self.rqdata.taskData.fn_index[self.rqdata.runq_fnid[realtask]]
1916 taskname = self.rqdata.runq_task[realtask] 1911 taskname = self.rqdata.runq_task[realtask]
@@ -1947,7 +1942,7 @@ class RunQueueExecuteScenequeue(RunQueueExecute):
1947 for v in valid: 1942 for v in valid:
1948 valid_new.append(sq_task[v]) 1943 valid_new.append(sq_task[v])
1949 1944
1950 for task in xrange(len(self.sq_revdeps)): 1945 for task in range(len(self.sq_revdeps)):
1951 if task not in valid_new and task not in noexec: 1946 if task not in valid_new and task not in noexec:
1952 realtask = self.rqdata.runq_setscene[task] 1947 realtask = self.rqdata.runq_setscene[task]
1953 logger.debug(2, 'No package found, so skipping setscene task %s', 1948 logger.debug(2, 'No package found, so skipping setscene task %s',
@@ -2024,7 +2019,7 @@ class RunQueueExecuteScenequeue(RunQueueExecute):
2024 task = None 2019 task = None
2025 if self.stats.active < self.number_tasks: 2020 if self.stats.active < self.number_tasks:
2026 # Find the next setscene to run 2021 # Find the next setscene to run
2027 for nexttask in xrange(self.stats.total): 2022 for nexttask in range(self.stats.total):
2028 if self.runq_buildable[nexttask] == 1 and self.runq_running[nexttask] != 1: 2023 if self.runq_buildable[nexttask] == 1 and self.runq_running[nexttask] != 1:
2029 if nexttask in self.unskippable: 2024 if nexttask in self.unskippable:
2030 logger.debug(2, "Setscene task %s is unskippable" % self.rqdata.get_user_idstring(self.rqdata.runq_setscene[nexttask])) 2025 logger.debug(2, "Setscene task %s is unskippable" % self.rqdata.get_user_idstring(self.rqdata.runq_setscene[nexttask]))
@@ -2076,10 +2071,10 @@ class RunQueueExecuteScenequeue(RunQueueExecute):
2076 if 'fakeroot' in taskdep and taskname in taskdep['fakeroot'] and not self.cooker.configuration.dry_run: 2071 if 'fakeroot' in taskdep and taskname in taskdep['fakeroot'] and not self.cooker.configuration.dry_run:
2077 if not self.rq.fakeworker: 2072 if not self.rq.fakeworker:
2078 self.rq.start_fakeworker(self) 2073 self.rq.start_fakeworker(self)
2079 self.rq.fakeworker.stdin.write("<runtask>" + pickle.dumps((fn, realtask, taskname, True, self.cooker.collection.get_file_appends(fn), None)) + "</runtask>") 2074 self.rq.fakeworker.stdin.write(b"<runtask>" + pickle.dumps((fn, realtask, taskname, True, self.cooker.collection.get_file_appends(fn), None)) + b"</runtask>")
2080 self.rq.fakeworker.stdin.flush() 2075 self.rq.fakeworker.stdin.flush()
2081 else: 2076 else:
2082 self.rq.worker.stdin.write("<runtask>" + pickle.dumps((fn, realtask, taskname, True, self.cooker.collection.get_file_appends(fn), None)) + "</runtask>") 2077 self.rq.worker.stdin.write(b"<runtask>" + pickle.dumps((fn, realtask, taskname, True, self.cooker.collection.get_file_appends(fn), None)) + b"</runtask>")
2083 self.rq.worker.stdin.flush() 2078 self.rq.worker.stdin.flush()
2084 2079
2085 self.runq_running[task] = 1 2080 self.runq_running[task] = 1
@@ -2091,7 +2086,7 @@ class RunQueueExecuteScenequeue(RunQueueExecute):
2091 self.rq.read_workers() 2086 self.rq.read_workers()
2092 return self.rq.active_fds() 2087 return self.rq.active_fds()
2093 2088
2094 #for task in xrange(self.stats.total): 2089 #for task in range(self.stats.total):
2095 # if self.runq_running[task] != 1: 2090 # if self.runq_running[task] != 1:
2096 # buildable = self.runq_buildable[task] 2091 # buildable = self.runq_buildable[task]
2097 # revdeps = self.sq_revdeps[task] 2092 # revdeps = self.sq_revdeps[task]
@@ -2227,7 +2222,7 @@ class runQueuePipe():
2227 if pipeout: 2222 if pipeout:
2228 pipeout.close() 2223 pipeout.close()
2229 bb.utils.nonblockingfd(self.input) 2224 bb.utils.nonblockingfd(self.input)
2230 self.queue = "" 2225 self.queue = b""
2231 self.d = d 2226 self.d = d
2232 self.rq = rq 2227 self.rq = rq
2233 self.rqexec = rqexec 2228 self.rqexec = rqexec
@@ -2251,7 +2246,7 @@ class runQueuePipe():
2251 2246
2252 start = len(self.queue) 2247 start = len(self.queue)
2253 try: 2248 try:
2254 self.queue = self.queue + self.input.read(102400) 2249 self.queue = self.queue + (self.input.read(102400) or b"")
2255 except (OSError, IOError) as e: 2250 except (OSError, IOError) as e:
2256 if e.errno != errno.EAGAIN: 2251 if e.errno != errno.EAGAIN:
2257 raise 2252 raise
@@ -2259,8 +2254,8 @@ class runQueuePipe():
2259 found = True 2254 found = True
2260 while found and len(self.queue): 2255 while found and len(self.queue):
2261 found = False 2256 found = False
2262 index = self.queue.find("</event>") 2257 index = self.queue.find(b"</event>")
2263 while index != -1 and self.queue.startswith("<event>"): 2258 while index != -1 and self.queue.startswith(b"<event>"):
2264 try: 2259 try:
2265 event = pickle.loads(self.queue[7:index]) 2260 event = pickle.loads(self.queue[7:index])
2266 except ValueError as e: 2261 except ValueError as e:
@@ -2268,9 +2263,9 @@ class runQueuePipe():
2268 bb.event.fire_from_worker(event, self.d) 2263 bb.event.fire_from_worker(event, self.d)
2269 found = True 2264 found = True
2270 self.queue = self.queue[index+8:] 2265 self.queue = self.queue[index+8:]
2271 index = self.queue.find("</event>") 2266 index = self.queue.find(b"</event>")
2272 index = self.queue.find("</exitcode>") 2267 index = self.queue.find(b"</exitcode>")
2273 while index != -1 and self.queue.startswith("<exitcode>"): 2268 while index != -1 and self.queue.startswith(b"<exitcode>"):
2274 try: 2269 try:
2275 task, status = pickle.loads(self.queue[10:index]) 2270 task, status = pickle.loads(self.queue[10:index])
2276 except ValueError as e: 2271 except ValueError as e:
@@ -2278,7 +2273,7 @@ class runQueuePipe():
2278 self.rqexec.runqueue_process_waitpid(task, status) 2273 self.rqexec.runqueue_process_waitpid(task, status)
2279 found = True 2274 found = True
2280 self.queue = self.queue[index+11:] 2275 self.queue = self.queue[index+11:]
2281 index = self.queue.find("</exitcode>") 2276 index = self.queue.find(b"</exitcode>")
2282 return (end > start) 2277 return (end > start)
2283 2278
2284 def close(self): 2279 def close(self):