Browse Source

Merge topic 'clang-cl-showIncludes'

843fc607de Ninja: Restore detection of clang-cl showIncludes prefix
3346570ae9 Tests: Comment RunCMake.Ninja ShowIncludes sample input languages

Acked-by: Kitware Robot <[email protected]>
Merge-request: !8344
Brad King 2 years ago
parent
commit
2cdb0bae28

+ 1 - 1
Modules/CMakeDetermineCompilerId.cmake

@@ -1147,7 +1147,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()

+ 1 - 0
Tests/RunCMake/Ninja/RunCMakeTest.cmake

@@ -46,6 +46,7 @@ if(WIN32)
   if(RunCMake_MAKE_PROGRAM)
     set(maybe_MAKE_PROGRAM "-DRunCMake_MAKE_PROGRAM=${RunCMake_MAKE_PROGRAM}")
   endif()
+  run_cmake_script(ShowIncludes-437-ClangCl -DshowIncludes=${showIncludes} ${maybe_MAKE_PROGRAM})
   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})

+ 3 - 0
Tests/RunCMake/Ninja/ShowIncludes-437-ClangCl-check.cmake

@@ -0,0 +1,3 @@
+# 'clang-cl /showIncludes' prefix.
+set(expect "Note: including file: ")
+include(${CMAKE_CURRENT_LIST_DIR}/ShowIncludes-check.cmake)

+ 1 - 0
Tests/RunCMake/Ninja/ShowIncludes-437-ClangCl-stdout.txt

@@ -0,0 +1 @@
+-- showIncludes='Note: including file: '

+ 3 - 0
Tests/RunCMake/Ninja/ShowIncludes-437-ClangCl.cmake

@@ -0,0 +1,3 @@
+set(CODEPAGE 437)
+set(VSLANG "clang-cl") # Special case for test, not a real VS value.
+include(${CMAKE_CURRENT_LIST_DIR}/ShowIncludes.cmake)

+ 14 - 0
Tests/RunCMake/showIncludes.c

@@ -28,6 +28,15 @@ int main()
   printf("OEM code page: %u\n", GetOEMCP());
   printf("VSLANG: %s\n", vslang);
 
+  // clang-cl (special case for test, not a real VS value).
+  if (strcmp(vslang, "clang-cl") == 0) {
+    if (cp == 437 || cp == 65001) {
+      printf("Note: including file: ./foo.h\n");
+      return 0;
+    }
+  }
+
+  // German.
   if (strcmp(vslang, "1031") == 0) {
     if (cp == 437 || cp == 65001) {
       printf("Hinweis: Einlesen der Datei: C:\\foo.h\n");
@@ -35,6 +44,7 @@ int main()
     }
   }
 
+  // English.
   if (strcmp(vslang, "1033") == 0) {
     if (cp == 437 || cp == 65001) {
       printf("Note: including file: C:\\foo.h\n");
@@ -42,6 +52,7 @@ int main()
     }
   }
 
+  // French.
   if (strcmp(vslang, "1036") == 0) {
     if (cp == 437 || cp == 863) {
       printf("Remarque\xff: inclusion du fichier\xff:  C:\\foo.h\n");
@@ -53,6 +64,7 @@ int main()
     }
   }
 
+  // Italian.
   if (strcmp(vslang, "1040") == 0) {
     if (cp == 437 || cp == 65001) {
       printf("Nota: file incluso  C:\\foo.h\n");
@@ -60,6 +72,7 @@ int main()
     }
   }
 
+  // Japanese.
   if (strcmp(vslang, "1041") == 0) {
     if (cp == 932) {
       printf("\x83\x81\x83\x82: "
@@ -75,6 +88,7 @@ int main()
     }
   }
 
+  // Chinese.
   if (strcmp(vslang, "2052") == 0) {
     if (cp == 54936 || cp == 936) {
       printf("\xd7\xa2\xd2\xe2: "