cmState.h 7.3 KB

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