Browse Source

BUG: MSYS makefile shell needs posix paths to executables in some cases and it does not hurt to do it always.

Brad King 19 years ago
parent
commit
019dabc97f

+ 1 - 0
Source/cmGlobalMSYSMakefileGenerator.cxx

@@ -88,6 +88,7 @@ cmLocalGenerator *cmGlobalMSYSMakefileGenerator::CreateLocalGenerator()
 {
   cmLocalUnixMakefileGenerator3* lg = new cmLocalUnixMakefileGenerator3;
   lg->SetWindowsShell(false);
+  lg->SetMSYSShell(true);
   lg->SetGlobalGenerator(this);
   lg->SetIgnoreLibPrefix(true);
   lg->SetPassMakeflags(false);

+ 13 - 0
Source/cmLocalGenerator.cxx

@@ -40,6 +40,7 @@ cmLocalGenerator::cmLocalGenerator()
   this->Parent = 0;
   this->WindowsShell = false;
   this->WindowsVSIDE = false;
+  this->MSYSShell = false;
   this->IgnoreLibPrefix = false;
   this->UseRelativePaths = false;
   this->Configured = false;
@@ -2007,6 +2008,18 @@ std::string cmLocalGenerator::Convert(const char* source,
       {
       cmSystemTools::SetForceUnixPaths(true);
       }
+
+    // For the MSYS shell convert drive letters to posix paths, so
+    // that c:/some/path becomes /c/some/path.  This is needed to
+    // avoid problems with the shell path translation.
+    if(this->MSYSShell)
+      {
+      if(result.size() > 2 && result[1] == ':')
+        {
+        result[1] = result[0];
+        result[0] = '/';
+        }
+      }
     }
   return result;
 }

+ 1 - 0
Source/cmLocalGenerator.h

@@ -274,6 +274,7 @@ protected:
   bool WindowsShell;
   bool WindowsVSIDE;
   bool ForceUnixPath;
+  bool MSYSShell;
   bool UseRelativePaths;
   bool IgnoreLibPrefix;
   bool Configured;

+ 7 - 0
Source/cmLocalUnixMakefileGenerator3.h

@@ -107,6 +107,13 @@ public:
    */
   void SetWindowsShell(bool v)  {this->WindowsShell = v;}
 
+  /**
+   * Set to true if the shell being used is the MSYS shell.
+   * This controls if statements in the makefile and the SHELL variable.
+   * The default is false.
+   */
+  void SetMSYSShell(bool v)  {this->MSYSShell = v;}
+
   /**
    * If set to true, then NULL is set to nil for non Windows_NT.
    * This uses make syntax used by nmake and borland.