cmState.h 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272
  1. /*============================================================================
  2. CMake - Cross Platform Makefile Generator
  3. Copyright 2015 Stephen Kelly <[email protected]>
  4. Distributed under the OSI-approved BSD License (the "License");
  5. see accompanying file Copyright.txt for details.
  6. This software is distributed WITHOUT ANY WARRANTY; without even the
  7. implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  8. See the License for more information.
  9. ============================================================================*/
  10. #ifndef cmState_h
  11. #define cmState_h
  12. #include "cmStandardIncludes.h"
  13. #include "cmPropertyDefinitionMap.h"
  14. #include "cmPropertyMap.h"
  15. #include "cmLinkedTree.h"
  16. #include "cmAlgorithms.h"
  17. class cmake;
  18. class cmCommand;
  19. class cmState
  20. {
  21. struct SnapshotDataType;
  22. struct BuildsystemDirectoryStateType;
  23. typedef cmLinkedTree<SnapshotDataType>::iterator PositionType;
  24. friend class Snapshot;
  25. public:
  26. cmState(cmake* cm);
  27. ~cmState();
  28. enum SnapshotType
  29. {
  30. BuildsystemDirectoryType,
  31. FunctionCallType,
  32. MacroCallType,
  33. CallStackType,
  34. InlineListFileType
  35. };
  36. class Directory;
  37. class Snapshot {
  38. public:
  39. Snapshot(cmState* state = 0);
  40. Snapshot(cmState* state, PositionType position);
  41. void SetListFile(std::string const& listfile);
  42. std::string GetExecutionListFile() const;
  43. std::string GetEntryPointCommand() const;
  44. long GetEntryPointLine() const;
  45. bool IsValid() const;
  46. Snapshot GetBuildsystemDirectoryParent() const;
  47. Snapshot GetCallStackParent() const;
  48. void InitializeFromParent();
  49. cmState* GetState() const;
  50. Directory GetDirectory() const;
  51. private:
  52. friend class cmState;
  53. friend class Directory;
  54. cmState* State;
  55. cmState::PositionType Position;
  56. };
  57. class Directory
  58. {
  59. Directory(cmLinkedTree<BuildsystemDirectoryStateType>::iterator iter,
  60. Snapshot const& snapshot);
  61. public:
  62. const char* GetCurrentSource() const;
  63. void SetCurrentSource(std::string const& dir);
  64. const char* GetCurrentBinary() const;
  65. void SetCurrentBinary(std::string const& dir);
  66. std::vector<std::string> const&
  67. GetCurrentSourceComponents() const;
  68. std::vector<std::string> const&
  69. GetCurrentBinaryComponents() const;
  70. const char* GetRelativePathTopSource() const;
  71. const char* GetRelativePathTopBinary() const;
  72. void SetRelativePathTopSource(const char* dir);
  73. void SetRelativePathTopBinary(const char* dir);
  74. cmStringRange GetIncludeDirectoriesEntries() const;
  75. cmBacktraceRange GetIncludeDirectoriesEntryBacktraces() const;
  76. void AppendIncludeDirectoriesEntry(std::string const& vec,
  77. cmListFileBacktrace const& lfbt);
  78. void PrependIncludeDirectoriesEntry(std::string const& vec,
  79. cmListFileBacktrace const& lfbt);
  80. void SetIncludeDirectories(std::string const& vec,
  81. cmListFileBacktrace const& lfbt);
  82. void ClearIncludeDirectories();
  83. cmStringRange GetCompileDefinitionsEntries() const;
  84. cmBacktraceRange GetCompileDefinitionsEntryBacktraces() const;
  85. void AppendCompileDefinitionsEntry(std::string const& vec,
  86. cmListFileBacktrace const& lfbt);
  87. void SetCompileDefinitions(std::string const& vec,
  88. cmListFileBacktrace const& lfbt);
  89. void ClearCompileDefinitions();
  90. cmStringRange GetCompileOptionsEntries() const;
  91. cmBacktraceRange GetCompileOptionsEntryBacktraces() const;
  92. void AppendCompileOptionsEntry(std::string const& vec,
  93. cmListFileBacktrace const& lfbt);
  94. void SetCompileOptions(std::string const& vec,
  95. cmListFileBacktrace const& lfbt);
  96. void ClearCompileOptions();
  97. private:
  98. void ComputeRelativePathTopSource();
  99. void ComputeRelativePathTopBinary();
  100. private:
  101. cmLinkedTree<BuildsystemDirectoryStateType>::iterator DirectoryState;
  102. Snapshot Snapshot_;
  103. friend class Snapshot;
  104. };
  105. Snapshot CreateBaseSnapshot();
  106. Snapshot
  107. CreateBuildsystemDirectorySnapshot(Snapshot originSnapshot,
  108. std::string const& entryPointCommand,
  109. long entryPointLine);
  110. Snapshot CreateFunctionCallSnapshot(Snapshot originSnapshot,
  111. std::string const& entryPointCommand,
  112. long entryPointLine,
  113. std::string const& fileName);
  114. Snapshot CreateMacroCallSnapshot(Snapshot originSnapshot,
  115. std::string const& entryPointCommand,
  116. long entryPointLine,
  117. std::string const& fileName);
  118. Snapshot CreateCallStackSnapshot(Snapshot originSnapshot,
  119. std::string const& entryPointCommand,
  120. long entryPointLine,
  121. std::string const& fileName);
  122. Snapshot CreateInlineListFileSnapshot(Snapshot originSnapshot,
  123. const std::string& entryPointCommand,
  124. long entryPointLine,
  125. std::string const& fileName);
  126. Snapshot Pop(Snapshot originSnapshot);
  127. enum CacheEntryType{ BOOL=0, PATH, FILEPATH, STRING, INTERNAL,STATIC,
  128. UNINITIALIZED };
  129. static CacheEntryType StringToCacheEntryType(const char*);
  130. static const char* CacheEntryTypeToString(CacheEntryType);
  131. static bool IsCacheEntryType(std::string const& key);
  132. std::vector<std::string> GetCacheEntryKeys() const;
  133. const char* GetCacheEntryValue(std::string const& key) const;
  134. const char* GetInitializedCacheValue(std::string const& key) const;
  135. CacheEntryType GetCacheEntryType(std::string const& key) const;
  136. void SetCacheEntryValue(std::string const& key, std::string const& value);
  137. void SetCacheValue(std::string const& key, std::string const& value);
  138. void AddCacheEntry(const std::string& key, const char* value,
  139. const char* helpString, CacheEntryType type);
  140. void RemoveCacheEntry(std::string const& key);
  141. void SetCacheEntryProperty(std::string const& key,
  142. std::string const& propertyName,
  143. std::string const& value);
  144. void SetCacheEntryBoolProperty(std::string const& key,
  145. std::string const& propertyName,
  146. bool value);
  147. const char* GetCacheEntryProperty(std::string const& key,
  148. std::string const& propertyName);
  149. bool GetCacheEntryPropertyAsBool(std::string const& key,
  150. std::string const& propertyName);
  151. void AppendCacheEntryProperty(std::string const& key,
  152. const std::string& property,
  153. const std::string& value,
  154. bool asString = false);
  155. void RemoveCacheEntryProperty(std::string const& key,
  156. std::string const& propertyName);
  157. Snapshot Reset();
  158. // Define a property
  159. void DefineProperty(const std::string& name, cmProperty::ScopeType scope,
  160. const char *ShortDescription,
  161. const char *FullDescription,
  162. bool chain = false);
  163. // get property definition
  164. cmPropertyDefinition const* GetPropertyDefinition
  165. (const std::string& name, cmProperty::ScopeType scope) const;
  166. // Is a property defined?
  167. bool IsPropertyDefined(const std::string& name,
  168. cmProperty::ScopeType scope) const;
  169. bool IsPropertyChained(const std::string& name,
  170. cmProperty::ScopeType scope) const;
  171. void SetLanguageEnabled(std::string const& l);
  172. bool GetLanguageEnabled(std::string const& l) const;
  173. std::vector<std::string> GetEnabledLanguages() const;
  174. void SetEnabledLanguages(std::vector<std::string> const& langs);
  175. void ClearEnabledLanguages();
  176. bool GetIsInTryCompile() const;
  177. void SetIsInTryCompile(bool b);
  178. cmCommand* GetCommand(std::string const& name) const;
  179. void AddCommand(cmCommand* command);
  180. void RemoveUnscriptableCommands();
  181. void RenameCommand(std::string const& oldName, std::string const& newName);
  182. void RemoveUserDefinedCommands();
  183. std::vector<std::string> GetCommandNames() const;
  184. void SetGlobalProperty(const std::string& prop, const char *value);
  185. void AppendGlobalProperty(const std::string& prop,
  186. const char *value,bool asString=false);
  187. const char *GetGlobalProperty(const std::string& prop);
  188. bool GetGlobalPropertyAsBool(const std::string& prop);
  189. const char* GetSourceDirectory() const;
  190. void SetSourceDirectory(std::string const& sourceDirectory);
  191. const char* GetBinaryDirectory() const;
  192. void SetBinaryDirectory(std::string const& binaryDirectory);
  193. std::vector<std::string> const& GetSourceDirectoryComponents() const;
  194. std::vector<std::string> const& GetBinaryDirectoryComponents() const;
  195. void SetWindowsShell(bool windowsShell);
  196. bool UseWindowsShell() const;
  197. void SetWindowsVSIDE(bool windowsVSIDE);
  198. bool UseWindowsVSIDE() const;
  199. void SetWatcomWMake(bool watcomWMake);
  200. bool UseWatcomWMake() const;
  201. void SetMinGWMake(bool minGWMake);
  202. bool UseMinGWMake() const;
  203. void SetNMake(bool nMake);
  204. bool UseNMake() const;
  205. void SetMSYSShell(bool mSYSShell);
  206. bool UseMSYSShell() const;
  207. private:
  208. std::map<cmProperty::ScopeType, cmPropertyDefinitionMap> PropertyDefinitions;
  209. std::vector<std::string> EnabledLanguages;
  210. std::map<std::string, cmCommand*> Commands;
  211. cmPropertyMap GlobalProperties;
  212. cmake* CMakeInstance;
  213. cmLinkedTree<BuildsystemDirectoryStateType> BuildsystemDirectory;
  214. cmLinkedTree<std::string> ExecutionListFiles;
  215. cmLinkedTree<SnapshotDataType> SnapshotData;
  216. std::vector<std::string> SourceDirectoryComponents;
  217. std::vector<std::string> BinaryDirectoryComponents;
  218. std::string SourceDirectory;
  219. std::string BinaryDirectory;
  220. bool IsInTryCompile;
  221. bool WindowsShell;
  222. bool WindowsVSIDE;
  223. bool WatcomWMake;
  224. bool MinGWMake;
  225. bool NMake;
  226. bool MSYSShell;
  227. };
  228. #endif