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