summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2020-10-14 10:57:46 -0400
committerBrad King <brad.king@kitware.com>2020-10-14 12:08:06 -0400
commit90b39a52090e6ba52424b441d5827b2b6e11ff56 (patch)
tree9c4e327b43eaa0a34b3f41e210c22e103f08611d
parentf1fdd15863150fe42e99a95362a4387333502262 (diff)
downloadcmake-90b39a52090e6ba52424b441d5827b2b6e11ff56.tar.gz
cmConsoleBuf: Factor out cout/cerr console buffer management
-rw-r--r--Source/CMakeLists.txt2
-rw-r--r--Source/CPack/cpack.cxx15
-rw-r--r--Source/cmConsoleBuf.cxx23
-rw-r--r--Source/cmConsoleBuf.h23
-rw-r--r--Source/cmakemain.cxx14
-rw-r--r--Source/cmcmd.cxx10
-rw-r--r--Source/ctest.cxx14
-rwxr-xr-xbootstrap1
8 files changed, 66 insertions, 36 deletions
diff --git a/Source/CMakeLists.txt b/Source/CMakeLists.txt
index 1b6bb00d4c..2026ab1457 100644
--- a/Source/CMakeLists.txt
+++ b/Source/CMakeLists.txt
@@ -193,6 +193,8 @@ set(SRCS
cmComputeLinkInformation.h
cmComputeTargetDepends.h
cmComputeTargetDepends.cxx
+ cmConsoleBuf.h
+ cmConsoleBuf.cxx
cmCPackPropertiesGenerator.h
cmCPackPropertiesGenerator.cxx
cmCryptoHash.cxx
diff --git a/Source/CPack/cpack.cxx b/Source/CPack/cpack.cxx
index 76e19dc8b4..cc1ddf509d 100644
--- a/Source/CPack/cpack.cxx
+++ b/Source/CPack/cpack.cxx
@@ -16,6 +16,7 @@
#include "cmCPackGenerator.h"
#include "cmCPackGeneratorFactory.h"
#include "cmCPackLog.h"
+#include "cmConsoleBuf.h"
#include "cmDocumentation.h"
#include "cmDocumentationEntry.h"
#include "cmDocumentationFormatter.h"
@@ -27,10 +28,6 @@
#include "cmSystemTools.h"
#include "cmake.h"
-#if defined(_WIN32) && !defined(CMAKE_BOOTSTRAP)
-# include "cmsys/ConsoleBuf.hxx"
-#endif
-
namespace {
const char* cmDocumentationName[][2] = {
{ nullptr, " cpack - Packaging driver provided by CMake." },
@@ -103,13 +100,11 @@ void cpackProgressCallback(const std::string& message, float /*unused*/)
int main(int argc, char const* const* argv)
{
cmSystemTools::EnsureStdPipes();
-#if defined(_WIN32) && !defined(CMAKE_BOOTSTRAP)
+
// Replace streambuf so we can output Unicode to console
- cmsys::ConsoleBuf::Manager consoleOut(std::cout);
- consoleOut.SetUTF8Pipes();
- cmsys::ConsoleBuf::Manager consoleErr(std::cerr, true);
- consoleErr.SetUTF8Pipes();
-#endif
+ cmConsoleBuf consoleBuf;
+ consoleBuf.SetUTF8Pipes();
+
cmsys::Encoding::CommandLineArguments args =
cmsys::Encoding::CommandLineArguments::Main(argc, argv);
argc = args.argc();
diff --git a/Source/cmConsoleBuf.cxx b/Source/cmConsoleBuf.cxx
new file mode 100644
index 0000000000..70be481cb7
--- /dev/null
+++ b/Source/cmConsoleBuf.cxx
@@ -0,0 +1,23 @@
+/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
+ file Copyright.txt or https://cmake.org/licensing for details. */
+#include "cmConsoleBuf.h"
+
+#if defined(_WIN32) && !defined(CMAKE_BOOTSTRAP)
+cmConsoleBuf::cmConsoleBuf()
+ : m_ConsoleOut(std::cout)
+ , m_ConsoleErr(std::cerr, true)
+{
+}
+#else
+cmConsoleBuf::cmConsoleBuf() = default;
+#endif
+
+cmConsoleBuf::~cmConsoleBuf() = default;
+
+void cmConsoleBuf::SetUTF8Pipes()
+{
+#if defined(_WIN32) && !defined(CMAKE_BOOTSTRAP)
+ m_ConsoleOut.SetUTF8Pipes();
+ m_ConsoleErr.SetUTF8Pipes();
+#endif
+}
diff --git a/Source/cmConsoleBuf.h b/Source/cmConsoleBuf.h
new file mode 100644
index 0000000000..356459810e
--- /dev/null
+++ b/Source/cmConsoleBuf.h
@@ -0,0 +1,23 @@
+/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
+ file Copyright.txt or https://cmake.org/licensing for details. */
+#pragma once
+
+#include "cmConfigure.h" // IWYU pragma: keep
+
+#if defined(_WIN32) && !defined(CMAKE_BOOTSTRAP)
+# include "cmsys/ConsoleBuf.hxx"
+#endif
+
+class cmConsoleBuf
+{
+#if defined(_WIN32) && !defined(CMAKE_BOOTSTRAP)
+ cmsys::ConsoleBuf::Manager m_ConsoleOut;
+ cmsys::ConsoleBuf::Manager m_ConsoleErr;
+#endif
+public:
+ cmConsoleBuf();
+ ~cmConsoleBuf();
+ cmConsoleBuf(cmConsoleBuf const&) = delete;
+ cmConsoleBuf& operator=(cmConsoleBuf const&) = delete;
+ void SetUTF8Pipes();
+};
diff --git a/Source/cmakemain.cxx b/Source/cmakemain.cxx
index d662a9abca..eb443292c5 100644
--- a/Source/cmakemain.cxx
+++ b/Source/cmakemain.cxx
@@ -15,6 +15,7 @@
#include <cm3p/uv.h>
+#include "cmConsoleBuf.h"
#include "cmDocumentationEntry.h" // IWYU pragma: keep
#include "cmGlobalGenerator.h"
#include "cmMakefile.h"
@@ -32,9 +33,6 @@
#endif
#include "cmsys/Encoding.hxx"
-#if defined(_WIN32) && !defined(CMAKE_BOOTSTRAP)
-# include "cmsys/ConsoleBuf.hxx"
-#endif
namespace {
#ifndef CMAKE_BOOTSTRAP
@@ -687,13 +685,11 @@ int do_open(int ac, char const* const* av)
int main(int ac, char const* const* av)
{
cmSystemTools::EnsureStdPipes();
-#if defined(_WIN32) && !defined(CMAKE_BOOTSTRAP)
+
// Replace streambuf so we can output Unicode to console
- cmsys::ConsoleBuf::Manager consoleOut(std::cout);
- consoleOut.SetUTF8Pipes();
- cmsys::ConsoleBuf::Manager consoleErr(std::cerr, true);
- consoleErr.SetUTF8Pipes();
-#endif
+ cmConsoleBuf consoleBuf;
+ consoleBuf.SetUTF8Pipes();
+
cmsys::Encoding::CommandLineArguments args =
cmsys::Encoding::CommandLineArguments::Main(ac, av);
ac = args.argc();
diff --git a/Source/cmcmd.cxx b/Source/cmcmd.cxx
index de76d734ee..150fefddd2 100644
--- a/Source/cmcmd.cxx
+++ b/Source/cmcmd.cxx
@@ -7,6 +7,7 @@
#include <cm3p/uv.h>
#include <fcntl.h>
+#include "cmConsoleBuf.h"
#include "cmDuration.h"
#include "cmGlobalGenerator.h"
#include "cmLocalGenerator.h"
@@ -33,10 +34,6 @@
# include "bindexplib.h"
#endif
-#if !defined(CMAKE_BOOTSTRAP) && defined(_WIN32)
-# include "cmsys/ConsoleBuf.hxx"
-#endif
-
#if !defined(CMAKE_BOOTSTRAP) && defined(_WIN32) && !defined(__CYGWIN__)
# include "cmVisualStudioWCEPlatformParser.h"
#endif
@@ -1863,14 +1860,11 @@ private:
// still works.
int cmcmd::VisualStudioLink(std::vector<std::string> const& args, int type)
{
-#if defined(_WIN32) && !defined(CMAKE_BOOTSTRAP)
// 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
+ cmConsoleBuf consoleBuf;
if (args.size() < 2) {
return -1;
diff --git a/Source/ctest.cxx b/Source/ctest.cxx
index f06981a6cd..d0bc0611b4 100644
--- a/Source/ctest.cxx
+++ b/Source/ctest.cxx
@@ -9,14 +9,12 @@
#include "cmsys/Encoding.hxx"
#include "cmCTest.h"
+#include "cmConsoleBuf.h"
#include "cmDocumentation.h"
#include "cmSystemTools.h"
#include "CTest/cmCTestLaunch.h"
#include "CTest/cmCTestScriptHandler.h"
-#if defined(_WIN32) && !defined(CMAKE_BOOTSTRAP)
-# include "cmsys/ConsoleBuf.hxx"
-#endif
static const char* cmDocumentationName[][2] = {
{ nullptr, " ctest - Testing driver provided by CMake." },
@@ -155,13 +153,11 @@ static const char* cmDocumentationOptions[][2] = {
int main(int argc, char const* const* argv)
{
cmSystemTools::EnsureStdPipes();
-#if defined(_WIN32) && !defined(CMAKE_BOOTSTRAP)
+
// Replace streambuf so we can output Unicode to console
- cmsys::ConsoleBuf::Manager consoleOut(std::cout);
- consoleOut.SetUTF8Pipes();
- cmsys::ConsoleBuf::Manager consoleErr(std::cerr, true);
- consoleErr.SetUTF8Pipes();
-#endif
+ cmConsoleBuf consoleBuf;
+ consoleBuf.SetUTF8Pipes();
+
cmsys::Encoding::CommandLineArguments encoding_args =
cmsys::Encoding::CommandLineArguments::Main(argc, argv);
argc = encoding_args.argc();
diff --git a/bootstrap b/bootstrap
index 04067dc7ac..1362f9de34 100755
--- a/bootstrap
+++ b/bootstrap
@@ -299,6 +299,7 @@ CMAKE_CXX_SOURCES="\
cmComputeLinkDepends \
cmComputeLinkInformation \
cmComputeTargetDepends \
+ cmConsoleBuf \
cmConditionEvaluator \
cmConfigureFileCommand \
cmContinueCommand \