From 7e359823c9cd5bf162e3e62561328607d4449a59 Mon Sep 17 00:00:00 2001 From: Justin Goshi Date: Fri, 3 Aug 2018 13:53:08 -0700 Subject: MSVC: Preserve linker output encoding When using the Ninja or Makefile generator with MSVC on Windows we invoke the linker through a `cmake -E vs_link_{exe,dll}` wrapper. Preserve the linker output encoding to match `link.exe` behavior instead of forcing UTF-8. --- Source/cmcmd.cxx | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Source/cmcmd.cxx b/Source/cmcmd.cxx index 2fd1a84..2027722 100644 --- a/Source/cmcmd.cxx +++ b/Source/cmcmd.cxx @@ -24,6 +24,7 @@ #if defined(CMAKE_BUILD_WITH_CMAKE) && defined(_WIN32) # include "bindexplib.h" +# include "cmsys/ConsoleBuf.hxx" #endif #if defined(CMAKE_BUILD_WITH_CMAKE) && defined(_WIN32) && !defined(__CYGWIN__) @@ -1545,6 +1546,15 @@ private: // still works. int cmcmd::VisualStudioLink(std::vector const& args, int type) { +#if defined(_WIN32) && defined(CMAKE_BUILD_WITH_CMAKE) + // Replace streambuf so we output in the system codepage. CMake is set up + // to output in Unicode (see SetUTF8Pipes) but the Visual Studio linker + // outputs using the system codepage so we need to change behavior when + // we run the link command. + cmsys::ConsoleBuf::Manager consoleOut(std::cout); + cmsys::ConsoleBuf::Manager consoleErr(std::cerr, true); +#endif + if (args.size() < 2) { return -1; } -- cgit v0.12