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

ENH: only output each link path once

Bill Hoffman 24 лет назад
Родитель
Сommit
3df3d839cc
1 измененных файлов с 56 добавлено и 37 удалено
  1. 56 37
      Source/cmDSPWriter.cxx

+ 56 - 37
Source/cmDSPWriter.cxx

@@ -550,6 +550,8 @@ void cmDSPWriter::WriteDSPHeader(std::ostream& fout, const char *libName,
                                    const cmTarget &target, 
                                    const cmTarget &target, 
                                  std::vector<cmSourceGroup> &)
                                  std::vector<cmSourceGroup> &)
 {
 {
+  std::set<std::string> pathEmitted;
+  
   // determine the link directories
   // determine the link directories
   std::string libOptions;
   std::string libOptions;
   std::string libDebugOptions;
   std::string libDebugOptions;
@@ -578,18 +580,22 @@ void cmDSPWriter::WriteDSPHeader(std::ostream& fout, const char *libName,
       {
       {
       libPath += "/";
       libPath += "/";
       }
       }
-    libOptions += " /LIBPATH:\"";
-    libOptions += cmSystemTools::HandleNetworkPaths(libPath.c_str());
-    libOptions += "$(INTDIR)\" ";
-    libOptions += " /LIBPATH:\"";
-    libOptions += cmSystemTools::HandleNetworkPaths(libPath.c_str());
-    libOptions += "\" ";
-    libMultiLineOptions += "# ADD LINK32 /LIBPATH:\"";
-    libMultiLineOptions += cmSystemTools::HandleNetworkPaths(libPath.c_str()); 
-    libMultiLineOptions += "$(INTDIR)\" ";
-    libMultiLineOptions += " /LIBPATH:\"";
-    libMultiLineOptions += cmSystemTools::HandleNetworkPaths(libPath.c_str()); 
-    libMultiLineOptions += "\" \n";
+    std::string lpath = cmSystemTools::HandleNetworkPaths(libPath.c_str());
+    if(pathEmitted.insert(lpath).second)
+      {
+      libOptions += " /LIBPATH:\"";
+      libOptions += lpath;
+      libOptions += "$(INTDIR)\" ";
+      libOptions += " /LIBPATH:\"";
+      libOptions += lpath;
+      libOptions += "\" ";
+      libMultiLineOptions += "# ADD LINK32 /LIBPATH:\"";
+      libMultiLineOptions += lpath;
+      libMultiLineOptions += "$(INTDIR)\" ";
+      libMultiLineOptions += " /LIBPATH:\"";
+      libMultiLineOptions += lpath;
+      libMultiLineOptions += "\" \n";
+      }
     }
     }
   if(exePath.size())
   if(exePath.size())
     {
     {
@@ -598,37 +604,50 @@ void cmDSPWriter::WriteDSPHeader(std::ostream& fout, const char *libName,
       {
       {
       exePath += "/";
       exePath += "/";
       }
       }
-    libOptions += " /LIBPATH:\"";
-    libOptions += cmSystemTools::HandleNetworkPaths(exePath.c_str());
-    libOptions += "$(INTDIR)\" ";
-    libOptions += " /LIBPATH:\"";
-    libOptions += cmSystemTools::HandleNetworkPaths(exePath.c_str());
-    libOptions += "\" ";
-    libMultiLineOptions += "# ADD LINK32 /LIBPATH:\"";
-    libMultiLineOptions += cmSystemTools::HandleNetworkPaths(exePath.c_str()); 
-    libMultiLineOptions += "$(INTDIR)\" ";
-    libMultiLineOptions += " /LIBPATH:\"";
-    libMultiLineOptions += cmSystemTools::HandleNetworkPaths(exePath.c_str());
-    libMultiLineOptions += "\" \n";
+    std::string lpath = cmSystemTools::HandleNetworkPaths(exePath.c_str());
+    if(pathEmitted.insert(lpath).second)
+      {
+      libOptions += " /LIBPATH:\"";
+      libOptions += lpath;
+      libOptions += "$(INTDIR)\" ";
+      libOptions += " /LIBPATH:\"";
+      libOptions += lpath;
+      libOptions += "\" ";
+      libMultiLineOptions += "# ADD LINK32 /LIBPATH:\"";
+      libMultiLineOptions += lpath;
+      libMultiLineOptions += "$(INTDIR)\" ";
+      libMultiLineOptions += " /LIBPATH:\"";
+      libMultiLineOptions += lpath;
+      libMultiLineOptions += "\" \n";
+      }
     }
     }
   std::vector<std::string>::iterator i;
   std::vector<std::string>::iterator i;
   std::vector<std::string>& libdirs = m_Makefile->GetLinkDirectories();
   std::vector<std::string>& libdirs = m_Makefile->GetLinkDirectories();
   for(i = libdirs.begin(); i != libdirs.end(); ++i)
   for(i = libdirs.begin(); i != libdirs.end(); ++i)
     {
     {
-    libOptions += " /LIBPATH:\"";
-    libOptions += cmSystemTools::HandleNetworkPaths(i->c_str());
-    libOptions += "/$(INTDIR)\" ";
-    libOptions += " /LIBPATH:\"";
-    libOptions += cmSystemTools::HandleNetworkPaths(i->c_str());
-    libOptions += "\" ";
-
-    libMultiLineOptions += "# ADD LINK32 /LIBPATH:\"";
-    libMultiLineOptions += cmSystemTools::HandleNetworkPaths(i->c_str()); 
-    libMultiLineOptions += "/$(INTDIR)\" ";
-    libMultiLineOptions += " /LIBPATH:\"";
-    libMultiLineOptions += cmSystemTools::HandleNetworkPaths(i->c_str());
-    libMultiLineOptions += "\" \n";
+    std::string lpath = cmSystemTools::HandleNetworkPaths(i->c_str());
+    if(lpath[lpath.size()-1] != '/')
+      {
+      lpath += "/";
+      }
+    if(pathEmitted.insert(lpath).second)
+      {
+      libOptions += " /LIBPATH:\"";
+      libOptions += lpath;
+      libOptions += "/$(INTDIR)\" ";
+      libOptions += " /LIBPATH:\"";
+      libOptions += lpath;
+      libOptions += "\" ";
+      
+      libMultiLineOptions += "# ADD LINK32 /LIBPATH:\"";
+      libMultiLineOptions += lpath;
+      libMultiLineOptions += "/$(INTDIR)\" ";
+      libMultiLineOptions += " /LIBPATH:\"";
+      libMultiLineOptions += lpath;
+      libMultiLineOptions += "\" \n";
+      }
     }
     }
+  
   // find link libraries
   // find link libraries
   const cmTarget::LinkLibraries& libs = target.GetLinkLibraries();
   const cmTarget::LinkLibraries& libs = target.GetLinkLibraries();
   cmTarget::LinkLibraries::const_iterator j;
   cmTarget::LinkLibraries::const_iterator j;