summaryrefslogtreecommitdiffstats
path: root/Source/cmSourceGroup.cxx
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2001-03-20 18:20:59 (GMT)
committerBrad King <brad.king@kitware.com>2001-03-20 18:20:59 (GMT)
commit8c087d0e7a2045fead07d3069eefddfa4c515179 (patch)
tree3ea3acebf9283f281e5753a15968bd13c8558da2 /Source/cmSourceGroup.cxx
parent51ef865ef8c3b39e08ad627cb0effa35ca74955a (diff)
downloadCMake-8c087d0e7a2045fead07d3069eefddfa4c515179.zip
CMake-8c087d0e7a2045fead07d3069eefddfa4c515179.tar.gz
CMake-8c087d0e7a2045fead07d3069eefddfa4c515179.tar.bz2
ENH: Added SOURCE_GROUP command and corresponding support code. This command allows CMakeLists files to specify how sources are organized into groups in the generated DSP files and makefiles.
Diffstat (limited to 'Source/cmSourceGroup.cxx')
-rw-r--r--Source/cmSourceGroup.cxx87
1 files changed, 87 insertions, 0 deletions
diff --git a/Source/cmSourceGroup.cxx b/Source/cmSourceGroup.cxx
new file mode 100644
index 0000000..fc09631
--- /dev/null
+++ b/Source/cmSourceGroup.cxx
@@ -0,0 +1,87 @@
+/*=========================================================================
+
+ Program: Insight Segmentation & Registration Toolkit
+ Module: $RCSfile$
+ Language: C++
+ Date: $Date$
+ Version: $Revision$
+
+
+ Copyright (c) 2000 National Library of Medicine
+ All rights reserved.
+
+ See COPYRIGHT.txt for copyright details.
+
+=========================================================================*/
+#include "cmSourceGroup.h"
+
+
+/**
+ * The constructor initializes the group's regular expression.
+ */
+cmSourceGroup::cmSourceGroup(const char* name, const char* regex):
+ m_Name(name),
+ m_GroupRegex(regex)
+{
+}
+
+
+/**
+ * Copy constructor.
+ */
+cmSourceGroup::cmSourceGroup(const cmSourceGroup& r):
+ m_Name(r.m_Name),
+ m_GroupRegex(r.m_GroupRegex),
+ m_Sources(r.m_Sources),
+ m_CustomCommands(r.m_CustomCommands)
+{
+}
+
+
+/**
+ * Returns whether the given name matches the group's regular expression.
+ */
+bool cmSourceGroup::Matches(const char* name)
+{
+ return m_GroupRegex.find(name);
+}
+
+
+/**
+ * Add a source and corresponding custom command to the group. If the
+ * source already exists, the command will be added to its set of commands.
+ * If the command also already exists, the given dependencies and outputs
+ * are added to it.
+ */
+void cmSourceGroup::AddCustomCommand(const char* source,
+ const char* command,
+ const std::vector<std::string>& depends,
+ const std::vector<std::string>& outputs)
+{
+ CustomCommands::iterator s = m_CustomCommands.find(source);
+ if(s == m_CustomCommands.end())
+ {
+ // The source was not found. Add it with this command.
+ m_CustomCommands[source][command].m_Depends.insert(depends.begin(),
+ depends.end());
+ m_CustomCommands[source][command].m_Outputs.insert(outputs.begin(),
+ outputs.end());
+ return;
+ }
+
+ // The source already exists. See if the command exists.
+ Commands& commands = s->second;
+ Commands::iterator c = commands.find(command);
+ if(c == commands.end())
+ {
+ // The command did not exist. Add it.
+ commands[command].m_Depends.insert(depends.begin(), depends.end());
+ commands[command].m_Outputs.insert(outputs.begin(), outputs.end());
+ return;
+ }
+
+ // The command already exists for this source. Merge the sets.
+ CommandFiles& commandFiles = c->second;
+ commandFiles.m_Depends.insert(depends.begin(), depends.end());
+ commandFiles.m_Outputs.insert(outputs.begin(), outputs.end());
+}