summaryrefslogtreecommitdiffstats
path: root/src/engine/SCons/Taskmaster.py
diff options
context:
space:
mode:
authorSteven Knight <knight@baldmt.com>2009-01-09 16:43:32 (GMT)
committerSteven Knight <knight@baldmt.com>2009-01-09 16:43:32 (GMT)
commit7ab76c68556e5f6f142515872ea6334e959b8626 (patch)
treec4d23aed9df4381a24cac247b11dd1a4c245908a /src/engine/SCons/Taskmaster.py
parente04fb604484cf37da383a38ef9b2bd8c9ef6c175 (diff)
downloadSCons-7ab76c68556e5f6f142515872ea6334e959b8626.zip
SCons-7ab76c68556e5f6f142515872ea6334e959b8626.tar.gz
SCons-7ab76c68556e5f6f142515872ea6334e959b8626.tar.bz2
Issue 1086: add support for generic batch build actions, and
specific support for batched compilation for Microsoft Visual C/C++. Merged revisions 3819-3851,3854-3869,3871-3877,3880 via svnmerge from http://scons.tigris.org/svn/scons/branches/sgk_batch ........ r3820 | stevenknight | 2008-12-09 23:59:14 -0800 (Tue, 09 Dec 2008) | 6 lines Issue 1086: Batch compilation support: * $MSVC_BATCH to control Visual C/C++ batch compilation. * New $CHANGED_SOURCES, $CHANGED_TARGETS, $UNCHANGED_SOURCES and $UNCHANGED_TARGETS construction variables. * New Action(batch_key=, targets=) keyword arguments. ........ r3880 | stevenknight | 2009-01-07 20:50:41 -0800 (Wed, 07 Jan 2009) | 3 lines Use UniqueList objects to collect the all_children(), all_prerequisites() and all_sources() lists instead of calling uniquer_hashables() by hand. ........
Diffstat (limited to 'src/engine/SCons/Taskmaster.py')
-rw-r--r--src/engine/SCons/Taskmaster.py18
1 files changed, 11 insertions, 7 deletions
diff --git a/src/engine/SCons/Taskmaster.py b/src/engine/SCons/Taskmaster.py
index 934e28b..4245480 100644
--- a/src/engine/SCons/Taskmaster.py
+++ b/src/engine/SCons/Taskmaster.py
@@ -186,8 +186,9 @@ class Task:
# target t.prepare() methods check that each target's explicit
# or implicit dependencies exists, and also initialize the
# .sconsign info.
- self.targets[0].get_executor().prepare()
- for t in self.targets:
+ executor = self.targets[0].get_executor()
+ executor.prepare()
+ for t in executor.get_action_targets():
t.prepare()
for s in t.side_effects:
s.prepare()
@@ -763,8 +764,10 @@ class Taskmaster:
if T: T.write(self.trace_message(' already handled (executed)'))
continue
+ executor = node.get_executor()
+
try:
- children = node.children()
+ children = executor.get_all_children()
except SystemExit:
exc_value = sys.exc_info()[1]
e = SCons.Errors.ExplicitExit(node, exc_value.code)
@@ -786,7 +789,7 @@ class Taskmaster:
children_not_ready = []
children_failed = False
- for child in chain(children,node.prerequisites):
+ for child in chain(children, executor.get_all_prerequisites()):
childstate = child.get_state()
if T: T.write(self.trace_message(' ' + self.trace_node(child)))
@@ -830,7 +833,8 @@ class Taskmaster:
# added the other children to the list of candidate nodes
# to keep on building (--keep-going).
if children_failed:
- node.set_state(NODE_FAILED)
+ for n in executor.get_action_targets():
+ n.set_state(NODE_FAILED)
if S: S.child_failed = S.child_failed + 1
if T: T.write(self.trace_message('****** %s\n' % self.trace_node(node)))
@@ -861,7 +865,7 @@ class Taskmaster:
# Skip this node if it has side-effects that are
# currently being built:
wait_side_effects = False
- for se in node.side_effects:
+ for se in executor.get_action_side_effects():
if se.get_state() == NODE_EXECUTING:
se.add_to_waiting_s_e(node)
wait_side_effects = True
@@ -900,7 +904,7 @@ class Taskmaster:
if node is None:
return None
- tlist = node.get_executor().targets
+ tlist = node.get_executor().get_all_targets()
task = self.tasker(self, tlist, node in self.original_top, node)
try: