From 521ce883ad3c4e0a32fabea92b330012d71a719a Mon Sep 17 00:00:00 2001 From: Xavier Claessens Date: Sat, 31 Mar 2018 22:39:42 -0400 Subject: has_argument(): reduce code duplication --- mesonbuild/interpreter.py | 29 ++++++++--------------------- 1 file changed, 8 insertions(+), 21 deletions(-) (limited to 'mesonbuild/interpreter.py') diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py index a130312..1c71409 100644 --- a/mesonbuild/interpreter.py +++ b/mesonbuild/interpreter.py @@ -1183,14 +1183,8 @@ class CompilerHolder(InterpreterObject): def has_argument_method(self, args, kwargs): args = mesonlib.stringlistify(args) if len(args) != 1: - raise InterpreterException('Has_arg takes exactly one argument.') - result = self.compiler.has_argument(args[0], self.environment) - if result: - h = mlog.green('YES') - else: - h = mlog.red('NO') - mlog.log('Compiler for {} supports argument {}:'.format(self.compiler.get_display_language(), args[0]), h) - return result + raise InterpreterException('has_argument takes exactly one argument.') + return self.has_multi_arguments_method(args, kwargs) @permittedMethodKwargs({}) def has_multi_arguments_method(self, args, kwargs): @@ -1209,23 +1203,16 @@ class CompilerHolder(InterpreterObject): @permittedMethodKwargs({}) def get_supported_arguments_method(self, args, kwargs): args = mesonlib.stringlistify(args) - result = self.compiler.get_supported_arguments(args, self.environment) - if len(result) == len(args): - h = mlog.green('YES') - elif len(result) > 0: - h = mlog.yellow('SOME') - else: - h = mlog.red('NO') - mlog.log( - 'Compiler for {} supports arguments {}:'.format( - self.compiler.get_display_language(), ' '.join(args)), - h) - return result + supported_args = [] + for arg in args: + if self.has_argument_method(arg, kwargs): + supported_args.append(arg) + return supported_args @permittedMethodKwargs({}) def first_supported_argument_method(self, args, kwargs): for i in mesonlib.stringlistify(args): - if self.compiler.has_argument(i, self.environment): + if self.has_argument_method(i, kwargs): mlog.log('First supported argument:', mlog.bold(i)) return [i] mlog.log('First supported argument:', mlog.red('None')) -- cgit v1.1 From bd37afeeea0283dac1051b7d9bedf099252c1d19 Mon Sep 17 00:00:00 2001 From: Xavier Claessens Date: Sat, 31 Mar 2018 22:44:09 -0400 Subject: Add has_link_argument() and friends Closes: #3335. --- mesonbuild/interpreter.py | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) (limited to 'mesonbuild/interpreter.py') diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py index 1c71409..b38295f 100644 --- a/mesonbuild/interpreter.py +++ b/mesonbuild/interpreter.py @@ -741,6 +741,10 @@ class CompilerHolder(InterpreterObject): 'has_multi_arguments': self.has_multi_arguments_method, 'get_supported_arguments': self.get_supported_arguments_method, 'first_supported_argument': self.first_supported_argument_method, + 'has_link_argument': self.has_link_argument_method, + 'has_multi_link_arguments': self.has_multi_link_arguments_method, + 'get_supported_link_arguments': self.get_supported_link_arguments_method, + 'first_supported_link_argument': self.first_supported_link_argument_method, 'unittest_args': self.unittest_args_method, 'symbols_have_underscore_prefix': self.symbols_have_underscore_prefix_method, }) @@ -1218,6 +1222,45 @@ class CompilerHolder(InterpreterObject): mlog.log('First supported argument:', mlog.red('None')) return [] + @permittedMethodKwargs({}) + def has_link_argument_method(self, args, kwargs): + args = mesonlib.stringlistify(args) + if len(args) != 1: + raise InterpreterException('has_link_argument takes exactly one argument.') + return self.has_multi_link_arguments_method(args, kwargs) + + @permittedMethodKwargs({}) + def has_multi_link_arguments_method(self, args, kwargs): + args = mesonlib.stringlistify(args) + result = self.compiler.has_multi_link_arguments(args, self.environment) + if result: + h = mlog.green('YES') + else: + h = mlog.red('NO') + mlog.log( + 'Compiler for {} supports link arguments {}:'.format( + self.compiler.get_display_language(), ' '.join(args)), + h) + return result + + @permittedMethodKwargs({}) + def get_supported_link_arguments_method(self, args, kwargs): + args = mesonlib.stringlistify(args) + supported_args = [] + for arg in args: + if self.has_link_argument_method(arg, kwargs): + supported_args.append(arg) + return supported_args + + @permittedMethodKwargs({}) + def first_supported_link_argument_method(self, args, kwargs): + for i in mesonlib.stringlistify(args): + if self.has_link_argument_method(i, kwargs): + mlog.log('First supported link argument:', mlog.bold(i)) + return [i] + mlog.log('First supported link argument:', mlog.red('None')) + return [] + ModuleState = namedtuple('ModuleState', [ 'build_to_src', 'subproject', 'subdir', 'current_lineno', 'environment', 'project_name', 'project_version', 'backend', 'compilers', 'targets', -- cgit v1.1