| /* 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 <memory> |
| #include <set> |
| #include <string> |
| #include <vector> |
| |
| #include "cmsys/RegularExpression.hxx" |
| |
| class cmSourceFile; |
| class cmSourceGroupInternals; |
| |
| /** \class cmSourceGroup |
| * \brief Hold a group of sources as specified by a SOURCE_GROUP command. |
| * |
| * cmSourceGroup holds a regular expression and a list of files. When |
| * local generators are about to generate the rules for a target's |
| * files, the set of source groups is consulted to group files |
| * together. A file is placed into the last source group that lists |
| * the file by name. If no group lists the file, it is placed into |
| * the last group whose regex matches it. |
| */ |
| class cmSourceGroup |
| { |
| public: |
| cmSourceGroup(std::string name, const char* regex, |
| const char* parentName = nullptr); |
| cmSourceGroup(cmSourceGroup const& r); |
| ~cmSourceGroup(); |
| cmSourceGroup& operator=(cmSourceGroup const&); |
| |
| /** |
| * Set the regular expression for this group. |
| */ |
| void SetGroupRegex(const char* regex); |
| |
| /** |
| * Add a file name to the explicit list of files for this group. |
| */ |
| void AddGroupFile(const std::string& name); |
| |
| /** |
| * Add child to this sourcegroup |
| */ |
| void AddChild(cmSourceGroup const& child); |
| |
| /** |
| * Looks up child and returns it |
| */ |
| cmSourceGroup* LookupChild(const std::string& name); |
| |
| /** |
| * Get the name of this group. |
| */ |
| std::string const& GetName() const; |
| |
| /** |
| * Get the full path name for group. |
| */ |
| std::string const& GetFullName() const; |
| |
| /** |
| * Check if the given name matches this group's regex. |
| */ |
| bool MatchesRegex(const std::string& name); |
| |
| /** |
| * Check if the given name matches this group's explicit file list. |
| */ |
| bool MatchesFiles(const std::string& name) const; |
| |
| /** |
| * Check if the given name matches this group's explicit file list |
| * in children. |
| */ |
| cmSourceGroup* MatchChildrenFiles(const std::string& name); |
| |
| /** |
| * Check if the given name matches this group's regex in children. |
| */ |
| cmSourceGroup* MatchChildrenRegex(const std::string& name); |
| |
| /** |
| * Assign the given source file to this group. Used only by |
| * generators. |
| */ |
| void AssignSource(const cmSourceFile* sf); |
| |
| /** |
| * Get the list of the source files that have been assigned to this |
| * source group. |
| */ |
| const std::vector<const cmSourceFile*>& GetSourceFiles() const; |
| |
| std::vector<cmSourceGroup> const& GetGroupChildren() const; |
| |
| private: |
| /** |
| * The name of the source group. |
| */ |
| std::string Name; |
| // Full path to group |
| std::string FullName; |
| |
| /** |
| * The regular expression matching the files in the group. |
| */ |
| cmsys::RegularExpression GroupRegex; |
| |
| /** |
| * Set of file names explicitly added to this group. |
| */ |
| std::set<std::string> GroupFiles; |
| |
| /** |
| * Vector of all source files that have been assigned to |
| * this group. |
| */ |
| std::vector<const cmSourceFile*> SourceFiles; |
| |
| std::unique_ptr<cmSourceGroupInternals> Internal; |
| }; |