diff options
| author | Steven Knight <knight@baldmt.com> | 2002-03-20 16:45:30 (GMT) |
|---|---|---|
| committer | Steven Knight <knight@baldmt.com> | 2002-03-20 16:45:30 (GMT) |
| commit | a9272652019c6d0cad2f20737e210f820ec9394d (patch) | |
| tree | 6c66bb13fa20cbd1e46b837e2ab734039cb68b6e /src/engine/SCons/Taskmaster.py | |
| parent | 70d4bf67b7fefce28d76d451c959ba633720214e (diff) | |
| download | SCons-a9272652019c6d0cad2f20737e210f820ec9394d.zip SCons-a9272652019c6d0cad2f20737e210f820ec9394d.tar.gz SCons-a9272652019c6d0cad2f20737e210f820ec9394d.tar.bz2 | |
Fix subtle problems in end cases with using multiple scanners on a Node.
Diffstat (limited to 'src/engine/SCons/Taskmaster.py')
| -rw-r--r-- | src/engine/SCons/Taskmaster.py | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/src/engine/SCons/Taskmaster.py b/src/engine/SCons/Taskmaster.py index 0106f46..404355e 100644 --- a/src/engine/SCons/Taskmaster.py +++ b/src/engine/SCons/Taskmaster.py @@ -54,10 +54,11 @@ class Task: Note that it's generally a good idea for sub-classes to call these methods explicitly to update state, etc., rather than roll their own interaction with Taskmaster from scratch.""" - def __init__(self, tm, targets, top): + def __init__(self, tm, targets, top, scanner = None): self.tm = tm self.targets = targets self.top = top + self.scanner = scanner def execute(self): if self.targets[0].get_state() != SCons.Node.up_to_date: @@ -89,8 +90,9 @@ class Task: parents = {} for p in reduce(lambda x, y: x + y.get_parents(), self.targets, []): parents[p] = 1 - ready = filter(lambda x: (x.get_state() == SCons.Node.pending - and x.children_are_executed()), + ready = filter(lambda x, s=self.scanner: + (x.get_state() == SCons.Node.pending + and x.children_are_executed(s)), parents.keys()) tasks = {} for t in map(lambda r: r.task, ready): @@ -171,9 +173,12 @@ class Taskmaster: # (finished or currently executing). Find another one. return [] # Scan the file before fetching its children(). - node.scan() + if parent: + scanner = parent.src_scanner_get(node.scanner_key()) + else: + scanner = None return filter(lambda x: x.get_state() != SCons.Node.up_to_date, - node.children()) + node.children(scanner)) def cycle_error(node, stack): if node.builder: @@ -201,8 +206,12 @@ class Taskmaster: tlist = node.builder.targets(node) except AttributeError: tlist = [ node ] - task = self.tasker(self, tlist, self.walkers[0].is_done()) - if not tlist[0].children_are_executed(): + if parent: + scanner = parent.src_scanner_get(node.scanner_key()) + else: + scanner = None + task = self.tasker(self, tlist, self.walkers[0].is_done(), scanner) + if not tlist[0].children_are_executed(scanner): for t in tlist: t.set_state(SCons.Node.pending) t.task = task |
