aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild
diff options
context:
space:
mode:
authorbehlec <33778676+behlec@users.noreply.github.com>2018-03-29 20:29:45 +0200
committerJussi Pakkanen <jpakkane@gmail.com>2018-03-29 21:29:45 +0300
commit37d379ebe5ebf935297fe18478dfa311afa64d24 (patch)
tree04464fc8a034e978f022a424719901e2d056aa43 /mesonbuild
parent6146353f454a6db709309ad47798df87462097c9 (diff)
downloadmeson-37d379ebe5ebf935297fe18478dfa311afa64d24.zip
meson-37d379ebe5ebf935297fe18478dfa311afa64d24.tar.gz
meson-37d379ebe5ebf935297fe18478dfa311afa64d24.tar.bz2
Allow meson build file to exit early. (#2808)
Diffstat (limited to 'mesonbuild')
-rw-r--r--mesonbuild/interpreter.py11
-rw-r--r--mesonbuild/interpreterbase.py5
2 files changed, 15 insertions, 1 deletions
diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py
index c87a49b..7dbf1cc 100644
--- a/mesonbuild/interpreter.py
+++ b/mesonbuild/interpreter.py
@@ -26,7 +26,7 @@ from .dependencies import ExternalProgram
from .dependencies import InternalDependency, Dependency, DependencyException
from .interpreterbase import InterpreterBase
from .interpreterbase import check_stringlist, noPosargs, noKwargs, stringArgs, permittedKwargs, permittedMethodKwargs
-from .interpreterbase import InterpreterException, InvalidArguments, InvalidCode
+from .interpreterbase import InterpreterException, InvalidArguments, InvalidCode, SubdirDoneRequest
from .interpreterbase import InterpreterObject, MutableInterpreterObject, Disabler
from .modules import ModuleReturnValue
@@ -1612,6 +1612,7 @@ class Interpreter(InterpreterBase):
'static_library': self.func_static_lib,
'test': self.func_test,
'vcs_tag': self.func_vcs_tag,
+ 'subdir_done': self.func_subdir_done,
})
if 'MESON_UNIT_TEST' in os.environ:
self.funcs.update({'exception': self.func_exception})
@@ -2607,6 +2608,14 @@ root and issuing %s.
return self.func_custom_target(node, [kwargs['output']], kwargs)
@stringArgs
+ def func_subdir_done(self, node, args, kwargs):
+ if len(kwargs) > 0:
+ raise InterpreterException('exit does not take named arguments')
+ if len(args) > 0:
+ raise InterpreterException('exit does not take any arguments')
+ raise SubdirDoneRequest()
+
+ @stringArgs
@permittedKwargs(permitted_kwargs['custom_target'])
def func_custom_target(self, node, args, kwargs):
if len(args) != 1:
diff --git a/mesonbuild/interpreterbase.py b/mesonbuild/interpreterbase.py
index 9279506..f957d90 100644
--- a/mesonbuild/interpreterbase.py
+++ b/mesonbuild/interpreterbase.py
@@ -105,6 +105,9 @@ class InvalidCode(InterpreterException):
class InvalidArguments(InterpreterException):
pass
+class SubdirDoneRequest(BaseException):
+ pass
+
class InterpreterObject:
def __init__(self):
self.methods = {}
@@ -203,6 +206,8 @@ class InterpreterBase:
try:
self.current_lineno = cur.lineno
self.evaluate_statement(cur)
+ except SubdirDoneRequest:
+ break
except Exception as e:
if not(hasattr(e, 'lineno')):
e.lineno = cur.lineno