Преглед на файлове

ERR: Corrected use of double-quotes to be compatible with UNIX make. Now double quotes (windows) or escape sequences for spaces (unix) are added when dependencies are output.

Brad King преди 25 години
родител
ревизия
e0da3ef275
променени са 7 файла, в които са добавени 34 реда и са изтрити 11 реда
  1. 6 6
      Source/cmCableCommand.cxx
  2. 1 1
      Source/cmDSPMakefile.cxx
  3. 1 1
      Source/cmDSPWriter.cxx
  4. 16 0
      Source/cmSystemTools.cxx
  5. 6 0
      Source/cmSystemTools.h
  6. 2 1
      Source/cmUnixMakefileGenerator.cxx
  7. 2 2
      Source/cmUtilitySourceCommand.cxx

+ 6 - 6
Source/cmCableCommand.cxx

@@ -81,23 +81,23 @@ void cmCableCommand::SetupCableData()
   
   // We must add a custom rule to cause the cable_config.xml to be re-built
   // when it is removed.  Rebuilding it means re-running CMake.
-  std::string cMakeLists = "\"";
-  cMakeLists += m_Makefile->GetStartDirectory();
+  std::string cMakeLists = m_Makefile->GetStartDirectory();
   cMakeLists += "/";
-  cMakeLists += "CMakeLists.txt\"";
+  cMakeLists += "CMakeLists.txt";
 
   std::string command;
 #if defined(_WIN32) && !defined(__CYGWIN__)
   command = "\"";
   command += m_Makefile->GetHomeDirectory();
-  command += "/CMake/Source/CMakeSetupCMD\" ";
+  command += "/CMake/Source/CMakeSetupCMD\" \"";
   command += cMakeLists;
-  command += " -DSP";
+  command += "\" -DSP";
 #else
   command = "\"";
   command += m_Makefile->GetHomeOutputDirectory();  
-  command += "/CMake/Source/CMakeBuildTargets\" ";
+  command += "/CMake/Source/CMakeBuildTargets\" \"";
   command += cMakeLists;
+  command += "\"";
 #endif
   command += " -H\"";
   command += m_Makefile->GetHomeDirectory();

+ 1 - 1
Source/cmDSPMakefile.cxx

@@ -322,7 +322,7 @@ void cmDSPMakefile::WriteCustomRule(std::ostream& fout,
       for(std::set<std::string>::const_iterator d = depends.begin();
           d != depends.end(); ++d)
         {
-        fout << " " << d->c_str();
+        fout << " \"" << d->c_str() << "\"";
         }
       fout << "\n  " << command << "\n\n";
       }

+ 1 - 1
Source/cmDSPWriter.cxx

@@ -322,7 +322,7 @@ void cmDSPMakefile::WriteCustomRule(std::ostream& fout,
       for(std::set<std::string>::const_iterator d = depends.begin();
           d != depends.end(); ++d)
         {
-        fout << " " << d->c_str();
+        fout << " \"" << d->c_str() << "\"";
         }
       fout << "\n  " << command << "\n\n";
       }

+ 16 - 0
Source/cmSystemTools.cxx

@@ -129,6 +129,22 @@ void cmSystemTools::ReplaceString(std::string& source,
     }
 }
 
+
+std::string cmSystemTools::EscapeSpaces(const char* str)
+{
+  std::string result = "";
+  for(const char* ch = str; *ch != '\0'; ++ch)
+    {
+    if(*ch == ' ')
+      {
+      result += '\\';
+      }
+    result += *ch;
+    }
+  return result;
+}
+
+
 // return true if the file exists
 bool cmSystemTools::FileExists(const char* filename)
 {

+ 6 - 0
Source/cmSystemTools.h

@@ -42,6 +42,12 @@ public:
                             const char* replace,
                             const char* with);
 
+  /**
+   * Return a string equivalent to the input string, but with all " " replaced
+   * with "\ " to escape the spaces.
+   */
+  static std::string EscapeSpaces(const char*);
+  
   /**
    * Replace Windows file system slashes with Unix-style slashes.
    */

+ 2 - 1
Source/cmUnixMakefileGenerator.cxx

@@ -436,7 +436,8 @@ void cmUnixMakefileGenerator::OutputCustomRules(std::ostream& fout)
                 commandFiles.m_Depends.begin();
               d != commandFiles.m_Depends.end(); ++d)
             {
-            fout << " " << d->c_str();
+            std::string dep = cmSystemTools::EscapeSpaces(d->c_str());
+            fout << " " << dep.c_str();
             }
           fout << "\n\t" << command.c_str() << "\n\n";
           }

+ 2 - 2
Source/cmUtilitySourceCommand.cxx

@@ -70,8 +70,8 @@ bool cmUtilitySourceCommand::Invoke(std::vector<std::string>& args)
   
   // Construct the cache entry for the executable's location.
   std::string utilityExecutable =
-    "\""+utilityDirectory+"/"+cmakeCFGout+"/"
-    +utilityName+cmSystemTools::GetExecutableExtension()+"\"";
+    utilityDirectory+"/"+cmakeCFGout+"/"
+    +utilityName+cmSystemTools::GetExecutableExtension();
   
   // Enter the value into the cache.
   cmCacheManager::GetInstance()->AddCacheEntry(cacheEntry.c_str(),