| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362 |
- /*============================================================================
- CMake - Cross Platform Makefile Generator
- Copyright 2015 Stephen Kelly <[email protected]>
- Distributed under the OSI-approved BSD License (the "License");
- see accompanying file Copyright.txt for details.
- This software is distributed WITHOUT ANY WARRANTY; without even the
- implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the License for more information.
- ============================================================================*/
- #ifndef cmState_h
- #define cmState_h
- #include "cmStandardIncludes.h"
- #include "cmAlgorithms.h"
- #include "cmLinkedTree.h"
- #include "cmPolicies.h"
- #include "cmPropertyDefinitionMap.h"
- #include "cmPropertyMap.h"
- class cmake;
- class cmCommand;
- class cmDefinitions;
- class cmListFileBacktrace;
- class cmCacheManager;
- class cmState
- {
- struct SnapshotDataType;
- struct PolicyStackEntry;
- struct BuildsystemDirectoryStateType;
- typedef cmLinkedTree<SnapshotDataType>::iterator PositionType;
- friend class Snapshot;
- public:
- cmState();
- ~cmState();
- enum SnapshotType
- {
- BaseType,
- BuildsystemDirectoryType,
- FunctionCallType,
- MacroCallType,
- IncludeFileType,
- InlineListFileType,
- PolicyScopeType,
- VariableScopeType
- };
- class Directory;
- class Snapshot
- {
- public:
- Snapshot(cmState* state = 0);
- Snapshot(cmState* state, PositionType position);
- const char* GetDefinition(std::string const& name) const;
- bool IsInitialized(std::string const& name) const;
- void SetDefinition(std::string const& name, std::string const& value);
- void RemoveDefinition(std::string const& name);
- std::vector<std::string> UnusedKeys() const;
- std::vector<std::string> ClosureKeys() const;
- bool RaiseScope(std::string const& var, const char* varDef);
- void SetListFile(std::string const& listfile);
- std::string GetExecutionListFile() const;
- std::vector<Snapshot> GetChildren();
- bool IsValid() const;
- Snapshot GetBuildsystemDirectoryParent() const;
- Snapshot GetCallStackParent() const;
- Snapshot GetCallStackBottom() const;
- SnapshotType GetType() const;
- void SetPolicy(cmPolicies::PolicyID id, cmPolicies::PolicyStatus status);
- cmPolicies::PolicyStatus GetPolicy(cmPolicies::PolicyID id) const;
- bool HasDefinedPolicyCMP0011();
- void PushPolicy(cmPolicies::PolicyMap entry, bool weak);
- bool PopPolicy();
- bool CanPopPolicyScope();
- cmState* GetState() const;
- Directory GetDirectory() const;
- void SetProjectName(std::string const& name);
- std::string GetProjectName() const;
- void InitializeFromParent_ForSubdirsCommand();
- struct StrictWeakOrder
- {
- bool operator()(const cmState::Snapshot& lhs,
- const cmState::Snapshot& rhs) const;
- };
- void SetDirectoryDefinitions();
- void SetDefaultDefinitions();
- private:
- friend bool operator==(const cmState::Snapshot& lhs,
- const cmState::Snapshot& rhs);
- friend bool operator!=(const cmState::Snapshot& lhs,
- const cmState::Snapshot& rhs);
- friend class cmState;
- friend class Directory;
- friend struct StrictWeakOrder;
- void InitializeFromParent();
- cmState* State;
- cmState::PositionType Position;
- };
- class Directory
- {
- Directory(cmLinkedTree<BuildsystemDirectoryStateType>::iterator iter,
- Snapshot const& snapshot);
- public:
- const char* GetCurrentSource() const;
- void SetCurrentSource(std::string const& dir);
- const char* GetCurrentBinary() const;
- void SetCurrentBinary(std::string const& dir);
- std::vector<std::string> const& GetCurrentSourceComponents() const;
- std::vector<std::string> const& GetCurrentBinaryComponents() const;
- const char* GetRelativePathTopSource() const;
- const char* GetRelativePathTopBinary() const;
- void SetRelativePathTopSource(const char* dir);
- void SetRelativePathTopBinary(const char* dir);
- cmStringRange GetIncludeDirectoriesEntries() const;
- cmBacktraceRange GetIncludeDirectoriesEntryBacktraces() const;
- void AppendIncludeDirectoriesEntry(std::string const& vec,
- cmListFileBacktrace const& lfbt);
- void PrependIncludeDirectoriesEntry(std::string const& vec,
- cmListFileBacktrace const& lfbt);
- void SetIncludeDirectories(std::string const& vec,
- cmListFileBacktrace const& lfbt);
- void ClearIncludeDirectories();
- cmStringRange GetCompileDefinitionsEntries() const;
- cmBacktraceRange GetCompileDefinitionsEntryBacktraces() const;
- void AppendCompileDefinitionsEntry(std::string const& vec,
- cmListFileBacktrace const& lfbt);
- void SetCompileDefinitions(std::string const& vec,
- cmListFileBacktrace const& lfbt);
- void ClearCompileDefinitions();
- cmStringRange GetCompileOptionsEntries() const;
- cmBacktraceRange GetCompileOptionsEntryBacktraces() const;
- void AppendCompileOptionsEntry(std::string const& vec,
- cmListFileBacktrace const& lfbt);
- void SetCompileOptions(std::string const& vec,
- cmListFileBacktrace const& lfbt);
- void ClearCompileOptions();
- void SetProperty(const std::string& prop, const char* value,
- cmListFileBacktrace const& lfbt);
- void AppendProperty(const std::string& prop, const char* value,
- bool asString, cmListFileBacktrace const& lfbt);
- const char* GetProperty(const std::string& prop) const;
- const char* GetProperty(const std::string& prop, bool chain) const;
- bool GetPropertyAsBool(const std::string& prop) const;
- std::vector<std::string> GetPropertyKeys() const;
- private:
- void ComputeRelativePathTopSource();
- void ComputeRelativePathTopBinary();
- private:
- cmLinkedTree<BuildsystemDirectoryStateType>::iterator DirectoryState;
- Snapshot Snapshot_;
- friend class Snapshot;
- };
- enum TargetType
- {
- EXECUTABLE,
- STATIC_LIBRARY,
- SHARED_LIBRARY,
- MODULE_LIBRARY,
- OBJECT_LIBRARY,
- UTILITY,
- GLOBAL_TARGET,
- INTERFACE_LIBRARY,
- UNKNOWN_LIBRARY
- };
- static const char* GetTargetTypeName(cmState::TargetType targetType);
- Snapshot CreateBaseSnapshot();
- Snapshot CreateBuildsystemDirectorySnapshot(Snapshot originSnapshot);
- Snapshot CreateFunctionCallSnapshot(Snapshot originSnapshot,
- std::string const& fileName);
- Snapshot CreateMacroCallSnapshot(Snapshot originSnapshot,
- std::string const& fileName);
- Snapshot CreateIncludeFileSnapshot(Snapshot originSnapshot,
- std::string const& fileName);
- Snapshot CreateVariableScopeSnapshot(Snapshot originSnapshot);
- Snapshot CreateInlineListFileSnapshot(Snapshot originSnapshot,
- std::string const& fileName);
- Snapshot CreatePolicyScopeSnapshot(Snapshot originSnapshot);
- Snapshot Pop(Snapshot originSnapshot);
- enum CacheEntryType
- {
- BOOL = 0,
- PATH,
- FILEPATH,
- STRING,
- INTERNAL,
- STATIC,
- UNINITIALIZED
- };
- static CacheEntryType StringToCacheEntryType(const char*);
- static const char* CacheEntryTypeToString(CacheEntryType);
- static bool IsCacheEntryType(std::string const& key);
- bool LoadCache(const std::string& path, bool internal,
- std::set<std::string>& excludes,
- std::set<std::string>& includes);
- bool SaveCache(const std::string& path);
- bool DeleteCache(const std::string& path);
- std::vector<std::string> GetCacheEntryKeys() const;
- const char* GetCacheEntryValue(std::string const& key) const;
- const char* GetInitializedCacheValue(std::string const& key) const;
- CacheEntryType GetCacheEntryType(std::string const& key) const;
- void SetCacheEntryValue(std::string const& key, std::string const& value);
- void SetCacheValue(std::string const& key, std::string const& value);
- void RemoveCacheEntry(std::string const& key);
- void SetCacheEntryProperty(std::string const& key,
- std::string const& propertyName,
- std::string const& value);
- void SetCacheEntryBoolProperty(std::string const& key,
- std::string const& propertyName, bool value);
- const char* GetCacheEntryProperty(std::string const& key,
- std::string const& propertyName);
- bool GetCacheEntryPropertyAsBool(std::string const& key,
- std::string const& propertyName);
- void AppendCacheEntryProperty(std::string const& key,
- const std::string& property,
- const std::string& value,
- bool asString = false);
- void RemoveCacheEntryProperty(std::string const& key,
- std::string const& propertyName);
- ///! Break up a line like VAR:type="value" into var, type and value
- static bool ParseCacheEntry(const std::string& entry, std::string& var,
- std::string& value, CacheEntryType& type);
- Snapshot Reset();
- // Define a property
- void DefineProperty(const std::string& name, cmProperty::ScopeType scope,
- const char* ShortDescription,
- const char* FullDescription, bool chain = false);
- // get property definition
- cmPropertyDefinition const* GetPropertyDefinition(
- const std::string& name, cmProperty::ScopeType scope) const;
- // Is a property defined?
- bool IsPropertyDefined(const std::string& name,
- cmProperty::ScopeType scope) const;
- bool IsPropertyChained(const std::string& name,
- cmProperty::ScopeType scope) const;
- void SetLanguageEnabled(std::string const& l);
- bool GetLanguageEnabled(std::string const& l) const;
- std::vector<std::string> GetEnabledLanguages() const;
- void SetEnabledLanguages(std::vector<std::string> const& langs);
- void ClearEnabledLanguages();
- bool GetIsInTryCompile() const;
- void SetIsInTryCompile(bool b);
- cmCommand* GetCommand(std::string const& name) const;
- void AddCommand(cmCommand* command);
- void RemoveUnscriptableCommands();
- void RenameCommand(std::string const& oldName, std::string const& newName);
- void RemoveUserDefinedCommands();
- std::vector<std::string> GetCommandNames() const;
- void SetGlobalProperty(const std::string& prop, const char* value);
- void AppendGlobalProperty(const std::string& prop, const char* value,
- bool asString = false);
- const char* GetGlobalProperty(const std::string& prop);
- bool GetGlobalPropertyAsBool(const std::string& prop);
- const char* GetSourceDirectory() const;
- void SetSourceDirectory(std::string const& sourceDirectory);
- const char* GetBinaryDirectory() const;
- void SetBinaryDirectory(std::string const& binaryDirectory);
- std::vector<std::string> const& GetSourceDirectoryComponents() const;
- std::vector<std::string> const& GetBinaryDirectoryComponents() const;
- void SetWindowsShell(bool windowsShell);
- bool UseWindowsShell() const;
- void SetWindowsVSIDE(bool windowsVSIDE);
- bool UseWindowsVSIDE() const;
- void SetWatcomWMake(bool watcomWMake);
- bool UseWatcomWMake() const;
- void SetMinGWMake(bool minGWMake);
- bool UseMinGWMake() const;
- void SetNMake(bool nMake);
- bool UseNMake() const;
- void SetMSYSShell(bool mSYSShell);
- bool UseMSYSShell() const;
- unsigned int GetCacheMajorVersion() const;
- unsigned int GetCacheMinorVersion() const;
- private:
- friend class cmake;
- void AddCacheEntry(const std::string& key, const char* value,
- const char* helpString, CacheEntryType type);
- std::map<cmProperty::ScopeType, cmPropertyDefinitionMap> PropertyDefinitions;
- std::vector<std::string> EnabledLanguages;
- std::map<std::string, cmCommand*> Commands;
- cmPropertyMap GlobalProperties;
- cmCacheManager* CacheManager;
- cmLinkedTree<BuildsystemDirectoryStateType> BuildsystemDirectory;
- cmLinkedTree<std::string> ExecutionListFiles;
- cmLinkedTree<PolicyStackEntry> PolicyStack;
- cmLinkedTree<SnapshotDataType> SnapshotData;
- cmLinkedTree<cmDefinitions> VarTree;
- std::vector<std::string> SourceDirectoryComponents;
- std::vector<std::string> BinaryDirectoryComponents;
- std::string SourceDirectory;
- std::string BinaryDirectory;
- bool IsInTryCompile;
- bool WindowsShell;
- bool WindowsVSIDE;
- bool WatcomWMake;
- bool MinGWMake;
- bool NMake;
- bool MSYSShell;
- };
- bool operator==(const cmState::Snapshot& lhs, const cmState::Snapshot& rhs);
- bool operator!=(const cmState::Snapshot& lhs, const cmState::Snapshot& rhs);
- #endif
|