diff options
Diffstat (limited to 'Source/cmQtAutoGenerator.h')
-rw-r--r-- | Source/cmQtAutoGenerator.h | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/Source/cmQtAutoGenerator.h b/Source/cmQtAutoGenerator.h new file mode 100644 index 000000000..ff4c4c942 --- /dev/null +++ b/Source/cmQtAutoGenerator.h @@ -0,0 +1,109 @@ +/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying + file Copyright.txt or https://cmake.org/licensing for details. */ +#ifndef cmQtAutoGenerator_h +#define cmQtAutoGenerator_h + +#include "cmConfigure.h" // IWYU pragma: keep + +#include "cmFileTime.h" +#include "cmQtAutoGen.h" + +#include <mutex> +#include <string> +#include <vector> + +class cmMakefile; + +/** \class cmQtAutoGenerator + * \brief Base class for QtAutoGen generators + */ +class cmQtAutoGenerator : public cmQtAutoGen +{ +public: + // -- Types + + /** + * Thread safe logger + */ + class Logger + { + public: + // -- Construction + Logger(); + ~Logger(); + // -- Verbosity + unsigned int Verbosity() const { return this->Verbosity_; } + void SetVerbosity(unsigned int value) { this->Verbosity_ = value; } + void RaiseVerbosity(std::string const& value); + bool Verbose() const { return (this->Verbosity_ != 0); } + void SetVerbose(bool value) { this->Verbosity_ = value ? 1 : 0; } + // -- Color output + bool ColorOutput() const { return this->ColorOutput_; } + void SetColorOutput(bool value); + // -- Log info + void Info(GenT genType, std::string const& message) const; + // -- Log warning + void Warning(GenT genType, std::string const& message) const; + void WarningFile(GenT genType, std::string const& filename, + std::string const& message) const; + // -- Log error + void Error(GenT genType, std::string const& message) const; + void ErrorFile(GenT genType, std::string const& filename, + std::string const& message) const; + void ErrorCommand(GenT genType, std::string const& message, + std::vector<std::string> const& command, + std::string const& output) const; + + private: + static std::string HeadLine(std::string const& title); + + private: + mutable std::mutex Mutex_; + unsigned int Verbosity_ = 0; + bool ColorOutput_ = false; + }; + + // -- File system methods + static bool MakeParentDirectory(std::string const& filename); + static bool FileRead(std::string& content, std::string const& filename, + std::string* error = nullptr); + static bool FileWrite(std::string const& filename, + std::string const& content, + std::string* error = nullptr); + static bool FileDiffers(std::string const& filename, + std::string const& content); + +public: + // -- Constructors + cmQtAutoGenerator(); + virtual ~cmQtAutoGenerator(); + + cmQtAutoGenerator(cmQtAutoGenerator const&) = delete; + cmQtAutoGenerator& operator=(cmQtAutoGenerator const&) = delete; + + // -- Run + bool Run(std::string const& infoFile, std::string const& config); + + // -- InfoFile + std::string const& InfoFile() const { return InfoFile_; } + cmFileTime const& InfoFileTime() const { return InfoFileTime_; } + std::string const& InfoDir() const { return InfoDir_; } + std::string const& InfoConfig() const { return InfoConfig_; } + + // -- Utility + static std::string SettingsFind(std::string const& content, const char* key); + +protected: + // -- Abstract processing interface + virtual bool Init(cmMakefile* makefile) = 0; + virtual bool Process() = 0; + +private: + // -- Info settings + std::string InfoFile_; + cmFileTime InfoFileTime_; + std::string InfoDir_; + std::string InfoConfig_; +}; + +#endif |