Просмотр исходного кода

ENH: fix new incremental link stuff to work with nmake @ files

Bill Hoffman 18 лет назад
Родитель
Сommit
603cd2ab6a
1 измененных файлов с 32 добавлено и 4 удалено
  1. 32 4
      Source/cmake.cxx

+ 32 - 4
Source/cmake.cxx

@@ -3674,17 +3674,45 @@ int cmake::VisualStudioLink(std::vector<std::string>& args, int type)
     {
     verbose = true;
     }
-  // figure out if this is an incremental link or not and run the correct
-  // link function.
+  std::vector<std::string> expandedArgs;
   for(std::vector<std::string>::iterator i = args.begin();
       i != args.end(); ++i)
     {
+    // check for nmake temporary files 
+    if((*i)[0] == '@')
+      {
+      std::ifstream fin(i->substr(1).c_str());
+      std::string line;
+      while(cmSystemTools::GetLineFromStream(fin,
+                                             line))
+        {
+        cmSystemTools::ParseWindowsCommandLine(line.c_str(), expandedArgs);
+        }
+      }
+    else
+      {
+      expandedArgs.push_back(*i);
+      }
+    }
+  // figure out if this is an incremental link or not and run the correct
+  // link function.
+  for(std::vector<std::string>::iterator i = expandedArgs.begin();
+      i != expandedArgs.end(); ++i)
+    {
     if(cmSystemTools::Strucmp(i->c_str(), "/INCREMENTAL:YES") == 0)
       {
-      return cmake::VisualStudioLinkIncremental(args, type, verbose);
+      if(verbose)
+        {
+        std::cout << "Visual Studio Incremental Link\n";
+        }
+      return cmake::VisualStudioLinkIncremental(expandedArgs, type, verbose);
       }
     }
-  return cmake::VisualStudioLinkNonIncremental(args, type, verbose);
+  if(verbose)
+    {
+    std::cout << "Visual Studio Non-Incremental Link\n";
+    }
+  return cmake::VisualStudioLinkNonIncremental(expandedArgs, type, verbose);
 }
 
 int cmake::ParseVisualStudioLinkCommand(std::vector<std::string>& args,