mirror of
https://github.com/Kitware/CMake.git
synced 2025-10-14 02:08:27 +08:00

The file API code used unsigned long to hold the major version in most places, but not all. Some places used unsigned int, and an important one of those is the cmFileApi::BuildVersion() function. As a result, it has never been safe for a large value not representable by an unsigned int to be used in these variables. Convert all of the file API version number variables and function arguments to use unsigned int consistently. This avoids any size mismatch warnings when passing values around. They also don't need to be unsigned long, as we never expect version numbers to be anything even close to what an unsigned int cannot represent.
77 lines
2.1 KiB
C++
77 lines
2.1 KiB
C++
/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
|
file LICENSE.rst or https://cmake.org/licensing for details. */
|
|
#pragma once
|
|
|
|
#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);
|
|
};
|