diff options
author | Daniel Mensinger <daniel@mensinger-ka.de> | 2019-02-19 21:04:23 +0100 |
---|---|---|
committer | Daniel Mensinger <daniel@mensinger-ka.de> | 2019-04-28 14:33:21 +0200 |
commit | dfe3d56bfd28eb7b960f1beb09f502f9902b45fa (patch) | |
tree | a6733c2dca9e93bef164e21193a1fa506deec84f /mesonbuild/compilers | |
parent | c9bd84fd25dd24999ac2d20b616e91efb9038905 (diff) | |
download | meson-dfe3d56bfd28eb7b960f1beb09f502f9902b45fa.zip meson-dfe3d56bfd28eb7b960f1beb09f502f9902b45fa.tar.gz meson-dfe3d56bfd28eb7b960f1beb09f502f9902b45fa.tar.bz2 |
Print '(cached)' when compiler result was cached
Diffstat (limited to 'mesonbuild/compilers')
-rw-r--r-- | mesonbuild/compilers/c.py | 31 | ||||
-rw-r--r-- | mesonbuild/compilers/compilers.py | 2 | ||||
-rw-r--r-- | mesonbuild/compilers/cpp.py | 11 |
3 files changed, 24 insertions, 20 deletions
diff --git a/mesonbuild/compilers/c.py b/mesonbuild/compilers/c.py index f0dc201..fe5a9ca 100644 --- a/mesonbuild/compilers/c.py +++ b/mesonbuild/compilers/c.py @@ -446,7 +446,7 @@ class CCompiler(Compiler): def compiles(self, code, env, *, extra_args=None, dependencies=None, mode='compile'): with self._build_wrapper(code, env, extra_args, dependencies, mode) as p: - return p.returncode == 0 + return p.returncode == 0, p.cached def _build_wrapper(self, code, env, extra_args, dependencies=None, mode='compile', want_output=False): args = self._get_compiler_check_args(env, extra_args, dependencies, mode) @@ -487,7 +487,7 @@ class CCompiler(Compiler): {prefix} int main() {{ static int a[1-2*!({expression})]; a[0]=0; return 0; }}''' return self.compiles(t.format(**fargs), env, extra_args=extra_args, - dependencies=dependencies) + dependencies=dependencies)[0] def cross_compute_int(self, expression, low, high, guess, prefix, env, extra_args, dependencies): # Try user's guess first @@ -567,7 +567,7 @@ class CCompiler(Compiler): {type} something; }}''' if not self.compiles(t.format(**fargs), env, extra_args=extra_args, - dependencies=dependencies): + dependencies=dependencies)[0]: return -1 return self.cross_compute_int('sizeof(%s)' % typename, None, None, None, prefix, env, extra_args, dependencies) @@ -602,7 +602,7 @@ class CCompiler(Compiler): {type} something; }}''' if not self.compiles(t.format(**fargs), env, extra_args=extra_args, - dependencies=dependencies): + dependencies=dependencies)[0]: return -1 t = '''#include <stddef.h> {prefix} @@ -762,7 +762,7 @@ class CCompiler(Compiler): val = env.properties.host.get(varname, None) if val is not None: if isinstance(val, bool): - return val + return val, True raise EnvironmentException('Cross variable {0} is not a boolean.'.format(varname)) fargs = {'prefix': prefix, 'func': funcname} @@ -792,13 +792,14 @@ class CCompiler(Compiler): head, main = self._no_prototype_templ() templ = head + stubs_fail + main - if self.links(templ.format(**fargs), env, extra_args=extra_args, - dependencies=dependencies): - return True + res, cached = self.links(templ.format(**fargs), env, extra_args=extra_args, + dependencies=dependencies) + if res: + return True, cached # MSVC does not have compiler __builtin_-s. if self.get_id() == 'msvc': - return False + return False, False # Detect function as a built-in # @@ -1020,7 +1021,7 @@ class CCompiler(Compiler): libname in self.internal_libs): args = ['-l' + libname] largs = self.linker_to_compiler_args(self.get_allow_undefined_link_args()) - if self.links(code, env, extra_args=(args + largs)): + if self.links(code, env, extra_args=(args + largs))[0]: return args # Don't do a manual search for internal libs if libname in self.internal_libs: @@ -1109,7 +1110,7 @@ class CCompiler(Compiler): # then we must also pass -L/usr/lib to pick up libSystem.dylib extra_args = [] if allow_system else ['-Z', '-L/usr/lib'] link_args += ['-framework', name] - if self.links(code, env, extra_args=(extra_args + link_args)): + if self.links(code, env, extra_args=(extra_args + link_args))[0]: return link_args def find_framework_impl(self, name, env, extra_dirs, allow_system): @@ -1176,7 +1177,7 @@ class CCompiler(Compiler): fatal_warnings_args = ['-Wl,--fatal-warnings'] if self.has_fatal_warnings_link_arg is None: self.has_fatal_warnings_link_arg = False - self.has_fatal_warnings_link_arg = self.has_multi_link_arguments(fatal_warnings_args, env) + self.has_fatal_warnings_link_arg = self.has_multi_link_arguments(fatal_warnings_args, env)[0] if self.has_fatal_warnings_link_arg: args = fatal_warnings_args + args @@ -1348,7 +1349,7 @@ class ElbrusCCompiler(GnuCCompiler, ElbrusCompiler): # So we should explicitly fail at this case. def has_function(self, funcname, prefix, env, *, extra_args=None, dependencies=None): if funcname == 'lchmod': - return False + return False, False else: return super().has_function(funcname, prefix, env, extra_args=extra_args, @@ -1609,8 +1610,8 @@ class VisualStudioCCompiler(CCompiler): args = args + ['-Werror=unknown-argument'] with self._build_wrapper(code, env, extra_args=args, mode=mode) as p: if p.returncode != 0: - return False - return not(warning_text in p.stde or warning_text in p.stdo) + return False, p.cached + return not(warning_text in p.stde or warning_text in p.stdo), p.cached def get_compile_debugfile_args(self, rel_obj, pch=False): pdbarr = rel_obj.split('.')[:-1] diff --git a/mesonbuild/compilers/compilers.py b/mesonbuild/compilers/compilers.py index 169a973..e8d8358 100644 --- a/mesonbuild/compilers/compilers.py +++ b/mesonbuild/compilers/compilers.py @@ -1156,6 +1156,7 @@ class Compiler: if not want_output: if cdata is not None and key in cdata.compiler_check_cache: p = cdata.compiler_check_cache[key] + p.cached = True mlog.debug('Using cached compile:') mlog.debug('Cached command line: ', ' '.join(p.commands), '\n') mlog.debug('Code:\n', code) @@ -1213,6 +1214,7 @@ class Compiler: for i in todel: delattr(p, i) cdata.compiler_check_cache[key] = p + p.cached = False yield p except (PermissionError, OSError): # On Windows antivirus programs and the like hold on to files so diff --git a/mesonbuild/compilers/cpp.py b/mesonbuild/compilers/cpp.py index 87e6ffc..3e0942d 100644 --- a/mesonbuild/compilers/cpp.py +++ b/mesonbuild/compilers/cpp.py @@ -65,10 +65,11 @@ class CPPCompiler(CCompiler): def has_header_symbol(self, hname, symbol, prefix, env, *, extra_args=None, dependencies=None): # Check if it's a C-like symbol - if super().has_header_symbol(hname, symbol, prefix, env, - extra_args=extra_args, - dependencies=dependencies): - return True + found, cached = super().has_header_symbol(hname, symbol, prefix, env, + extra_args=extra_args, + dependencies=dependencies) + if found: + return True, cached # Check if it's a class or a template if extra_args is None: extra_args = [] @@ -264,7 +265,7 @@ class ElbrusCPPCompiler(GnuCPPCompiler, ElbrusCompiler): # So we should explicitly fail at this case. def has_function(self, funcname, prefix, env, *, extra_args=None, dependencies=None): if funcname == 'lchmod': - return False + return False, False else: return super().has_function(funcname, prefix, env, extra_args=extra_args, |