cmState.h 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  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 cmState_h
  4. #define cmState_h
  5. #include "cmConfigure.h" // IWYU pragma: keep
  6. #include <map>
  7. #include <set>
  8. #include <string>
  9. #include <vector>
  10. #include "cmDefinitions.h"
  11. #include "cmLinkedTree.h"
  12. #include "cmListFileCache.h"
  13. #include "cmPolicies.h"
  14. #include "cmProperty.h"
  15. #include "cmPropertyDefinitionMap.h"
  16. #include "cmPropertyMap.h"
  17. #include "cmStatePrivate.h"
  18. #include "cmStateTypes.h"
  19. class cmCacheManager;
  20. class cmCommand;
  21. class cmGlobVerificationManager;
  22. class cmPropertyDefinition;
  23. class cmStateSnapshot;
  24. class cmMessenger;
  25. class cmState
  26. {
  27. friend class cmStateSnapshot;
  28. public:
  29. cmState();
  30. ~cmState();
  31. enum Mode
  32. {
  33. Unknown,
  34. Project,
  35. Script,
  36. FindPackage,
  37. CTest,
  38. CPack,
  39. };
  40. static const char* GetTargetTypeName(cmStateEnums::TargetType targetType);
  41. cmStateSnapshot CreateBaseSnapshot();
  42. cmStateSnapshot CreateBuildsystemDirectorySnapshot(
  43. cmStateSnapshot const& originSnapshot);
  44. cmStateSnapshot CreateFunctionCallSnapshot(
  45. cmStateSnapshot const& originSnapshot, std::string const& fileName);
  46. cmStateSnapshot CreateMacroCallSnapshot(
  47. cmStateSnapshot const& originSnapshot, std::string const& fileName);
  48. cmStateSnapshot CreateIncludeFileSnapshot(
  49. cmStateSnapshot const& originSnapshot, std::string const& fileName);
  50. cmStateSnapshot CreateVariableScopeSnapshot(
  51. cmStateSnapshot const& originSnapshot);
  52. cmStateSnapshot CreateInlineListFileSnapshot(
  53. cmStateSnapshot const& originSnapshot, std::string const& fileName);
  54. cmStateSnapshot CreatePolicyScopeSnapshot(
  55. cmStateSnapshot const& originSnapshot);
  56. cmStateSnapshot Pop(cmStateSnapshot const& originSnapshot);
  57. static cmStateEnums::CacheEntryType StringToCacheEntryType(const char*);
  58. static const char* CacheEntryTypeToString(cmStateEnums::CacheEntryType);
  59. static bool IsCacheEntryType(std::string const& key);
  60. bool LoadCache(const std::string& path, bool internal,
  61. std::set<std::string>& excludes,
  62. std::set<std::string>& includes);
  63. bool SaveCache(const std::string& path, cmMessenger* messenger);
  64. bool DeleteCache(const std::string& path);
  65. std::vector<std::string> GetCacheEntryKeys() const;
  66. const char* GetCacheEntryValue(std::string const& key) const;
  67. const std::string* GetInitializedCacheValue(std::string const& key) const;
  68. cmStateEnums::CacheEntryType GetCacheEntryType(std::string const& key) const;
  69. void SetCacheEntryValue(std::string const& key, std::string const& value);
  70. void SetCacheValue(std::string const& key, std::string const& value);
  71. void RemoveCacheEntry(std::string const& key);
  72. void SetCacheEntryProperty(std::string const& key,
  73. std::string const& propertyName,
  74. std::string const& value);
  75. void SetCacheEntryBoolProperty(std::string const& key,
  76. std::string const& propertyName, bool value);
  77. std::vector<std::string> GetCacheEntryPropertyList(std::string const& key);
  78. const char* GetCacheEntryProperty(std::string const& key,
  79. std::string const& propertyName);
  80. bool GetCacheEntryPropertyAsBool(std::string const& key,
  81. std::string const& propertyName);
  82. void AppendCacheEntryProperty(std::string const& key,
  83. const std::string& property,
  84. const std::string& value,
  85. bool asString = false);
  86. void RemoveCacheEntryProperty(std::string const& key,
  87. std::string const& propertyName);
  88. ///! Break up a line like VAR:type="value" into var, type and value
  89. static bool ParseCacheEntry(const std::string& entry, std::string& var,
  90. std::string& value,
  91. cmStateEnums::CacheEntryType& type);
  92. cmStateSnapshot Reset();
  93. // Define a property
  94. void DefineProperty(const std::string& name, cmProperty::ScopeType scope,
  95. const char* ShortDescription,
  96. const char* FullDescription, bool chain = false);
  97. // get property definition
  98. cmPropertyDefinition const* GetPropertyDefinition(
  99. const std::string& name, cmProperty::ScopeType scope) const;
  100. // Is a property defined?
  101. bool IsPropertyDefined(const std::string& name,
  102. cmProperty::ScopeType scope) const;
  103. bool IsPropertyChained(const std::string& name,
  104. cmProperty::ScopeType scope) const;
  105. void SetLanguageEnabled(std::string const& l);
  106. bool GetLanguageEnabled(std::string const& l) const;
  107. std::vector<std::string> GetEnabledLanguages() const;
  108. void SetEnabledLanguages(std::vector<std::string> const& langs);
  109. void ClearEnabledLanguages();
  110. bool GetIsInTryCompile() const;
  111. void SetIsInTryCompile(bool b);
  112. bool GetIsGeneratorMultiConfig() const;
  113. void SetIsGeneratorMultiConfig(bool b);
  114. // Returns a command from its name, case insensitive, or nullptr
  115. cmCommand* GetCommand(std::string const& name) const;
  116. // Returns a command from its name, or nullptr
  117. cmCommand* GetCommandByExactName(std::string const& name) const;
  118. void AddBuiltinCommand(std::string const& name, cmCommand* command);
  119. void AddDisallowedCommand(std::string const& name, cmCommand* command,
  120. cmPolicies::PolicyID policy, const char* message);
  121. void AddUnexpectedCommand(std::string const& name, const char* error);
  122. void AddScriptedCommand(std::string const& name, cmCommand* command);
  123. void RemoveBuiltinCommand(std::string const& name);
  124. void RemoveUserDefinedCommands();
  125. std::vector<std::string> GetCommandNames() const;
  126. void SetGlobalProperty(const std::string& prop, const char* value);
  127. void AppendGlobalProperty(const std::string& prop, const char* value,
  128. bool asString = false);
  129. const char* GetGlobalProperty(const std::string& prop);
  130. bool GetGlobalPropertyAsBool(const std::string& prop);
  131. std::string const& GetSourceDirectory() const;
  132. void SetSourceDirectory(std::string const& sourceDirectory);
  133. std::string const& GetBinaryDirectory() const;
  134. void SetBinaryDirectory(std::string const& binaryDirectory);
  135. void SetWindowsShell(bool windowsShell);
  136. bool UseWindowsShell() const;
  137. void SetWindowsVSIDE(bool windowsVSIDE);
  138. bool UseWindowsVSIDE() const;
  139. void SetWatcomWMake(bool watcomWMake);
  140. bool UseWatcomWMake() const;
  141. void SetMinGWMake(bool minGWMake);
  142. bool UseMinGWMake() const;
  143. void SetNMake(bool nMake);
  144. bool UseNMake() const;
  145. void SetMSYSShell(bool mSYSShell);
  146. bool UseMSYSShell() const;
  147. unsigned int GetCacheMajorVersion() const;
  148. unsigned int GetCacheMinorVersion() const;
  149. Mode GetMode() const;
  150. std::string GetModeString() const;
  151. void SetMode(Mode mode);
  152. static std::string ModeToString(Mode mode);
  153. private:
  154. friend class cmake;
  155. void AddCacheEntry(const std::string& key, const char* value,
  156. const char* helpString,
  157. cmStateEnums::CacheEntryType type);
  158. bool DoWriteGlobVerifyTarget() const;
  159. std::string const& GetGlobVerifyScript() const;
  160. std::string const& GetGlobVerifyStamp() const;
  161. bool SaveVerificationScript(const std::string& path);
  162. void AddGlobCacheEntry(bool recurse, bool listDirectories,
  163. bool followSymlinks, const std::string& relative,
  164. const std::string& expression,
  165. const std::vector<std::string>& files,
  166. const std::string& variable,
  167. cmListFileBacktrace const& bt);
  168. std::map<cmProperty::ScopeType, cmPropertyDefinitionMap> PropertyDefinitions;
  169. std::vector<std::string> EnabledLanguages;
  170. std::map<std::string, cmCommand*> BuiltinCommands;
  171. std::map<std::string, cmCommand*> ScriptedCommands;
  172. cmPropertyMap GlobalProperties;
  173. cmCacheManager* CacheManager;
  174. cmGlobVerificationManager* GlobVerificationManager;
  175. cmLinkedTree<cmStateDetail::BuildsystemDirectoryStateType>
  176. BuildsystemDirectory;
  177. cmLinkedTree<std::string> ExecutionListFiles;
  178. cmLinkedTree<cmStateDetail::PolicyStackEntry> PolicyStack;
  179. cmLinkedTree<cmStateDetail::SnapshotDataType> SnapshotData;
  180. cmLinkedTree<cmDefinitions> VarTree;
  181. std::string SourceDirectory;
  182. std::string BinaryDirectory;
  183. bool IsInTryCompile = false;
  184. bool IsGeneratorMultiConfig = false;
  185. bool WindowsShell = false;
  186. bool WindowsVSIDE = false;
  187. bool WatcomWMake = false;
  188. bool MinGWMake = false;
  189. bool NMake = false;
  190. bool MSYSShell = false;
  191. Mode CurrentMode = Unknown;
  192. };
  193. #endif