summaryrefslogtreecommitdiffstats
path: root/src/script/scons.py
diff options
context:
space:
mode:
authorSteven Knight <knight@baldmt.com>2001-10-05 17:37:48 (GMT)
committerSteven Knight <knight@baldmt.com>2001-10-05 17:37:48 (GMT)
commita86827b3933c2861d2e5b9df319630ce04559fe0 (patch)
tree4172953c924c5d23c8b1622fd0d9d5e980f79cc3 /src/script/scons.py
parenta0e380faef8af1b62213a0ea1840b38fa0ecf6e4 (diff)
downloadSCons-a86827b3933c2861d2e5b9df319630ce04559fe0.zip
SCons-a86827b3933c2861d2e5b9df319630ce04559fe0.tar.gz
SCons-a86827b3933c2861d2e5b9df319630ce04559fe0.tar.bz2
Use the Node Walker to build dependencies in order.
Diffstat (limited to 'src/script/scons.py')
-rw-r--r--src/script/scons.py49
1 files changed, 22 insertions, 27 deletions
diff --git a/src/script/scons.py b/src/script/scons.py
index cfb0a9f..da907ad 100644
--- a/src/script/scons.py
+++ b/src/script/scons.py
@@ -33,11 +33,13 @@ import string
import sys
import traceback
+import SCons.Node
import SCons.Node.FS
import SCons.Job
from SCons.Errors import *
import SCons.Sig
import SCons.Sig.MD5
+from SCons.Taskmaster import Taskmaster
#
# Modules and classes that we don't use directly in this script, but
@@ -46,8 +48,13 @@ import SCons.Sig.MD5
from SCons.Environment import Environment
from SCons.Builder import Builder
+
+
+#
+# Task control.
+#
class Task:
- "XXX: this is here only until the build engine is implemented"
+ """An SCons build task."""
def __init__(self, target):
self.target = target
@@ -59,35 +66,23 @@ class Task:
sys.stderr.write("scons: *** [%s] Error %d\n" % (e.node, e.stat))
raise
-
-
-class Taskmaster:
- "XXX: this is here only until the build engine is implemented"
-
- def __init__(self, targets, calc):
- self.targets = targets
- self.calc = calc
- self.num_iterated = 0
-
-
+class ScriptTaskmaster(SCons.Taskmaster.Taskmaster):
+ """Controlling logic for tasks.
+
+ This is the stock Taskmaster from the build engine, except
+ that we override the next_task() method to provide our
+ script-specific up-to-date message for command-line targets.
+ """
def next_task(self):
- while self.num_iterated < len(self.targets):
- t = self.targets[self.num_iterated]
- self.num_iterated = self.num_iterated + 1
- if self.calc.current(t):
+ t, top = SCons.Taskmaster.Taskmaster.next_node(self)
+ while t != None:
+ if not self.current(t):
+ return self.tasker(t)
+ elif top:
print 'scons: "%s" is up to date.' % t
- else:
- return Task(t)
+ t, top = SCons.Taskmaster.Taskmaster.next_node(self)
return None
- def is_blocked(self):
- return 0
-
- def executed(self, task):
- pass
-
- def failed(self, task):
- self.num_iterated = len(self.targets)
# Global variables
@@ -614,7 +609,7 @@ def main():
nodes = map(lambda x: SCons.Node.FS.default_fs.File(x), targets)
calc = SCons.Sig.Calculator(SCons.Sig.MD5)
- taskmaster = Taskmaster(nodes, calc)
+ taskmaster = ScriptTaskmaster(nodes, Task, calc.current)
jobs = SCons.Job.Jobs(num_jobs, taskmaster)
jobs.start()