diff options
author | Sebastian Holtermann <sebholt@xwmw.org> | 2017-11-17 12:04:26 (GMT) |
---|---|---|
committer | Sebastian Holtermann <sebholt@xwmw.org> | 2017-11-19 11:51:30 (GMT) |
commit | 27ed3b3537676e6090a0845e4805bb4a65d05bae (patch) | |
tree | cb92880ea281a52a60039086e427bf4f3c93db99 /Source/cmQtAutoGeneratorMocUic.h | |
parent | 1cd285fe06088d6dad58a3b52c071579aa0ce8b8 (diff) | |
download | CMake-27ed3b3537676e6090a0845e4805bb4a65d05bae.zip CMake-27ed3b3537676e6090a0845e4805bb4a65d05bae.tar.gz CMake-27ed3b3537676e6090a0845e4805bb4a65d05bae.tar.bz2 |
Autogen: Rename cmQtAutoGenerators to cmQtAutoGeneratorMocUic
Diffstat (limited to 'Source/cmQtAutoGeneratorMocUic.h')
-rw-r--r-- | Source/cmQtAutoGeneratorMocUic.h | 228 |
1 files changed, 228 insertions, 0 deletions
diff --git a/Source/cmQtAutoGeneratorMocUic.h b/Source/cmQtAutoGeneratorMocUic.h new file mode 100644 index 0000000..579b4f4 --- /dev/null +++ b/Source/cmQtAutoGeneratorMocUic.h @@ -0,0 +1,228 @@ +/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying + file Copyright.txt or https://cmake.org/licensing for details. */ +#ifndef cmQtAutoGeneratorMocUic_h +#define cmQtAutoGeneratorMocUic_h + +#include "cmConfigure.h" // IWYU pragma: keep + +#include "cmFilePathChecksum.h" +#include "cmQtAutoGen.h" +#include "cmsys/RegularExpression.hxx" + +#include <map> +#include <memory> // IWYU pragma: keep +#include <set> +#include <string> +#include <vector> + +class cmMakefile; + +class cmQtAutoGeneratorMocUic +{ + CM_DISABLE_COPY(cmQtAutoGeneratorMocUic) +public: + cmQtAutoGeneratorMocUic(); + bool Run(std::string const& targetDirectory, std::string const& config); + +private: + // -- Types + + /// @brief Search key plus regular expression pair + struct KeyRegExp + { + KeyRegExp() = default; + + KeyRegExp(const char* key, const char* regExp) + : Key(key) + , RegExp(regExp) + { + } + + KeyRegExp(std::string const& key, std::string const& regExp) + : Key(key) + , RegExp(regExp) + { + } + + std::string Key; + cmsys::RegularExpression RegExp; + }; + + /// @brief Source file job + struct SourceJob + { + bool Moc = false; + bool Uic = false; + }; + + /// @brief MOC job + struct MocJobAuto + { + std::string SourceFile; + std::string BuildFileRel; + std::set<std::string> Depends; + }; + + /// @brief MOC job + struct MocJobIncluded : MocJobAuto + { + bool DependsValid = false; + std::string Includer; + std::string IncludeString; + }; + + /// @brief UIC job + struct UicJob + { + std::string SourceFile; + std::string BuildFileRel; + std::string Includer; + std::string IncludeString; + }; + + // -- Initialization + bool InitInfoFile(cmMakefile* makefile, std::string const& targetDirectory, + std::string const& config); + + // -- Settings file + void SettingsFileRead(cmMakefile* makefile); + bool SettingsFileWrite(); + bool SettingsChanged() const + { + return (this->MocSettingsChanged || this->UicSettingsChanged); + } + + // -- Central processing + bool Process(); + + // -- Source parsing + bool ParseSourceFile(std::string const& absFilename, const SourceJob& job); + bool ParseHeaderFile(std::string const& absFilename, const SourceJob& job); + bool ParsePostprocess(); + + // -- Moc + bool MocEnabled() const { return !this->MocExecutable.empty(); } + bool MocSkip(std::string const& absFilename) const; + bool MocRequired(std::string const& contentText, + std::string* macroName = nullptr); + // Moc strings + std::string MocStringMacros() const; + std::string MocStringHeaders(std::string const& fileBase) const; + std::string MocFindIncludedHeader(std::string const& sourcePath, + std::string const& includeBase) const; + bool MocFindIncludedFile(std::string& absFile, std::string const& sourceFile, + std::string const& includeString) const; + // Moc depends + bool MocDependFilterPush(std::string const& key, std::string const& regExp); + void MocFindDepends(std::string const& absFilename, + std::string const& contentText, + std::set<std::string>& depends); + // Moc + bool MocParseSourceContent(std::string const& absFilename, + std::string const& contentText); + void MocParseHeaderContent(std::string const& absFilename, + std::string const& contentText); + + bool MocGenerateAll(); + bool MocGenerateFile(const MocJobAuto& mocJob, bool* generated = nullptr); + + // -- Uic + bool UicEnabled() const { return !this->UicExecutable.empty(); } + bool UicSkip(std::string const& absFilename) const; + bool UicParseContent(std::string const& fileName, + std::string const& contentText); + bool UicFindIncludedFile(std::string& absFile, std::string const& sourceFile, + std::string const& includeString); + bool UicGenerateAll(); + bool UicGenerateFile(const UicJob& uicJob); + + // -- Log info + void LogBold(std::string const& message) const; + void LogInfo(cmQtAutoGen::Generator genType, + std::string const& message) const; + // -- Log warning + void LogWarning(cmQtAutoGen::Generator genType, + std::string const& message) const; + void LogFileWarning(cmQtAutoGen::Generator genType, + std::string const& filename, + std::string const& message) const; + // -- Log error + void LogError(cmQtAutoGen::Generator genType, + std::string const& message) const; + void LogFileError(cmQtAutoGen::Generator genType, + std::string const& filename, + std::string const& message) const; + void LogCommandError(cmQtAutoGen::Generator genType, + std::string const& message, + std::vector<std::string> const& command, + std::string const& output) const; + + // -- Utility + bool MakeParentDirectory(cmQtAutoGen::Generator genType, + std::string const& filename) const; + bool FileDiffers(std::string const& filename, std::string const& content); + bool FileWrite(cmQtAutoGen::Generator genType, std::string const& filename, + std::string const& content); + bool FindHeader(std::string& header, std::string const& testBasePath) const; + bool RunCommand(std::vector<std::string> const& command, + std::string& output) const; + + // -- Meta + std::string InfoFile; + std::string ConfigSuffix; + cmQtAutoGen::MultiConfig MultiConfig; + // -- Settings + bool IncludeProjectDirsBefore; + bool Verbose; + bool ColorOutput; + std::string SettingsFile; + std::string SettingsStringMoc; + std::string SettingsStringUic; + // -- Directories + std::string ProjectSourceDir; + std::string ProjectBinaryDir; + std::string CurrentSourceDir; + std::string CurrentBinaryDir; + std::string AutogenBuildDir; + std::string AutogenIncludeDir; + // -- Qt environment + std::string QtMajorVersion; + std::string QtMinorVersion; + std::string MocExecutable; + std::string UicExecutable; + // -- File lists + std::map<std::string, SourceJob> HeaderJobs; + std::map<std::string, SourceJob> SourceJobs; + std::vector<std::string> HeaderExtensions; + cmFilePathChecksum FilePathChecksum; + // -- Moc + bool MocSettingsChanged; + bool MocPredefsChanged; + bool MocRelaxedMode; + std::string MocCompFileRel; + std::string MocCompFileAbs; + std::string MocPredefsFileRel; + std::string MocPredefsFileAbs; + std::vector<std::string> MocSkipList; + std::vector<std::string> MocIncludePaths; + std::vector<std::string> MocIncludes; + std::vector<std::string> MocDefinitions; + std::vector<std::string> MocOptions; + std::vector<std::string> MocAllOptions; + std::vector<std::string> MocPredefsCmd; + std::vector<KeyRegExp> MocDependFilters; + std::vector<KeyRegExp> MocMacroFilters; + cmsys::RegularExpression MocRegExpInclude; + std::vector<std::unique_ptr<MocJobIncluded>> MocJobsIncluded; + std::vector<std::unique_ptr<MocJobAuto>> MocJobsAuto; + // -- Uic + bool UicSettingsChanged; + std::vector<std::string> UicSkipList; + std::vector<std::string> UicTargetOptions; + std::map<std::string, std::vector<std::string>> UicOptions; + std::vector<std::string> UicSearchPaths; + cmsys::RegularExpression UicRegExpInclude; + std::vector<std::unique_ptr<UicJob>> UicJobs; +}; + +#endif |