From 52f23f8c34bd9f6eacd31e8dff70066ca2aeb4e1 Mon Sep 17 00:00:00 2001 From: Haakon Sporsheim Date: Thu, 9 Mar 2017 14:25:24 +0100 Subject: compiler: Add compute_int functionality. Fixes #435 --- mesonbuild/interpreter.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'mesonbuild/interpreter.py') diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py index 07b5c40..dca7934 100644 --- a/mesonbuild/interpreter.py +++ b/mesonbuild/interpreter.py @@ -631,6 +631,7 @@ class CompilerHolder(InterpreterObject): self.methods.update({'compiles': self.compiles_method, 'links': self.links_method, 'get_id': self.get_id_method, + 'compute_int': self.compute_int_method, 'sizeof': self.sizeof_method, 'has_header': self.has_header_method, 'has_header_symbol': self.has_header_symbol_method, @@ -822,6 +823,20 @@ class CompilerHolder(InterpreterObject): mlog.log('Checking for type "', mlog.bold(typename), '": ', hadtxt, sep='') return had + def compute_int_method(self, args, kwargs): + if len(args) != 1: + raise InterpreterException('Compute_int takes exactly one argument.') + check_stringlist(args) + fragment = args[0] + prefix = kwargs.get('prefix', '') + if not isinstance(prefix, str): + raise InterpreterException('Prefix argument of compute_int must be a string.') + extra_args = self.determine_args(kwargs) + deps = self.determine_dependencies(kwargs) + res = self.compiler.compute_int(fragment, prefix, self.environment, extra_args, deps) + mlog.log('Computing int of "%s": %d' % (fragment, res)) + return res + def sizeof_method(self, args, kwargs): if len(args) != 1: raise InterpreterException('Sizeof takes exactly one argument.') -- cgit v1.1 From 1e2c914b3c508e1749890be85867e1f51336ece1 Mon Sep 17 00:00:00 2001 From: Haakon Sporsheim Date: Fri, 10 Mar 2017 11:40:48 +0100 Subject: compiler: Fix compute_int and sizeof for cross compilation. sizeof now uses compute_int which again binary searches for correct value. --- mesonbuild/interpreter.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'mesonbuild/interpreter.py') diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py index dca7934..bd818bb 100644 --- a/mesonbuild/interpreter.py +++ b/mesonbuild/interpreter.py @@ -827,14 +827,23 @@ class CompilerHolder(InterpreterObject): if len(args) != 1: raise InterpreterException('Compute_int takes exactly one argument.') check_stringlist(args) - fragment = args[0] + expression = args[0] prefix = kwargs.get('prefix', '') + l = kwargs.get('low', -1024) + h = kwargs.get('high', 1024) + guess = kwargs.get('guess', None) if not isinstance(prefix, str): raise InterpreterException('Prefix argument of compute_int must be a string.') + if not isinstance(l, int): + raise InterpreterException('Low argument of compute_int must be an int.') + if not isinstance(h, int): + raise InterpreterException('High argument of compute_int must be an int.') + if guess is not None and not isinstance(guess, int): + raise InterpreterException('Guess argument of compute_int must be an int.') extra_args = self.determine_args(kwargs) deps = self.determine_dependencies(kwargs) - res = self.compiler.compute_int(fragment, prefix, self.environment, extra_args, deps) - mlog.log('Computing int of "%s": %d' % (fragment, res)) + res = self.compiler.compute_int(expression, l, h, guess, prefix, self.environment, extra_args, deps) + mlog.log('Computing int of "%s": %d' % (expression, res)) return res def sizeof_method(self, args, kwargs): -- cgit v1.1 From c9fe3a3ad4f58e2a263f8fc30c21bc009c109480 Mon Sep 17 00:00:00 2001 From: Haakon Sporsheim Date: Fri, 10 Mar 2017 11:55:05 +0100 Subject: compiler: Ensure prefix and dependencies are used for alignment. This is now similar to how prefix and dependencies are used in all the other similar checks performed by the compiler. --- mesonbuild/interpreter.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'mesonbuild/interpreter.py') diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py index bd818bb..9e8b136 100644 --- a/mesonbuild/interpreter.py +++ b/mesonbuild/interpreter.py @@ -700,8 +700,12 @@ class CompilerHolder(InterpreterObject): raise InterpreterException('Alignment method takes exactly one positional argument.') check_stringlist(args) typename = args[0] + prefix = kwargs.get('prefix', '') + if not isinstance(prefix, str): + raise InterpreterException('Prefix argument of sizeof must be a string.') extra_args = mesonlib.stringlistify(kwargs.get('args', [])) - result = self.compiler.alignment(typename, self.environment, extra_args) + deps = self.determine_dependencies(kwargs) + result = self.compiler.alignment(typename, prefix, self.environment, extra_args, deps) mlog.log('Checking for alignment of "', mlog.bold(typename), '": ', result, sep='') return result -- cgit v1.1