/* 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 #include #include "cmAlgorithms.h" #include "cmLinkedTree.h" #include "cmStatePrivate.h" #include "cmStateSnapshot.h" #include "cmValue.h" class cmListFileBacktrace; template class BT; class cmStateDirectory { cmStateDirectory( cmLinkedTree::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 const& vec); void PrependIncludeDirectoriesEntry(BT const& vec); void SetIncludeDirectories(BT const& vec); void ClearIncludeDirectories(); cmBTStringRange GetCompileDefinitionsEntries() const; void AppendCompileDefinitionsEntry(BT const& vec); void SetCompileDefinitions(BT const& vec); void ClearCompileDefinitions(); cmBTStringRange GetCompileOptionsEntries() const; void AppendCompileOptionsEntry(BT const& vec); void SetCompileOptions(BT const& vec); void ClearCompileOptions(); cmBTStringRange GetLinkOptionsEntries() const; void AppendLinkOptionsEntry(BT const& vec); void PrependLinkDirectoriesEntry(BT const& vec); void SetLinkOptions(BT const& vec); void ClearLinkOptions(); cmBTStringRange GetLinkDirectoriesEntries() const; void AppendLinkDirectoriesEntry(BT const& vec); void SetLinkDirectories(BT 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 GetPropertyKeys() const; void AddNormalTargetName(std::string const& name); void AddImportedTargetName(std::string const& name); private: template void StoreProperty(const std::string& prop, ValueType value, cmListFileBacktrace const& lfbt); cmLinkedTree::iterator DirectoryState; cmStateSnapshot Snapshot_; friend class cmStateSnapshot; };