diff options
author | Braulio Valdivielso Martinez <bvaldivielso@bloomberg.net> | 2022-02-04 12:19:32 -0500 |
---|---|---|
committer | Braulio Valdivielso Martinez <bvaldivielso@bloomberg.net> | 2022-02-07 16:03:22 -0500 |
commit | a41d6e4d7a264954bebd6c1c45475647da60e14c (patch) | |
tree | c080acd8e9a85ae4b43387ae2ec9f380bf6af382 /Source/cmMakefile.cxx | |
parent | ca4bb89f276e244b5b56d1988cd659d30df1ca5a (diff) | |
download | cmake-a41d6e4d7a264954bebd6c1c45475647da60e14c.tar.gz |
Trace: add global_frame field to json-v1 format
Tools using the json-v1 format might want to trace stack frames across
different `CMakeLists.txt` files, in order to, for example, provide
stacktraces that span from the top-level `CMakeLists.txt` in a
project. One would think that `frame` lets you do that, but it
doesn't, because it tells you the depth of the stack within the
current `CMakeLists.txt`, so it gets reset across calls to
`add_subdirectory`.
The solution involves adding a field with a "global frame". This value
gets incremented on calls to `add_subdirectory`, which makes it easier
for tools to reconstruct "global stacktraces".
I considered changing the current "frame" value, but I didn't because
it would be a breaking change. I cannot think of any use-case where
"frame" is more useful to "global-frame", but maybe I'm missing
something.
Diffstat (limited to 'Source/cmMakefile.cxx')
-rw-r--r-- | Source/cmMakefile.cxx | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx index 4b1635b6ae..34d3efa2d8 100644 --- a/Source/cmMakefile.cxx +++ b/Source/cmMakefile.cxx @@ -302,6 +302,8 @@ void cmMakefile::PrintCommandTrace( val["time"] = cmSystemTools::GetTime(); val["frame"] = static_cast<Json::Value::UInt64>(this->ExecutionStatusStack.size()); + val["global_frame"] = + static_cast<Json::Value::UInt64>(this->RecursionDepth); msg << Json::writeString(builder, val); #endif break; |