Merge branch 'nmake-rsp-encoding' into release-3.21

Merge-request: !6905
This commit is contained in:
Brad King
2022-01-26 08:45:11 -05:00

View File

@@ -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";