From cb6bc6f0aa254a0eb5910aa5a9a36ee1c15f46e3 Mon Sep 17 00:00:00 2001 From: Ken Martin Date: Wed, 9 May 2001 08:51:54 -0400 Subject: [PATCH] added load cache command and fixed source file --- Source/cmCommands.cxx | 5 +- Source/cmLoadCacheCommand.cxx | 38 ++++++++++++++ Source/cmLoadCacheCommand.h | 99 +++++++++++++++++++++++++++++++++++ Source/cmSourceFile.cxx | 12 ++++- 4 files changed, 151 insertions(+), 3 deletions(-) create mode 100644 Source/cmLoadCacheCommand.cxx create mode 100644 Source/cmLoadCacheCommand.h diff --git a/Source/cmCommands.cxx b/Source/cmCommands.cxx index 4ecb9173d..ef1393e99 100644 --- a/Source/cmCommands.cxx +++ b/Source/cmCommands.cxx @@ -39,6 +39,7 @@ #include "cmIncludeRegularExpressionCommand.cxx" #include "cmLinkDirectoriesCommand.cxx" #include "cmLinkLibrariesCommand.cxx" +#include "cmLoadCacheCommand.cxx" #include "cmMakeDirectoryCommand.cxx" #include "cmOptionCommand.cxx" #include "cmProjectCommand.cxx" @@ -55,7 +56,6 @@ #include "cmVTKWrapTclCommand.cxx" #include "cmWrapExcludeFilesCommand.cxx" - void GetPredefinedCommands(std::list& commands) { commands.push_back(new cmAbstractFilesCommand); @@ -91,6 +91,7 @@ void GetPredefinedCommands(std::list& commands) commands.push_back(new cmIncludeRegularExpressionCommand); commands.push_back(new cmLinkDirectoriesCommand); commands.push_back(new cmLinkLibrariesCommand); + commands.push_back(new cmLoadCacheCommand); commands.push_back(new cmMakeDirectoryCommand); commands.push_back(new cmOptionCommand); commands.push_back(new cmProjectCommand); @@ -105,7 +106,7 @@ void GetPredefinedCommands(std::list& commands) commands.push_back(new cmVTKWrapJavaCommand); commands.push_back(new cmVTKWrapPythonCommand); commands.push_back(new cmVTKWrapTclCommand); - commands.push_back(new cmWrapExcludeFilesCommand); + commands.push_back(new cmWrapExcludeFilesCommand); } diff --git a/Source/cmLoadCacheCommand.cxx b/Source/cmLoadCacheCommand.cxx new file mode 100644 index 000000000..a14477366 --- /dev/null +++ b/Source/cmLoadCacheCommand.cxx @@ -0,0 +1,38 @@ +/*========================================================================= + + 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 "cmLoadCacheCommand.h" + +#include + +// cmLoadcacheCommand +bool cmLoadCacheCommand::Invoke(std::vector& args) +{ + if (args.size()< 1) + { + this->SetError("called with wrong number of arguments."); + } + + for( unsigned int i=0; i< args.size(); i++) + { + m_Makefile->ExpandVariablesInString( args[i]); + cmCacheManager::GetInstance()->LoadCache(args[i].c_str(),false); + cmCacheManager::GetInstance()->DefineCache(m_Makefile); + } + + return true; +} + + diff --git a/Source/cmLoadCacheCommand.h b/Source/cmLoadCacheCommand.h new file mode 100644 index 000000000..99e7892db --- /dev/null +++ b/Source/cmLoadCacheCommand.h @@ -0,0 +1,99 @@ +/*========================================================================= + + Program: Insight Segmentation & Registration Toolkit + Module: $RCSfile$ + Language: C++ + Date: $Date$ + Version: $Revision$ + +Copyright (c) 2001 Insight Consortium +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + * The name of the Insight Consortium, nor the names of any consortium members, + nor of any contributors, may be used to endorse or promote products derived + from this software without specific prior written permission. + + * Modified source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS ``AS IS'' +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=========================================================================*/ +#ifndef cmLoadCacheCommand_h +#define cmLoadCacheCommand_h + +/** \class cmLoadCacheCommand + * \brief load a cache file + * + * cmLoadCacheCommand loads the non internal values of a cache file + */ +class cmLoadCacheCommand : public cmCommand +{ +public: + /** + * This is a virtual constructor for the command. + */ + virtual cmCommand* Clone() + { + return new cmLoadCacheCommand; + } + + /** + * This is called when the command is first encountered in + * the CMakeLists.txt file. + */ + virtual bool Invoke(std::vector& 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 "LOAD_CACHE";} + + /** + * Succinct documentation. + */ + virtual const char* GetTerseDocumentation() + { + return "load in the values from another cache."; + } + + /** + * More documentation. + */ + virtual const char* GetFullDocumentation() + { + return + "LOAD_CACHE(pathToCacheFile)\n" + "Load in the values from another cache. This is useful for a project that depends on another project built in a different tree."; + } + + cmTypeMacro(cmLoadCacheCommand, cmCommand); +}; + + +#endif diff --git a/Source/cmSourceFile.cxx b/Source/cmSourceFile.cxx index 380b95e39..963f77c6a 100644 --- a/Source/cmSourceFile.cxx +++ b/Source/cmSourceFile.cxx @@ -51,13 +51,23 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. void cmSourceFile::SetName(const char* name, const char* dir) { m_HeaderFileOnly = true; + m_SourceName = name; std::string pathname = dir; + + // the name might include the full path already, so + // check for this case + if (name && (name[0] == '/' || + (name[0] != '\0' && name[1] == ':'))) + { + pathname = ""; + } if(pathname != "") { pathname += "/"; } - + + // First try and see whether the listed file can be found // as is without extensions added on. pathname += m_SourceName;