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