aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2017-10-01 21:08:40 +0300
committerJussi Pakkanen <jpakkane@gmail.com>2017-11-27 23:40:19 +0200
commit88d29526d2c9dd4d005548db6ea424dd74ccc021 (patch)
tree3a79a4a339f7dc5ef6fdaa508f23bab440f76b19
parent340422c2872ddf48ab19359bd070af85e21f0eda (diff)
downloadmeson-88d29526d2c9dd4d005548db6ea424dd74ccc021.zip
meson-88d29526d2c9dd4d005548db6ea424dd74ccc021.tar.gz
meson-88d29526d2c9dd4d005548db6ea424dd74ccc021.tar.bz2
Moved disabler to interpreterbase.
-rw-r--r--mesonbuild/interpreter.py45
-rw-r--r--mesonbuild/interpreterbase.py24
-rwxr-xr-xtest cases/common/161 dolphin option/badgenerator.py3
-rw-r--r--test cases/common/161 dolphin option/meson.build7
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))