Pārlūkot izejas kodu

FIX: echo pb, make Nmake gen use Unix gen, factorize stuff in Unix gen

Sebastien Barre 24 gadi atpakaļ
vecāks
revīzija
e455a83969
2 mainītis faili ar 53 papildinājumiem un 114 dzēšanām
  1. 33 64
      Source/cmNMakeMakefileGenerator.cxx
  2. 20 50
      Source/cmUnixMakefileGenerator.cxx

+ 33 - 64
Source/cmNMakeMakefileGenerator.cxx

@@ -69,6 +69,10 @@ std::string cmNMakeMakefileGenerator::ShortPath(const char* path)
 // them back together
 std::string cmNMakeMakefileGenerator::ShortPathCommand(const char* command)
 {
+  if (!command)
+    {
+    return "";
+    }
   if(!strchr(command, ' '))
     {
     return command;
@@ -248,78 +252,43 @@ void cmNMakeMakefileGenerator::OutputMakeRule(std::ostream& fout,
                                               const char* command3,
                                               const char* command4)
 {
-  if(!target)
-    {
-    cmSystemTools::Error("no target for OutputMakeRule");
-    return;
-    }
-  
-  std::string replace;
-  if(comment)
-    {
-    replace = comment;
-    m_Makefile->ExpandVariablesInString(replace);
-    fout << "#---------------------------------------------------------\n";
-    fout << "# " << comment;
-    fout << "\n#\n";
-    }
-  fout << "\n";
-  replace = target;
-  m_Makefile->ExpandVariablesInString(replace);
-  replace = this->ConvertToOutputPath(replace.c_str());
-  fout << replace.c_str() << ": ";
-  if(depends)
+  std::string short_command;
+  if (command)
     {
-    replace = depends;
-    m_Makefile->ExpandVariablesInString(replace);
-    fout << replace.c_str();
+    short_command = ShortPathCommand(command);
+    command = short_command.c_str();
     }
-  fout << "\n";
-  if(command)
-    {
-    replace = ShortPathCommand(command);
-    m_Makefile->ExpandVariablesInString(replace);
-    if(replace[0] != '-' && replace.find("echo") != 0 
-       && replace.find("$(MAKE)") != 0)
-      {
-      fout << "\t" << "echo " << replace.c_str() << "\n";
-      }
-    fout << "\t" << replace.c_str() << "\n";
-    }
-  if(command2)
+
+  std::string short_command2;
+  if (command2)
     {
-    replace = ShortPathCommand(command2);
-    m_Makefile->ExpandVariablesInString(replace);
-    if(replace[0] != '-' && replace.find("echo") != 0 
-       && replace.find("$(MAKE)") != 0)
-      {
-      fout << "\t" << "echo " << replace.c_str() << "\n";
-      }
-    fout << "\t" << replace.c_str() << "\n";
+    short_command2 = ShortPathCommand(command2);
+    command2 = short_command2.c_str();
     }
-  if(command3)
+
+  std::string short_command3;
+  if (command3)
     {
-    replace = ShortPathCommand(command3);
-    m_Makefile->ExpandVariablesInString(replace);
-    if(replace[0] != '-' && replace.find("echo") != 0 
-       && replace.find("$(MAKE)") != 0)
-      {
-      fout << "\t" << "echo " << replace.c_str() << "\n";
-      }
-    fout << "\t" << replace.c_str() << "\n";
+    short_command3 = ShortPathCommand(command3);
+    command3 = short_command3.c_str();
     }
-  if(command4)
+
+  std::string short_command4;
+  if (command4)
     {
-    replace = ShortPathCommand(command4);
-    m_Makefile->ExpandVariablesInString(replace);
-    if(replace[0] != '-' && replace.find("echo") != 0 
-       && replace.find("$(MAKE)") != 0)
-      {
-      fout << "\t" << "echo " << replace.c_str() << "\n";
-      }
-    fout << "\t" << replace.c_str() << "\n";
+    short_command4 = ShortPathCommand(command4);
+    command4 = short_command4.c_str();
     }
-  fout << "\n";
+
+  cmUnixMakefileGenerator::OutputMakeRule(fout, 
+                                          comment, 
+                                          target, 
+                                          depends, 
+                                          command, 
+                                          command2, 
+                                          command3, 
+                                          command4);
+  return;
 }
 
 void 

+ 20 - 50
Source/cmUnixMakefileGenerator.cxx

@@ -2026,13 +2026,15 @@ void cmUnixMakefileGenerator::OutputMakeRule(std::ostream& fout,
     replace = comment;
     m_Makefile->ExpandVariablesInString(replace);
     fout << "#---------------------------------------------------------\n";
-    fout << "# " << comment;
+    fout << "# " << replace;
     fout << "\n#\n";
     }
   fout << "\n";
+
   replace = target;
   m_Makefile->ExpandVariablesInString(replace);
   fout << this->ConvertToOutputPath(replace.c_str()) << ": ";
+
   if(depends)
     {
     replace = depends;
@@ -2040,62 +2042,30 @@ void cmUnixMakefileGenerator::OutputMakeRule(std::ostream& fout,
     fout << replace.c_str();
     }
   fout << "\n";
-  if(command)
-    {
-    replace = command;
-    m_Makefile->ExpandVariablesInString(replace);
-    if(replace[0] != '-' && replace.find("echo") != 0  
-       && replace.find("$(MAKE)") != 0)
-      {
-      std::string echostring = replace;
-      cmSystemTools::ReplaceString(echostring, "\n", "\\n");
-      fout << "\t" << "echo \"" << echostring.c_str() << "\"\n";
-      }
-    fout << "\t" << replace.c_str() << "\n";
-    }
-  if(command2)
-    {
-    replace = command2;
-    m_Makefile->ExpandVariablesInString(replace);
-    if(replace[0] != '-' && replace.find("echo") != 0  
-       && replace.find("$(MAKE)") != 0)
-      {
-      std::string echostring = replace;
-      cmSystemTools::ReplaceString(echostring, "\n", "\\n");
-      fout << "\t" << "echo \"" << echostring.c_str() << "\"\n";
-      }
-    fout << "\t" << replace.c_str() << "\n";
-    }
-  if(command3)
-    {
-    replace = command3;
-    m_Makefile->ExpandVariablesInString(replace);
-    if(replace[0] != '-' && replace.find("echo") != 0  
-       && replace.find("$(MAKE)") != 0)
-      {
-      std::string echostring = replace;
-      cmSystemTools::ReplaceString(echostring, "\n", "\\n");
-      fout << "\t" << "echo \"" << echostring.c_str() << "\"\n";
-      }
-    fout << "\t" << replace.c_str() << "\n";
-    }
-  if(command4)
+
+  const char* commands[] = { command, command2, command3, command4 };
+
+  for (int i = 0; i < sizeof(commands) / sizeof(commands[0]); ++i) 
     {
-    replace = command4;
-    m_Makefile->ExpandVariablesInString(replace);
-    if(replace[0] != '-' && replace.find("echo") != 0  
-       && replace.find("$(MAKE)") != 0)
+    if(commands[i])
       {
-      std::string echostring = replace;
-      cmSystemTools::ReplaceString(echostring, "\n", "\\n");
-      fout << "\t" << "echo \"" << echostring.c_str() << "\"\n";
+      replace = commands[i];
+      m_Makefile->ExpandVariablesInString(replace);
+      if(replace[0] != '-' && replace.find("echo") != 0  
+         && replace.find("$(MAKE)") != 0)
+        {
+        std::string echostring = replace;
+        cmSystemTools::ReplaceString(echostring, "\n\t", "\n\techo ");
+        // let's try to see what happens without \"
+        // fout << "\techo \"" << echostring.c_str() << "\"\n";
+        fout << "\techo " << echostring.c_str() << "\n";
+        }
+      fout << "\t" << replace.c_str() << "\n";
       }
-    fout << "\t" << replace.c_str() << "\n";
     }
   fout << "\n";
 }
 
-
 void cmUnixMakefileGenerator::SetLocal (bool local)
 {
   if (local)