aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Mensinger <daniel@mensinger-ka.de>2020-01-08 17:10:24 +0100
committerDaniel Mensinger <daniel@mensinger-ka.de>2020-01-26 18:23:41 +0100
commitacc6dbfab7ed58e8c20cd61252d4d111bd9ca642 (patch)
tree6f536d5b9eb2edd6bf649de0dfea67be7d543314
parent3607f50d7f5bfa33806a4ed48d4fb773f35ee537 (diff)
downloadmeson-acc6dbfab7ed58e8c20cd61252d4d111bd9ca642.zip
meson-acc6dbfab7ed58e8c20cd61252d4d111bd9ca642.tar.gz
meson-acc6dbfab7ed58e8c20cd61252d4d111bd9ca642.tar.bz2
cmake: Add support for --trace-redirect
-rw-r--r--mesonbuild/cmake/interpreter.py2
-rw-r--r--mesonbuild/cmake/traceparser.py13
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')