Browse Source

CompileFeatures: Record when compilers gained full CXX11 support

Use the infrastructure added by commit 646fb1a646 (CompileFeatures:
memoize C++ compilers with full language level support, 2019-03-27) to
avoid using a `try_compile` to check for C++11 feature support when the
running compiler is known to have all features.
Robert Maynard 6 years ago
parent
commit
8d45a2ffe0

+ 5 - 0
Modules/Compiler/AppleClang-CXX.cmake

@@ -28,4 +28,9 @@ if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 6.1)
   set(CMAKE_CXX17_EXTENSION_COMPILE_OPTION "-std=gnu++1z")
 endif()
 
+
+if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 8.0)
+    set(CMAKE_CXX11_STANDARD__HAS_FULL_SUPPORT ON)
+endif()
+
 __compiler_check_default_language_standard(CXX 4.0 98)

+ 2 - 1
Modules/Compiler/Clang-CXX.cmake

@@ -17,9 +17,10 @@ if(NOT "x${CMAKE_CXX_SIMULATE_ID}" STREQUAL "xMSVC")
   endif()
 
   if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.1)
+    set(CMAKE_CXX98_STANDARD__HAS_FULL_SUPPORT ON)
     set(CMAKE_CXX11_STANDARD_COMPILE_OPTION "-std=c++11")
     set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION "-std=gnu++11")
-    set(CMAKE_CXX98_STANDARD__HAS_FULL_SUPPORT ON)
+    set(CMAKE_CXX11_STANDARD__HAS_FULL_SUPPORT ON)
   elseif(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 2.1)
     set(CMAKE_CXX11_STANDARD_COMPILE_OPTION "-std=c++0x")
     set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION "-std=gnu++0x")

+ 5 - 1
Modules/Compiler/GNU-CXX.cmake

@@ -17,15 +17,19 @@ if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.4)
 endif()
 
 if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.7)
+  set(CMAKE_CXX98_STANDARD__HAS_FULL_SUPPORT ON)
   set(CMAKE_CXX11_STANDARD_COMPILE_OPTION "-std=c++11")
   set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION "-std=gnu++11")
-  set(CMAKE_CXX98_STANDARD__HAS_FULL_SUPPORT ON)
 elseif (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.4)
   # 4.3 supports 0x variants
   set(CMAKE_CXX11_STANDARD_COMPILE_OPTION "-std=c++0x")
   set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION "-std=gnu++0x")
 endif()
 
+if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.8.1)
+  set(CMAKE_CXX11_STANDARD__HAS_FULL_SUPPORT ON)
+endif()
+
 if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.9)
   set(CMAKE_CXX14_STANDARD_COMPILE_OPTION "-std=c++14")
   set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION "-std=gnu++14")

+ 4 - 0
Modules/Compiler/Intel-CXX.cmake

@@ -54,6 +54,10 @@ else()
     set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION "-std=gnu++1y")
   endif()
 
+  if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 15.0)
+    set(CMAKE_CXX11_STANDARD__HAS_FULL_SUPPORT ON)
+  endif()
+
   if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 13.0)
     set(CMAKE_CXX11_STANDARD_COMPILE_OPTION "-std=c++11")
     set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION "-std=gnu++11")

+ 1 - 15
Modules/Compiler/MSVC-CXX.cmake

@@ -17,6 +17,7 @@ if ((CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.0.24215.1 AND
   set(CMAKE_CXX14_STANDARD_COMPILE_OPTION "-std:c++14")
   set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION "-std:c++14")
   if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.11.25505)
+    set(CMAKE_CXX11_STANDARD__HAS_FULL_SUPPORT ON)
     set(CMAKE_CXX17_STANDARD_COMPILE_OPTION "-std:c++17")
     set(CMAKE_CXX17_EXTENSION_COMPILE_OPTION "-std:c++17")
   else()
@@ -30,21 +31,6 @@ if ((CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.0.24215.1 AND
 
   __compiler_check_default_language_standard(CXX 19.0 14)
 
-  # All features that we define are available in the base mode, except
-  # for meta-features for C++14 and above.  Override the default macro
-  # to avoid doing unnecessary work.
-  macro(cmake_record_cxx_compile_features)
-    if (DEFINED CMAKE_CXX20_STANDARD_COMPILE_OPTION)
-      list(APPEND CMAKE_CXX20_COMPILE_FEATURES cxx_std_20)
-    endif()
-    # The main cmake_record_cxx_compile_features macro makes all
-    # these conditional on CMAKE_CXX##_STANDARD_COMPILE_OPTION,
-    # but we can skip the conditions because we set them above.
-    list(APPEND CMAKE_CXX17_COMPILE_FEATURES cxx_std_17)
-    list(APPEND CMAKE_CXX14_COMPILE_FEATURES cxx_std_14)
-    list(APPEND CMAKE_CXX98_COMPILE_FEATURES cxx_std_11) # no flag needed for 11
-    _record_compiler_features_cxx(98)
-  endmacro()
 elseif (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 16.0)
   # MSVC has no specific options to set language standards, but set them as
   # empty strings anyways so the feature test infrastructure can at least check