diff options
| -rw-r--r-- | mesonbuild/compilers/compilers.py | 2 | ||||
| -rw-r--r-- | mesonbuild/compilers/fortran.py | 25 | ||||
| -rw-r--r-- | mesonbuild/compilers/mixins/clike.py | 35 | ||||
| -rw-r--r-- | mesonbuild/dependencies/ui.py | 1 | ||||
| -rw-r--r-- | mesonbuild/interpreter/compiler.py | 3 |
5 files changed, 31 insertions, 35 deletions
diff --git a/mesonbuild/compilers/compilers.py b/mesonbuild/compilers/compilers.py index ad793ffaf..4e807b0db 100644 --- a/mesonbuild/compilers/compilers.py +++ b/mesonbuild/compilers/compilers.py @@ -554,7 +554,7 @@ class Compiler(HoldableObject, metaclass=abc.ABCMeta): raise EnvironmentException('%s does not support get_define ' % self.get_id()) def compute_int(self, expression: str, low: T.Optional[int], high: T.Optional[int], - guess: T.Optional[int], prefix: str, env: 'Environment', *, + guess: T.Optional[int], prefix: str, *, extra_args: T.Union[None, T.List[str], T.Callable[[CompileCheckMode], T.List[str]]], dependencies: T.Optional[T.List['Dependency']]) -> int: raise EnvironmentException('%s does not support compute_int ' % self.get_id()) diff --git a/mesonbuild/compilers/fortran.py b/mesonbuild/compilers/fortran.py index 6b5b30176..af76c78a7 100644 --- a/mesonbuild/compilers/fortran.py +++ b/mesonbuild/compilers/fortran.py @@ -124,7 +124,7 @@ class FortranCompiler(CLikeCompiler, Compiler): return opts - def _compile_int(self, expression: str, prefix: str, env: 'Environment', + def _compile_int(self, expression: str, prefix: str, extra_args: T.Union[None, T.List[str], T.Callable[[CompileCheckMode], T.List[str]]], dependencies: T.Optional[T.List['Dependency']]) -> bool: # Use a trick for emulating a static assert @@ -133,11 +133,10 @@ class FortranCompiler(CLikeCompiler, Compiler): {prefix} real(merge(kind(1.),-1,({expression}))), parameter :: fail = 1. end program test''' - return self.compiles(t, extra_args=extra_args, - dependencies=dependencies)[0] + return self.compiles(t, extra_args=extra_args, dependencies=dependencies)[0] def cross_compute_int(self, expression: str, low: T.Optional[int], high: T.Optional[int], - guess: T.Optional[int], prefix: str, env: 'Environment', + guess: T.Optional[int], prefix: str, extra_args: T.Union[None, T.List[str], T.Callable[[CompileCheckMode], T.List[str]]] = None, dependencies: T.Optional[T.List['Dependency']] = None) -> int: # This only difference between this implementation and that of CLikeCompiler @@ -145,16 +144,16 @@ class FortranCompiler(CLikeCompiler, Compiler): # Try user's guess first if isinstance(guess, int): - if self._compile_int(f'{expression} == {guess}', prefix, env, extra_args, dependencies): + if self._compile_int(f'{expression} == {guess}', prefix, extra_args, dependencies): return guess # If no bounds are given, compute them in the limit of int32 maxint = 0x7fffffff minint = -0x80000000 if not isinstance(low, int) or not isinstance(high, int): - if self._compile_int(f'{expression} >= 0', prefix, env, extra_args, dependencies): + if self._compile_int(f'{expression} >= 0', prefix, extra_args, dependencies): low = cur = 0 - while self._compile_int(f'{expression} > {cur}', prefix, env, extra_args, dependencies): + while self._compile_int(f'{expression} > {cur}', prefix, extra_args, dependencies): low = cur + 1 if low > maxint: raise mesonlib.EnvironmentException('Cross-compile check overflowed') @@ -162,7 +161,7 @@ class FortranCompiler(CLikeCompiler, Compiler): high = cur else: high = cur = -1 - while self._compile_int(f'{expression} < {cur}', prefix, env, extra_args, dependencies): + while self._compile_int(f'{expression} < {cur}', prefix, extra_args, dependencies): high = cur - 1 if high < minint: raise mesonlib.EnvironmentException('Cross-compile check overflowed') @@ -173,13 +172,13 @@ class FortranCompiler(CLikeCompiler, Compiler): if high < low: raise mesonlib.EnvironmentException('high limit smaller than low limit') condition = f'{expression} <= {high} .and. {expression} >= {low}' - if not self._compile_int(condition, prefix, env, extra_args, dependencies): + if not self._compile_int(condition, prefix, extra_args, dependencies): raise mesonlib.EnvironmentException('Value out of given range') # Binary search while low != high: cur = low + int((high - low) / 2) - if self._compile_int(f'{expression} <= {cur}', prefix, env, extra_args, dependencies): + if self._compile_int(f'{expression} <= {cur}', prefix, extra_args, dependencies): high = cur else: low = cur + 1 @@ -187,13 +186,13 @@ class FortranCompiler(CLikeCompiler, Compiler): return low def compute_int(self, expression: str, low: T.Optional[int], high: T.Optional[int], - guess: T.Optional[int], prefix: str, env: 'Environment', *, + guess: T.Optional[int], prefix: str, *, extra_args: T.Union[None, T.List[str], T.Callable[[CompileCheckMode], T.List[str]]], dependencies: T.Optional[T.List['Dependency']] = None) -> int: if extra_args is None: extra_args = [] if self.is_cross: - return self.cross_compute_int(expression, low, high, guess, prefix, env, extra_args, dependencies) + return self.cross_compute_int(expression, low, high, guess, prefix, extra_args, dependencies) t = f'''program test {prefix} print '(i0)', {expression} @@ -220,7 +219,7 @@ class FortranCompiler(CLikeCompiler, Compiler): if not self.compiles(t, extra_args=extra_args, dependencies=dependencies)[0]: return -1 - return self.cross_compute_int('c_sizeof(x)', None, None, None, prefix + '\nuse iso_c_binding\n' + typename + ' :: x', self.environment, extra_args, dependencies) + return self.cross_compute_int('c_sizeof(x)', None, None, None, prefix + '\nuse iso_c_binding\n' + typename + ' :: x', extra_args, dependencies) def sizeof(self, typename: str, prefix: str, *, extra_args: T.Union[None, T.List[str], T.Callable[[CompileCheckMode], T.List[str]]] = None, diff --git a/mesonbuild/compilers/mixins/clike.py b/mesonbuild/compilers/mixins/clike.py index ea69f50c3..0d7578bdd 100644 --- a/mesonbuild/compilers/mixins/clike.py +++ b/mesonbuild/compilers/mixins/clike.py @@ -441,35 +441,34 @@ class CLikeCompiler(Compiler): args = cargs + extra_args + largs return args - def _compile_int(self, expression: str, prefix: str, env: 'Environment', + def _compile_int(self, expression: str, prefix: str, extra_args: T.Union[None, T.List[str], T.Callable[[CompileCheckMode], T.List[str]]], dependencies: T.Optional[T.List['Dependency']]) -> bool: t = f'''{prefix} #include <stddef.h> int main(void) {{ static int a[1-2*!({expression})]; a[0]=0; return 0; }}''' - return self.compiles(t, extra_args=extra_args, - dependencies=dependencies)[0] + return self.compiles(t, extra_args=extra_args, dependencies=dependencies)[0] def cross_compute_int(self, expression: str, low: T.Optional[int], high: T.Optional[int], - guess: T.Optional[int], prefix: str, env: 'Environment', + guess: T.Optional[int], prefix: str, extra_args: T.Union[None, T.List[str], T.Callable[[CompileCheckMode], T.List[str]]] = None, dependencies: T.Optional[T.List['Dependency']] = None) -> int: # Try user's guess first if isinstance(guess, int): - if self._compile_int(f'{expression} == {guess}', prefix, env, extra_args, dependencies): + if self._compile_int(f'{expression} == {guess}', prefix, extra_args, dependencies): return guess # Try to expand the expression and evaluate it on the build machines compiler - if self.language in env.coredata.compilers.build: + if self.language in self.environment.coredata.compilers.build: try: - expanded, _ = self.get_define(expression, prefix, env, extra_args, dependencies, False) + expanded, _ = self.get_define(expression, prefix, self.environment, extra_args, dependencies, False) evaluate_expanded = f''' #include <stdio.h> #include <stdint.h> int main(void) {{ int expression = {expanded}; printf("%d", expression); return 0; }}''' - run = env.coredata.compilers.build[self.language].run(evaluate_expanded) + run = self.environment.coredata.compilers.build[self.language].run(evaluate_expanded) if run and run.compiled and run.returncode == 0: - if self._compile_int(f'{expression} == {run.stdout}', prefix, env, extra_args, dependencies): + if self._compile_int(f'{expression} == {run.stdout}', prefix, extra_args, dependencies): return int(run.stdout) except mesonlib.EnvironmentException: pass @@ -478,9 +477,9 @@ class CLikeCompiler(Compiler): maxint = 0x7fffffff minint = -0x80000000 if not isinstance(low, int) or not isinstance(high, int): - if self._compile_int(f'{expression} >= 0', prefix, env, extra_args, dependencies): + if self._compile_int(f'{expression} >= 0', prefix, extra_args, dependencies): low = cur = 0 - while self._compile_int(f'{expression} > {cur}', prefix, env, extra_args, dependencies): + while self._compile_int(f'{expression} > {cur}', prefix, extra_args, dependencies): low = cur + 1 if low > maxint: raise mesonlib.EnvironmentException('Cross-compile check overflowed') @@ -488,7 +487,7 @@ class CLikeCompiler(Compiler): high = cur else: high = cur = -1 - while self._compile_int(f'{expression} < {cur}', prefix, env, extra_args, dependencies): + while self._compile_int(f'{expression} < {cur}', prefix, extra_args, dependencies): high = cur - 1 if high < minint: raise mesonlib.EnvironmentException('Cross-compile check overflowed') @@ -499,13 +498,13 @@ class CLikeCompiler(Compiler): if high < low: raise mesonlib.EnvironmentException('high limit smaller than low limit') condition = f'{expression} <= {high} && {expression} >= {low}' - if not self._compile_int(condition, prefix, env, extra_args, dependencies): + if not self._compile_int(condition, prefix, extra_args, dependencies): raise mesonlib.EnvironmentException('Value out of given range') # Binary search while low != high: cur = low + int((high - low) / 2) - if self._compile_int(f'{expression} <= {cur}', prefix, env, extra_args, dependencies): + if self._compile_int(f'{expression} <= {cur}', prefix, extra_args, dependencies): high = cur else: low = cur + 1 @@ -513,13 +512,13 @@ class CLikeCompiler(Compiler): return low def compute_int(self, expression: str, low: T.Optional[int], high: T.Optional[int], - guess: T.Optional[int], prefix: str, env: 'Environment', *, + guess: T.Optional[int], prefix: str, *, extra_args: T.Union[None, T.List[str], T.Callable[[CompileCheckMode], T.List[str]]], dependencies: T.Optional[T.List['Dependency']] = None) -> int: if extra_args is None: extra_args = [] if self.is_cross: - return self.cross_compute_int(expression, low, high, guess, prefix, env, extra_args, dependencies) + return self.cross_compute_int(expression, low, high, guess, prefix, extra_args, dependencies) t = f'''{prefix} #include<stddef.h> #include<stdio.h> @@ -549,7 +548,7 @@ class CLikeCompiler(Compiler): if not self.compiles(t, extra_args=extra_args, dependencies=dependencies)[0]: return -1 - return self.cross_compute_int(f'sizeof({typename})', None, None, None, prefix, self.environment, extra_args, dependencies) + return self.cross_compute_int(f'sizeof({typename})', None, None, None, prefix, extra_args, dependencies) def sizeof(self, typename: str, prefix: str, *, extra_args: T.Union[None, T.List[str], T.Callable[[CompileCheckMode], T.List[str]]] = None, @@ -595,7 +594,7 @@ class CLikeCompiler(Compiler): char c; {typename} target; }};''' - return self.cross_compute_int('offsetof(struct tmp, target)', None, None, None, t, self.environment, extra_args, dependencies) + return self.cross_compute_int('offsetof(struct tmp, target)', None, None, None, t, extra_args, dependencies) def alignment(self, typename: str, prefix: str, *, extra_args: T.Optional[T.List[str]] = None, diff --git a/mesonbuild/dependencies/ui.py b/mesonbuild/dependencies/ui.py index 5e5434d69..f000b58dd 100644 --- a/mesonbuild/dependencies/ui.py +++ b/mesonbuild/dependencies/ui.py @@ -229,7 +229,6 @@ class VulkanDependencySystem(SystemDependency): components = [str(self.clib_compiler.compute_int(f'VK_VERSION_{c}(VK_HEADER_VERSION_COMPLETE)', low=0, high=None, guess=e, prefix='#include <vulkan/vulkan.h>', - env=environment, extra_args=self.compile_args, dependencies=None)) # list containing vulkan version components and their expected value diff --git a/mesonbuild/interpreter/compiler.py b/mesonbuild/interpreter/compiler.py index e22b02a94..ad53ab581 100644 --- a/mesonbuild/interpreter/compiler.py +++ b/mesonbuild/interpreter/compiler.py @@ -434,8 +434,7 @@ class CompilerHolder(ObjectHolder['Compiler']): deps, msg = self._determine_dependencies(kwargs['dependencies'], compile_only=self.compiler.is_cross) res = self.compiler.compute_int(expression, kwargs['low'], kwargs['high'], kwargs['guess'], kwargs['prefix'], - self.environment, extra_args=extra_args, - dependencies=deps) + extra_args=extra_args, dependencies=deps) mlog.log('Computing int of', mlog.bold(expression, True), msg, res) return res |
