diff options
author | MyungJoo Ham <myungjoo.ham@samsung.com> | 2017-10-11 15:16:57 +0900 |
---|---|---|
committer | MyungJoo Ham <myungjoo.ham@samsung.com> | 2017-10-11 15:16:57 +0900 |
commit | 915c76ded744c0f5f151402b9fa69f3fd8452573 (patch) | |
tree | ca6a387466543248890f346847acaa8343989b22 /Source/cmQtAutoGenerators.h | |
parent | 317dbdb79761ef65e45c7358cfc7571c6afa54ad (diff) | |
download | cmake-915c76ded744c0f5f151402b9fa69f3fd8452573.tar.gz cmake-915c76ded744c0f5f151402b9fa69f3fd8452573.tar.bz2 cmake-915c76ded744c0f5f151402b9fa69f3fd8452573.zip |
Imported Upstream version 3.9.4upstream/3.9.4
Diffstat (limited to 'Source/cmQtAutoGenerators.h')
-rw-r--r-- | Source/cmQtAutoGenerators.h | 222 |
1 files changed, 222 insertions, 0 deletions
diff --git a/Source/cmQtAutoGenerators.h b/Source/cmQtAutoGenerators.h new file mode 100644 index 000000000..337aa17fd --- /dev/null +++ b/Source/cmQtAutoGenerators.h @@ -0,0 +1,222 @@ +/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying + file Copyright.txt or https://cmake.org/licensing for details. */ +#ifndef cmQtAutoGenerators_h +#define cmQtAutoGenerators_h + +#include "cmConfigure.h" // IWYU pragma: keep + +#include "cmFilePathChecksum.h" +#include "cmsys/RegularExpression.hxx" + +#include <map> +#include <set> +#include <string> +#include <utility> +#include <vector> + +class cmMakefile; + +class cmQtAutoGenerators +{ +public: + cmQtAutoGenerators(); + bool Run(const std::string& targetDirectory, const std::string& config); + +private: + // -- Types + + /// @brief Used to extract additional dependencies from content text + struct MocDependFilter + { + std::string key; + cmsys::RegularExpression regExp; + }; + typedef std::pair<std::string, cmsys::RegularExpression> MocMacroFilter; + + // -- Configuration + bool MocDependFilterPush(const std::string& key, const std::string& regExp); + bool ReadAutogenInfoFile(cmMakefile* makefile, + const std::string& targetDirectory, + const std::string& config); + + bool MocEnabled() const { return !this->MocExecutable.empty(); } + bool UicEnabled() const { return !this->UicExecutable.empty(); } + bool RccEnabled() const { return !this->RccExecutable.empty(); } + + // -- Settings file + void SettingsFileRead(cmMakefile* makefile); + bool SettingsFileWrite(); + + bool AnySettingsChanged() const + { + return (this->MocSettingsChanged || this->RccSettingsChanged || + this->UicSettingsChanged); + } + + // -- Init and run + void Init(cmMakefile* makefile); + bool RunAutogen(); + + // -- Content analysis + bool MocRequired(const std::string& contentText, + std::string* macroName = CM_NULLPTR); + void MocFindDepends( + const std::string& absFilename, const std::string& contentText, + std::map<std::string, std::set<std::string> >& mocDepends); + + bool MocSkip(const std::string& absFilename) const; + bool UicSkip(const std::string& absFilename) const; + + bool ParseSourceFile( + const std::string& absFilename, + std::map<std::string, std::string>& mocsIncluded, + std::map<std::string, std::set<std::string> >& mocDepends, + std::map<std::string, std::vector<std::string> >& includedUis, + bool relaxed); + + void SearchHeadersForSourceFile(const std::string& absFilename, + std::set<std::string>& mocHeaderFiles, + std::set<std::string>& uicHeaderFiles) const; + + bool ParseHeaders( + const std::set<std::string>& mocHeaderFiles, + const std::set<std::string>& uicHeaderFiles, + const std::map<std::string, std::string>& mocsIncluded, + std::map<std::string, std::string>& mocsNotIncluded, + std::map<std::string, std::set<std::string> >& mocDepends, + std::map<std::string, std::vector<std::string> >& includedUis); + + void UicParseContent( + const std::string& fileName, const std::string& contentText, + std::map<std::string, std::vector<std::string> >& includedUis); + + bool MocParseSourceContent( + const std::string& absFilename, const std::string& contentText, + std::map<std::string, std::string>& mocsIncluded, + std::map<std::string, std::set<std::string> >& mocDepends, bool relaxed); + + void MocParseHeaderContent( + const std::string& absFilename, const std::string& contentText, + std::map<std::string, std::string>& mocsNotIncluded, + std::map<std::string, std::set<std::string> >& mocDepends); + + // -- Moc file generation + bool MocGenerateAll( + const std::map<std::string, std::string>& mocsIncluded, + const std::map<std::string, std::string>& mocsNotIncluded, + const std::map<std::string, std::set<std::string> >& mocDepends); + bool MocGenerateFile( + const std::string& sourceFile, const std::string& mocFileName, + const std::map<std::string, std::set<std::string> >& mocDepends, + bool included); + + // -- Uic file generation + bool UicFindIncludedFile(std::string& absFile, const std::string& sourceFile, + const std::string& searchPath, + const std::string& searchFile); + bool UicGenerateAll( + const std::map<std::string, std::vector<std::string> >& includedUis); + bool UicGenerateFile(const std::string& realName, + const std::string& uiInputFile, + const std::string& uiOutputFile); + + // -- Rcc file generation + bool RccGenerateAll(); + bool RccGenerateFile(const std::string& qrcInputFile, + const std::string& qrcOutputFile, bool unique_n); + + // -- Logging + void LogErrorNameCollision( + const std::string& message, + const std::multimap<std::string, std::string>& collisions) const; + void LogBold(const std::string& message) const; + void LogInfo(const std::string& message) const; + void LogWarning(const std::string& message) const; + void LogError(const std::string& message) const; + void LogCommand(const std::vector<std::string>& command) const; + + // -- Utility + bool NameCollisionTest( + const std::map<std::string, std::string>& genFiles, + std::multimap<std::string, std::string>& collisions) const; + std::string ChecksumedPath(const std::string& sourceFile, + const std::string& basePrefix, + const std::string& baseSuffix) const; + bool MakeParentDirectory(const char* logPrefix, + const std::string& filename) const; + bool FileDiffers(const std::string& filename, const std::string& content); + bool FileWrite(const char* logPrefix, const std::string& filename, + const std::string& content); + + bool RunCommand(const std::vector<std::string>& command, std::string& output, + bool verbose = true) const; + + bool FindHeader(std::string& header, const std::string& testBasePath) const; + + std::string MocFindHeader(const std::string& sourcePath, + const std::string& includeBase) const; + bool MocFindIncludedFile(std::string& absFile, const std::string& sourceFile, + const std::string& includeString) const; + + // -- Meta + std::string ConfigSuffix; + // -- 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 MocExecutable; + std::string UicExecutable; + std::string RccExecutable; + // -- File lists + std::vector<std::string> Sources; + std::vector<std::string> Headers; + std::vector<std::string> HeaderExtensions; + cmFilePathChecksum FPathChecksum; + // -- Settings + bool IncludeProjectDirsBefore; + bool Verbose; + bool ColorOutput; + std::string SettingsFile; + std::string SettingsStringMoc; + std::string SettingsStringUic; + std::string SettingsStringRcc; + // -- Moc + bool MocSettingsChanged; + bool MocPredefsChanged; + bool MocRelaxedMode; + bool MocRunFailed; + 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> MocPredefsCmd; + std::vector<MocDependFilter> MocDependFilters; + MocMacroFilter MocMacroFilters[2]; + cmsys::RegularExpression MocRegExpInclude; + // -- Uic + bool UicSettingsChanged; + bool UicRunFailed; + std::vector<std::string> UicSkipList; + std::vector<std::string> UicTargetOptions; + std::map<std::string, std::string> UicOptions; + std::vector<std::string> UicSearchPaths; + cmsys::RegularExpression UicRegExpInclude; + // -- Rcc + bool RccSettingsChanged; + bool RccRunFailed; + std::vector<std::string> RccSources; + std::map<std::string, std::string> RccOptions; + std::map<std::string, std::vector<std::string> > RccInputs; +}; + +#endif |