فهرست منبع

Added accessor for add custom command

Andy Cedilnik 24 سال پیش
والد
کامیت
39766efaaa
3فایلهای تغییر یافته به همراه154 افزوده شده و 0 حذف شده
  1. 73 0
      Source/cmAddCustomCommandCommand.cxx
  2. 79 0
      Source/cmAddCustomCommandCommand.h
  3. 2 0
      Source/cmCommands.cxx

+ 73 - 0
Source/cmAddCustomCommandCommand.cxx

@@ -0,0 +1,73 @@
+/*=========================================================================
+
+  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 "cmAddCustomCommandCommand.h"
+
+
+// cmAddCustomCommandCommand
+bool cmAddCustomCommandCommand::InitialPass(std::vector<std::string> const& argsIn)
+{
+  if (argsIn.size()< 9)
+    {
+      this->SetError("called with wrong number of arguments.");
+      return false;
+    }
+  std::vector<std::string> args = argsIn;
+  std::vector<std::string> commandArgs;
+  std::vector<std::string> depends;
+  std::vector<std::string> outputs;
+  
+  const char* source = args[0].c_str();
+  const char* command = args[1].c_str();
+  if(args[2] != "ARGS")
+    {
+    this->SetError("Wrong syntax. The third argument should be ARGS");
+    return false;
+    }
+  int cc=3;
+  while(args[cc] != "DEPENDS" && cc < argsIn.size())
+    {
+    commandArgs.push_back(args[cc]);
+    cc++;
+    }
+  if(cc == argsIn.size()-1)
+    {
+    this->SetError("Wrong syntax. Missing DEPENDS.");
+    return false;
+    }
+  cc ++ ; // Skip DEPENDS
+  while(args[cc] != "OUTPUTS" && cc < argsIn.size())
+    {
+    depends.push_back(args[cc]);
+    cc++;
+    }
+  if(cc == argsIn.size()-1)
+    {
+    this->SetError("Wrong syntax. Missing OUTPUTS.");
+    return false;
+    }
+  cc ++; // Skip OUTPUTS
+  while(cc < argsIn.size()-1)
+    {
+    outputs.push_back(args[cc]);
+    cc++;
+    }
+  const char *target = args[argsIn.size()-1].c_str();
+  m_Makefile->AddCustomCommand( source, command, commandArgs, 
+				depends, outputs, target );
+  return true;
+}
+
+

+ 79 - 0
Source/cmAddCustomCommandCommand.h

@@ -0,0 +1,79 @@
+/*=========================================================================
+
+  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.
+
+=========================================================================*/
+#ifndef cmAddCustomCommandCommand_h
+#define cmAddCustomCommandCommand_h
+
+#include "cmStandardIncludes.h"
+#include "cmCommand.h"
+
+/** \class cmAddCustomCommandCommand
+ * \brief 
+ *
+ *  cmAddCustomCommandCommand defines a new command that can
+ *  be executed within the CMake
+ */
+class cmAddCustomCommandCommand : public cmCommand
+{
+public:
+  /**
+   * This is a virtual constructor for the command.
+   */
+  virtual cmCommand* Clone() 
+    {
+    return new cmAddCustomCommandCommand;
+    }
+
+  /**
+   * 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 "ADD_CUSTOM_COMMAND";}
+  
+  /**
+   * Succinct documentation.
+   */
+  virtual const char* GetTerseDocumentation() 
+    {
+    return "Create new command within CMake.";
+    }
+  
+  /**
+   * More documentation.
+   */
+  virtual const char* GetFullDocumentation()
+    {
+    return
+      "ADD_CUSTOM_COMMAND(source, command ARGS [args] DEPENDS [depends] "
+      "OUTPUTS [outputs] target)\nAdd a custom command.";
+    }
+  
+  cmTypeMacro(cmAddCustomCommandCommand, cmCommand);
+};
+
+
+
+#endif

+ 2 - 0
Source/cmCommands.cxx

@@ -59,6 +59,7 @@
 #include "cmVTKWrapTclCommand.cxx"
 #include "cmQTWrapCPPCommand.cxx"
 #include "cmWrapExcludeFilesCommand.cxx"
+#include "cmAddCustomCommandCommand.cxx"
 
 void GetPredefinedCommands(std::list<cmCommand*>& commands)
 {
@@ -118,6 +119,7 @@ void GetPredefinedCommands(std::list<cmCommand*>& commands)
   commands.push_back(new cmVTKWrapTclCommand);
   commands.push_back(new cmQTWrapCPPCommand);
   commands.push_back(new cmWrapExcludeFilesCommand);
+  commands.push_back(new cmAddCustomCommandCommand);
 }