From 3e2e0d5d6384cd0eb84c6fb7bb3059497159446d Mon Sep 17 00:00:00 2001 From: Bill Hoffman Date: Mon, 30 Aug 2004 13:50:00 -0400 Subject: [PATCH] BUG: fixes for mingw and CMakesetup with spaces in the source directory --- Source/MFCDialog/CMakeSetupDialog.cpp | 7 ++++++- Source/cmSystemTools.h | 5 +++++ Source/kwsys/SystemTools.cxx | 9 ++++++++- 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/Source/MFCDialog/CMakeSetupDialog.cpp b/Source/MFCDialog/CMakeSetupDialog.cpp index ba6c28f53..535573eae 100644 --- a/Source/MFCDialog/CMakeSetupDialog.cpp +++ b/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(); diff --git a/Source/cmSystemTools.h b/Source/cmSystemTools.h index e0fbffc4b..0cac0f077 100644 --- a/Source/cmSystemTools.h +++ b/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 diff --git a/Source/kwsys/SystemTools.cxx b/Source/kwsys/SystemTools.cxx index f445c8ee5..f6826acbe 100644 --- a/Source/kwsys/SystemTools.cxx +++ b/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