diff options
author | Haakon Sporsheim <haakon.sporsheim@gmail.com> | 2017-03-09 14:25:24 +0100 |
---|---|---|
committer | Haakon Sporsheim <haakon.sporsheim@gmail.com> | 2017-03-09 14:31:38 +0100 |
commit | 52f23f8c34bd9f6eacd31e8dff70066ca2aeb4e1 (patch) | |
tree | 102e38a99f6a934f91df8c28a125f1fc8b439e29 /mesonbuild/compilers.py | |
parent | 1713aef364560c9de922991716880e4db32f88a5 (diff) | |
download | meson-52f23f8c34bd9f6eacd31e8dff70066ca2aeb4e1.zip meson-52f23f8c34bd9f6eacd31e8dff70066ca2aeb4e1.tar.gz meson-52f23f8c34bd9f6eacd31e8dff70066ca2aeb4e1.tar.bz2 |
compiler: Add compute_int functionality.
Fixes #435
Diffstat (limited to 'mesonbuild/compilers.py')
-rw-r--r-- | mesonbuild/compilers.py | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/mesonbuild/compilers.py b/mesonbuild/compilers.py index 8c2bb92..d1a564b 100644 --- a/mesonbuild/compilers.py +++ b/mesonbuild/compilers.py @@ -1010,6 +1010,34 @@ class CCompiler(Compiler): return i raise EnvironmentException('Cross-compile check overflowed') + def cross_compute_int(self, fragment, prefix, env, extra_args=None, dependencies=None): + if extra_args is None: + extra_args = [] + fargs = {'prefix': prefix, 'fragment': fragment} + t = '''#include <stdio.h> + {prefix} + int temparray[{size}-({fragment})];''' + return self._bisect_compiles(t, fargs, env, extra_args, dependencies) + + def compute_int(self, fragment, prefix, env, extra_args=None, dependencies=None): + if extra_args is None: + extra_args = [] + fargs = {'prefix': prefix, 'fragment': fragment} + if self.is_cross: + return self.cross_compute_int(fragment, prefix, env, extra_args, dependencies) + t = '''#include<stdio.h> + {prefix} + int main(int argc, char **argv) {{ + printf("%ld\\n", (long)({fragment})); + return 0; + }};''' + res = self.run(t.format(**fargs), env, extra_args, dependencies) + if not res.compiled: + return -1 + if res.returncode != 0: + raise EnvironmentException('Could not run compute_int test binary.') + return int(res.stdout) + def cross_sizeof(self, element, prefix, env, extra_args=None, dependencies=None): if extra_args is None: extra_args = [] |