/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying file LICENSE.rst or https://cmake.org/licensing for details. */ #pragma once #include "cmConfigure.h" // IWYU pragma: keep #include #include #include #include #include #include "cmFileSetMetadata.h" #include "cmGeneratorExpression.h" #include "cmListFileCache.h" #include "cmTargetPropertyEntry.h" #include "cmValue.h" namespace cm { namespace GenEx { struct Context; } } struct cmGeneratorExpressionDAGChecker; class cmFileSet; class cmGeneratorTarget; class cmGeneratorFileSet { public: using TargetPropertyEntry = cm::TargetPropertyEntry; cmGeneratorFileSet(cmGeneratorTarget const*, cmFileSet const*); ~cmGeneratorFileSet() = default; cmGeneratorFileSet(cmGeneratorFileSet&&) = default; cmGeneratorFileSet(cmGeneratorFileSet const&) = delete; cmGeneratorFileSet& operator=(cmGeneratorFileSet const&) = delete; std::string const& GetName() const; std::string const& GetType() const; cm::FileSetMetadata::Visibility GetVisibility() const; bool IsForSelf() const; bool IsForInterface() const; bool CanBeIncluded() const; cmGeneratorTarget const* GetTarget() const { return this->Target; } bool BelongsTo(cmGeneratorTarget const* target) const { return this->Target == target; } cmFileSet const* GetFileSet() const { return this->FileSet; } cmValue GetProperty(std::string const& prop) const; std::vector> GetIncludeDirectories( std::string const& config, std::string const& lang) const; std::vector> GetInterfaceIncludeDirectories( std::string const& config, std::string const& lang) const; std::vector> GetCompileOptions( std::string const& config, std::string const& language) const; std::vector> GetInterfaceCompileOptions( std::string const& config, std::string const& language) const; std::vector> GetCompileDefinitions( std::string const& config, std::string const& language) const; std::vector> GetInterfaceCompileDefinitions( std::string const& config, std::string const& language) const; std::vector> const& GetDirectoryEntries() const; std::vector> const& GetFileEntries() const; std::vector> GetSources( cm::GenEx::Context const& context, cmGeneratorTarget const* target, cmGeneratorExpressionDAGChecker* dagChecker = nullptr) const; // returned value: // first: list of directories // second: is context sensitive std::pair, bool> GetDirectories( cm::GenEx::Context const& context, cmGeneratorTarget const* target, cmGeneratorExpressionDAGChecker* dagChecker = nullptr) const; // returned value: // first: list of files per directory // second: is context sensitive std::pair>, bool> GetFiles( cm::GenEx::Context const& context, cmGeneratorTarget const* target, cmGeneratorExpressionDAGChecker* dagChecker = nullptr) const; std::vector> const& CompileFileEntries() const; std::vector> const& CompileDirectoryEntries() const; std::vector EvaluateDirectoryEntries( std::vector> const& cges, cm::GenEx::Context const& context, cmGeneratorTarget const* target, cmGeneratorExpressionDAGChecker* dagChecker = nullptr) const; void EvaluateFileEntry( std::vector const& dirs, std::map>& filesPerDir, std::unique_ptr const& cge, cm::GenEx::Context const& context, cmGeneratorTarget const* target, cmGeneratorExpressionDAGChecker* dagChecker = nullptr) const; private: cmGeneratorTarget const* Target; cmFileSet const* FileSet; mutable std::vector> CompiledDirectoryEntries; mutable std::vector> CompiledFileEntries; using TargetPropertyEntries = std::vector>; TargetPropertyEntries IncludeDirectories; TargetPropertyEntries InterfaceIncludeDirectories; TargetPropertyEntries CompileOptions; TargetPropertyEntries InterfaceCompileOptions; TargetPropertyEntries CompileDefinitions; TargetPropertyEntries InterfaceCompileDefinitions; using ConfigAndLanguage = std::pair; using ConfigAndLanguageToBTStrings = std::map>>; mutable ConfigAndLanguageToBTStrings IncludeDirectoriesCache; mutable ConfigAndLanguageToBTStrings InterfaceIncludeDirectoriesCache; mutable ConfigAndLanguageToBTStrings CompileOptionsCache; mutable ConfigAndLanguageToBTStrings InterfaceCompileOptionsCache; mutable ConfigAndLanguageToBTStrings CompileDefinitionsCache; mutable ConfigAndLanguageToBTStrings InterfaceCompileDefinitionsCache; };