1
0
mirror of https://github.com/Kitware/CMake.git synced 2025-06-13 00:56:08 +08:00
CMake/Source/cmFileAPIConfigureLog.cxx
Brad King a78cba5197 message: Add CONFIGURE_LOG mode to record a message in the configure log
Provide a replacement for `file(APPEND .../CMake{Output,Error}.log)`
that records messages in the configure log.

Issue: #23200
2023-01-18 11:37:11 -05:00

69 lines
1.8 KiB
C++

/* 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("message-v1"); // WriteMessageEvent
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();
}