From 035c7fabc3b82cbc9a346c11abe2e9462b4c0379 Mon Sep 17 00:00:00 2001 From: Anas Nashif Date: Tue, 30 Oct 2012 15:39:57 -0700 Subject: Imported Upstream version 2.8.9 --- Source/cmSourceGroup.h | 132 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100644 Source/cmSourceGroup.h (limited to 'Source/cmSourceGroup.h') diff --git a/Source/cmSourceGroup.h b/Source/cmSourceGroup.h new file mode 100644 index 000000000..641dcbd57 --- /dev/null +++ b/Source/cmSourceGroup.h @@ -0,0 +1,132 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmSourceGroup_h +#define cmSourceGroup_h + +#include "cmStandardIncludes.h" +#include + +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(const char* name, const char* regex, + const char* parentName=0); + 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 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; + + /** + * Get the full path name for group. + */ + const char* GetFullName() 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& GetSourceFiles() const; + + std::vector 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 GroupFiles; + + /** + * Vector of all source files that have been assigned to + * this group. + */ + std::vector SourceFiles; + + cmSourceGroupInternals* Internal; +}; + +#endif -- cgit v1.2.3