diff options
author | Jussi Pakkanen <jpakkane@gmail.com> | 2017-10-01 21:08:40 +0300 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2017-11-27 23:40:19 +0200 |
commit | 88d29526d2c9dd4d005548db6ea424dd74ccc021 (patch) | |
tree | 3a79a4a339f7dc5ef6fdaa508f23bab440f76b19 | |
parent | 340422c2872ddf48ab19359bd070af85e21f0eda (diff) | |
download | meson-88d29526d2c9dd4d005548db6ea424dd74ccc021.zip meson-88d29526d2c9dd4d005548db6ea424dd74ccc021.tar.gz meson-88d29526d2c9dd4d005548db6ea424dd74ccc021.tar.bz2 |
Moved disabler to interpreterbase.
-rw-r--r-- | mesonbuild/interpreter.py | 45 | ||||
-rw-r--r-- | mesonbuild/interpreterbase.py | 24 | ||||
-rwxr-xr-x | test cases/common/161 dolphin option/badgenerator.py | 3 | ||||
-rw-r--r-- | test cases/common/161 dolphin option/meson.build | 7 |
4 files changed, 35 insertions, 44 deletions
diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py index 0a1f2eb..86f146f 100644 --- a/mesonbuild/interpreter.py +++ b/mesonbuild/interpreter.py @@ -27,7 +27,7 @@ from .dependencies import InternalDependency, Dependency, DependencyException from .interpreterbase import InterpreterBase from .interpreterbase import check_stringlist, noPosargs, noKwargs, stringArgs, permittedKwargs from .interpreterbase import InterpreterException, InvalidArguments, InvalidCode -from .interpreterbase import InterpreterObject, MutableInterpreterObject +from .interpreterbase import InterpreterObject, MutableInterpreterObject, Disabler from .modules import ModuleReturnValue import os, sys, shutil, uuid @@ -1081,14 +1081,6 @@ ModuleState = namedtuple('ModuleState', [ 'data', 'headers', 'man', 'global_args', 'project_args', 'build_machine', 'host_machine', 'target_machine']) -class Disabler(InterpreterObject): - 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): InterpreterObject.__init__(self) @@ -1097,8 +1089,6 @@ class ModuleHolder(InterpreterObject, ObjectHolder): self.interpreter = interpreter def method_call(self, method_name, args, kwargs): - if is_disabled(args, kwargs): - return Disabler() try: fn = getattr(self.held_object, method_name) except AttributeError: @@ -1389,19 +1379,6 @@ 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, Disabler): - return True - for i in kwargs.values(): - if isinstance(i, Disabler): - return True - if isinstance(i, list): - for j in i: - if isinstance(j, Disabler): - return True - return False - class Interpreter(InterpreterBase): @@ -1604,8 +1581,6 @@ 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 Disabler() if not isinstance(version, str): raise InterpreterException('Version must be a string.') incs = extract_as_list(kwargs, 'include_directories', unholder=True) @@ -2156,20 +2131,6 @@ to directly access options of other subprojects.''') break return identifier, cached_dep - @permittedKwargs(permitted_kwargs['dependency']) - def is_disabled(self, 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 - def func_dependency(self, node, args, kwargs): self.validate_arguments(args, 1, [str]) if 'required' in kwargs and 'options' in kwargs: @@ -2441,8 +2402,6 @@ to directly access options of other subprojects.''') @permittedKwargs(permitted_kwargs['test']) def func_test(self, node, args, kwargs): - if is_disabled(args, kwargs): - return Disabler() self.add_test(node, args, kwargs, True) def unpack_env_kwarg(self, kwargs): @@ -2967,8 +2926,6 @@ different subdirectory. self.coredata.target_guids[idname] = str(uuid.uuid4()).upper() def build_target(self, node, args, kwargs, targetholder): - if is_disabled(args, kwargs): - return Disabler() if not args: raise InterpreterException('Target does not have a name.') name = args[0] diff --git a/mesonbuild/interpreterbase.py b/mesonbuild/interpreterbase.py index 7ccc8b2..f8a98aa 100644 --- a/mesonbuild/interpreterbase.py +++ b/mesonbuild/interpreterbase.py @@ -100,6 +100,26 @@ class MutableInterpreterObject(InterpreterObject): def __init__(self): super().__init__() +class Disabler(InterpreterObject): + def __init__(self): + super().__init__() + self.methods.update({'found': self.found_method}) + + def found_method(self, args, kwargs): + return False + +def is_disabled(args, kwargs): + for i in args: + if isinstance(i, Disabler): + return True + for i in kwargs.values(): + if isinstance(i, Disabler): + return True + if isinstance(i, list): + for j in i: + if isinstance(j, Disabler): + return True + return False class InterpreterBase: def __init__(self, source_root, subdir): @@ -383,6 +403,8 @@ class InterpreterBase: def function_call(self, node): func_name = node.func_name (posargs, kwargs) = self.reduce_arguments(node.args) + if is_disabled(posargs, kwargs): + return Disabler() if func_name in self.funcs: return self.funcs[func_name](node, self.flatten(posargs), kwargs) else: @@ -410,6 +432,8 @@ class InterpreterBase: if not isinstance(obj, InterpreterObject): raise InvalidArguments('Variable "%s" is not callable.' % object_name) (args, kwargs) = self.reduce_arguments(args) + if is_disabled(posargs, kwargs): + return Disabler() if method_name == 'extract_objects': self.validate_extraction(obj.held_object) return obj.method_call(method_name, self.flatten(args), kwargs) diff --git a/test cases/common/161 dolphin option/badgenerator.py b/test cases/common/161 dolphin option/badgenerator.py new file mode 100755 index 0000000..2f34c6c --- /dev/null +++ b/test cases/common/161 dolphin option/badgenerator.py @@ -0,0 +1,3 @@ +#!/usr/bin/env python3 + +print('I am a bad generator. I do not work.') diff --git a/test cases/common/161 dolphin option/meson.build b/test cases/common/161 dolphin option/meson.build index 7f5211a..c963710 100644 --- a/test cases/common/161 dolphin option/meson.build +++ b/test cases/common/161 dolphin option/meson.build @@ -6,3 +6,10 @@ exe = executable('encprog', 'encprog.c', dependencies : x264_dep) test('enc test', exe) +gs = custom_target('somec', + input : 'proggie.c.in', + output : 'proggie.c', + command : [exe, '@INPUT@', '@OUTPUT@'], + ) + +test('Generated test', executable('proggie', gs)) |