From 8f82e755f336c66194ce8229575e4651cb7a4c62 Mon Sep 17 00:00:00 2001 From: Brad King Date: Thu, 26 Jan 2023 15:16:01 -0500 Subject: Ninja: Fix detection of MSVC showIncludes prefix in Italian The prefix does not have two colons. Update our regex. Fixes: #24357 --- Modules/CMakeDetermineCompilerId.cmake | 2 +- Tests/RunCMake/Ninja/RunCMakeTest.cmake | 1 + Tests/RunCMake/Ninja/ShowIncludes-437-Italian-check.cmake | 3 +++ Tests/RunCMake/Ninja/ShowIncludes-437-Italian-stdout.txt | 1 + Tests/RunCMake/Ninja/ShowIncludes-437-Italian.cmake | 3 +++ Tests/RunCMake/showIncludes.c | 7 +++++++ 6 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 Tests/RunCMake/Ninja/ShowIncludes-437-Italian-check.cmake create mode 100644 Tests/RunCMake/Ninja/ShowIncludes-437-Italian-stdout.txt create mode 100644 Tests/RunCMake/Ninja/ShowIncludes-437-Italian.cmake diff --git a/Modules/CMakeDetermineCompilerId.cmake b/Modules/CMakeDetermineCompilerId.cmake index 448e606..41e0e1a 100644 --- a/Modules/CMakeDetermineCompilerId.cmake +++ b/Modules/CMakeDetermineCompilerId.cmake @@ -1144,7 +1144,7 @@ function(CMAKE_DETERMINE_MSVC_SHOWINCLUDES_PREFIX lang userflags) ENCODING AUTO # cl prints in console output code page ) string(REPLACE "\n" "\n " msg " ${out}") - if(res EQUAL 0 AND "${out}" MATCHES "(^|\n)([^:\n]*:[^:\n]*:[ \t]*)") + if(res EQUAL 0 AND "${out}" MATCHES "(^|\n)([^:\n][^:\n]+:[^:\n]*[^: \n][^: \n]:?[ \t]+)[A-Za-z]:\\\\") set(CMAKE_${lang}_CL_SHOWINCLUDES_PREFIX "${CMAKE_MATCH_2}" PARENT_SCOPE) string(APPEND msg "\nFound prefix \"${CMAKE_MATCH_2}\"") else() diff --git a/Tests/RunCMake/Ninja/RunCMakeTest.cmake b/Tests/RunCMake/Ninja/RunCMakeTest.cmake index d63c0c4..9214e90 100644 --- a/Tests/RunCMake/Ninja/RunCMakeTest.cmake +++ b/Tests/RunCMake/Ninja/RunCMakeTest.cmake @@ -49,6 +49,7 @@ if(WIN32) run_cmake_script(ShowIncludes-437-English -DshowIncludes=${showIncludes} ${maybe_MAKE_PROGRAM}) run_cmake_script(ShowIncludes-437-French -DshowIncludes=${showIncludes} ${maybe_MAKE_PROGRAM}) run_cmake_script(ShowIncludes-437-German -DshowIncludes=${showIncludes} ${maybe_MAKE_PROGRAM}) + run_cmake_script(ShowIncludes-437-Italian -DshowIncludes=${showIncludes} ${maybe_MAKE_PROGRAM}) run_cmake_script(ShowIncludes-54936-Chinese -DshowIncludes=${showIncludes} ${maybe_MAKE_PROGRAM}) run_cmake_script(ShowIncludes-65001-Chinese -DshowIncludes=${showIncludes} ${maybe_MAKE_PROGRAM}) run_cmake_script(ShowIncludes-65001-French -DshowIncludes=${showIncludes} ${maybe_MAKE_PROGRAM}) diff --git a/Tests/RunCMake/Ninja/ShowIncludes-437-Italian-check.cmake b/Tests/RunCMake/Ninja/ShowIncludes-437-Italian-check.cmake new file mode 100644 index 0000000..014ce7f --- /dev/null +++ b/Tests/RunCMake/Ninja/ShowIncludes-437-Italian-check.cmake @@ -0,0 +1,3 @@ +# 'cl /showIncludes' prefix with 'VSLANG=1040' and 'chcp 437'. +set(expect "Nota: file incluso ") +include(${CMAKE_CURRENT_LIST_DIR}/ShowIncludes-check.cmake) diff --git a/Tests/RunCMake/Ninja/ShowIncludes-437-Italian-stdout.txt b/Tests/RunCMake/Ninja/ShowIncludes-437-Italian-stdout.txt new file mode 100644 index 0000000..9dd03a5 --- /dev/null +++ b/Tests/RunCMake/Ninja/ShowIncludes-437-Italian-stdout.txt @@ -0,0 +1 @@ +-- showIncludes='Nota: file incluso ' diff --git a/Tests/RunCMake/Ninja/ShowIncludes-437-Italian.cmake b/Tests/RunCMake/Ninja/ShowIncludes-437-Italian.cmake new file mode 100644 index 0000000..be04271 --- /dev/null +++ b/Tests/RunCMake/Ninja/ShowIncludes-437-Italian.cmake @@ -0,0 +1,3 @@ +set(CODEPAGE 437) +set(VSLANG 1040) +include(${CMAKE_CURRENT_LIST_DIR}/ShowIncludes.cmake) diff --git a/Tests/RunCMake/showIncludes.c b/Tests/RunCMake/showIncludes.c index 27ce458..4ea2bcc 100644 --- a/Tests/RunCMake/showIncludes.c +++ b/Tests/RunCMake/showIncludes.c @@ -53,6 +53,13 @@ int main() } } + if (strcmp(vslang, "1040") == 0) { + if (cp == 437 || cp == 65001) { + printf("Nota: file incluso C:\\foo.h\n"); + return 0; + } + } + if (strcmp(vslang, "1041") == 0) { if (cp == 932) { printf("\x83\x81\x83\x82: " -- cgit v0.12