diff options
author | Brad King <brad.king@kitware.com> | 2001-03-20 18:20:59 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2001-03-20 18:20:59 (GMT) |
commit | 8c087d0e7a2045fead07d3069eefddfa4c515179 (patch) | |
tree | 3ea3acebf9283f281e5753a15968bd13c8558da2 /Source/cmSourceGroup.cxx | |
parent | 51ef865ef8c3b39e08ad627cb0effa35ca74955a (diff) | |
download | CMake-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.cxx | 87 |
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()); +} |