From fb3c4715cd88bce564e3e64d844cdf4e9bebfb25 Mon Sep 17 00:00:00 2001 From: Brad King Date: Mon, 15 May 2023 14:37:03 -0400 Subject: Ninja: Restore detection of msvc-wine showIncludes prefix Since commit 8f82e755f3 (Ninja: Fix detection of MSVC showIncludes prefix in Italian, 2023-01-26, v3.26.0-rc1~20^2) our regex no longer matches the output from `msvc-wine`, which uses forward slashes: Note: including file: /path/to/foo.h `cl /showIncludes` under Wine prints paths of the form `Z:\path\to\file`, but the `msvc-wine` wrapper converts them to the form `/path/to/file` so that native Ninja can be used. Update our regex to match the prefix followed by a path with a leading forward slash. Fixes: #24908 --- Modules/CMakeDetermineCompilerId.cmake | 2 +- Tests/RunCMake/Ninja/RunCMakeTest.cmake | 1 + Tests/RunCMake/Ninja/ShowIncludes-437-WineMSVC-check.cmake | 3 +++ Tests/RunCMake/Ninja/ShowIncludes-437-WineMSVC-stdout.txt | 1 + Tests/RunCMake/Ninja/ShowIncludes-437-WineMSVC.cmake | 3 +++ Tests/RunCMake/showIncludes.c | 8 ++++++++ 6 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 Tests/RunCMake/Ninja/ShowIncludes-437-WineMSVC-check.cmake create mode 100644 Tests/RunCMake/Ninja/ShowIncludes-437-WineMSVC-stdout.txt create mode 100644 Tests/RunCMake/Ninja/ShowIncludes-437-WineMSVC.cmake diff --git a/Modules/CMakeDetermineCompilerId.cmake b/Modules/CMakeDetermineCompilerId.cmake index f79e8b8d39..2250d63e78 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]+:[^:\n]*[^: \n][^: \n]:?[ \t]+)([A-Za-z]:\\\\|\\./)") + 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 520d9c7ee9..a52c64e2d4 100644 --- a/Tests/RunCMake/Ninja/RunCMakeTest.cmake +++ b/Tests/RunCMake/Ninja/RunCMakeTest.cmake @@ -51,6 +51,7 @@ if(WIN32) 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-437-WineMSVC -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-WineMSVC-check.cmake b/Tests/RunCMake/Ninja/ShowIncludes-437-WineMSVC-check.cmake new file mode 100644 index 0000000000..d4017ab2b6 --- /dev/null +++ b/Tests/RunCMake/Ninja/ShowIncludes-437-WineMSVC-check.cmake @@ -0,0 +1,3 @@ +# 'msvc-wine -showIncludes' prefix. +set(expect "Note: including file: ") +include(${CMAKE_CURRENT_LIST_DIR}/ShowIncludes-check.cmake) diff --git a/Tests/RunCMake/Ninja/ShowIncludes-437-WineMSVC-stdout.txt b/Tests/RunCMake/Ninja/ShowIncludes-437-WineMSVC-stdout.txt new file mode 100644 index 0000000000..bda7eaba1f --- /dev/null +++ b/Tests/RunCMake/Ninja/ShowIncludes-437-WineMSVC-stdout.txt @@ -0,0 +1 @@ +-- showIncludes='Note: including file: ' diff --git a/Tests/RunCMake/Ninja/ShowIncludes-437-WineMSVC.cmake b/Tests/RunCMake/Ninja/ShowIncludes-437-WineMSVC.cmake new file mode 100644 index 0000000000..59d3bf63b8 --- /dev/null +++ b/Tests/RunCMake/Ninja/ShowIncludes-437-WineMSVC.cmake @@ -0,0 +1,3 @@ +set(CODEPAGE 437) +set(VSLANG "msvc-wine") # Special case for test, not a real VS value. +include(${CMAKE_CURRENT_LIST_DIR}/ShowIncludes.cmake) diff --git a/Tests/RunCMake/showIncludes.c b/Tests/RunCMake/showIncludes.c index 5afe04a03c..7d467cfaa8 100644 --- a/Tests/RunCMake/showIncludes.c +++ b/Tests/RunCMake/showIncludes.c @@ -36,6 +36,14 @@ int main() } } + // msvc-wine (special case for test, not a real VS value). + if (strcmp(vslang, "msvc-wine") == 0) { + if (cp == 437 || cp == 65001) { + printf("Note: including file: /c/foo.h\n"); + return 0; + } + } + // German. if (strcmp(vslang, "1031") == 0) { if (cp == 437 || cp == 65001) { -- cgit v1.2.1