diff options
author | Bill Hoffman <bill.hoffman@kitware.com> | 2002-04-17 20:16:06 (GMT) |
---|---|---|
committer | Bill Hoffman <bill.hoffman@kitware.com> | 2002-04-17 20:16:06 (GMT) |
commit | 0415b58573ba63a9c6168d8af05a165ea5e24774 (patch) | |
tree | ef79785f99fd23797aa8dcb27083c6a0cc9c1c5a /Source | |
parent | b7c368b5e37289f85f2155db1b594d6bc4a3f0a4 (diff) | |
download | CMake-0415b58573ba63a9c6168d8af05a165ea5e24774.zip CMake-0415b58573ba63a9c6168d8af05a165ea5e24774.tar.gz CMake-0415b58573ba63a9c6168d8af05a165ea5e24774.tar.bz2 |
ENH: backwards compatible for VTK 4.0, add cmake version requires
Diffstat (limited to 'Source')
-rw-r--r-- | Source/cmAbstractFilesCommand.cxx | 12 | ||||
-rw-r--r-- | Source/cmAddCustomCommandCommand.cxx | 6 | ||||
-rw-r--r-- | Source/cmCMakeMinimumRequired.cxx | 45 | ||||
-rw-r--r-- | Source/cmCMakeMinimumRequired.h | 79 | ||||
-rw-r--r-- | Source/cmCommands.cxx | 2 | ||||
-rw-r--r-- | Source/cmOptionCommand.cxx | 27 |
6 files changed, 160 insertions, 11 deletions
diff --git a/Source/cmAbstractFilesCommand.cxx b/Source/cmAbstractFilesCommand.cxx index 74c02f3..9941e14 100644 --- a/Source/cmAbstractFilesCommand.cxx +++ b/Source/cmAbstractFilesCommand.cxx @@ -40,10 +40,14 @@ bool cmAbstractFilesCommand::InitialPass(std::vector<std::string> const& argsIn) } else { - m += *j; - m += "\n"; - ret = false; - } + // for VTK 4.0 we have to support missing abstract sources + if(m_Makefile->GetDefinition("CMAKE_MINIMUM_REQUIRED_VERSION")) + { + m += *j; + m += "\n"; + ret = false; + } + } } if(!ret) { diff --git a/Source/cmAddCustomCommandCommand.cxx b/Source/cmAddCustomCommandCommand.cxx index f601ecc..b949438 100644 --- a/Source/cmAddCustomCommandCommand.cxx +++ b/Source/cmAddCustomCommandCommand.cxx @@ -18,19 +18,17 @@ // cmAddCustomCommandCommand -bool cmAddCustomCommandCommand::InitialPass(std::vector<std::string> const& argsIn) +bool cmAddCustomCommandCommand::InitialPass(std::vector<std::string> const& args) { /* Let's complain at the end of this function about the lack of a particular arg. For the moment, let's say that COMMAND, TARGET are always required. */ - if (argsIn.size() < 4) + if (args.size() < 4) { this->SetError("called with wrong number of arguments."); return false; } - std::vector<std::string> args; - cmSystemTools::ExpandListArguments(argsIn, args); std::string source, command, target; std::vector<std::string> command_args, depends, outputs; diff --git a/Source/cmCMakeMinimumRequired.cxx b/Source/cmCMakeMinimumRequired.cxx new file mode 100644 index 0000000..6be31de --- /dev/null +++ b/Source/cmCMakeMinimumRequired.cxx @@ -0,0 +1,45 @@ +/*========================================================================= + + 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 "cmCMakeMinimumRequired.h" + +// cmCMakeMinimumRequired +bool cmCMakeMinimumRequired::InitialPass(std::vector<std::string> const& args) +{ + if(args.size() != 2) + { + this->SetError("called with incorrect number of arguments"); + return false; + } + if(args[0] == "VERSION") + { + m_Makefile->AddDefinition("CMAKE_MINIMUM_REQUIRED_VERSION", args[1].c_str()); + } + float version = float(m_Makefile->GetMajorVersion()); + version += (float(m_Makefile->GetMinorVersion()) * .1); + float reqVersion = 0; + sscanf(args[1].c_str(), "%f", &reqVersion); + if(reqVersion > version) + { + std::strstream str; + str << "WARNING: This project requires version: " << args[1].c_str() << " of cmake.\n" + << "You are running version: " << version << std::ends; + cmSystemTools::Message(str.str()); + delete [] str.str(); + } + return true; +} + diff --git a/Source/cmCMakeMinimumRequired.h b/Source/cmCMakeMinimumRequired.h new file mode 100644 index 0000000..677a4a0 --- /dev/null +++ b/Source/cmCMakeMinimumRequired.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 cmCMakeMinimumRequired_h +#define cmCMakeMinimumRequired_h + +#include "cmStandardIncludes.h" +#include "cmCommand.h" + +/** \class cmCMakeMinimumRequired + * \brief Build a CMAKE variable + * + * cmCMakeMinimumRequired sets a variable to a value with expansion. + */ +class cmCMakeMinimumRequired : public cmCommand +{ +public: + /** + * This is a virtual constructor for the command. + */ + virtual cmCommand* Clone() + { + return new cmCMakeMinimumRequired; + } + + /** + * 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 "CMAKE_MINIMUM_REQUIRED";} + + /** + * Succinct documentation. + */ + virtual const char* GetTerseDocumentation() + { + return "Determine the command line that will build this project."; + } + + /** + * More documentation. + */ + virtual const char* GetFullDocumentation() + { + return + "CMAKE_MINIMUM_REQUIRED(NAME MAKECOMMAND)\n" + "Within CMAKE set NAME to the command that will build this project from the command line using MAKECOMMAND."; + } + + cmTypeMacro(cmCMakeMinimumRequired, cmCommand); +}; + + + +#endif diff --git a/Source/cmCommands.cxx b/Source/cmCommands.cxx index 7bc2080..0b768b0 100644 --- a/Source/cmCommands.cxx +++ b/Source/cmCommands.cxx @@ -29,6 +29,7 @@ #include "cmAuxSourceDirectoryCommand.cxx" #include "cmBuildCommand.cxx" #include "cmBuildNameCommand.cxx" +#include "cmCMakeMinimumRequired.cxx" #include "cmConfigureFileCommand.cxx" #include "cmCreateTestSourceList.cxx" #include "cmElseCommand.cxx" @@ -94,6 +95,7 @@ void GetPredefinedCommands(std::list<cmCommand*>& commands) commands.push_back(new cmAuxSourceDirectoryCommand); commands.push_back(new cmBuildCommand); commands.push_back(new cmBuildNameCommand); + commands.push_back(new cmCMakeMinimumRequired); commands.push_back(new cmConfigureFileCommand); commands.push_back(new cmCreateTestSourceList); commands.push_back(new cmElseCommand); diff --git a/Source/cmOptionCommand.cxx b/Source/cmOptionCommand.cxx index 2a943b8..4478a21 100644 --- a/Source/cmOptionCommand.cxx +++ b/Source/cmOptionCommand.cxx @@ -19,12 +19,33 @@ // cmOptionCommand bool cmOptionCommand::InitialPass(std::vector<std::string> const& args) { - if(args.size() < 2 || args.size() > 3) + bool argError = false; + if(args.size() < 2) { - this->SetError("called with incorrect number of arguments"); + argError = true; + } + // for VTK 4.0 we have to support the option command with more than 3 arguments + // if CMAKE_MINIMUM_REQUIRED_VERSION is not defined, if CMAKE_MINIMUM_REQUIRED_VERSION + // is defined, then we can have stricter checking. + if(m_Makefile->GetDefinition("CMAKE_MINIMUM_REQUIRED_VERSION")) + { + if(args.size() > 3) + { + argError = true; + } + } + if(argError) + { + std::string m = "called with incorrect number of arguments: "; + for(int i =0; i < args.size(); ++i) + { + m += args[i]; + m += " "; + } + this->SetError(m.c_str()); return false; } - + // Now check and see if the value has been stored in the cache // already, if so use that value and don't look for the program const char* cacheValue |