aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mesonbuild/build.py20
-rw-r--r--mesonbuild/compilers/d.py2
-rw-r--r--mesonbuild/interpreter.py8
-rw-r--r--test cases/d/9 features/meson.build27
4 files changed, 40 insertions, 17 deletions
diff --git a/mesonbuild/build.py b/mesonbuild/build.py
index 89689d7..2e27153 100644
--- a/mesonbuild/build.py
+++ b/mesonbuild/build.py
@@ -36,6 +36,9 @@ known_basic_kwargs = {'install': True,
'vala_args': True,
'fortran_args': True,
'd_args': True,
+ 'd_feature_import_dirs': True,
+ 'd_feature_unittest': True,
+ 'd_feature_versions': True,
'java_args': True,
'rust_args': True,
'link_args': True,
@@ -351,11 +354,11 @@ class BuildTarget(Target):
# 1. Pre-existing objects provided by the user with the `objects:` kwarg
# 2. Compiled objects created by and extracted from another target
self.process_objectlist(objects)
+ self.process_compilers()
self.process_kwargs(kwargs, environment)
self.check_unknown_kwargs(kwargs)
if not self.sources and not self.generated and not self.objects:
raise InvalidArguments('Build target %s has no sources.' % name)
- self.process_compilers()
self.validate_sources()
self.validate_cross_install(environment)
@@ -669,8 +672,23 @@ class BuildTarget(Target):
self.vala_header = kwargs.get('vala_header', self.name + '.h')
self.vala_vapi = kwargs.get('vala_vapi', self.name + '.vapi')
self.vala_gir = kwargs.get('vala_gir', None)
+
dlist = stringlistify(kwargs.get('d_args', []))
self.add_compiler_args('d', dlist)
+ dfeatures = dict()
+ dfeature_unittest = kwargs.get('d_feature_unittest', False)
+ if dfeature_unittest:
+ dfeatures['unittest'] = dfeature_unittest
+ dfeature_versions = kwargs.get('d_feature_versions', None)
+ if dfeature_versions:
+ dfeatures['versions'] = dfeature_versions
+ dfeature_import_dirs = kwargs.get('d_feature_import_dirs', None)
+ if dfeature_import_dirs:
+ dfeatures['import_dirs'] = dfeature_import_dirs
+ if dfeatures:
+ if 'd' in self.compilers:
+ self.add_compiler_args('d', self.compilers['d'].get_feature_args(dfeatures))
+
self.link_args = flatten(kwargs.get('link_args', []))
for i in self.link_args:
if not isinstance(i, str):
diff --git a/mesonbuild/compilers/d.py b/mesonbuild/compilers/d.py
index 7fc21cc..9739f28 100644
--- a/mesonbuild/compilers/d.py
+++ b/mesonbuild/compilers/d.py
@@ -93,7 +93,7 @@ class DCompiler(Compiler):
# FIXME: Make this work for Windows, MacOS and cross-compiling
return get_gcc_soname_args(GCC_STANDARD, prefix, shlib_name, suffix, path, soversion, is_shared_module)
- def get_feature_args(self, args, kwargs):
+ def get_feature_args(self, kwargs):
res = []
if 'unittest' in kwargs:
unittest = kwargs.pop('unittest')
diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py
index c6cface..c72fa3f 100644
--- a/mesonbuild/interpreter.py
+++ b/mesonbuild/interpreter.py
@@ -756,15 +756,16 @@ class CompilerHolder(InterpreterObject):
# At time, only D compilers have this feature.
if not hasattr(self.compiler, 'get_feature_args'):
raise InterpreterException('This {} compiler has no feature arguments.'.format(self.compiler.get_display_language()))
- return self.compiler.get_feature_args(args, kwargs)
+ return self.compiler.get_feature_args(kwargs)
def unittest_args_method(self, args, kwargs):
'''
This function is deprecated and should not be used.
+ It can be removed in a future version of Meson.
'''
if not hasattr(self.compiler, 'get_feature_args'):
raise InterpreterException('This {} compiler has no feature arguments.'.format(self.compiler.get_display_language()))
- return self.compiler.get_feature_args(args, {'unittest': 'true'})
+ return self.compiler.get_feature_args({'unittest': 'true'})
def has_member_method(self, args, kwargs):
if len(args) != 2:
@@ -1258,6 +1259,9 @@ pch_kwargs = set(['c_pch', 'cpp_pch'])
lang_arg_kwargs = set(['c_args',
'cpp_args',
'd_args',
+ 'd_feature_import_dirs',
+ 'd_feature_unittest',
+ 'd_feature_versions',
'fortran_args',
'java_args',
'objc_args',
diff --git a/test cases/d/9 features/meson.build b/test cases/d/9 features/meson.build
index 9fda3bd..1d36b9d 100644
--- a/test cases/d/9 features/meson.build
+++ b/test cases/d/9 features/meson.build
@@ -1,28 +1,29 @@
project('D Features', 'd')
-dc = meson.get_compiler('d')
# directory for data
data_dir = join_paths(meson.current_source_dir(), 'data')
-# test string import dirs only
-dfeatures_simple = dc.feature_args(import_dirs: [data_dir])
-
-e_plain = executable('dapp_menu', 'app.d', d_args: dfeatures_simple)
+e_plain = executable('dapp_menu',
+ 'app.d',
+ d_feature_import_dirs: [data_dir]
+)
test('dapp_menu_t_fail', e_plain, should_fail: true)
test('dapp_menu_t', e_plain, args: ['menu'])
# test feature versions and string imports
-dfeatures_version = dc.feature_args(import_dirs: [data_dir], versions: ['No_Menu', 'With_People'])
-e_versions = executable('dapp_versions', 'app.d', d_args: dfeatures_version)
+e_versions = executable('dapp_versions',
+ 'app.d',
+ d_feature_import_dirs: [data_dir],
+ d_feature_versions: ['No_Menu', 'With_People']
+)
test('dapp_versions_t_fail', e_versions, args: ['menu'], should_fail: true)
test('dapp_versions_t', e_versions, args: ['people'])
# test everything and unittests
-dfeatures_test = dc.feature_args(
- import_dirs: [data_dir],
- versions: ['No_Menu', 'With_People'],
- unittest: true
+e_test = executable('dapp_test',
+ 'app.d',
+ d_feature_import_dirs: [data_dir],
+ d_feature_versions: ['No_Menu', 'With_People'],
+ d_feature_unittest: true
)
-e_test = executable('dapp_test', 'app.d',
- d_args: dfeatures_test)
test('dapp_test', e_test)