/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying file Copyright.txt or https://cmake.org/licensing for details. */ #pragma once #include #include #include #include #include #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 logVersions); ~cmConfigureLog(); /** Return true if at least one of the log versions in the given sorted list is enabled. */ bool IsAnyLogVersionEnabled(std::vector const& v) const; void EnsureInit(); void BeginEvent(std::string const& kind, cmMakefile const& mf); 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 const& list); void WriteValue(cm::string_view key, std::map const& map); 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 LogVersions; cmsys::ofstream Stream; unsigned Indent = 0; bool Opened = false; std::unique_ptr Encoder; void WriteBacktrace(cmMakefile const& mf); void WriteChecks(cmMakefile const& mf); cmsys::ofstream& BeginLine(); void EndLine(); void WriteEscape(unsigned char c); };