diff options
-rw-r--r-- | mesonbuild/build.py | 20 | ||||
-rw-r--r-- | mesonbuild/compilers/d.py | 2 | ||||
-rw-r--r-- | mesonbuild/interpreter.py | 8 | ||||
-rw-r--r-- | test cases/d/9 features/meson.build | 27 |
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) |