X-Git-Url: http://git.tremily.us/?a=blobdiff_plain;f=src%2Fengine%2FSCons%2FSubst.py;h=115f7dba427ce17e84cf6d68cef29687e7109b2b;hb=910782f5414ac9259c6d0daebb7820983a14ab90;hp=b100473727e873f74ca87c20e86cfd871daa564e;hpb=3c2af7e2f6ec337c15980c60967c86aaadd70d8e;p=scons.git diff --git a/src/engine/SCons/Subst.py b/src/engine/SCons/Subst.py index b1004737..115f7dba 100644 --- a/src/engine/SCons/Subst.py +++ b/src/engine/SCons/Subst.py @@ -44,6 +44,24 @@ _strconv = [SCons.Util.to_String, SCons.Util.to_String, SCons.Util.to_String_for_signature] + + +AllowableExceptions = (IndexError, NameError) + +def SetAllowableExceptions(*excepts): + global AllowableExceptions + AllowableExceptions = filter(None, excepts) + +def raise_exception(exception, target, s): + name = exception.__class__.__name__ + msg = "%s `%s' trying to evaluate `%s'" % (name, exception, s) + if target: + raise SCons.Errors.BuildError, (target[0], msg) + else: + raise SCons.Errors.UserError, msg + + + class Literal: """A wrapper for a string. If you use this object wrapped around a string, then it will be interpreted as literal. @@ -377,21 +395,19 @@ def scons_subst(strSubst, env, mode=SUBST_RAW, target=None, source=None, gvars={ key = key[1:-1] try: s = eval(key, self.gvars, lvars) - except AttributeError, e: - raise SCons.Errors.UserError, \ - "Error trying to evaluate `%s': %s" % (s, e) - except (IndexError, NameError, TypeError): - return '' - except SyntaxError,e: - if self.target: - raise SCons.Errors.BuildError, (self.target[0], "Syntax error `%s' trying to evaluate `%s'" % (e,s)) - else: - raise SCons.Errors.UserError, "Syntax error `%s' trying to evaluate `%s'" % (e,s) + except KeyboardInterrupt: + raise + except Exception, e: + if e.__class__ in AllowableExceptions: + return '' + raise_exception(e, self.target, s) else: if lvars.has_key(key): s = lvars[key] elif self.gvars.has_key(key): s = self.gvars[key] + elif not NameError in AllowableExceptions: + raise_exception(NameError(key), self.target, s) else: return '' @@ -590,21 +606,19 @@ def scons_subst_list(strSubst, env, mode=SUBST_RAW, target=None, source=None, gv key = key[1:-1] try: s = eval(key, self.gvars, lvars) - except AttributeError, e: - raise SCons.Errors.UserError, \ - "Error trying to evaluate `%s': %s" % (s, e) - except (IndexError, NameError, TypeError): - return - except SyntaxError,e: - if self.target: - raise SCons.Errors.BuildError, (self.target[0], "Syntax error `%s' trying to evaluate `%s'" % (e,s)) - else: - raise SCons.Errors.UserError, "Syntax error `%s' trying to evaluate `%s'" % (e,s) + except KeyboardInterrupt: + raise + except Exception, e: + if e.__class__ in AllowableExceptions: + return + raise_exception(e, self.target, s) else: if lvars.has_key(key): s = lvars[key] elif self.gvars.has_key(key): s = self.gvars[key] + elif not NameError in AllowableExceptions: + raise_exception(NameError(), self.target, s) else: return