aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/compilers.py
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2017-05-22 20:03:18 +0300
committerGitHub <noreply@github.com>2017-05-22 20:03:18 +0300
commit19faebe09f649bab21ca40a76fd517b6e245a453 (patch)
tree41f041647e425a0b5b03c8d9255bb965a7cb3dd2 /mesonbuild/compilers.py
parentef736bb0845e050d1bbda463561e6949e6ca9cff (diff)
parentb337145ec6b83aa763a4d21eb0e4b2bf35ec880a (diff)
downloadmeson-19faebe09f649bab21ca40a76fd517b6e245a453.zip
meson-19faebe09f649bab21ca40a76fd517b6e245a453.tar.gz
meson-19faebe09f649bab21ca40a76fd517b6e245a453.tar.bz2
Merge pull request #1828 from MikeWey/dlang-compiles
Add 'compiles' and 'has_multi_arguments' for dlang.
Diffstat (limited to 'mesonbuild/compilers.py')
-rw-r--r--mesonbuild/compilers.py37
1 files changed, 37 insertions, 0 deletions
diff --git a/mesonbuild/compilers.py b/mesonbuild/compilers.py
index 86ed2f4..e7c02b2 100644
--- a/mesonbuild/compilers.py
+++ b/mesonbuild/compilers.py
@@ -1915,6 +1915,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 = []