From 19da02a5d8b5c1a65a29bad511e27304374808ba Mon Sep 17 00:00:00 2001 From: Mike Wey Date: Sat, 20 May 2017 13:34:10 +0200 Subject: [PATCH 1/3] Add 'compiles' and 'has_multi_arguments' for dlang. --- mesonbuild/compilers.py | 37 +++++++++++++++++++ .../8 has multi arguments/installed_files.txt | 0 .../d/8 has multi arguments/meson.build | 6 +++ 3 files changed, 43 insertions(+) create mode 100644 test cases/d/8 has multi arguments/installed_files.txt create mode 100644 test cases/d/8 has multi arguments/meson.build diff --git a/mesonbuild/compilers.py b/mesonbuild/compilers.py index 97a1064cd..171aa5c8c 100644 --- a/mesonbuild/compilers.py +++ b/mesonbuild/compilers.py @@ -1914,6 +1914,43 @@ class DCompiler(Compiler): paths = paths + ':' + padding return ['-L-rpath={}'.format(paths)] + def _get_compiler_check_args(self, env, extra_args, dependencies, mode='compile'): + if extra_args is None: + extra_args = [] + elif isinstance(extra_args, str): + extra_args = [extra_args] + if dependencies is None: + dependencies = [] + elif not isinstance(dependencies, list): + dependencies = [dependencies] + # Collect compiler arguments + args = CompilerArgs(self) + for d in dependencies: + # Add compile flags needed by dependencies + args += d.get_compile_args() + if mode == 'link': + # Add link flags needed to find dependencies + args += d.get_link_args() + + if mode == 'compile': + # Add DFLAGS from the env + args += env.coredata.external_args[self.language] + elif mode == 'link': + # Add LDFLAGS from the env + args += env.coredata.external_link_args[self.language] + # extra_args must override all other arguments, so we add them last + args += extra_args + return args + + def compiles(self, code, env, extra_args=None, dependencies=None, mode='compile'): + args = self._get_compiler_check_args(env, extra_args, dependencies, mode) + + with self.compile(code, args, mode) as p: + return p.returncode == 0 + + def has_multi_arguments(self, args, env): + return self.compiles('int i;\n', env, extra_args=args) + @classmethod def translate_args_to_nongnu(cls, args): dcargs = [] diff --git a/test cases/d/8 has multi arguments/installed_files.txt b/test cases/d/8 has multi arguments/installed_files.txt new file mode 100644 index 000000000..e69de29bb diff --git a/test cases/d/8 has multi arguments/meson.build b/test cases/d/8 has multi arguments/meson.build new file mode 100644 index 000000000..2153cfda7 --- /dev/null +++ b/test cases/d/8 has multi arguments/meson.build @@ -0,0 +1,6 @@ +project('D has arguments test', 'd') + +compiler = meson.get_compiler('d') + +compiler.compiles('int i;') +compiler.has_argument('-I.') From 0bfc93f9e86874e048ed0bca8a0b2bff7586c46c Mon Sep 17 00:00:00 2001 From: Mike Wey Date: Sat, 20 May 2017 18:08:48 +0200 Subject: [PATCH 2/3] Update the test case. --- .../d/8 has multi arguments/installed_files.txt | 0 test cases/d/8 has multi arguments/meson.build | 14 ++++++++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) delete mode 100644 test cases/d/8 has multi arguments/installed_files.txt diff --git a/test cases/d/8 has multi arguments/installed_files.txt b/test cases/d/8 has multi arguments/installed_files.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/test cases/d/8 has multi arguments/meson.build b/test cases/d/8 has multi arguments/meson.build index 2153cfda7..967189022 100644 --- a/test cases/d/8 has multi arguments/meson.build +++ b/test cases/d/8 has multi arguments/meson.build @@ -2,5 +2,15 @@ project('D has arguments test', 'd') compiler = meson.get_compiler('d') -compiler.compiles('int i;') -compiler.has_argument('-I.') +if not compiler.compiles('int i;') + error(''.join(['compiles is broken for d compiler: ', compiler.get_id()])) +endif +if not compiler.has_multi_arguments(['-I.', '-J.']) + error(''.join(['has_multi_arguments is broken for d compiler: ', compiler.get_id()])) +endif +if not compiler.has_argument('-I.') + error(''.join(['has_argument is broken for d compiler: ', compiler.get_id()])) +endif +if compiler.has_argument('-flag_a_d_compiler_defenaitly_does_not_have') + error(''.join(['has_argument is broken for d compiler: ', compiler.get_id()])) +endif From b337145ec6b83aa763a4d21eb0e4b2bf35ec880a Mon Sep 17 00:00:00 2001 From: Mike Wey Date: Sun, 21 May 2017 22:47:22 +0200 Subject: [PATCH 3/3] Use assert instead of error. --- test cases/d/8 has multi arguments/meson.build | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/test cases/d/8 has multi arguments/meson.build b/test cases/d/8 has multi arguments/meson.build index 967189022..31af6481e 100644 --- a/test cases/d/8 has multi arguments/meson.build +++ b/test cases/d/8 has multi arguments/meson.build @@ -2,15 +2,7 @@ project('D has arguments test', 'd') compiler = meson.get_compiler('d') -if not compiler.compiles('int i;') - error(''.join(['compiles is broken for d compiler: ', compiler.get_id()])) -endif -if not compiler.has_multi_arguments(['-I.', '-J.']) - error(''.join(['has_multi_arguments is broken for d compiler: ', compiler.get_id()])) -endif -if not compiler.has_argument('-I.') - error(''.join(['has_argument is broken for d compiler: ', compiler.get_id()])) -endif -if compiler.has_argument('-flag_a_d_compiler_defenaitly_does_not_have') - error(''.join(['has_argument is broken for d compiler: ', compiler.get_id()])) -endif +assert(compiler.compiles('int i;'), 'Basic code test does not comple: ' + compiler.get_id()) +assert(compiler.has_multi_arguments(['-I.', '-J.']), 'Multi argument test does not work: ' + compiler.get_id()) +assert(compiler.has_argument('-I.'), 'Basic argument test does not work: ' + compiler.get_id()) +assert(compiler.has_argument('-flag_a_d_compiler_defenaitly_does_not_have') == false, 'Basic argument test does not work: ' + compiler.get_id())