diff options
-rwxr-xr-x | bitbake/bin/bitbake-worker | 7 | ||||
-rw-r--r-- | bitbake/lib/bb/runqueue.py | 30 |
2 files changed, 30 insertions, 7 deletions
diff --git a/bitbake/bin/bitbake-worker b/bitbake/bin/bitbake-worker index ff20c1ca98..bc13b4f314 100755 --- a/bitbake/bin/bitbake-worker +++ b/bitbake/bin/bitbake-worker | |||
@@ -81,7 +81,7 @@ def workerlog_write(msg): | |||
81 | lf.write(msg) | 81 | lf.write(msg) |
82 | lf.flush() | 82 | lf.flush() |
83 | 83 | ||
84 | def fork_off_task(cfg, data, workerdata, fn, task, taskname, appends, quieterrors=False): | 84 | def fork_off_task(cfg, data, workerdata, fn, task, taskname, appends, taskdepdata, quieterrors=False): |
85 | # We need to setup the environment BEFORE the fork, since | 85 | # We need to setup the environment BEFORE the fork, since |
86 | # a fork() or exec*() activates PSEUDO... | 86 | # a fork() or exec*() activates PSEUDO... |
87 | 87 | ||
@@ -148,6 +148,7 @@ def fork_off_task(cfg, data, workerdata, fn, task, taskname, appends, quieterror | |||
148 | os.umask(umask) | 148 | os.umask(umask) |
149 | 149 | ||
150 | data.setVar("BB_WORKERCONTEXT", "1") | 150 | data.setVar("BB_WORKERCONTEXT", "1") |
151 | data.setVar("BB_TASKDEPDATA", taskdepdata) | ||
151 | data.setVar("BUILDNAME", workerdata["buildname"]) | 152 | data.setVar("BUILDNAME", workerdata["buildname"]) |
152 | data.setVar("DATE", workerdata["date"]) | 153 | data.setVar("DATE", workerdata["date"]) |
153 | data.setVar("TIME", workerdata["time"]) | 154 | data.setVar("TIME", workerdata["time"]) |
@@ -300,10 +301,10 @@ class BitbakeWorker(object): | |||
300 | sys.exit(0) | 301 | sys.exit(0) |
301 | 302 | ||
302 | def handle_runtask(self, data): | 303 | def handle_runtask(self, data): |
303 | fn, task, taskname, quieterrors, appends = pickle.loads(data) | 304 | fn, task, taskname, quieterrors, appends, taskdepdata = pickle.loads(data) |
304 | workerlog_write("Handling runtask %s %s %s\n" % (task, fn, taskname)) | 305 | workerlog_write("Handling runtask %s %s %s\n" % (task, fn, taskname)) |
305 | 306 | ||
306 | pid, pipein, pipeout = fork_off_task(self.cookercfg, self.data, self.workerdata, fn, task, taskname, appends, quieterrors) | 307 | pid, pipein, pipeout = fork_off_task(self.cookercfg, self.data, self.workerdata, fn, task, taskname, appends, taskdepdata, quieterrors) |
307 | 308 | ||
308 | self.build_pids[pid] = task | 309 | self.build_pids[pid] = task |
309 | self.build_pipes[pid] = runQueueWorkerPipe(pipein, pipeout) | 310 | self.build_pipes[pid] = runQueueWorkerPipe(pipein, pipeout) |
diff --git a/bitbake/lib/bb/runqueue.py b/bitbake/lib/bb/runqueue.py index f984119e87..428cff1c80 100644 --- a/bitbake/lib/bb/runqueue.py +++ b/bitbake/lib/bb/runqueue.py | |||
@@ -1437,14 +1437,16 @@ class RunQueueExecuteTasks(RunQueueExecute): | |||
1437 | startevent = runQueueTaskStarted(task, self.stats, self.rq) | 1437 | startevent = runQueueTaskStarted(task, self.stats, self.rq) |
1438 | bb.event.fire(startevent, self.cfgData) | 1438 | bb.event.fire(startevent, self.cfgData) |
1439 | 1439 | ||
1440 | taskdepdata = self.build_taskdepdata(task) | ||
1441 | |||
1440 | taskdep = self.rqdata.dataCache.task_deps[fn] | 1442 | taskdep = self.rqdata.dataCache.task_deps[fn] |
1441 | if 'fakeroot' in taskdep and taskname in taskdep['fakeroot'] and not self.cooker.configuration.dry_run: | 1443 | if 'fakeroot' in taskdep and taskname in taskdep['fakeroot'] and not self.cooker.configuration.dry_run: |
1442 | if not self.rq.fakeworker: | 1444 | if not self.rq.fakeworker: |
1443 | self.rq.start_fakeworker(self) | 1445 | self.rq.start_fakeworker(self) |
1444 | self.rq.fakeworker.stdin.write("<runtask>" + pickle.dumps((fn, task, taskname, False, self.cooker.collection.get_file_appends(fn))) + "</runtask>") | 1446 | self.rq.fakeworker.stdin.write("<runtask>" + pickle.dumps((fn, task, taskname, False, self.cooker.collection.get_file_appends(fn), taskdepdata)) + "</runtask>") |
1445 | self.rq.fakeworker.stdin.flush() | 1447 | self.rq.fakeworker.stdin.flush() |
1446 | else: | 1448 | else: |
1447 | self.rq.worker.stdin.write("<runtask>" + pickle.dumps((fn, task, taskname, False, self.cooker.collection.get_file_appends(fn))) + "</runtask>") | 1449 | self.rq.worker.stdin.write("<runtask>" + pickle.dumps((fn, task, taskname, False, self.cooker.collection.get_file_appends(fn), taskdepdata)) + "</runtask>") |
1448 | self.rq.worker.stdin.flush() | 1450 | self.rq.worker.stdin.flush() |
1449 | 1451 | ||
1450 | self.build_stamps[task] = bb.build.stampfile(taskname, self.rqdata.dataCache, fn) | 1452 | self.build_stamps[task] = bb.build.stampfile(taskname, self.rqdata.dataCache, fn) |
@@ -1474,6 +1476,26 @@ class RunQueueExecuteTasks(RunQueueExecute): | |||
1474 | 1476 | ||
1475 | return True | 1477 | return True |
1476 | 1478 | ||
1479 | def build_taskdepdata(self, task): | ||
1480 | taskdepdata = {} | ||
1481 | next = self.rqdata.runq_depends[task] | ||
1482 | next.add(task) | ||
1483 | while next: | ||
1484 | additional = [] | ||
1485 | for revdep in next: | ||
1486 | fn = self.rqdata.taskData.fn_index[self.rqdata.runq_fnid[revdep]] | ||
1487 | pn = self.rqdata.dataCache.pkg_fn[fn] | ||
1488 | taskname = self.rqdata.runq_task[revdep] | ||
1489 | deps = self.rqdata.runq_depends[revdep] | ||
1490 | taskdepdata[revdep] = [pn, taskname, fn, deps] | ||
1491 | for revdep2 in deps: | ||
1492 | if revdep2 not in taskdepdata: | ||
1493 | additional.append(revdep2) | ||
1494 | next = additional | ||
1495 | |||
1496 | #bb.note("Task %s: " % task + str(taskdepdata).replace("], ", "],\n")) | ||
1497 | return taskdepdata | ||
1498 | |||
1477 | class RunQueueExecuteScenequeue(RunQueueExecute): | 1499 | class RunQueueExecuteScenequeue(RunQueueExecute): |
1478 | def __init__(self, rq): | 1500 | def __init__(self, rq): |
1479 | RunQueueExecute.__init__(self, rq) | 1501 | RunQueueExecute.__init__(self, rq) |
@@ -1784,10 +1806,10 @@ class RunQueueExecuteScenequeue(RunQueueExecute): | |||
1784 | if 'fakeroot' in taskdep and taskname in taskdep['fakeroot']: | 1806 | if 'fakeroot' in taskdep and taskname in taskdep['fakeroot']: |
1785 | if not self.rq.fakeworker: | 1807 | if not self.rq.fakeworker: |
1786 | self.rq.start_fakeworker(self) | 1808 | self.rq.start_fakeworker(self) |
1787 | self.rq.fakeworker.stdin.write("<runtask>" + pickle.dumps((fn, realtask, taskname, True, self.cooker.collection.get_file_appends(fn))) + "</runtask>") | 1809 | self.rq.fakeworker.stdin.write("<runtask>" + pickle.dumps((fn, realtask, taskname, True, self.cooker.collection.get_file_appends(fn), None)) + "</runtask>") |
1788 | self.rq.fakeworker.stdin.flush() | 1810 | self.rq.fakeworker.stdin.flush() |
1789 | else: | 1811 | else: |
1790 | self.rq.worker.stdin.write("<runtask>" + pickle.dumps((fn, realtask, taskname, True, self.cooker.collection.get_file_appends(fn))) + "</runtask>") | 1812 | self.rq.worker.stdin.write("<runtask>" + pickle.dumps((fn, realtask, taskname, True, self.cooker.collection.get_file_appends(fn), None)) + "</runtask>") |
1791 | self.rq.worker.stdin.flush() | 1813 | self.rq.worker.stdin.flush() |
1792 | 1814 | ||
1793 | self.runq_running[task] = 1 | 1815 | self.runq_running[task] = 1 |