From 02a04dd9c7d760d1977e72a59e52da4e15000e0c Mon Sep 17 00:00:00 2001 From: Brad King Date: Wed, 26 Oct 2022 14:35:42 -0400 Subject: Ninja: Restore support for non-ascii paths on Windows with ninja<=1.10 Revert commit bbdb000c55 (GlobalNinjaGenerator: enlarge file stream buffer, 2022-01-25, v3.23.0-rc1~68^2). Somehow `rdbuf()->pubsetbuf()` is resetting our imbued locale and `cm_codecvt` that handles encoding. Fixes: #24089 --- Source/cmGlobalNinjaGenerator.cxx | 13 ------------- Source/cmGlobalNinjaGenerator.h | 1 - 2 files changed, 14 deletions(-) diff --git a/Source/cmGlobalNinjaGenerator.cxx b/Source/cmGlobalNinjaGenerator.cxx index 4245037..982b6af 100644 --- a/Source/cmGlobalNinjaGenerator.cxx +++ b/Source/cmGlobalNinjaGenerator.cxx @@ -1025,19 +1025,6 @@ bool cmGlobalNinjaGenerator::OpenBuildFileStreams() return false; } - // New buffer size 8 MiB - constexpr auto buildFileStreamBufferSize = 8 * 1024 * 1024; - - // Ensure the buffer is allocated - if (!this->BuildFileStreamBuffer) { - this->BuildFileStreamBuffer = - cm::make_unique(buildFileStreamBufferSize); - } - - // Enlarge the internal buffer of the `BuildFileStream` - this->BuildFileStream->rdbuf()->pubsetbuf(this->BuildFileStreamBuffer.get(), - buildFileStreamBufferSize); - // Write a comment about this file. *this->BuildFileStream << "# This file contains all the build statements describing the\n" diff --git a/Source/cmGlobalNinjaGenerator.h b/Source/cmGlobalNinjaGenerator.h index aa2df4d..03387a8 100644 --- a/Source/cmGlobalNinjaGenerator.h +++ b/Source/cmGlobalNinjaGenerator.h @@ -529,7 +529,6 @@ private: /// The file containing the build statement. (the relationship of the /// compilation DAG). std::unique_ptr BuildFileStream; - std::unique_ptr BuildFileStreamBuffer; /// The file containing the rule statements. (The action attached to each /// edge of the compilation DAG). std::unique_ptr RulesFileStream; -- cgit v0.12 From a12050666c5441abc4865acdde9ee583e765d6e6 Mon Sep 17 00:00:00 2001 From: Brad King Date: Wed, 26 Oct 2022 14:44:07 -0400 Subject: Tests: Add case for ninja with non-ascii chars Issue: #24089 --- Tests/RunCMake/Ninja/Intl-build-check.cmake | 5 +++++ Tests/RunCMake/Ninja/Intl-common.cmake | 1 + Tests/RunCMake/Ninja/Intl.cmake | 7 +++++++ Tests/RunCMake/Ninja/RunCMakeTest.cmake | 9 +++++++++ 4 files changed, 22 insertions(+) create mode 100644 Tests/RunCMake/Ninja/Intl-build-check.cmake create mode 100644 Tests/RunCMake/Ninja/Intl-common.cmake create mode 100644 Tests/RunCMake/Ninja/Intl.cmake diff --git a/Tests/RunCMake/Ninja/Intl-build-check.cmake b/Tests/RunCMake/Ninja/Intl-build-check.cmake new file mode 100644 index 0000000..77f013c --- /dev/null +++ b/Tests/RunCMake/Ninja/Intl-build-check.cmake @@ -0,0 +1,5 @@ +include(${RunCMake_SOURCE_DIR}/Intl-common.cmake) +set(output "${RunCMake_TEST_BINARY_DIR}/${intl}-output.txt") +if(NOT EXISTS "${output}") + set(RunCMake_TEST_FAILED "Expected output does not exist:\n ${output}") +endif() diff --git a/Tests/RunCMake/Ninja/Intl-common.cmake b/Tests/RunCMake/Ninja/Intl-common.cmake new file mode 100644 index 0000000..7703976 --- /dev/null +++ b/Tests/RunCMake/Ninja/Intl-common.cmake @@ -0,0 +1 @@ +set(intl "intl-ë®") diff --git a/Tests/RunCMake/Ninja/Intl.cmake b/Tests/RunCMake/Ninja/Intl.cmake new file mode 100644 index 0000000..50e4ee4 --- /dev/null +++ b/Tests/RunCMake/Ninja/Intl.cmake @@ -0,0 +1,7 @@ +include(Intl-common.cmake) +set(input "${CMAKE_CURRENT_BINARY_DIR}/${intl}-input.txt") +set(output "${CMAKE_CURRENT_BINARY_DIR}/${intl}-output.txt") +file(WRITE "${input}" "${intl}\n") +add_custom_command(OUTPUT "${output}" + COMMAND ${CMAKE_COMMAND} -E copy "${input}" "${output}") +add_custom_target(drive ALL DEPENDS "${output}") diff --git a/Tests/RunCMake/Ninja/RunCMakeTest.cmake b/Tests/RunCMake/Ninja/RunCMakeTest.cmake index 2a5b556..0825666 100644 --- a/Tests/RunCMake/Ninja/RunCMakeTest.cmake +++ b/Tests/RunCMake/Ninja/RunCMakeTest.cmake @@ -33,6 +33,15 @@ function(run_NinjaToolMissing) endfunction() run_NinjaToolMissing() +function(run_Intl) + run_cmake(Intl) + set(RunCMake_TEST_NO_CLEAN 1) + set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/Intl-build) + set(RunCMake_TEST_OUTPUT_MERGE 1) + run_cmake_command(Intl-build ${CMAKE_COMMAND} --build .) +endfunction() +run_Intl() + function(run_NoWorkToDo) run_cmake(NoWorkToDo) set(RunCMake_TEST_NO_CLEAN 1) -- cgit v0.12