diff options
author | Dāvis Mosāns <davispuh@gmail.com> | 2016-11-23 12:11:40 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2016-11-30 14:06:51 (GMT) |
commit | 2ed473b3b8e28485e6a14a49c7e0e4133eb02eee (patch) | |
tree | 1343f0e826693c923074102e588f90f0678e3cc5 /Source/cmExecuteProcessCommand.cxx | |
parent | 076aef8e45a91e83f9a7d879712fd70778d67c92 (diff) | |
download | CMake-2ed473b3b8e28485e6a14a49c7e0e4133eb02eee.zip CMake-2ed473b3b8e28485e6a14a49c7e0e4133eb02eee.tar.gz CMake-2ed473b3b8e28485e6a14a49c7e0e4133eb02eee.tar.bz2 |
execute_process: Add ENCODING option for Windows child process output
Different applications can use different output encodings.
Diffstat (limited to 'Source/cmExecuteProcessCommand.cxx')
-rw-r--r-- | Source/cmExecuteProcessCommand.cxx | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/Source/cmExecuteProcessCommand.cxx b/Source/cmExecuteProcessCommand.cxx index 1562223..eb26a50 100644 --- a/Source/cmExecuteProcessCommand.cxx +++ b/Source/cmExecuteProcessCommand.cxx @@ -47,6 +47,7 @@ bool cmExecuteProcessCommand::InitialPass(std::vector<std::string> const& args, std::string error_variable; std::string result_variable; std::string working_directory; + cmProcessOutput::Encoding encoding = cmProcessOutput::Auto; for (size_t i = 0; i < args.size(); ++i) { if (args[i] == "COMMAND") { doing_command = true; @@ -128,6 +129,14 @@ bool cmExecuteProcessCommand::InitialPass(std::vector<std::string> const& args, } else if (args[i] == "ERROR_STRIP_TRAILING_WHITESPACE") { doing_command = false; error_strip_trailing_whitespace = true; + } else if (args[i] == "ENCODING") { + doing_command = false; + if (++i < args.size()) { + encoding = cmProcessOutput::FindEncoding(args[i]); + } else { + this->SetError(" called with no value for ENCODING."); + return false; + } } else if (doing_command) { cmds[command_index].push_back(args[i].c_str()); } else { @@ -223,7 +232,7 @@ bool cmExecuteProcessCommand::InitialPass(std::vector<std::string> const& args, int length; char* data; int p; - cmProcessOutput processOutput; + cmProcessOutput processOutput(encoding); std::string strdata; while ((p = cmsysProcess_WaitForData(cp, &data, &length, CM_NULLPTR), p)) { // Put the output in the right place. |