resolve cyclic dependency with zstd
[platform/upstream/cmake.git] / Source / cmStateDirectory.h
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 "cmStatePrivate.h"
14 #include "cmStateSnapshot.h"
15 #include "cmValue.h"
16
17 class cmListFileBacktrace;
18 template <typename T>
19 class BT;
20
21 class cmStateDirectory
22 {
23   cmStateDirectory(
24     cmLinkedTree<cmStateDetail::BuildsystemDirectoryStateType>::iterator iter,
25     cmStateSnapshot const& snapshot);
26
27 public:
28   std::string const& GetCurrentSource() const;
29   void SetCurrentSource(std::string const& dir);
30   std::string const& GetCurrentBinary() const;
31   void SetCurrentBinary(std::string const& dir);
32
33   cmBTStringRange GetIncludeDirectoriesEntries() const;
34   void AppendIncludeDirectoriesEntry(BT<std::string> const& vec);
35   void PrependIncludeDirectoriesEntry(BT<std::string> const& vec);
36   void SetIncludeDirectories(BT<std::string> const& vec);
37   void ClearIncludeDirectories();
38
39   cmBTStringRange GetCompileDefinitionsEntries() const;
40   void AppendCompileDefinitionsEntry(BT<std::string> const& vec);
41   void SetCompileDefinitions(BT<std::string> const& vec);
42   void ClearCompileDefinitions();
43
44   cmBTStringRange GetCompileOptionsEntries() const;
45   void AppendCompileOptionsEntry(BT<std::string> const& vec);
46   void SetCompileOptions(BT<std::string> const& vec);
47   void ClearCompileOptions();
48
49   cmBTStringRange GetLinkOptionsEntries() const;
50   void AppendLinkOptionsEntry(BT<std::string> const& vec);
51   void PrependLinkDirectoriesEntry(BT<std::string> const& vec);
52   void SetLinkOptions(BT<std::string> const& vec);
53   void ClearLinkOptions();
54
55   cmBTStringRange GetLinkDirectoriesEntries() const;
56   void AppendLinkDirectoriesEntry(BT<std::string> const& vec);
57   void SetLinkDirectories(BT<std::string> const& vecs);
58   void ClearLinkDirectories();
59
60   void SetProperty(const std::string& prop, const char* value,
61                    cmListFileBacktrace const& lfbt);
62   void SetProperty(const std::string& prop, cmValue value,
63                    cmListFileBacktrace const& lfbt);
64   void AppendProperty(const std::string& prop, const std::string& value,
65                       bool asString, cmListFileBacktrace const& lfbt);
66   cmValue GetProperty(const std::string& prop) const;
67   cmValue GetProperty(const std::string& prop, bool chain) const;
68   bool GetPropertyAsBool(const std::string& prop) const;
69   std::vector<std::string> GetPropertyKeys() const;
70
71   void AddNormalTargetName(std::string const& name);
72   void AddImportedTargetName(std::string const& name);
73
74 private:
75   template <typename ValueType>
76   void StoreProperty(const std::string& prop, ValueType value,
77                      cmListFileBacktrace const& lfbt);
78
79   cmLinkedTree<cmStateDetail::BuildsystemDirectoryStateType>::iterator
80     DirectoryState;
81   cmStateSnapshot Snapshot_;
82   friend class cmStateSnapshot;
83 };