Files
CMake/Source/cmFileAPIConfigureLog.cxx
Ben Boeckel a3f273b657 cmFindBase: Create find-v1 configure log events
Record `find_` command events in the configure log, except
`find_package` as it is far more complicated (and will have its own
event kind).

Note that testing only generates the events of interest, there is no
verification. Also note that testing that the "found" to "notfound"
transition causes an event is not testable because a truthy value in the
variable skips any kind of verification or other logic beyond
normalization.

Co-Authored-by: Ryan Krattiger <ryan.krattiger@kitware.com>
See: #24833
2025-04-28 13:55:36 +02:00

70 lines
1.9 KiB
C++

/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
file LICENSE.rst 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
eventKindNames.append("find-v1"); // WriteFindBaseEvent
}
return eventKindNames;
}
}
Json::Value cmFileAPIConfigureLogDump(cmFileAPI& fileAPI,
unsigned long version)
{
ConfigureLog configureLog(fileAPI, version);
return configureLog.Dump();
}