| Index: third_party/scons/scons-local/SCons/Script/Main.py
|
| ===================================================================
|
| --- third_party/scons/scons-local/SCons/Script/Main.py (revision 7505)
|
| +++ third_party/scons/scons-local/SCons/Script/Main.py (working copy)
|
| @@ -34,7 +34,7 @@
|
| # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
| #
|
|
|
| -__revision__ = "src/engine/SCons/Script/Main.py 3603 2008/10/10 05:46:45 scons"
|
| +__revision__ = "src/engine/SCons/Script/Main.py 3842 2008/12/20 22:59:52 scons"
|
|
|
| import os
|
| import os.path
|
| @@ -216,6 +216,8 @@
|
| sys.stderr.write("\n")
|
| try:
|
| raise SCons.Errors.BuildError(t, errstr)
|
| + except KeyboardInterrupt:
|
| + raise
|
| except:
|
| self.exception_set()
|
| self.do_failed()
|
| @@ -229,55 +231,56 @@
|
| # Handle the failure of a build task. The primary purpose here
|
| # is to display the various types of Errors and Exceptions
|
| # appropriately.
|
| - status = 2
|
| exc_info = self.exc_info()
|
| try:
|
| t, e, tb = exc_info
|
| except ValueError:
|
| t, e = exc_info
|
| tb = None
|
| +
|
| if t is None:
|
| # The Taskmaster didn't record an exception for this Task;
|
| # see if the sys module has one.
|
| - t, e = sys.exc_info()[:2]
|
| + try:
|
| + t, e, tb = sys.exc_info()[:]
|
| + except ValueError:
|
| + t, e = exc_info
|
| + tb = None
|
| +
|
| + # Deprecated string exceptions will have their string stored
|
| + # in the first entry of the tuple.
|
| + if e is None:
|
| + e = t
|
|
|
| - def nodestring(n):
|
| - if not SCons.Util.is_List(n):
|
| - n = [ n ]
|
| - return string.join(map(str, n), ', ')
|
| + buildError = SCons.Errors.convert_to_BuildError(e)
|
| + if not buildError.node:
|
| + buildError.node = self.node
|
|
|
| + node = buildError.node
|
| + if not SCons.Util.is_List(node):
|
| + node = [ node ]
|
| + nodename = string.join(map(str, node), ', ')
|
| +
|
| errfmt = "scons: *** [%s] %s\n"
|
| + sys.stderr.write(errfmt % (nodename, buildError))
|
|
|
| - if t == SCons.Errors.BuildError:
|
| - tname = nodestring(e.node)
|
| - errstr = e.errstr
|
| - if e.filename:
|
| - errstr = e.filename + ': ' + errstr
|
| - sys.stderr.write(errfmt % (tname, errstr))
|
| - elif t == SCons.Errors.TaskmasterException:
|
| - tname = nodestring(e.node)
|
| - sys.stderr.write(errfmt % (tname, e.errstr))
|
| - type, value, trace = e.exc_info
|
| + if (buildError.exc_info[2] and buildError.exc_info[1] and
|
| + # TODO(1.5)
|
| + #not isinstance(
|
| + # buildError.exc_info[1],
|
| + # (EnvironmentError, SCons.Errors.StopError, SCons.Errors.UserError))):
|
| + not isinstance(buildError.exc_info[1], EnvironmentError) and
|
| + not isinstance(buildError.exc_info[1], SCons.Errors.StopError) and
|
| + not isinstance(buildError.exc_info[1], SCons.Errors.UserError)):
|
| + type, value, trace = buildError.exc_info
|
| traceback.print_exception(type, value, trace)
|
| - elif t == SCons.Errors.ExplicitExit:
|
| - status = e.status
|
| - tname = nodestring(e.node)
|
| - errstr = 'Explicit exit, status %s' % status
|
| - sys.stderr.write(errfmt % (tname, errstr))
|
| - else:
|
| - if e is None:
|
| - e = t
|
| - s = str(e)
|
| - if t == SCons.Errors.StopError and not self.options.keep_going:
|
| - s = s + ' Stop.'
|
| - sys.stderr.write("scons: *** %s\n" % s)
|
| + elif tb and print_stacktrace:
|
| + sys.stderr.write("scons: internal stack trace:\n")
|
| + traceback.print_tb(tb, file=sys.stderr)
|
|
|
| - if tb and print_stacktrace:
|
| - sys.stderr.write("scons: internal stack trace:\n")
|
| - traceback.print_tb(tb, file=sys.stderr)
|
| + self.exception = (e, buildError, tb) # type, value, traceback
|
| + self.do_failed(buildError.exitstatus)
|
|
|
| - self.do_failed(status)
|
| -
|
| self.exc_clear()
|
|
|
| def postprocess(self):
|
| @@ -598,12 +601,14 @@
|
| traceback.print_exc()
|
| sys.exit(2)
|
|
|
| -def _SConstruct_exists(dirname='', repositories=[]):
|
| +def _SConstruct_exists(dirname='', repositories=[], filelist=None):
|
| """This function checks that an SConstruct file exists in a directory.
|
| If so, it returns the path of the file. By default, it checks the
|
| current directory.
|
| """
|
| - for file in ['SConstruct', 'Sconstruct', 'sconstruct']:
|
| + if not filelist:
|
| + filelist = ['SConstruct', 'Sconstruct', 'sconstruct']
|
| + for file in filelist:
|
| sfile = os.path.join(dirname, file)
|
| if os.path.isfile(sfile):
|
| return sfile
|
| @@ -732,6 +737,7 @@
|
| default_warnings = [ SCons.Warnings.CorruptSConsignWarning,
|
| SCons.Warnings.DeprecatedWarning,
|
| SCons.Warnings.DuplicateEnvironmentWarning,
|
| + SCons.Warnings.FutureReservedVariableWarning,
|
| SCons.Warnings.LinkWarning,
|
| SCons.Warnings.MissingSConscriptWarning,
|
| SCons.Warnings.NoMD5ModuleWarning,
|
| @@ -739,7 +745,9 @@
|
| SCons.Warnings.NoObjectCountWarning,
|
| SCons.Warnings.NoParallelSupportWarning,
|
| SCons.Warnings.MisleadingKeywordsWarning,
|
| - SCons.Warnings.StackSizeWarning, ]
|
| + SCons.Warnings.ReservedVariableWarning,
|
| + SCons.Warnings.StackSizeWarning,
|
| + ]
|
|
|
| for warning in default_warnings:
|
| SCons.Warnings.enableWarningClass(warning)
|
| @@ -777,13 +785,15 @@
|
| if options.climb_up:
|
| target_top = '.' # directory to prepend to targets
|
| script_dir = os.getcwd() # location of script
|
| - while script_dir and not _SConstruct_exists(script_dir, options.repository):
|
| + while script_dir and not _SConstruct_exists(script_dir,
|
| + options.repository,
|
| + options.file):
|
| script_dir, last_part = os.path.split(script_dir)
|
| if last_part:
|
| target_top = os.path.join(last_part, target_top)
|
| else:
|
| script_dir = ''
|
| - if script_dir:
|
| + if script_dir and script_dir != os.getcwd():
|
| display("scons: Entering directory `%s'" % script_dir)
|
| os.chdir(script_dir)
|
|
|
| @@ -802,7 +812,8 @@
|
| if options.file:
|
| scripts.extend(options.file)
|
| if not scripts:
|
| - sfile = _SConstruct_exists(repositories=options.repository)
|
| + sfile = _SConstruct_exists(repositories=options.repository,
|
| + filelist=options.file)
|
| if sfile:
|
| scripts.append(sfile)
|
|
|
| @@ -1266,6 +1277,8 @@
|
| except SConsPrintHelpException:
|
| parser.print_help()
|
| exit_status = 0
|
| + except SCons.Errors.BuildError, e:
|
| + exit_status = e.exitstatus
|
| except:
|
| # An exception here is likely a builtin Python exception Python
|
| # code in an SConscript file. Show them precisely what the
|
|
|