WAF: Add support for stopping processing before end of wscript{_*}
authorAlexander Bokovoy <ab@samba.org>
Tue, 3 Apr 2012 08:22:15 +0000 (11:22 +0300)
committerAndreas Schneider <asn@samba.org>
Thu, 12 Apr 2012 10:06:43 +0000 (12:06 +0200)
WAF scripts are written in Python and Python has no simple way
to stop program execution other than using exceptions.

This change adds WscriptCheckSkipped exception and its handling in
core WAF code. When any of wscript{_*} throws WscriptCheckSkipped
exception, WAF simply continues to process next wscript in queue
rather than breaking build.

WscriptCheckSkipped exception can be used to perform early bail out
of configuration/build target checks if certain dependency is not available
when the default checks are way more numerous than a check for this
particular dependency. This is to avoid 'if ...' indenting for large
blocks of existing code which also muddens git history for nothing.

Signed-off-by: Andreas Schneider <asn@samba.org>
buildtools/wafadmin/Utils.py

index 41dad570ebe14551d734bc1935072a59549d1c60..080d92821438cbffd0d3fa9997957b8c9d381776 100644 (file)
@@ -111,6 +111,9 @@ class WscriptError(WafError):
                                return (frame[0], frame[1])
                return (None, None)
 
+class WscriptCheckSkipped(WscriptError):
+    pass
+
 indicator = is_win32 and '\x1b[A\x1b[K%s%s%s\r' or '\x1b[K%s%s%s\r'
 
 try:
@@ -645,6 +648,8 @@ class Context(object):
                                try:
                                        try:
                                                exec(compile(txt, file_path, 'exec'), dc)
+                                       except WscriptCheckSkipped:
+                                               pass
                                        except Exception:
                                                exc_type, exc_value, tb = sys.exc_info()
                                                raise WscriptError("".join(traceback.format_exception(exc_type, exc_value, tb)), base)