From 684e4d205d64ff8b98c00a1d6a358bffbf509c62 Mon Sep 17 00:00:00 2001
From: Brad King <brad.king@kitware.com>
Date: Wed, 30 Nov 2016 15:15:05 -0500
Subject: [PATCH] Features: Make feature recording conditions more consistent

Condition all calls to `_record_compiler_features_{c,cxx}` on
`_result EQUAL 0` so that adding new language standards later does
not need to update them.  Avoid some duplicate compiler version
checks by conditioning C11 and CXX14 feature recording on the
existence of `CMAKE_{C11,CXX14}_STANDARD_COMPILE_OPTION` (whose
setting already used the version check).
---
 Modules/Compiler/AppleClang-C.cmake   | 4 +++-
 Modules/Compiler/AppleClang-CXX.cmake | 3 +--
 Modules/Compiler/Clang-C.cmake        | 4 +++-
 Modules/Compiler/Clang-CXX.cmake      | 4 +++-
 Modules/Compiler/GNU-C.cmake          | 6 +++---
 Modules/Compiler/GNU-CXX.cmake        | 6 +++---
 Modules/Compiler/Intel-C.cmake        | 2 +-
 Modules/Compiler/Intel-CXX.cmake      | 7 ++++---
 Modules/Compiler/SunPro-CXX.cmake     | 4 +++-
 9 files changed, 24 insertions(+), 16 deletions(-)

diff --git a/Modules/Compiler/AppleClang-C.cmake b/Modules/Compiler/AppleClang-C.cmake
index fe39b3bc7b..f874e74e98 100644
--- a/Modules/Compiler/AppleClang-C.cmake
+++ b/Modules/Compiler/AppleClang-C.cmake
@@ -27,7 +27,9 @@ endif()
 macro(cmake_record_c_compile_features)
   set(_result 0)
   if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 4.0)
-    _record_compiler_features_c(11)
+    if (_result EQUAL 0)
+      _record_compiler_features_c(11)
+    endif()
     if (_result EQUAL 0)
       _record_compiler_features_c(99)
     endif()
diff --git a/Modules/Compiler/AppleClang-CXX.cmake b/Modules/Compiler/AppleClang-CXX.cmake
index 8dd62784c4..afb9affea2 100644
--- a/Modules/Compiler/AppleClang-CXX.cmake
+++ b/Modules/Compiler/AppleClang-CXX.cmake
@@ -38,8 +38,7 @@ endif()
 macro(cmake_record_cxx_compile_features)
   set(_result 0)
   if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.0)
-    set(_result 0)
-    if(CMAKE_CXX14_STANDARD_COMPILE_OPTION)
+    if(_result EQUAL 0 AND CMAKE_CXX14_STANDARD_COMPILE_OPTION)
       _record_compiler_features_cxx(14)
     endif()
     if (_result EQUAL 0)
diff --git a/Modules/Compiler/Clang-C.cmake b/Modules/Compiler/Clang-C.cmake
index b3f3805066..bcd9218702 100644
--- a/Modules/Compiler/Clang-C.cmake
+++ b/Modules/Compiler/Clang-C.cmake
@@ -36,7 +36,9 @@ endif()
 macro(cmake_record_c_compile_features)
   set(_result 0)
   if (UNIX AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 3.4)
-    _record_compiler_features_c(11)
+    if (_result EQUAL 0)
+      _record_compiler_features_c(11)
+    endif()
     if (_result EQUAL 0)
       _record_compiler_features_c(99)
     endif()
diff --git a/Modules/Compiler/Clang-CXX.cmake b/Modules/Compiler/Clang-CXX.cmake
index dfe0628e16..5ac43a3ddd 100644
--- a/Modules/Compiler/Clang-CXX.cmake
+++ b/Modules/Compiler/Clang-CXX.cmake
@@ -46,7 +46,9 @@ endif()
 macro(cmake_record_cxx_compile_features)
   set(_result 0)
   if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.4)
