From 2d37e6d1a86ea2397645fc94b7a0afe9354aa326 Mon Sep 17 00:00:00 2001 From: Bill Hoffman Date: Tue, 30 Apr 2002 14:00:35 -0400 Subject: ENH: add new command to separate space separated arguments --- Source/cmCommands.cxx | 2 + Source/cmSeparateArgumentsCommand.cxx | 38 +++++++++++++++++ Source/cmSeparateArgumentsCommand.h | 79 +++++++++++++++++++++++++++++++++++ 3 files changed, 119 insertions(+) create mode 100644 Source/cmSeparateArgumentsCommand.cxx create mode 100644 Source/cmSeparateArgumentsCommand.h diff --git a/Source/cmCommands.cxx b/Source/cmCommands.cxx index 0b2e052..4380e8f 100644 --- a/Source/cmCommands.cxx +++ b/Source/cmCommands.cxx @@ -64,6 +64,7 @@ #include "cmOutputRequiredFilesCommand.cxx" #include "cmProjectCommand.cxx" #include "cmRemoveCommand.cxx" +#include "cmSeparateArgumentsCommand.cxx" #include "cmSetCommand.cxx" #include "cmSetSourceFilesPropertiesCommand.cxx" #include "cmSiteNameCommand.cxx" @@ -131,6 +132,7 @@ void GetPredefinedCommands(std::list& commands) commands.push_back(new cmOutputRequiredFilesCommand); commands.push_back(new cmProjectCommand); commands.push_back(new cmRemoveCommand); + commands.push_back(new cmSeparateArgumentsCommand); commands.push_back(new cmSetCommand); commands.push_back(new cmSetSourceFilesPropertiesCommand); commands.push_back(new cmSiteNameCommand); diff --git a/Source/cmSeparateArgumentsCommand.cxx b/Source/cmSeparateArgumentsCommand.cxx new file mode 100644 index 0000000..32fa5b1 --- /dev/null +++ b/Source/cmSeparateArgumentsCommand.cxx @@ -0,0 +1,38 @@ +/*========================================================================= + + Program: Insight Segmentation & Registration Toolkit + Module: $RCSfile$ + Language: C++ + Date: $Date$ + Version: $Revision$ + + Copyright (c) 2002 Insight Consortium. All rights reserved. + See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm 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. + +=========================================================================*/ +#include "cmSeparateArgumentsCommand.h" + +// cmSeparateArgumentsCommand +bool cmSeparateArgumentsCommand::InitialPass(std::vector const& args) +{ + if(args.size() != 1 ) + { + this->SetError("called with incorrect number of arguments"); + return false; + } + const char* cacheValue = m_Makefile->GetDefinition(args[0].c_str()); + if(!cacheValue) + { + return true; + } + std::string value = cacheValue; + cmSystemTools::ReplaceString(value, + " ", ";"); + m_Makefile->AddDefinition(args[0].c_str(), value.c_str()); + return true; +} + diff --git a/Source/cmSeparateArgumentsCommand.h b/Source/cmSeparateArgumentsCommand.h new file mode 100644 index 0000000..0bc1c67 --- /dev/null +++ b/Source/cmSeparateArgumentsCommand.h @@ -0,0 +1,79 @@ +/*========================================================================= + + Program: Insight Segmentation & Registration Toolkit + Module: $RCSfile$ + Language: C++ + Date: $Date$ + Version: $Revision$ + + Copyright (c) 2002 Insight Consortium. All rights reserved. + See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm 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 cmSeparateArgumentsCommand_h +#define cmSeparateArgumentsCommand_h + +#include "cmStandardIncludes.h" +#include "cmCommand.h" + +/** \class cmSeparateArgumentsCommand + * \brief SeparateArguments a CMAKE variable + * + * cmSeparateArgumentsCommand sets a variable to a value with expansion. + */ +class cmSeparateArgumentsCommand : public cmCommand +{ +public: + /** + * This is a virtual constructor for the command. + */ + virtual cmCommand* Clone() + { + return new cmSeparateArgumentsCommand; + } + + /** + * This is called when the command is first encountered in + * the CMakeLists.txt file. + */ + virtual bool InitialPass(std::vector const& args); + + /** + * This determines if the command gets propagated down + * to makefiles located in subdirectories. + */ + virtual bool IsInherited() {return true;} + + /** + * The name of the command as specified in CMakeList.txt. + */ + virtual const char* GetName() {return "SEPARATE_ARGUMENTS";} + + /** + * Succinct documentation. + */ + virtual const char* GetTerseDocumentation() + { + return "Split space separated arguments into a semi-colon separated list."; + } + + /** + * More documentation. + */ + virtual const char* GetFullDocumentation() + { + return + "SEPARATE_ARGUMENTS(VARIABLE)\n" + "Convert the value of VARIABLE to a semi-colon separated list. All spaces are replaced with ;"; + } + + cmTypeMacro(cmSeparateArgumentsCommand, cmCommand); +}; + + + +#endif -- cgit v0.12