/* 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 <list> #include <map> #include <set> #include <string> #include <vector> class cmMakefile; class cmQtAutoGenerators { public: cmQtAutoGenerators(); bool Run(const std::string& targetDirectory, const std::string& config); private: // - Configuration bool ReadAutogenInfoFile(cmMakefile* makefile, const std::string& targetDirectory, const std::string& config); std::string MocSettingsStringCompose(); std::string UicSettingsStringCompose(); std::string RccSettingsStringCompose(); void OldSettingsReadFile(cmMakefile* makefile, const std::string& targetDirectory); bool OldSettingsWriteFile(const std::string& targetDirectory); // - Init and run void Init(); bool RunAutogen(cmMakefile* makefile); // - Content analysis bool MocRequired(const std::string& text, std::string& macroName); bool MocSkipTest(const std::string& absFilename); bool UicSkipTest(const std::string& absFilename); bool ParseSourceFile( const std::string& absFilename, const std::vector<std::string>& headerExtensions, std::map<std::string, std::string>& includedMocs, std::map<std::string, std::vector<std::string> >& includedUis, bool relaxed); void SearchHeadersForSourceFile( const std::string& absFilename, const std::vector<std::string>& headerExtensions, std::set<std::string>& absHeadersMoc, std::set<std::string>& absHeadersUic); void ParseHeaders( const std::set<std::string>& absHeadersMoc, const std::set<std::string>& absHeadersUic, const std::map<std::string, std::string>& includedMocs, std::map<std::string, std::string>& notIncludedMocs, std::map<std::string, std::vector<std::string> >& includedUis); void ParseContentForUic( const std::string& fileName, const std::string& contentsString, std::map<std::string, std::vector<std::string> >& includedUis); bool ParseContentForMoc(const std::string& absFilename, const std::string& contentsString, const std::vector<std::string>& headerExtensions, std::map<std::string, std::string>& includedMocs, bool relaxed); // - Moc file generation bool MocGenerateAll( const std::map<std::string, std::string>& includedMocs, const std::map<std::string, std::string>& notIncludedMocs); bool MocGenerateFile(const std::string& sourceFile, const std::string& mocFileName, const std::string& subDirPrefix); // - Uic file generation 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); // - Qrc file generation bool QrcGenerateAll(); bool QrcGenerateFile(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); void LogBold(const std::string& message); void LogInfo(const std::string& message); void LogWarning(const std::string& message); void LogError(const std::string& message); void LogCommand(const std::vector<std::string>& command); // - Utility bool NameCollisionTest(const std::map<std::string, std::string>& genFiles, std::multimap<std::string, std::string>& collisions); bool MakeParentDirectory(const std::string& filename); // - Target names std::string OriginTargetName; std::string AutogenTargetName; // - Directories std::string ProjectSourceDir; std::string ProjectBinaryDir; std::string CurrentSourceDir; std::string CurrentBinaryDir; std::string AutogenBuildSubDir; // - 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; // - Moc std::vector<std::string> SkipMoc; std::string MocCompileDefinitionsStr; std::string MocIncludesStr; std::string MocOptionsStr; std::string OutMocCppFilenameRel; std::string OutMocCppFilenameAbs; std::list<std::string> MocIncludes; std::list<std::string> MocDefinitions; std::vector<std::string> MocOptions; std::string MocSettingsString; // - Uic std::vector<std::string> SkipUic; std::vector<std::string> UicTargetOptions; std::map<std::string, std::string> UicOptions; std::string UicSettingsString; // - Rcc std::vector<std::string> RccSources; std::map<std::string, std::string> RccOptions; std::map<std::string, std::vector<std::string> > RccInputs; std::string RccSettingsString; // - Utility cmFilePathChecksum fpathCheckSum; cmsys::RegularExpression RegExpQObject; cmsys::RegularExpression RegExpQGadget; cmsys::RegularExpression RegExpMocInclude; cmsys::RegularExpression RegExpUicInclude; // - Flags bool IncludeProjectDirsBefore; bool Verbose; bool ColorOutput; bool RunMocFailed; bool RunUicFailed; bool RunRccFailed; bool GenerateMocAll; bool GenerateUicAll; bool GenerateRccAll; bool MocRelaxedMode; }; #endif