From 87f0853941f09379f625ae96d67b15b9cb2ad51a Mon Sep 17 00:00:00 2001 From: Brad King Date: Thu, 11 Mar 2010 08:49:05 -0500 Subject: [PATCH] Use forward slashes for objects in response files Response files are parsed by tools, not by shells. We teach cmLocalGenerator::Convert() a new "RESPONSE" output format and use it for objects listed in response files. It does not do special slash or MSYS root translation like the "SHELL" format does. This is necessary for GNU tools on Windows to understand response file content. See issue #10401. --- Source/cmLocalGenerator.cxx | 4 ++++ Source/cmLocalGenerator.h | 2 +- Source/cmMakefileTargetGenerator.cxx | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx index 851e34f57..4156f321c 100644 --- a/Source/cmLocalGenerator.cxx +++ b/Source/cmLocalGenerator.cxx @@ -2247,6 +2247,10 @@ std::string cmLocalGenerator::ConvertToOutputFormat(const char* source, } result = this->EscapeForShell(result.c_str(), true, false); } + else if(output == RESPONSE) + { + result = this->EscapeForShell(result.c_str(), false, false); + } return result; } diff --git a/Source/cmLocalGenerator.h b/Source/cmLocalGenerator.h index becdfff7b..489b61374 100644 --- a/Source/cmLocalGenerator.h +++ b/Source/cmLocalGenerator.h @@ -102,7 +102,7 @@ public: * path setting */ enum RelativeRoot { NONE, FULL, HOME, START, HOME_OUTPUT, START_OUTPUT }; - enum OutputFormat { UNCHANGED, MAKEFILE, SHELL }; + enum OutputFormat { UNCHANGED, MAKEFILE, SHELL, RESPONSE }; std::string ConvertToOutputFormat(const char* source, OutputFormat output); std::string Convert(const char* remote, RelativeRoot local, OutputFormat output = UNCHANGED, diff --git a/Source/cmMakefileTargetGenerator.cxx b/Source/cmMakefileTargetGenerator.cxx index dd459507e..e35e5a31d 100644 --- a/Source/cmMakefileTargetGenerator.cxx +++ b/Source/cmMakefileTargetGenerator.cxx @@ -1329,7 +1329,7 @@ public: this->NextObject = this->LocalGenerator->Convert(obj.c_str(), cmLocalGenerator::START_OUTPUT, - cmLocalGenerator::SHELL); + cmLocalGenerator::RESPONSE); // Roll over to next string if the limit will be exceeded. if(this->LengthLimit != std::string::npos &&