Sfoglia il codice sorgente

Fix add custom command so that it actually executes the code

Andy Cedilnik 24 anni fa
parent
commit
58ee855503
2 ha cambiato i file con 43 aggiunte e 0 eliminazioni
  1. 25 0
      Source/cmAddCustomCommandCommand.cxx
  2. 18 0
      Source/cmAddCustomCommandCommand.h

+ 25 - 0
Source/cmAddCustomCommandCommand.cxx

@@ -31,6 +31,7 @@ bool cmAddCustomCommandCommand::InitialPass(std::vector<std::string> const& args
 
   std::string source, command, target;
   std::vector<std::string> command_args, depends, outputs;
+  std::string outDir = m_Makefile->GetCurrentOutputDirectory();
 
   enum tdoing {
     doing_source,
@@ -129,7 +130,31 @@ bool cmAddCustomCommandCommand::InitialPass(std::vector<std::string> const& args
 			       depends, 
                                outputs, 
                                target.c_str());
+
+  int cc = outputs.size()-1;
+  while( cc >= 0 ) 
+    {
+      std::string fileName = outputs[cc];
+
+      std::string directory = cmSystemTools::GetFilenamePath(fileName);
+      if ( directory == std::string() )
+	{
+	  directory = outDir;
+	}
+      fileName = cmSystemTools::GetFilenameName(fileName);
+
+      std::string::size_type pos = fileName.rfind(".");
+      fileName = fileName.substr(0, pos);
+      // Add the generated source to the package target's source list.
+      cmSourceFile file;
+      file.SetName(fileName.c_str(), directory.c_str(), "c", false);
+      m_Makefile->AddSource(file, target.c_str());
+      cc--;
+    }
+  m_Makefile->GetTargets()[target.c_str()].GetSourceLists().push_back(target);
+  
   return true;
 }
 
 
+

+ 18 - 0
Source/cmAddCustomCommandCommand.h

@@ -24,7 +24,25 @@
  *
  *  cmAddCustomCommandCommand defines a new command that can
  *  be executed within the CMake
+ *
+ *  In makefile terms this creates new target in the following form:
+ *  OUTPUT1: SOURCE DEPENDS
+ *           COMMAND ARGS
+ *  OUTPUT2: SOURCE DEPENDS
+ *           COMMAND ARGS
+ *  ...
+ *  Example of usage:
+ *  ADD_CUSTOM_COMMAND(
+ *             SOURCE ${VTK_TIFF_FAX_EXE} 
+ *             COMMAND ${VTK_TIFF_FAX_EXE} 
+ *             ARGS -c const ${VTK_BINARY_DIR}/Utilities/tiff/tif_fax3sm.c 
+ *             TARGET vtktiff 
+ *             OUTPUTS ${VTK_BINARY_DIR}/Utilities/tiff/tif_fax3sm.c
+ *                    )
+ *  This will create custom target which will generate file tif_fax3sm.c
+ *  using command ${VTK_TIFF_FAX_EXE}.
  */
+
 class cmAddCustomCommandCommand : public cmCommand
 {
 public: