summaryrefslogtreecommitdiffstats
path: root/src/engine/SCons/Script
diff options
context:
space:
mode:
authorSteven Knight <knight@baldmt.com>2003-03-03 19:39:25 (GMT)
committerSteven Knight <knight@baldmt.com>2003-03-03 19:39:25 (GMT)
commit57847f39e8598008ce3acddbcfb5a117e6981b3d (patch)
treeb6fc19421b03826488e03d795c4c258002f4ede7 /src/engine/SCons/Script
parent1eac1ba89777cce14d1ed50322ee163e8b38fd1e (diff)
downloadSCons-57847f39e8598008ce3acddbcfb5a117e6981b3d.zip
SCons-57847f39e8598008ce3acddbcfb5a117e6981b3d.tar.gz
SCons-57847f39e8598008ce3acddbcfb5a117e6981b3d.tar.bz2
Add an Exit() function for explicit termination of SCons.
Diffstat (limited to 'src/engine/SCons/Script')
-rw-r--r--src/engine/SCons/Script/SConscript.py4
-rw-r--r--src/engine/SCons/Script/__init__.py12
2 files changed, 12 insertions, 4 deletions
diff --git a/src/engine/SCons/Script/SConscript.py b/src/engine/SCons/Script/SConscript.py
index dfcfe5b..d9da651 100644
--- a/src/engine/SCons/Script/SConscript.py
+++ b/src/engine/SCons/Script/SConscript.py
@@ -418,6 +418,9 @@ def AddPostAction(files, action):
for n in nodes:
n.add_post_action(SCons.Action.Action(action))
+def Exit(value=0):
+ sys.exit(value)
+
def BuildDefaultGlobals():
"""
Create a dictionary containing all the default globals for
@@ -439,6 +442,7 @@ def BuildDefaultGlobals():
globals['EnsurePythonVersion'] = EnsurePythonVersion
globals['EnsureSConsVersion'] = EnsureSConsVersion
globals['Environment'] = SCons.Environment.Environment
+ globals['Exit'] = Exit
globals['Export'] = Export
globals['File'] = SCons.Node.FS.default_fs.File
globals['FindFile'] = FindFile
diff --git a/src/engine/SCons/Script/__init__.py b/src/engine/SCons/Script/__init__.py
index b14e50d..ca0d50e 100644
--- a/src/engine/SCons/Script/__init__.py
+++ b/src/engine/SCons/Script/__init__.py
@@ -86,16 +86,16 @@ class BuildTask(SCons.Taskmaster.Task):
command_time = command_time+finish_time-start_time
print "Command execution time: %f seconds"%(finish_time-start_time)
- def do_failed(self):
+ def do_failed(self, status=2):
global exit_status
if ignore_errors:
SCons.Taskmaster.Task.executed(self)
elif keep_going_on_error:
SCons.Taskmaster.Task.fail_continue(self)
- exit_status = 2
+ exit_status = status
else:
SCons.Taskmaster.Task.fail_stop(self)
- exit_status = 2
+ exit_status = status
def executed(self):
t = self.targets[0]
@@ -129,6 +129,7 @@ class BuildTask(SCons.Taskmaster.Task):
def failed(self):
e = sys.exc_value
+ status = 2
if sys.exc_type == SCons.Errors.BuildError:
sys.stderr.write("scons: *** [%s] %s\n" % (e.node, e.errstr))
if e.errstr == 'Exception':
@@ -142,12 +143,15 @@ class BuildTask(SCons.Taskmaster.Task):
if not keep_going_on_error:
s = s + ' Stop.'
sys.stderr.write("scons: *** %s\n" % s)
+ elif sys.exc_type == SCons.Errors.ExplicitExit:
+ status = e.status
+ sys.stderr.write("scons: *** [%s] Explicit exit, status %s\n" % (e.node, e.status))
else:
if e is None:
e = sys.exc_type
sys.stderr.write("scons: *** %s\n" % e)
- self.do_failed()
+ self.do_failed(status)
class CleanTask(SCons.Taskmaster.Task):
"""An SCons clean task."""