diff options
-rw-r--r-- | Source/CMakeLists.txt | 2 | ||||
-rw-r--r-- | Source/cmCommands.cxx | 10 | ||||
-rw-r--r-- | Source/cmRemoveCommand.cxx | 77 | ||||
-rw-r--r-- | Source/cmRemoveCommand.h | 81 |
4 files changed, 166 insertions, 4 deletions
diff --git a/Source/CMakeLists.txt b/Source/CMakeLists.txt index 5363a95..531f486 100644 --- a/Source/CMakeLists.txt +++ b/Source/CMakeLists.txt @@ -1,3 +1,5 @@ +CMAKE_MINIMUM_REQUIRED(VERSION 1.3) + SET(SRCS cmake.cxx cmakewizard.cxx diff --git a/Source/cmCommands.cxx b/Source/cmCommands.cxx index 0b768b0..0b2e052 100644 --- a/Source/cmCommands.cxx +++ b/Source/cmCommands.cxx @@ -20,6 +20,7 @@ // like to have CMake to build CMake. #include "cmCommands.h" #include "cmAbstractFilesCommand.cxx" +#include "cmAddCustomCommandCommand.cxx" #include "cmAddCustomTargetCommand.cxx" #include "cmAddDefinitionsCommand.cxx" #include "cmAddDependenciesCommand.cxx" @@ -62,6 +63,7 @@ #include "cmOptionCommand.cxx" #include "cmOutputRequiredFilesCommand.cxx" #include "cmProjectCommand.cxx" +#include "cmRemoveCommand.cxx" #include "cmSetCommand.cxx" #include "cmSetSourceFilesPropertiesCommand.cxx" #include "cmSiteNameCommand.cxx" @@ -74,18 +76,18 @@ #include "cmUseMangledMesaCommand.cxx" #include "cmUtilitySourceCommand.cxx" #include "cmVariableRequiresCommand.cxx" +#include "cmVTKMakeInstantiatorCommand.cxx" #include "cmVTKWrapJavaCommand.cxx" #include "cmVTKWrapPythonCommand.cxx" #include "cmVTKWrapTclCommand.cxx" #include "cmQTWrapCPPCommand.cxx" #include "cmQTWrapUICommand.cxx" #include "cmWrapExcludeFilesCommand.cxx" -#include "cmAddCustomCommandCommand.cxx" -#include "cmVTKMakeInstantiatorCommand.cxx" void GetPredefinedCommands(std::list<cmCommand*>& commands) { commands.push_back(new cmAbstractFilesCommand); + commands.push_back(new cmAddCustomCommandCommand); commands.push_back(new cmAddCustomTargetCommand); commands.push_back(new cmAddDefinitionsCommand); commands.push_back(new cmAddDependenciesCommand); @@ -128,6 +130,7 @@ void GetPredefinedCommands(std::list<cmCommand*>& commands) commands.push_back(new cmOptionCommand); commands.push_back(new cmOutputRequiredFilesCommand); commands.push_back(new cmProjectCommand); + commands.push_back(new cmRemoveCommand); commands.push_back(new cmSetCommand); commands.push_back(new cmSetSourceFilesPropertiesCommand); commands.push_back(new cmSiteNameCommand); @@ -140,12 +143,11 @@ void GetPredefinedCommands(std::list<cmCommand*>& commands) commands.push_back(new cmUseMangledMesaCommand); commands.push_back(new cmUtilitySourceCommand); commands.push_back(new cmVariableRequiresCommand); + commands.push_back(new cmVTKMakeInstantiatorCommand); commands.push_back(new cmVTKWrapJavaCommand); commands.push_back(new cmVTKWrapPythonCommand); commands.push_back(new cmVTKWrapTclCommand); commands.push_back(new cmQTWrapCPPCommand); commands.push_back(new cmQTWrapUICommand); commands.push_back(new cmWrapExcludeFilesCommand); - commands.push_back(new cmAddCustomCommandCommand); - commands.push_back(new cmVTKMakeInstantiatorCommand); } diff --git a/Source/cmRemoveCommand.cxx b/Source/cmRemoveCommand.cxx new file mode 100644 index 0000000..982432b --- /dev/null +++ b/Source/cmRemoveCommand.cxx @@ -0,0 +1,77 @@ +/*========================================================================= + + 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 "cmRemoveCommand.h" + +// cmRemoveCommand +bool cmRemoveCommand::InitialPass(std::vector<std::string> const& args) +{ + if(args.size() < 2 ) + { + this->SetError("called with incorrect number of arguments"); + return false; + } + + const char* variable = args[0].c_str(); // VAR is always first + // get the old value + const char* cacheValue + = m_Makefile->GetDefinition(variable); + + // expand the variable + std::vector<std::string> varArgsExpanded; + std::vector<std::string> temp; + temp.push_back(std::string(cacheValue)); + cmSystemTools::ExpandListArguments(temp, varArgsExpanded); + + // expand the args + // check for REMOVE(VAR v1 v2 ... vn) + std::vector<std::string> argsExpanded; + std::vector<std::string> temp2; + for(unsigned int j = 1; j < args.size(); ++j) + { + temp2.push_back(args[j]); + } + cmSystemTools::ExpandListArguments(temp2, argsExpanded); + + // now create the new value + std::string value; + for(unsigned int j = 1; j < varArgsExpanded.size(); ++j) + { + int found = 0; + for(unsigned int k = 1; k < argsExpanded.size(); ++k) + { + if (varArgsExpanded[j] == argsExpanded[k]) + { + found = 1; + break; + } + } + if (!found) + { + if (value.size()) + { + value += ";"; + } + value += varArgsExpanded[j]; + } + } + + // add the definition + m_Makefile->AddDefinition(variable, value.c_str()); + + return true; +} + diff --git a/Source/cmRemoveCommand.h b/Source/cmRemoveCommand.h new file mode 100644 index 0000000..7a73dcd --- /dev/null +++ b/Source/cmRemoveCommand.h @@ -0,0 +1,81 @@ +/*========================================================================= + + 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 cmRemoveCommand_h +#define cmRemoveCommand_h + +#include "cmStandardIncludes.h" +#include "cmCommand.h" + +/** \class cmRemoveCommand + * \brief Set a CMAKE variable + * + * cmRemoveCommand sets a variable to a value with expansion. + */ +class cmRemoveCommand : public cmCommand +{ +public: + /** + * This is a virtual constructor for the command. + */ + virtual cmCommand* Clone() + { + return new cmRemoveCommand; + } + + /** + * This is called when the command is first encountered in + * the CMakeLists.txt file. + */ + virtual bool InitialPass(std::vector<std::string> 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 "REMOVE";} + + /** + * Succinct documentation. + */ + virtual const char* GetTerseDocumentation() + { + return "Remove a value from a CMAKE variable"; + } + + /** + * More documentation. + */ + virtual const char* GetFullDocumentation() + { + return + "REMOVE(VAR VALUE VALUE ...)\n" + "Removes VALUE from the CMAke variable VAR. " + "This is typically used to remove entries from a vector " + "(e.g. semicolon separated list). VALUE is expanded. "; + } + + cmTypeMacro(cmRemoveCommand, cmCommand); +}; + + + +#endif |