Browse Source

Merge topic 'test-fix-msvc-standard-default'

a5dd1599 Tests: Fix RunCMake.try_compile CxxStandard case on MSVC

Acked-by: Kitware Robot <[email protected]>
Merge-request: !1302
Brad King 8 years ago
parent
commit
6d20eda21a
1 changed files with 31 additions and 13 deletions
  1. 31 13
      Tests/RunCMake/CMakeLists.txt

+ 31 - 13
Tests/RunCMake/CMakeLists.txt

@@ -227,20 +227,38 @@ add_RunCMake_test(separate_arguments)
 add_RunCMake_test(set_property)
 add_RunCMake_test(string)
 add_RunCMake_test(test_include_dirs)
-foreach(var
-    CMAKE_C_COMPILER_ID
-    CMAKE_C_COMPILER_VERSION
-    CMAKE_C_STANDARD_DEFAULT
-    CMAKE_CXX_COMPILER_ID
-    CMAKE_CXX_COMPILER_VERSION
-    CMAKE_CXX_STANDARD_DEFAULT
-    CMake_TEST_CUDA
-    )
-  if(DEFINED ${var})
-    list(APPEND try_compile_ARGS -D${var}=${${var}})
+
+function(add_RunCMake_test_try_compile)
+  if(CMAKE_VERSION VERSION_LESS 3.9.20170907 AND "x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xMSVC")
+    # Older CMake versions do not know about MSVC language standards.
+    # Approximate our logic from MSVC-CXX.cmake.
+    if ((CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.0.24215.1 AND
+         CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19.10) OR
+       CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.10.25017)
+      set(CMAKE_CXX_STANDARD_DEFAULT 14)
+    elseif (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 16.0)
+      set(CMAKE_CXX_STANDARD_DEFAULT "")
+    else()
+      unset(CMAKE_CXX_STANDARD_DEFAULT)
+    endif()
   endif()
-endforeach()
-add_RunCMake_test(try_compile)
+  foreach(var
+      CMAKE_C_COMPILER_ID
+      CMAKE_C_COMPILER_VERSION
+      CMAKE_C_STANDARD_DEFAULT
+      CMAKE_CXX_COMPILER_ID
+      CMAKE_CXX_COMPILER_VERSION
+      CMAKE_CXX_STANDARD_DEFAULT
+      CMake_TEST_CUDA
+      )
+    if(DEFINED ${var})
+      list(APPEND try_compile_ARGS -D${var}=${${var}})
+    endif()
+  endforeach()
+  add_RunCMake_test(try_compile)
+endfunction()
+add_RunCMake_test_try_compile()
+
 add_RunCMake_test(try_run)
 add_RunCMake_test(set)
 add_RunCMake_test(variable_watch)