diff --git a/Source/cmSystemTools.cxx b/Source/cmSystemTools.cxx index 084c483f8..6c940277f 100644 --- a/Source/cmSystemTools.cxx +++ b/Source/cmSystemTools.cxx @@ -309,6 +309,14 @@ bool cmSystemTools::RunSingleCommand( std::vector args; std::string arg; + bool win_path = false; + + if ( command[0] != '/' && command[1] == ':' && command[2] == '\\' || + command[0] == '\"' && command[1] != '/' && command[2] == ':' && command[3] == '\\' || + command[0] == '\\' && command[1] == '\\') + { + win_path = true; + } // Split the command into an argv array. for(const char* c = command; *c;) { @@ -338,7 +346,7 @@ bool cmSystemTools::RunSingleCommand( // Parse an unquoted argument. while(*c && *c != ' ' && *c != '\t') { - if(*c == '\\') + if(*c == '\\' && !win_path) { ++c; if(*c) @@ -374,6 +382,7 @@ bool cmSystemTools::RunSingleCommand( { *output = ""; } + cmsysProcess* cp = cmsysProcess_New(); cmsysProcess_SetCommand(cp, &*argv.begin()); cmsysProcess_SetWorkingDirectory(cp, dir);