|  | @@ -11,12 +11,15 @@
 | 
	
		
			
				|  |  |  #include <iostream>
 | 
	
		
			
				|  |  |  #include <sstream>
 | 
	
		
			
				|  |  |  #include <string>
 | 
	
		
			
				|  |  | +#include <utility>
 | 
	
		
			
				|  |  |  #include <vector>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +#include <cm/memory>
 | 
	
		
			
				|  |  |  #include <cmext/algorithm>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  #include <cm3p/uv.h>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +#include "cmConsoleBuf.h"
 | 
	
		
			
				|  |  |  #include "cmDocumentationEntry.h" // IWYU pragma: keep
 | 
	
		
			
				|  |  |  #include "cmGlobalGenerator.h"
 | 
	
		
			
				|  |  |  #include "cmMakefile.h"
 | 
	
	
		
			
				|  | @@ -34,9 +37,6 @@
 | 
	
		
			
				|  |  |  #endif
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  #include "cmsys/Encoding.hxx"
 | 
	
		
			
				|  |  | -#if defined(_WIN32) && !defined(CMAKE_BOOTSTRAP)
 | 
	
		
			
				|  |  | -#  include "cmsys/ConsoleBuf.hxx"
 | 
	
		
			
				|  |  | -#endif
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  namespace {
 | 
	
		
			
				|  |  |  #ifndef CMAKE_BOOTSTRAP
 | 
	
	
		
			
				|  | @@ -111,13 +111,14 @@ const char* cmDocumentationOptions[][2] = {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  #endif
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -int do_command(int ac, char const* const* av)
 | 
	
		
			
				|  |  | +int do_command(int ac, char const* const* av,
 | 
	
		
			
				|  |  | +               std::unique_ptr<cmConsoleBuf> consoleBuf)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |    std::vector<std::string> args;
 | 
	
		
			
				|  |  |    args.reserve(ac - 1);
 | 
	
		
			
				|  |  |    args.emplace_back(av[0]);
 | 
	
		
			
				|  |  |    cm::append(args, av + 2, av + ac);
 | 
	
		
			
				|  |  | -  return cmcmd::ExecuteCMakeCommand(args);
 | 
	
		
			
				|  |  | +  return cmcmd::ExecuteCMakeCommand(args, std::move(consoleBuf));
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  cmMakefile* cmakemainGetMakefile(cmake* cm)
 | 
	
	
		
			
				|  | @@ -830,13 +831,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
 | 
	
		
			
				|  |  | +  auto consoleBuf = cm::make_unique<cmConsoleBuf>();
 | 
	
		
			
				|  |  | +  consoleBuf->SetUTF8Pipes();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |    cmsys::Encoding::CommandLineArguments args =
 | 
	
		
			
				|  |  |      cmsys::Encoding::CommandLineArguments::Main(ac, av);
 | 
	
		
			
				|  |  |    ac = args.argc();
 | 
	
	
		
			
				|  | @@ -855,7 +854,7 @@ int main(int ac, char const* const* av)
 | 
	
		
			
				|  |  |        return do_open(ac, av);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |      if (strcmp(av[1], "-E") == 0) {
 | 
	
		
			
				|  |  | -      return do_command(ac, av);
 | 
	
		
			
				|  |  | +      return do_command(ac, av, std::move(consoleBuf));
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |    int ret = do_cmake(ac, av);
 |