Browse Source

BUG: fixes for mingw and CMakesetup with spaces in the source directory

Bill Hoffman 21 years ago
parent
commit
3e2e0d5d63
3 changed files with 19 additions and 2 deletions
  1. 6 1
      Source/MFCDialog/CMakeSetupDialog.cpp
  2. 5 0
      Source/cmSystemTools.h
  3. 8 1
      Source/kwsys/SystemTools.cxx

+ 6 - 1
Source/MFCDialog/CMakeSetupDialog.cpp

@@ -131,8 +131,13 @@ std::string ConvertToWindowsPath(const char* path)
   // Remove the "" around it (if any) since it's an output path for
   // the shell. If another shell-oriented feature is not designed 
   // for a GUI use, then we are in trouble.
-
+  // save the value of the force to unix path option
+  bool saveForce = cmSystemTools::GetForceUnixPaths();
+  // make sure we get windows paths no matter what for the GUI
+  cmSystemTools::SetForceUnixPaths(false);
   std::string s = cmSystemTools::ConvertToOutputPath(path);
+  // now restore the force unix path to its previous value
+  cmSystemTools::SetForceUnixPaths(saveForce);
   if (s.size())
     {
     std::string::iterator i = s.begin();

+ 5 - 0
Source/cmSystemTools.h

@@ -253,6 +253,11 @@ public:
     {
       s_ForceUnixPaths = v;
     }
+  static bool GetForceUnixPaths()
+    {
+      return s_ForceUnixPaths;
+    }
+
   // ConvertToOutputPath use s_ForceUnixPaths
   static std::string ConvertToOutputPath(const char* path);
   // ConvertToRunCommandPath does not use s_ForceUnixPaths and should

+ 8 - 1
Source/kwsys/SystemTools.cxx

@@ -708,7 +708,14 @@ void SystemTools::ConvertToUnixSlashes(kwsys_stl::string& path)
   kwsys_stl::string::size_type pos = 0;
   while((pos = path.find('\\', pos)) != kwsys_stl::string::npos)
     {
-    path[pos] = '/';
+    // make sure we don't convert an escaped space to a unix slash
+    if(pos < path.size()-2)
+      {
+      if(path[pos+1] != ' ')
+        {
+        path[pos] = '/';
+        }
+      }
     pos++;
     }
   // Remove all // from the path just like most unix shells