diff options
Diffstat (limited to 'Source/cmState.h')
-rw-r--r-- | Source/cmState.h | 121 |
1 files changed, 88 insertions, 33 deletions
diff --git a/Source/cmState.h b/Source/cmState.h index 77a066f..acd23a5 100644 --- a/Source/cmState.h +++ b/Source/cmState.h @@ -15,49 +15,109 @@ #include "cmStandardIncludes.h" #include "cmPropertyDefinitionMap.h" #include "cmPropertyMap.h" +#include "cmLinkedTree.h" class cmake; class cmCommand; class cmState { - typedef std::vector<std::string>::size_type PositionType; + struct SnapshotDataType; + struct BuildsystemDirectoryStateType; + typedef cmLinkedTree<SnapshotDataType>::iterator PositionType; friend class Snapshot; public: cmState(cmake* cm); ~cmState(); + enum SnapshotType + { + BuildsystemDirectoryType, + FunctionCallType, + MacroCallType, + CallStackType, + InlineListFileType + }; + + class Directory; + class Snapshot { public: - Snapshot(cmState* state = 0, PositionType position = 0); + Snapshot(cmState* state = 0, PositionType position = PositionType()); + + void SetListFile(std::string const& listfile); + + std::string GetExecutionListFile() const; + std::string GetEntryPointCommand() const; + long GetEntryPointLine() const; + + bool IsValid() const; + Snapshot GetBuildsystemDirectoryParent() const; + Snapshot GetCallStackParent() const; + + cmState* GetState() const; + + Directory GetDirectory() const; + + private: + friend class cmState; + friend class Directory; + cmState* State; + cmState::PositionType Position; + }; - const char* GetCurrentSourceDirectory() const; - void SetCurrentSourceDirectory(std::string const& dir); - const char* GetCurrentBinaryDirectory() const; - void SetCurrentBinaryDirectory(std::string const& dir); + 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& GetCurrentSourceDirectoryComponents(); - std::vector<std::string> const& GetCurrentBinaryDirectoryComponents(); + 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); - bool IsValid() const; - Snapshot GetParent() const; - private: void ComputeRelativePathTopSource(); void ComputeRelativePathTopBinary(); private: - friend class cmState; - cmState* State; - cmState::PositionType Position; + cmLinkedTree<BuildsystemDirectoryStateType>::iterator DirectoryState; + Snapshot Snapshot_; + friend class Snapshot; }; - Snapshot CreateSnapshot(Snapshot originSnapshot); + Snapshot CreateBaseSnapshot(); + Snapshot + CreateBuildsystemDirectorySnapshot(Snapshot originSnapshot, + std::string const& entryPointCommand, + long entryPointLine); + Snapshot CreateFunctionCallSnapshot(Snapshot originSnapshot, + std::string const& entryPointCommand, + long entryPointLine, + std::string const& fileName); + Snapshot CreateMacroCallSnapshot(Snapshot originSnapshot, + std::string const& entryPointCommand, + long entryPointLine, + std::string const& fileName); + Snapshot CreateCallStackSnapshot(Snapshot originSnapshot, + std::string const& entryPointCommand, + long entryPointLine, + std::string const& fileName); + Snapshot CreateInlineListFileSnapshot(Snapshot originSnapshot, + const std::string& entryPointCommand, + long entryPointLine, + std::string const& fileName); + Snapshot Pop(Snapshot originSnapshot); enum CacheEntryType{ BOOL=0, PATH, FILEPATH, STRING, INTERNAL,STATIC, UNINITIALIZED }; @@ -93,7 +153,7 @@ public: void RemoveCacheEntryProperty(std::string const& key, std::string const& propertyName); - void Reset(); + Snapshot Reset(); // Define a property void DefineProperty(const std::string& name, cmProperty::ScopeType scope, const char *ShortDescription, @@ -101,12 +161,14 @@ public: bool chain = false); // get property definition - cmPropertyDefinition *GetPropertyDefinition - (const std::string& name, cmProperty::ScopeType scope); + cmPropertyDefinition const* GetPropertyDefinition + (const std::string& name, cmProperty::ScopeType scope) const; // Is a property defined? - bool IsPropertyDefined(const std::string& name, cmProperty::ScopeType scope); - bool IsPropertyChained(const std::string& name, cmProperty::ScopeType scope); + 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; @@ -157,19 +219,12 @@ private: std::map<std::string, cmCommand*> Commands; cmPropertyMap GlobalProperties; cmake* CMakeInstance; - std::vector<std::string> Locations; - std::vector<std::string> OutputLocations; - std::vector<PositionType> ParentPositions; - - std::vector<std::vector<std::string> > CurrentSourceDirectoryComponents; - std::vector<std::vector<std::string> > CurrentBinaryDirectoryComponents; - // The top-most directories for relative path conversion. Both the - // source and destination location of a relative path conversion - // must be underneath one of these directories (both under source or - // both under binary) in order for the relative path to be evaluated - // safely by the build tools. - std::vector<std::string> RelativePathTopSource; - std::vector<std::string> RelativePathTopBinary; + + cmLinkedTree<BuildsystemDirectoryStateType> BuildsystemDirectory; + + cmLinkedTree<std::string> ExecutionListFiles; + + cmLinkedTree<SnapshotDataType> SnapshotData; std::vector<std::string> SourceDirectoryComponents; std::vector<std::string> BinaryDirectoryComponents; |