summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDāvis Mosāns <davispuh@gmail.com>2016-10-01 00:11:35 (GMT)
committerDāvis Mosāns <davispuh@gmail.com>2016-10-26 14:02:37 (GMT)
commit335a29cb07a8d014a9ed4d4dbf25e49da3a78b33 (patch)
treea49c2857563391c6bd9f1ddd4624f3c3fa85a7df
parentfdd0ce915c0ab7e5a9f3b95612b35d845a7a5213 (diff)
downloadCMake-335a29cb07a8d014a9ed4d4dbf25e49da3a78b33.zip
CMake-335a29cb07a8d014a9ed4d4dbf25e49da3a78b33.tar.gz
CMake-335a29cb07a8d014a9ed4d4dbf25e49da3a78b33.tar.bz2
Enable Unicode output to Windows consoles
Use KWSys ConsoleBuf to replace the `streambuf` on `std::cout` and `std::cerr` so that process output can be encoded correctly for display in a Windows console.
-rw-r--r--CMakeLists.txt1
-rw-r--r--Source/CPack/cpack.cxx8
-rw-r--r--Source/cmakemain.cxx8
-rw-r--r--Source/ctest.cxx8
4 files changed, 25 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index b8a635f..1bc4b4e 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -260,6 +260,7 @@ macro (CMAKE_BUILD_UTILITIES)
set(KWSYS_USE_MD5 1)
set(KWSYS_USE_Process 1)
set(KWSYS_USE_CommandLineArguments 1)
+ set(KWSYS_USE_ConsoleBuf 1)
set(KWSYS_HEADER_ROOT ${CMake_BINARY_DIR}/Source)
set(KWSYS_INSTALL_DOC_DIR "${CMAKE_DOC_DIR}")
add_subdirectory(Source/kwsys)
diff --git a/Source/CPack/cpack.cxx b/Source/CPack/cpack.cxx
index b06bd38..06472c6 100644
--- a/Source/CPack/cpack.cxx
+++ b/Source/CPack/cpack.cxx
@@ -17,6 +17,9 @@
#include <cmsys/CommandLineArguments.hxx>
#include <cmsys/Encoding.hxx>
+#if defined(_WIN32) && defined(CMAKE_BUILD_WITH_CMAKE)
+#include <cmsys/ConsoleBuf.hxx>
+#endif
#include <iostream>
#include <map>
#include <sstream>
@@ -84,6 +87,11 @@ int cpackDefinitionArgument(const char* argument, const char* cValue,
// this is CPack.
int main(int argc, char const* const* argv)
{
+#if defined(_WIN32) && defined(CMAKE_BUILD_WITH_CMAKE)
+ // Replace streambuf so we can output Unicode to console
+ cmsys::ConsoleBuf::Manager consoleOut(std::cout);
+ cmsys::ConsoleBuf::Manager consoleErr(std::cerr, true);
+#endif
cmsys::Encoding::CommandLineArguments args =
cmsys::Encoding::CommandLineArguments::Main(argc, argv);
argc = args.argc();
diff --git a/Source/cmakemain.cxx b/Source/cmakemain.cxx
index d1159c3..44af966 100644
--- a/Source/cmakemain.cxx
+++ b/Source/cmakemain.cxx
@@ -18,6 +18,9 @@
#include <cmConfigure.h>
#include <cmsys/Encoding.hxx>
+#if defined(_WIN32) && defined(CMAKE_BUILD_WITH_CMAKE)
+#include <cmsys/ConsoleBuf.hxx>
+#endif
#include <iostream>
#include <string.h>
#include <string>
@@ -153,6 +156,11 @@ static void cmakemainProgressCallback(const char* m, float prog,
int main(int ac, char const* const* av)
{
+#if defined(_WIN32) && defined(CMAKE_BUILD_WITH_CMAKE)
+ // Replace streambuf so we can output Unicode to console
+ cmsys::ConsoleBuf::Manager consoleOut(std::cout);
+ cmsys::ConsoleBuf::Manager consoleErr(std::cerr, true);
+#endif
cmsys::Encoding::CommandLineArguments args =
cmsys::Encoding::CommandLineArguments::Main(ac, av);
ac = args.argc();
diff --git a/Source/ctest.cxx b/Source/ctest.cxx
index 8ab17b9..1acd240 100644
--- a/Source/ctest.cxx
+++ b/Source/ctest.cxx
@@ -10,6 +10,9 @@
#include "cmake.h"
#include <cmsys/Encoding.hxx>
+#if defined(_WIN32) && defined(CMAKE_BUILD_WITH_CMAKE)
+#include <cmsys/ConsoleBuf.hxx>
+#endif
#include <iostream>
#include <string.h>
#include <string>
@@ -110,6 +113,11 @@ static const char* cmDocumentationOptions[][2] = {
// this is a test driver program for cmCTest.
int main(int argc, char const* const* argv)
{
+#if defined(_WIN32) && defined(CMAKE_BUILD_WITH_CMAKE)
+ // Replace streambuf so we can output Unicode to console
+ cmsys::ConsoleBuf::Manager consoleOut(std::cout);
+ cmsys::ConsoleBuf::Manager consoleErr(std::cerr, true);
+#endif
cmsys::Encoding::CommandLineArguments encoding_args =
cmsys::Encoding::CommandLineArguments::Main(argc, argv);
argc = encoding_args.argc();