aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/interpreter.py
diff options
context:
space:
mode:
authorNirbheek Chauhan <nirbheek.chauhan@gmail.com>2016-08-27 19:56:23 +0530
committerJussi Pakkanen <jpakkane@gmail.com>2016-08-27 17:26:23 +0300
commit7830cb61c39fbaf57933ac403dcdf5007667d87d (patch)
tree8f57d828570cc45118d185caa3b13f848d6226f0 /mesonbuild/interpreter.py
parentb7392bb2902cc5d666970c5ace7aa5de78d052e3 (diff)
downloadmeson-7830cb61c39fbaf57933ac403dcdf5007667d87d.zip
meson-7830cb61c39fbaf57933ac403dcdf5007667d87d.tar.gz
meson-7830cb61c39fbaf57933ac403dcdf5007667d87d.tar.bz2
Add a new compiler object method: has_members (#723)
* Add a new compiler object method: has_members Identical to 'cc.has_member', except that this takes multiple members and all of them must exist else it returns false. This is useful when you want to verify that a structure has all of a given set of fields. Individually checking each member is horrifying. * Fix typo in exceptions for has_member(s)
Diffstat (limited to 'mesonbuild/interpreter.py')
-rw-r--r--mesonbuild/interpreter.py25
1 files changed, 23 insertions, 2 deletions
diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py
index 94119f9..c9a81fb 100644
--- a/mesonbuild/interpreter.py
+++ b/mesonbuild/interpreter.py
@@ -590,6 +590,7 @@ class CompilerHolder(InterpreterObject):
'run' : self.run_method,
'has_function' : self.has_function_method,
'has_member' : self.has_member_method,
+ 'has_members' : self.has_members_method,
'has_type' : self.has_type_method,
'alignment' : self.alignment_method,
'version' : self.version_method,
@@ -665,9 +666,10 @@ class CompilerHolder(InterpreterObject):
membername = args[1]
prefix = kwargs.get('prefix', '')
if not isinstance(prefix, str):
- raise InterpreterException('Prefix argument of has_function must be a string.')
+ raise InterpreterException('Prefix argument of has_member must be a string.')
extra_args = self.determine_args(kwargs)
- had = self.compiler.has_member(typename, membername, prefix, self.environment, extra_args)
+ had = self.compiler.has_members(typename, [membername], prefix,
+ self.environment, extra_args)
if had:
hadtxt = mlog.green('YES')
else:
@@ -676,6 +678,25 @@ class CompilerHolder(InterpreterObject):
'" has member "', mlog.bold(membername), '": ', hadtxt, sep='')
return had
+ def has_members_method(self, args, kwargs):
+ check_stringlist(args)
+ typename = args[0]
+ membernames = args[1:]
+ prefix = kwargs.get('prefix', '')
+ if not isinstance(prefix, str):
+ raise InterpreterException('Prefix argument of has_members must be a string.')
+ extra_args = self.determine_args(kwargs)
+ had = self.compiler.has_members(typename, membernames, prefix,
+ self.environment, extra_args)
+ if had:
+ hadtxt = mlog.green('YES')
+ else:
+ hadtxt = mlog.red('NO')
+ members = mlog.bold(', '.join(['"{}"'.format(m) for m in membernames]))
+ mlog.log('Checking whether type "', mlog.bold(typename),
+ '" has members ', members, ': ', hadtxt, sep='')
+ return had
+
def has_function_method(self, args, kwargs):
if len(args) != 1:
raise InterpreterException('Has_function takes exactly one argument.')