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