/* 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 "cmTargetPropertyEntry.h" #include "cmValue.h" namespace cm { namespace GenEx { struct Context; } } template class BT; struct cmGeneratorExpressionDAGChecker; class cmFileSet; class cmGeneratorTarget; class cmGeneratorFileSet { public: using TargetPropertyEntry = cm::TargetPropertyEntry; cmGeneratorFileSet(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; cmFileSet const* GetFileSet() const { return this->FileSet; } cmValue GetProperty(std::string const& prop) 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: cmFileSet const* FileSet; mutable std::vector> CompiledDirectoryEntries; mutable std::vector> CompiledFileEntries; };