diff options
author | Daniel Mensinger <daniel@mensinger-ka.de> | 2020-01-08 17:10:24 +0100 |
---|---|---|
committer | Daniel Mensinger <daniel@mensinger-ka.de> | 2020-01-26 18:23:41 +0100 |
commit | acc6dbfab7ed58e8c20cd61252d4d111bd9ca642 (patch) | |
tree | 6f536d5b9eb2edd6bf649de0dfea67be7d543314 | |
parent | 3607f50d7f5bfa33806a4ed48d4fb773f35ee537 (diff) | |
download | meson-acc6dbfab7ed58e8c20cd61252d4d111bd9ca642.zip meson-acc6dbfab7ed58e8c20cd61252d4d111bd9ca642.tar.gz meson-acc6dbfab7ed58e8c20cd61252d4d111bd9ca642.tar.bz2 |
cmake: Add support for --trace-redirect
-rw-r--r-- | mesonbuild/cmake/interpreter.py | 2 | ||||
-rw-r--r-- | mesonbuild/cmake/traceparser.py | 13 |
2 files changed, 14 insertions, 1 deletions
diff --git a/mesonbuild/cmake/interpreter.py b/mesonbuild/cmake/interpreter.py index 4f7700f..2aa0c01 100644 --- a/mesonbuild/cmake/interpreter.py +++ b/mesonbuild/cmake/interpreter.py @@ -796,7 +796,7 @@ class CMakeInterpreter: os_env['LC_ALL'] = 'C' final_args = cmake_args + trace_args + cmcmp_args + [self.src_dir] - cmake_exe.set_exec_mode(print_cmout=True) + cmake_exe.set_exec_mode(print_cmout=True, always_capture_stderr=self.trace.requires_stderr()) rc, _, self.raw_trace = cmake_exe.call(final_args, self.build_dir, env=os_env, disable_cache=True) mlog.log() diff --git a/mesonbuild/cmake/traceparser.py b/mesonbuild/cmake/traceparser.py index cdaeb3d..5bf9547 100644 --- a/mesonbuild/cmake/traceparser.py +++ b/mesonbuild/cmake/traceparser.py @@ -74,6 +74,8 @@ class CMakeTraceParser: self.permissive = permissive # type: bool self.cmake_version = cmake_version # type: str + self.trace_file = 'cmake_trace.txt' + self.trace_file_path = Path(build_dir) / self.trace_file self.trace_format = 'human' def trace_args(self) -> T.List[str]: @@ -82,9 +84,20 @@ class CMakeTraceParser: } base_args = ['--no-warn-unused-cli'] + if not self.requires_stderr(): + base_args += ['--trace-redirect={}'.format(self.trace_file)] + return arg_map[self.trace_format] + base_args + def requires_stderr(self) -> bool: + return version_compare(self.cmake_version, '<3.16') + def parse(self, trace: T.Optional[str] = None) -> None: + # First load the trace (if required) + if not self.requires_stderr(): + if not self.trace_file_path.exists and not self.trace_file_path.is_file(): + raise CMakeException('CMake: Trace file "{}" not found'.format(str(self.trace_file_path))) + trace = self.trace_file_path.read_text() if not trace: raise CMakeException('CMake: The CMake trace was not provided or is empty') |