-    _record_compiler_features_cxx(14)
+    if(_result EQUAL 0 AND CMAKE_CXX14_STANDARD_COMPILE_OPTION)
+      _record_compiler_features_cxx(14)
+    endif()
     if (_result EQUAL 0)
       _record_compiler_features_cxx(11)
     endif()
diff --git a/Modules/Compiler/GNU-C.cmake b/Modules/Compiler/GNU-C.cmake
index 4dbf6efd57..05c3bb2b43 100644
--- a/Modules/Compiler/GNU-C.cmake
+++ b/Modules/Compiler/GNU-C.cmake
@@ -41,10 +41,10 @@ endif()
 
 macro(cmake_record_c_compile_features)
   set(_result 0)
-  if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 4.6)
-    _record_compiler_features_c(11)
-  endif()
   if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 4.4)
+    if(_result EQUAL 0 AND CMAKE_C11_STANDARD_COMPILE_OPTION)
+      _record_compiler_features_c(11)
+    endif()
     if (_result EQUAL 0)
       _record_compiler_features_c(99)
     endif()
diff --git a/Modules/Compiler/GNU-CXX.cmake b/Modules/Compiler/GNU-CXX.cmake
index 936f62b3ca..4150d94952 100644
--- a/Modules/Compiler/GNU-CXX.cmake
+++ b/Modules/Compiler/GNU-CXX.cmake
@@ -48,10 +48,10 @@ endif()
 
 macro(cmake_record_cxx_compile_features)
   set(_result 0)
-  if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.8)
-    _record_compiler_features_cxx(14)
-  endif()
   if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.4)
+    if(_result EQUAL 0 AND CMAKE_CXX14_STANDARD_COMPILE_OPTION)
+      _record_compiler_features_cxx(14)
+    endif()
     if (_result EQUAL 0)
       _record_compiler_features_cxx(11)
     endif()
diff --git a/Modules/Compiler/Intel-C.cmake b/Modules/Compiler/Intel-C.cmake
index 5a79452f41..6408392a60 100644
--- a/Modules/Compiler/Intel-C.cmake
+++ b/Modules/Compiler/Intel-C.cmake
@@ -49,7 +49,7 @@ unset(_ext)
 macro(cmake_record_c_compile_features)
   set(_result 0)
   if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 12.1)
-    if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 15.0.0)
+    if (_result EQUAL 0 AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 15.0.0)
       _record_compiler_features_C(11)
     endif()
     if (_result EQUAL 0)
diff --git a/Modules/Compiler/Intel-CXX.cmake b/Modules/Compiler/Intel-CXX.cmake
index d01d38d886..9c39236f3c 100644
--- a/Modules/Compiler/Intel-CXX.cmake
+++ b/Modules/Compiler/Intel-CXX.cmake
@@ -66,9 +66,10 @@ unset(_ext)
 macro(cmake_record_cxx_compile_features)
   set(_result 0)
   if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 12.1)
-    if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 16.0
-        OR (NOT "x${CMAKE_CXX_SIMULATE_ID}" STREQUAL "xMSVC" AND
-            NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 15.0))
+    if (_result EQUAL 0 AND
+        (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 16.0
+         OR (NOT "x${CMAKE_CXX_SIMULATE_ID}" STREQUAL "xMSVC" AND
+             NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 15.0)))
       _record_compiler_features_cxx(14)
     endif()
     if (_result EQUAL 0)
diff --git a/Modules/Compiler/SunPro-CXX.cmake b/Modules/Compiler/SunPro-CXX.cmake
index e83c896328..f4345b8ec9 100644
--- a/Modules/Compiler/SunPro-CXX.cmake
+++ b/Modules/Compiler/SunPro-CXX.cmake
@@ -53,7 +53,9 @@ endif()
 macro(cmake_record_cxx_compile_features)
   set(_result 0)
   if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.13)
-    _record_compiler_features_cxx(11)
+    if (_result EQUAL 0)
+      _record_compiler_features_cxx(11)
+    endif()
     if (_result EQUAL 0)
       _record_compiler_features_cxx(98)
     endif()
-- 
GitLab