diff options
author | Steven Knight <knight@baldmt.com> | 2001-10-05 17:37:48 (GMT) |
---|---|---|
committer | Steven Knight <knight@baldmt.com> | 2001-10-05 17:37:48 (GMT) |
commit | a86827b3933c2861d2e5b9df319630ce04559fe0 (patch) | |
tree | 4172953c924c5d23c8b1622fd0d9d5e980f79cc3 /src/script | |
parent | a0e380faef8af1b62213a0ea1840b38fa0ecf6e4 (diff) | |
download | SCons-a86827b3933c2861d2e5b9df319630ce04559fe0.zip SCons-a86827b3933c2861d2e5b9df319630ce04559fe0.tar.gz SCons-a86827b3933c2861d2e5b9df319630ce04559fe0.tar.bz2 |
Use the Node Walker to build dependencies in order.
Diffstat (limited to 'src/script')
-rw-r--r-- | src/script/scons.py | 49 |
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() |