/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying file Copyright.txt or https://cmake.org/licensing for details. */ #pragma once #include "cmConfigure.h" // IWYU pragma: keep #include <string> #include <vector> #include "cmAlgorithms.h" #include "cmLinkedTree.h" #include "cmStatePrivate.h" #include "cmStateSnapshot.h" #include "cmValue.h" class cmListFileBacktrace; template <typename T> class BT; class cmStateDirectory { cmStateDirectory( cmLinkedTree<cmStateDetail::BuildsystemDirectoryStateType>::iterator iter, cmStateSnapshot const& snapshot); public: std::string const& GetCurrentSource() const; void SetCurrentSource(std::string const& dir); std::string const& GetCurrentBinary() const; void SetCurrentBinary(std::string const& dir); cmBTStringRange GetIncludeDirectoriesEntries() const; void AppendIncludeDirectoriesEntry(BT<std::string> const& vec); void PrependIncludeDirectoriesEntry(BT<std::string> const& vec); void SetIncludeDirectories(BT<std::string> const& vec); void ClearIncludeDirectories(); cmBTStringRange GetCompileDefinitionsEntries() const; void AppendCompileDefinitionsEntry(BT<std::string> const& vec); void SetCompileDefinitions(BT<std::string> const& vec); void ClearCompileDefinitions(); cmBTStringRange GetCompileOptionsEntries() const; void AppendCompileOptionsEntry(BT<std::string> const& vec); void SetCompileOptions(BT<std::string> const& vec); void ClearCompileOptions(); cmBTStringRange GetLinkOptionsEntries() const; void AppendLinkOptionsEntry(BT<std::string> const& vec); void PrependLinkDirectoriesEntry(BT<std::string> const& vec); void SetLinkOptions(BT<std::string> const& vec); void ClearLinkOptions(); cmBTStringRange GetLinkDirectoriesEntries() const; void AppendLinkDirectoriesEntry(BT<std::string> const& vec); void SetLinkDirectories(BT<std::string> const& vecs); void ClearLinkDirectories(); void SetProperty(const std::string& prop, const char* value, cmListFileBacktrace const& lfbt); void SetProperty(const std::string& prop, cmValue value, cmListFileBacktrace const& lfbt); void AppendProperty(const std::string& prop, const std::string& value, bool asString, cmListFileBacktrace const& lfbt); cmValue GetProperty(const std::string& prop) const; cmValue GetProperty(const std::string& prop, bool chain) const; bool GetPropertyAsBool(const std::string& prop) const; std::vector<std::string> GetPropertyKeys() const; void AddNormalTargetName(std::string const& name); void AddImportedTargetName(std::string const& name); private: template <typename ValueType> void StoreProperty(const std::string& prop, ValueType value, cmListFileBacktrace const& lfbt); cmLinkedTree<cmStateDetail::BuildsystemDirectoryStateType>::iterator DirectoryState; cmStateSnapshot Snapshot_; friend class cmStateSnapshot; };