瀏覽代碼

Fix number of params and expand vars in all args

Sebastien Barre 24 年之前
父節點
當前提交
e17724279e
共有 1 個文件被更改,包括 25 次插入10 次删除
  1. 25 10
      Source/cmAddCustomCommandCommand.cxx

+ 25 - 10
Source/cmAddCustomCommandCommand.cxx

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