diff options
author | Igor Gnatenko <i.gnatenko.brain@gmail.com> | 2015-05-21 19:10:01 +0300 |
---|---|---|
committer | Igor Gnatenko <i.gnatenko.brain@gmail.com> | 2015-05-21 19:10:01 +0300 |
commit | 46804d4fe6985da8ea1de99792c506a24e469489 (patch) | |
tree | ffca7e87aecf1dd49bd1346f9621099083f6e786 | |
parent | 0ba1d545afe021e09090f434d5242ae942e7d5b4 (diff) | |
download | meson-46804d4fe6985da8ea1de99792c506a24e469489.zip meson-46804d4fe6985da8ea1de99792c506a24e469489.tar.gz meson-46804d4fe6985da8ea1de99792c506a24e469489.tar.bz2 |
add has_type method
Signed-off-by: Igor Gnatenko <i.gnatenko.brain@gmail.com>
-rw-r--r-- | compilers.py | 8 | ||||
-rw-r--r-- | interpreter.py | 17 | ||||
-rw-r--r-- | test cases/common/83 has type/meson.build | 11 |
3 files changed, 36 insertions, 0 deletions
diff --git a/compilers.py b/compilers.py index 5e66b23..b86c6c9 100644 --- a/compilers.py +++ b/compilers.py @@ -401,6 +401,14 @@ void bar() { ''' return self.compiles(templ % (prefix, typename, membername)) + def has_type(self, typename, prefix): + templ = '''%s +void bar() { + sizeof(%s); +}; +''' + return self.compiles(templ % (prefix, typename)) + def thread_flags(self): return ['-pthread'] diff --git a/interpreter.py b/interpreter.py index e8bfecf..63f343f 100644 --- a/interpreter.py +++ b/interpreter.py @@ -502,6 +502,7 @@ class CompilerHolder(InterpreterObject): 'run' : self.run_method, 'has_function' : self.has_function_method, 'has_member' : self.has_member_method, + 'has_type' : self.has_type_method, 'alignment' : self.alignment_method, 'version' : self.version_method, 'cmd_array' : self.cmd_array_method, @@ -578,6 +579,22 @@ class CompilerHolder(InterpreterObject): mlog.log('Checking for function "', mlog.bold(funcname), '": ', hadtxt, sep='') return had + def has_type_method(self, args, kwargs): + if len(args) != 1: + raise InterpreterException('Has_type takes exactly one argument.') + check_stringlist(args) + typename = args[0] + prefix = kwargs.get('prefix', '') + if not isinstance(prefix, str): + raise InterpreterException('Prefix argument of has_type must be a string.') + had = self.compiler.has_type(typename, prefix) + if had: + hadtxt = mlog.green('YES') + else: + hadtxt = mlog.red('NO') + mlog.log('Checking for type "', mlog.bold(typename), '": ', hadtxt, sep='') + return had + def sizeof_method(self, args, kwargs): if len(args) != 1: raise InterpreterException('Sizeof takes exactly one argument.') diff --git a/test cases/common/83 has type/meson.build b/test cases/common/83 has type/meson.build new file mode 100644 index 0000000..002f150 --- /dev/null +++ b/test cases/common/83 has type/meson.build @@ -0,0 +1,11 @@ +project('has type', 'c') + +cc = meson.get_compiler('c') + +if not cc.has_type('time_t', prefix : '#include<time.h>') + error('Did not detect type that exists.') +endif + +if cc.has_type('no_time_t', prefix : '#include<time.h>') + error('Not existing type found.') +endif |