| /*========================================================================= |
| |
| Program: CMake - Cross-Platform Makefile Generator |
| Module: $RCSfile$ |
| Language: C++ |
| Date: $Date$ |
| Version: $Revision$ |
| |
| Copyright (c) 2002 Kitware, Inc., Insight Consortium. All rights reserved. |
| See Copyright.txt or http://www.cmake.org/HTML/Copyright.html for details. |
| |
| This software is distributed WITHOUT ANY WARRANTY; without even |
| the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR |
| PURPOSE. See the above copyright notices for more information. |
| |
| =========================================================================*/ |
| #ifndef cmSourceGroup_h |
| #define cmSourceGroup_h |
| |
| #include "cmStandardIncludes.h" |
| #include <cmsys/RegularExpression.hxx> |
| |
| class cmSourceFile; |
| |
| /** \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(const char* name, const char* regex); |
| ~cmSourceGroup() {} |
| |
| /** |
| * 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 char* name); |
| |
| /** |
| * Add child to this sourcegroup |
| */ |
| void AddChild(cmSourceGroup child); |
| |
| /** |
| * Looks up child and returns it |
| */ |
| cmSourceGroup *lookupChild(const char *name); |
| |
| /** |
| * Get the name of this group. |
| */ |
| const char* GetName() const; |
| |
| /** |
| * Check if the given name matches this group's regex. |
| */ |
| bool MatchesRegex(const char* name); |
| |
| /** |
| * Check if the given name matches this group's explicit file list. |
| */ |
| bool MatchesFiles(const char* name); |
| |
| /** |
| * Check if the given name matches this group's explicit file list |
| * in children. |
| */ |
| cmSourceGroup *MatchChildrenFiles(const char *name); |
| |
| /** |
| * Check if the given name matches this group's regex in children. |
| */ |
| cmSourceGroup *MatchChildrenRegex(const char *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<const cmSourceFile*>& GetSourceFiles(); |
| |
| std::vector<cmSourceGroup> GetGroupChildren() const; |
| private: |
| /** |
| * The name of the source group. |
| */ |
| std::string Name; |
| |
| /** |
| * The regular expression matching the files in the group. |
| */ |
| cmsys::RegularExpression GroupRegex; |
| |
| /** |
| * Set of file names explicitly added to this group. |
| */ |
| std::set<cmStdString> GroupFiles; |
| |
| /** |
| * Vector of all source files that have been assigned to |
| * this group. |
| */ |
| std::vector<const cmSourceFile*> SourceFiles; |
| |
| std::vector<cmSourceGroup> GroupChildren; |
| }; |
| |
| #endif |