From 3898e53e82abc59efc7a09feaadef2daf5af7174 Mon Sep 17 00:00:00 2001 From: Brad King Date: Thu, 12 Sep 2024 13:34:01 -0400 Subject: [PATCH] execute_process: Document and test ENCODING default The default was originally AUTO in commit 2ed473b3b8 (execute_process: Add ENCODING option for Windows child process output, 2016-11-23, v3.8.0-rc1~232^2) but was changed back to NONE by commit 07c3380a6e (execute_process: Restore no-decoding default behavior, 2017-02-13, v3.8.0-rc2~26^2) for CMake 3.8. Later it was accidentally changed back to AUTO by commit b783e62533 (cmExecuteProcessCommand: Port to cmArgumentParser, 2019-03-25, v3.15.0-rc1~270^2) in CMake 3.15 but the documentation was not updated. Document the current default, AUTO, and add a test case to verify it. Issue: #26262 --- Help/command/execute_process.rst | 5 ++++- Tests/RunCMake/execute_process/EncodingDefault-stderr.txt | 2 ++ Tests/RunCMake/execute_process/EncodingDefault.cmake | 3 +++ Tests/RunCMake/execute_process/RunCMakeTest.cmake | 1 + 4 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 Tests/RunCMake/execute_process/EncodingDefault-stderr.txt create mode 100644 Tests/RunCMake/execute_process/EncodingDefault.cmake diff --git a/Help/command/execute_process.rst b/Help/command/execute_process.rst index c02dbba894..2591dba149 100644 --- a/Help/command/execute_process.rst +++ b/Help/command/execute_process.rst @@ -140,12 +140,15 @@ Options: ``NONE`` Perform no decoding. This assumes that the process output is encoded in the same way as CMake's internal encoding (UTF-8). - This is the default. + + This was the default in CMake 3.14 and older. ``AUTO`` Use the current active console's codepage or if that isn't available then use ANSI. + This is the default since CMake 3.15. + ``ANSI`` Use the ANSI codepage. diff --git a/Tests/RunCMake/execute_process/EncodingDefault-stderr.txt b/Tests/RunCMake/execute_process/EncodingDefault-stderr.txt new file mode 100644 index 0000000000..b4cf27ab7c --- /dev/null +++ b/Tests/RunCMake/execute_process/EncodingDefault-stderr.txt @@ -0,0 +1,2 @@ +Chinese +注意 diff --git a/Tests/RunCMake/execute_process/EncodingDefault.cmake b/Tests/RunCMake/execute_process/EncodingDefault.cmake new file mode 100644 index 0000000000..60b1eb6a75 --- /dev/null +++ b/Tests/RunCMake/execute_process/EncodingDefault.cmake @@ -0,0 +1,3 @@ +# No explicit ENCODING option; fall back to default. +set(CODEPAGE 54936) +include(${CMAKE_CURRENT_LIST_DIR}/Encoding.cmake) diff --git a/Tests/RunCMake/execute_process/RunCMakeTest.cmake b/Tests/RunCMake/execute_process/RunCMakeTest.cmake index bbf139ea5c..b3ebdcaa53 100644 --- a/Tests/RunCMake/execute_process/RunCMakeTest.cmake +++ b/Tests/RunCMake/execute_process/RunCMakeTest.cmake @@ -9,6 +9,7 @@ run_cmake_command(MergeOutputVars ${CMAKE_COMMAND} -P ${RunCMake_SOURCE_DIR}/Mer run_cmake(EncodingMissing) if(TEST_ENCODING_EXE) + run_cmake_script(EncodingDefault -DTEST_ENCODING_EXE=${TEST_ENCODING_EXE}) run_cmake_script(EncodingAUTO -DTEST_ENCODING_EXE=${TEST_ENCODING_EXE}) run_cmake_script(EncodingUTF-8 -DTEST_ENCODING_EXE=${TEST_ENCODING_EXE}) run_cmake_script(EncodingUTF8 -DTEST_ENCODING_EXE=${TEST_ENCODING_EXE})