1 /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying 2 file Copyright.txt or https://cmake.org/licensing for details. */ 3 4 #pragma once 5 6 #include "cmConfigure.h" // IWYU pragma: keep 7 8 #include <string> 9 #include <vector> 10 11 #include "cmAlgorithms.h" 12 #include "cmLinkedTree.h" 13 #include "cmListFileCache.h" 14 #include "cmStatePrivate.h" 15 #include "cmStateSnapshot.h" 16 #include "cmValue.h" 17 18 class cmStateDirectory 19 { 20 cmStateDirectory( 21 cmLinkedTree<cmStateDetail::BuildsystemDirectoryStateType>::iterator iter, 22 cmStateSnapshot const& snapshot); 23 24 public: 25 std::string const& GetCurrentSource() const; 26 void SetCurrentSource(std::string const& dir); 27 std::string const& GetCurrentBinary() const; 28 void SetCurrentBinary(std::string const& dir); 29 30 cmBTStringRange GetIncludeDirectoriesEntries() const; 31 void AppendIncludeDirectoriesEntry(BT<std::string> const& vec); 32 void PrependIncludeDirectoriesEntry(BT<std::string> const& vec); 33 void SetIncludeDirectories(BT<std::string> const& vec); 34 void ClearIncludeDirectories(); 35 36 cmBTStringRange GetCompileDefinitionsEntries() const; 37 void AppendCompileDefinitionsEntry(BT<std::string> const& vec); 38 void SetCompileDefinitions(BT<std::string> const& vec); 39 void ClearCompileDefinitions(); 40 41 cmBTStringRange GetCompileOptionsEntries() const; 42 void AppendCompileOptionsEntry(BT<std::string> const& vec); 43 void SetCompileOptions(BT<std::string> const& vec); 44 void ClearCompileOptions(); 45 46 cmBTStringRange GetLinkOptionsEntries() const; 47 void AppendLinkOptionsEntry(BT<std::string> const& vec); 48 void PrependLinkDirectoriesEntry(BT<std::string> const& vec); 49 void SetLinkOptions(BT<std::string> const& vec); 50 void ClearLinkOptions(); 51 52 cmBTStringRange GetLinkDirectoriesEntries() const; 53 void AppendLinkDirectoriesEntry(BT<std::string> const& vec); 54 void SetLinkDirectories(BT<std::string> const& vecs); 55 void ClearLinkDirectories(); 56 57 void SetProperty(const std::string& prop, const char* value, 58 cmListFileBacktrace const& lfbt); 59 void SetProperty(const std::string& prop, cmValue value, 60 cmListFileBacktrace const& lfbt); 61 void AppendProperty(const std::string& prop, const std::string& value, 62 bool asString, cmListFileBacktrace const& lfbt); 63 cmValue GetProperty(const std::string& prop) const; 64 cmValue GetProperty(const std::string& prop, bool chain) const; 65 bool GetPropertyAsBool(const std::string& prop) const; 66 std::vector<std::string> GetPropertyKeys() const; 67 68 void AddNormalTargetName(std::string const& name); 69 void AddImportedTargetName(std::string const& name); 70 71 private: 72 template <typename ValueType> 73 void StoreProperty(const std::string& prop, ValueType value, 74 cmListFileBacktrace const& lfbt); 75 76 cmLinkedTree<cmStateDetail::BuildsystemDirectoryStateType>::iterator 77 DirectoryState; 78 cmStateSnapshot Snapshot_; 79 friend class cmStateSnapshot; 80 }; 81