/* 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 "cmQtAutoGenerator.h" #include "cmsys/RegularExpression.hxx" #include #include // IWYU pragma: keep #include #include #include class cmMakefile; class cmQtAutoGeneratorMocUic : public cmQtAutoGenerator { CM_DISABLE_COPY(cmQtAutoGeneratorMocUic) public: cmQtAutoGeneratorMocUic(); 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 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); // -- Settings file void SettingsFileRead(cmMakefile* makefile); bool SettingsFileWrite(); bool SettingsChanged() const { return (this->MocSettingsChanged || this->UicSettingsChanged); } // -- Central processing bool Process(cmMakefile* makefile) override; // -- 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& 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); // -- Utility bool FindHeader(std::string& header, std::string const& testBasePath) const; // -- Meta std::string ConfigSuffix; cmQtAutoGen::MultiConfig MultiConfig; // -- Settings bool IncludeProjectDirsBefore; 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 unsigned long QtVersionMajor; std::string MocExecutable; std::string UicExecutable; // -- File lists std::map HeaderJobs; std::map SourceJobs; std::vector HeaderExtensions; cmFilePathChecksum FilePathChecksum; // -- Moc bool MocSettingsChanged; bool MocPredefsChanged; bool MocRelaxedMode; std::string MocCompFileRel; std::string MocCompFileAbs; std::string MocPredefsFileRel; std::string MocPredefsFileAbs; std::vector MocSkipList; std::vector MocIncludePaths; std::vector MocIncludes; std::vector MocDefinitions; std::vector MocOptions; std::vector MocAllOptions; std::vector MocPredefsCmd; std::vector MocDependFilters; std::vector MocMacroFilters; cmsys::RegularExpression MocRegExpInclude; std::vector> MocJobsIncluded; std::vector> MocJobsAuto; // -- Uic bool UicSettingsChanged; std::vector UicSkipList; std::vector UicTargetOptions; std::map> UicOptions; std::vector UicSearchPaths; cmsys::RegularExpression UicRegExpInclude; std::vector> UicJobs; }; #endif