=== modified file 'wafadmin/Build.py' --- wafadmin/Build.py 2008-12-13 05:23:28 +0000 +++ wafadmin/Build.py 2008-12-13 19:48:06 +0000 @@ -589,6 +589,7 @@ debug('build: delayed operation TaskGen.flush() called') + posted_objects = [] if Options.options.compile_targets: debug('task_gen: posting objects listed in compile_targets') @@ -610,6 +611,7 @@ for target_obj in target_objects.values(): for x in target_obj: x.post() + posted_objects.append(x) else: debug('task_gen: posting objects (normal)') ln = self.launch_node() @@ -620,6 +622,9 @@ for obj in self.all_task_gen: if not obj.path.is_child_of(ln): continue obj.post() + posted_objects.append(obj) + self._apply_automatic_deps(posted_objects) + def env_of_name(self, name): if not name: @@ -801,3 +806,21 @@ f.write(s) f.flush() + def _apply_automatic_deps(self, posted_objects): + print "apply_automatic_deps", posted_objects + generating_tasks = {} # map out_node -> task that generates the node + for taskgen in posted_objects: + for task in taskgen.tasks: + for node in task.outputs: + assert node.id not in generating_tasks + generating_tasks[node.id] = task + + for taskgen in posted_objects: + for task in taskgen.tasks: + for node in task.inputs: + try: + preceding_task = generating_tasks[node.id] + except KeyError: + continue + print "task %r generates node %r needed by task %r" % (preceding_task, node, task) + task.set_run_after(preceding_task)