summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2022-01-26 08:45:11 -0500
committerBrad King <brad.king@kitware.com>2022-01-26 08:45:11 -0500
commitece5378536a0329a4d6e7e8fcd40904b7364ac34 (patch)
tree1f63ada9b70bd6403c1f26123c861596702c5daa
parent74f14997c6b74ef596ee7be2a622056ae7cfe062 (diff)
parentd5ee6d50ee71f78dc619001e86e69f23444acfa9 (diff)
downloadcmake-ece5378536a0329a4d6e7e8fcd40904b7364ac34.tar.gz
Merge branch 'nmake-rsp-encoding' into release-3.21
Merge-request: !6905
-rw-r--r--Source/cmMakefileTargetGenerator.cxx17
1 files changed, 15 insertions, 2 deletions
diff --git a/Source/cmMakefileTargetGenerator.cxx b/Source/cmMakefileTargetGenerator.cxx
index a3e5553d74..945827701b 100644
--- a/Source/cmMakefileTargetGenerator.cxx
+++ b/Source/cmMakefileTargetGenerator.cxx
@@ -16,6 +16,8 @@
#include <cmext/algorithm>
#include <cmext/string_view>
+#include "cm_codecvt.hxx"
+
#include "cmComputeLinkInformation.h"
#include "cmCustomCommand.h"
#include "cmCustomCommandGenerator.h"
@@ -2046,11 +2048,22 @@ std::string cmMakefileTargetGenerator::CreateResponseFile(
const char* name, std::string const& options,
std::vector<std::string>& makefile_depends)
{
+ // FIXME: Find a better way to determine the response file encoding,
+ // perhaps using tool-specific platform information variables.
+ // For now, use the makefile encoding as a heuristic.
+ codecvt::Encoding responseEncoding =
+ this->GlobalGenerator->GetMakefileEncoding();
+ // Non-MSVC tooling may not understand a BOM.
+ if (responseEncoding == codecvt::UTF8_WITH_BOM &&
+ !this->Makefile->IsOn("MSVC")) {
+ responseEncoding = codecvt::UTF8;
+ }
+
// Create the response file.
std::string responseFileNameFull =
cmStrCat(this->TargetBuildDirectoryFull, '/', name);
- cmGeneratedFileStream responseStream(
- responseFileNameFull, false, this->GlobalGenerator->GetMakefileEncoding());
+ cmGeneratedFileStream responseStream(responseFileNameFull, false,
+ responseEncoding);
responseStream.SetCopyIfDifferent(true);
responseStream << options << "\n";