/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying file LICENSE.rst or https://cmake.org/licensing for details. */ #pragma once #include #include #include #include #include "cmAlgorithms.h" #include "cmFileSetMetadata.h" #include "cmListFileCache.h" #include "cmPropertyMap.h" #include "cmValue.h" class cmMakefile; class cmTarget; class cmFileSet { public: cmFileSet(cmMakefile* makefile, cmTarget* target, std::string name, std::string type, cm::FileSetMetadata::Visibility visibility); std::string const& GetName() const { return this->Name; } std::string const& GetType() const { return this->Type; } cm::FileSetMetadata::Visibility GetVisibility() const { return this->Visibility; } cmMakefile* GetMakefile() const { return this->Makefile; } bool IsForSelf() const { return cm::FileSetMetadata::VisibilityIsForSelf(this->GetVisibility()); } bool IsForInterface() const { return cm::FileSetMetadata::VisibilityIsForInterface( this->GetVisibility()); } bool CanBeIncluded() const { return this->Type != cm::FileSetMetadata::CXX_MODULES; } void CopyEntries(cmFileSet const* fs); void ClearDirectoryEntries(); void AddDirectoryEntry(BT directories); std::vector> const& GetDirectoryEntries() const { return this->DirectoryEntries; } void ClearFileEntries(); void AddFileEntry(BT files); std::vector> const& GetFileEntries() const { return this->FileEntries; } // Special properties cmBTStringRange GetIncludeDirectories() const; cmBTStringRange GetInterfaceIncludeDirectories() const; cmBTStringRange GetCompileOptions() const; cmBTStringRange GetInterfaceCompileOptions() const; cmBTStringRange GetCompileDefinitions() const; cmBTStringRange GetInterfaceCompileDefinitions() const; //! Set/Get a property of this file set void SetProperty(std::string const& prop, cmValue value); void SetProperty(std::string const& prop, std::nullptr_t) { this->SetProperty(prop, cmValue{ nullptr }); } void RemoveProperty(std::string const& prop) { this->SetProperty(prop, cmValue{ nullptr }); } void SetProperty(std::string const& prop, std::string const& value) { this->SetProperty(prop, cmValue{ value }); } void AppendProperty(std::string const& prop, std::string const& value, bool asString = false); cmValue GetProperty(std::string const& prop) const; private: cmMakefile* Makefile; cmTarget* Target; std::string Name; std::string Type; cm::FileSetMetadata::Visibility Visibility; std::vector> DirectoryEntries; std::vector> FileEntries; cmPropertyMap Properties; std::vector> IncludeDirectories; std::vector> InterfaceIncludeDirectories; std::vector> CompileOptions; std::vector> InterfaceCompileOptions; std::vector> CompileDefinitions; std::vector> InterfaceCompileDefinitions; };