summaryrefslogtreecommitdiffstats
path: root/Source/cmFileAPIConfigureLog.cxx
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2022-12-12 22:59:41 (GMT)
committerBrad King <brad.king@kitware.com>2022-12-17 13:52:04 (GMT)
commitd811d86fd7f9644876e9d3605937edffa5c8a9d8 (patch)
tree7359c796a0ec5bf273eedd924a2753980176cc8d /Source/cmFileAPIConfigureLog.cxx
parent02599da236fd22db0dcfb6503194e5bad086aea9 (diff)
downloadCMake-d811d86fd7f9644876e9d3605937edffa5c8a9d8.zip
CMake-d811d86fd7f9644876e9d3605937edffa5c8a9d8.tar.gz
CMake-d811d86fd7f9644876e9d3605937edffa5c8a9d8.tar.bz2
FileAPI: Add "configureLog" object kind
Provide clients with a way to get a known set of configure log event versions. Issue: #23200
Diffstat (limited to 'Source/cmFileAPIConfigureLog.cxx')
-rw-r--r--Source/cmFileAPIConfigureLog.cxx67
1 files changed, 67 insertions, 0 deletions
diff --git a/Source/cmFileAPIConfigureLog.cxx b/Source/cmFileAPIConfigureLog.cxx
new file mode 100644
index 0000000..50189cb
--- /dev/null
+++ b/Source/cmFileAPIConfigureLog.cxx
@@ -0,0 +1,67 @@
+/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
+ file Copyright.txt or https://cmake.org/licensing for details. */
+#include "cmFileAPIConfigureLog.h"
+
+#include <cm3p/json/value.h>
+
+#include "cmFileAPI.h"
+#include "cmStringAlgorithms.h"
+#include "cmake.h"
+
+namespace {
+
+class ConfigureLog
+{
+ cmFileAPI& FileAPI;
+ unsigned long Version;
+
+ Json::Value DumpPath();
+ Json::Value DumpEventKindNames();
+
+public:
+ ConfigureLog(cmFileAPI& fileAPI, unsigned long version);
+ Json::Value Dump();
+};
+
+ConfigureLog::ConfigureLog(cmFileAPI& fileAPI, unsigned long version)
+ : FileAPI(fileAPI)
+ , Version(version)
+{
+ static_cast<void>(this->Version);
+}
+
+Json::Value ConfigureLog::Dump()
+{
+ Json::Value configureLog = Json::objectValue;
+ configureLog["path"] = this->DumpPath();
+ configureLog["eventKindNames"] = this->DumpEventKindNames();
+ return configureLog;
+}
+
+Json::Value ConfigureLog::DumpPath()
+{
+ return cmStrCat(this->FileAPI.GetCMakeInstance()->GetHomeOutputDirectory(),
+ "/CMakeFiles/CMakeConfigureLog.yaml");
+}
+
+Json::Value ConfigureLog::DumpEventKindNames()
+{
+ // Report at most one version of each event kind.
+ // If a new event kind is added, increment ConfigureLogV1Minor.
+ // If a new version of an existing event kind is added, a new
+ // major version of the configureLog object kind is needed.
+ Json::Value eventKindNames = Json::arrayValue;
+ if (this->Version == 1) {
+ eventKindNames.append("try_compile-v1"); // WriteTryCompileEvent
+ eventKindNames.append("try_run-v1"); // WriteTryRunEvent
+ }
+ return eventKindNames;
+}
+}
+
+Json::Value cmFileAPIConfigureLogDump(cmFileAPI& fileAPI,
+ unsigned long version)
+{
+ ConfigureLog configureLog(fileAPI, version);
+ return configureLog.Dump();
+}