cmQtAutoGenerators.h 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
  2. file Copyright.txt or https://cmake.org/licensing for details. */
  3. #ifndef cmQtAutoGenerators_h
  4. #define cmQtAutoGenerators_h
  5. #include <cmConfigure.h> // IWYU pragma: keep
  6. #include <cmFilePathChecksum.h>
  7. #include <cmsys/RegularExpression.hxx>
  8. #include <map>
  9. #include <set>
  10. #include <string>
  11. #include <utility>
  12. #include <vector>
  13. class cmMakefile;
  14. class cmQtAutoGenerators
  15. {
  16. public:
  17. cmQtAutoGenerators();
  18. bool Run(const std::string& targetDirectory, const std::string& config);
  19. private:
  20. // - Configuration
  21. bool ReadAutogenInfoFile(cmMakefile* makefile,
  22. const std::string& targetDirectory,
  23. const std::string& config);
  24. bool MocEnabled() const { return !this->MocExecutable.empty(); }
  25. bool UicEnabled() const { return !this->UicExecutable.empty(); }
  26. bool RccEnabled() const { return !this->RccExecutable.empty(); }
  27. // - Settings file
  28. void SettingsFileRead(cmMakefile* makefile,
  29. const std::string& targetDirectory);
  30. bool SettingsFileWrite(const std::string& targetDirectory);
  31. bool GenerateAllAny() const
  32. {
  33. return (this->GenerateAllMoc || this->GenerateAllRcc ||
  34. this->GenerateAllUic);
  35. }
  36. // - Init and run
  37. void Init(cmMakefile* makefile);
  38. bool RunAutogen();
  39. // - Content analysis
  40. bool MocRequired(const std::string& text,
  41. std::string* macroName = CM_NULLPTR);
  42. bool MocSkip(const std::string& absFilename) const;
  43. bool UicSkip(const std::string& absFilename) const;
  44. bool ParseSourceFile(
  45. const std::string& absFilename,
  46. std::map<std::string, std::string>& mocsIncluded,
  47. std::map<std::string, std::vector<std::string> >& includedUis,
  48. bool relaxed);
  49. void SearchHeadersForSourceFile(const std::string& absFilename,
  50. std::set<std::string>& mocHeaderFiles,
  51. std::set<std::string>& uicHeaderFiles) const;
  52. void ParseHeaders(
  53. const std::set<std::string>& mocHeaderFiles,
  54. const std::set<std::string>& uicHeaderFiles,
  55. const std::map<std::string, std::string>& mocsIncluded,
  56. std::map<std::string, std::string>& mocsNotIncluded,
  57. std::map<std::string, std::vector<std::string> >& includedUis);
  58. void ParseContentForUic(
  59. const std::string& fileName, const std::string& contentsString,
  60. std::map<std::string, std::vector<std::string> >& includedUis);
  61. bool ParseContentForMoc(const std::string& absFilename,
  62. const std::string& contentsString,
  63. std::map<std::string, std::string>& mocsIncluded,
  64. bool relaxed);
  65. // - Moc file generation
  66. bool MocGenerateAll(
  67. const std::map<std::string, std::string>& mocsIncluded,
  68. const std::map<std::string, std::string>& mocsNotIncluded);
  69. bool MocGenerateFile(const std::string& sourceFile,
  70. const std::string& mocFileName,
  71. const std::string& subDirPrefix);
  72. // - Uic file generation
  73. bool UicGenerateAll(
  74. const std::map<std::string, std::vector<std::string> >& includedUis);
  75. bool UicGenerateFile(const std::string& realName,
  76. const std::string& uiInputFile,
  77. const std::string& uiOutputFile);
  78. // - Rcc file generation
  79. bool RccGenerateAll();
  80. bool RccGenerateFile(const std::string& qrcInputFile,
  81. const std::string& qrcOutputFile, bool unique_n);
  82. // - Logging
  83. void LogErrorNameCollision(
  84. const std::string& message,
  85. const std::multimap<std::string, std::string>& collisions);
  86. void LogBold(const std::string& message);
  87. void LogInfo(const std::string& message);
  88. void LogWarning(const std::string& message);
  89. void LogError(const std::string& message);
  90. void LogCommand(const std::vector<std::string>& command);
  91. // - Utility
  92. bool NameCollisionTest(
  93. const std::map<std::string, std::string>& genFiles,
  94. std::multimap<std::string, std::string>& collisions) const;
  95. std::string ChecksumedPath(const std::string& sourceFile,
  96. const char* basePrefix,
  97. const char* baseSuffix) const;
  98. bool MakeParentDirectory(const std::string& filename);
  99. bool FindHeader(std::string& header, const std::string& testBasePath) const;
  100. std::string FindMatchingHeader(const std::string& basePath,
  101. const std::string& baseName,
  102. const std::string& subDir) const;
  103. bool FindInIncludeDirectories(std::string& file_n,
  104. const std::string& searchString) const;
  105. // - Target names
  106. std::string OriginTargetName;
  107. std::string AutogenTargetName;
  108. // - Directories
  109. std::string ProjectSourceDir;
  110. std::string ProjectBinaryDir;
  111. std::string CurrentSourceDir;
  112. std::string CurrentBinaryDir;
  113. std::string AutogenBuildSubDir;
  114. // - Qt environment
  115. std::string QtMajorVersion;
  116. std::string MocExecutable;
  117. std::string UicExecutable;
  118. std::string RccExecutable;
  119. // - File lists
  120. std::vector<std::string> Sources;
  121. std::vector<std::string> Headers;
  122. // - Settings
  123. std::string SettingsStringMoc;
  124. std::string SettingsStringUic;
  125. std::string SettingsStringRcc;
  126. // - Moc
  127. std::string MocCppFilenameRel;
  128. std::string MocCppFilenameAbs;
  129. std::vector<std::string> MocSkipList;
  130. std::vector<std::string> MocIncludePaths;
  131. std::vector<std::string> MocIncludes;
  132. std::vector<std::string> MocDefinitions;
  133. std::vector<std::string> MocOptions;
  134. // - Uic
  135. std::vector<std::string> UicSkipList;
  136. std::vector<std::string> UicTargetOptions;
  137. std::map<std::string, std::string> UicOptions;
  138. // - Rcc
  139. std::vector<std::string> RccSources;
  140. std::map<std::string, std::string> RccOptions;
  141. std::map<std::string, std::vector<std::string> > RccInputs;
  142. // - Utility
  143. cmFilePathChecksum fpathCheckSum;
  144. std::vector<std::string> HeaderExtensions;
  145. typedef std::pair<std::string, cmsys::RegularExpression> MacroFilter;
  146. MacroFilter MacroFilters[2];
  147. cmsys::RegularExpression RegExpMocInclude;
  148. cmsys::RegularExpression RegExpUicInclude;
  149. // - Flags
  150. bool IncludeProjectDirsBefore;
  151. bool Verbose;
  152. bool ColorOutput;
  153. bool RunMocFailed;
  154. bool RunUicFailed;
  155. bool RunRccFailed;
  156. bool GenerateAllMoc;
  157. bool GenerateAllUic;
  158. bool GenerateAllRcc;
  159. bool MocRelaxedMode;
  160. };
  161. #endif