summaryrefslogtreecommitdiffstats
path: root/Source/cmQtAutoGeneratorMocUic.h
diff options
context:
space:
mode:
authorSebastian Holtermann <sebholt@xwmw.org>2017-11-17 12:04:26 (GMT)
committerSebastian Holtermann <sebholt@xwmw.org>2017-11-19 11:51:30 (GMT)
commit27ed3b3537676e6090a0845e4805bb4a65d05bae (patch)
treecb92880ea281a52a60039086e427bf4f3c93db99 /Source/cmQtAutoGeneratorMocUic.h
parent1cd285fe06088d6dad58a3b52c071579aa0ce8b8 (diff)
downloadCMake-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.h228
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