mirror of
https://github.com/Kitware/CMake.git
synced 2026-04-24 23:28:32 -05:00
6c40e0b25e
In order to support multiple log versions without buffering the entire log, move versioning to the level of individual events. Multiple versions of an event may then be logged consecutively. Issue: #23200
69 lines
1.8 KiB
C++
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. */
|
|
#pragma once
|
|
|
|
#include <memory>
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
#include <cm/string_view>
|
|
|
|
#include "cmsys/FStream.hxx"
|
|
|
|
namespace Json {
|
|
class StreamWriter;
|
|
}
|
|
|
|
class cmMakefile;
|
|
|
|
class cmConfigureLog
|
|
{
|
|
public:
|
|
/** Construct with the log directory and a sorted list of enabled log
|
|
versions. The latest log version will be enabled regardless. */
|
|
cmConfigureLog(std::string logDir, std::vector<unsigned long> logVersions);
|
|
~cmConfigureLog();
|
|
|
|
/** Return true if at least one of the log versions in the given sorted
|
|
list is enabled. */
|
|
bool IsAnyLogVersionEnabled(std::vector<unsigned long> const& v) const;
|
|
|
|
void WriteBacktrace(cmMakefile const& mf);
|
|
|
|
void EnsureInit();
|
|
|
|
void BeginEvent(std::string const& kind);
|
|
void EndEvent();
|
|
|
|
void BeginObject(cm::string_view key);
|
|
void EndObject();
|
|
|
|
// TODO other value types
|
|
void WriteValue(cm::string_view key, std::nullptr_t);
|
|
void WriteValue(cm::string_view key, bool value);
|
|
void WriteValue(cm::string_view key, int value);
|
|
void WriteValue(cm::string_view key, std::string const& value);
|
|
void WriteValue(cm::string_view key, std::vector<std::string> const& list);
|
|
|
|
void WriteTextBlock(cm::string_view key, cm::string_view text);
|
|
void WriteLiteralTextBlock(cm::string_view key, cm::string_view text);
|
|
|
|
void WriteLiteralTextBlock(cm::string_view key, std::string const& text)
|
|
{
|
|
this->WriteLiteralTextBlock(key, cm::string_view{ text });
|
|
}
|
|
|
|
private:
|
|
std::string LogDir;
|
|
std::vector<unsigned long> LogVersions;
|
|
cmsys::ofstream Stream;
|
|
unsigned Indent = 0;
|
|
bool Opened = false;
|
|
|
|
std::unique_ptr<Json::StreamWriter> Encoder;
|
|
|
|
cmsys::ofstream& BeginLine();
|
|
void EndLine();
|
|
void WriteEscape(unsigned char c);
|
|
};
|