aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2017-09-24 20:27:08 +0300
committerJussi Pakkanen <jpakkane@gmail.com>2017-11-27 23:32:04 +0200
commit0d01c91bbf5ef340b1904ad1617ef4f764766fe8 (patch)
treee20d76ff8fbe344c1d261e05083bea36399cfbaa
parent904fe4745d8fb285c28f33dff2afbf3754e875fd (diff)
downloadmeson-0d01c91bbf5ef340b1904ad1617ef4f764766fe8.zip
meson-0d01c91bbf5ef340b1904ad1617ef4f764766fe8.tar.gz
meson-0d01c91bbf5ef340b1904ad1617ef4f764766fe8.tar.bz2
Guard all module calls with disabler.
-rw-r--r--mesonbuild/interpreter.py28
1 files changed, 25 insertions, 3 deletions
diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py
index 0f855ce..4d7a88a 100644
--- a/mesonbuild/interpreter.py
+++ b/mesonbuild/interpreter.py
@@ -1082,7 +1082,12 @@ ModuleState = namedtuple('ModuleState', [
'host_machine', 'target_machine'])
class DisablerHolder(InterpreterObject):
- pass
+ def __init__(self):
+ super().__init__()
+ self.methods.update({'found': self.found_method})
+
+ def found_method(self, args, kwargs):
+ return False
class ModuleHolder(InterpreterObject, ObjectHolder):
def __init__(self, modname, module, interpreter):
@@ -1092,6 +1097,8 @@ class ModuleHolder(InterpreterObject, ObjectHolder):
self.interpreter = interpreter
def method_call(self, method_name, args, kwargs):
+ if is_disabled(args, kwargs):
+ return DisablerHolder()
try:
fn = getattr(self.held_object, method_name)
except AttributeError:
@@ -1382,6 +1389,19 @@ permitted_kwargs = {'add_global_arguments': {'language'},
'vcs_tag': {'input', 'output', 'fallback', 'command', 'replace_string'},
}
+def is_disabled(args, kwargs):
+ for i in args:
+ if isinstance(i, DisablerHolder):
+ return True
+ for i in kwargs.values():
+ if isinstance(i, DisablerHolder):
+ return True
+ if isinstance(i, list):
+ for j in i:
+ if isinstance(j, DisablerHolder):
+ return True
+ return False
+
class Interpreter(InterpreterBase):
@@ -1584,6 +1604,8 @@ class Interpreter(InterpreterBase):
@noPosargs
def func_declare_dependency(self, node, args, kwargs):
version = kwargs.get('version', self.project_version)
+ if is_disabled(args, kwargs):
+ return DisableHolder()
if not isinstance(version, str):
raise InterpreterException('Version must be a string.')
incs = extract_as_list(kwargs, 'include_directories', unholder=True)
@@ -2419,7 +2441,7 @@ to directly access options of other subprojects.''')
@permittedKwargs(permitted_kwargs['test'])
def func_test(self, node, args, kwargs):
- if self.is_disabled(args, kwargs):
+ if is_disabled(args, kwargs):
return DisablerHolder()
self.add_test(node, args, kwargs, True)
@@ -2945,7 +2967,7 @@ different subdirectory.
self.coredata.target_guids[idname] = str(uuid.uuid4()).upper()
def build_target(self, node, args, kwargs, targetholder):
- if self.is_disabled(args, kwargs):
+ if is_disabled(args, kwargs):
return DisablerHolder()
if not args:
raise InterpreterException('Target does not have a name.')