diff options
author | Brad King <brad.king@kitware.com> | 2022-01-27 16:04:45 (GMT) |
---|---|---|
committer | Kitware Robot <kwrobot@kitware.com> | 2022-01-27 16:05:03 (GMT) |
commit | 5588b538d89f3cffed8a1a00f2eafcc733b2e0b5 (patch) | |
tree | ead624650dfc6ae74ac38b53d9647139938fe020 | |
parent | 6a037fd9f428e50806f4bfcbbaa8e944fb54248b (diff) | |
parent | d5ee6d50ee71f78dc619001e86e69f23444acfa9 (diff) | |
download | CMake-5588b538d89f3cffed8a1a00f2eafcc733b2e0b5.zip CMake-5588b538d89f3cffed8a1a00f2eafcc733b2e0b5.tar.gz CMake-5588b538d89f3cffed8a1a00f2eafcc733b2e0b5.tar.bz2 |
Merge topic 'nmake-rsp-encoding' into release-3.22
d5ee6d50ee NMake: Use UTF-8 BOM in response files only with MSVC tooling
cab631c2e2 NMake: Document response file encoding heuristic in a comment
Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: buildbot <buildbot@kitware.com>
Merge-request: !6905
-rw-r--r-- | Source/cmMakefileTargetGenerator.cxx | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/Source/cmMakefileTargetGenerator.cxx b/Source/cmMakefileTargetGenerator.cxx index f5f3727..5f138ba 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" @@ -2072,11 +2074,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"; |