Browse Source

added load cache command and fixed source file

Ken Martin 25 years ago
parent
commit
cb6bc6f0aa
4 changed files with 151 additions and 3 deletions
  1. 3 2
      Source/cmCommands.cxx
  2. 38 0
      Source/cmLoadCacheCommand.cxx
  3. 99 0
      Source/cmLoadCacheCommand.h
  4. 11 1
      Source/cmSourceFile.cxx

+ 3 - 2
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<cmCommand*>& commands)
 {
   commands.push_back(new cmAbstractFilesCommand);
@@ -91,6 +91,7 @@ void GetPredefinedCommands(std::list<cmCommand*>& 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<cmCommand*>& 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);
 }
 
   

+ 38 - 0
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 <iostream.h>
+
+// cmLoadcacheCommand
+bool cmLoadCacheCommand::Invoke(std::vector<std::string>& 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;
+}
+
+

+ 99 - 0
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<std::string>& 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

+ 11 - 1
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;