[Cmake-commits] CMake branch, next, updated. v3.5.2-1037-gefa58e5

Brad King brad.king at kitware.com
Wed Apr 20 13:27:59 EDT 2016


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "CMake".

The branch, next has been updated
       via  efa58e5e4cc5107eb06ecd85fd160630c986b53d (commit)
       via  9c6bed63acc20580ad321108cfedbcbfac3d9856 (commit)
       via  c985cc28d96fb2650e640615c9e2e916d8c3a1ab (commit)
       via  0051fbac0ff7f3789b81b148e1770e1b469d487d (commit)
       via  4ea64678dc88ca489a3ca6093d6ffb7ce69a6ce2 (commit)
       via  4c40c93d666d84bfbb0d26919d972a0b05b5c7c3 (commit)
       via  6d4bf1c80560b0c64837c487aae07d9747de7425 (commit)
      from  b7dea4e038f645ebb5269d35a10cadf3ce9e8bb7 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=efa58e5e4cc5107eb06ecd85fd160630c986b53d
commit efa58e5e4cc5107eb06ecd85fd160630c986b53d
Merge: b7dea4e 9c6bed6
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Wed Apr 20 13:27:58 2016 -0400
Commit:     CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Wed Apr 20 13:27:58 2016 -0400

    Merge topic 'intel-compiler-features' into next
    
    9c6bed63 Help: Add notes for topic 'intel-compiler-features'
    c985cc28 Features: Record standard flags for Intel C/C++ on Windows
    0051fbac WCDH: Add Intel to list of supported compilers
    4ea64678 Features: Record standards and features for Intel C on UNIX
    4c40c93d Features: Record standards and features for Intel C++ on UNIX
    6d4bf1c8 Features: Detect C default dialect on MSVC-like compilers


https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=9c6bed63acc20580ad321108cfedbcbfac3d9856
commit 9c6bed63acc20580ad321108cfedbcbfac3d9856
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Wed Apr 20 10:34:02 2016 -0400
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Wed Apr 20 10:34:16 2016 -0400

    Help: Add notes for topic 'intel-compiler-features'

diff --git a/Help/release/dev/intel-compiler-features.rst b/Help/release/dev/intel-compiler-features.rst
new file mode 100644
index 0000000..f154dc9
--- /dev/null
+++ b/Help/release/dev/intel-compiler-features.rst
@@ -0,0 +1,6 @@
+intel-compiler-features
+-----------------------
+
+* The :manual:`Compile Features <cmake-compile-features(7)>` functionality
+  is now aware of features supported by Intel C++ compilers versions 12.1
+  through 16.0 on UNIX platforms.

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=c985cc28d96fb2650e640615c9e2e916d8c3a1ab
commit c985cc28d96fb2650e640615c9e2e916d8c3a1ab
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Mon Apr 18 14:20:32 2016 -0400
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Wed Apr 20 10:34:16 2016 -0400

    Features: Record standard flags for Intel C/C++ on Windows
    
    Select the `-std=` or `-Qstd=` flag based on whether Intel is GNU-like
    or MSVC-like, respectively.

diff --git a/Modules/Compiler/Intel-C.cmake b/Modules/Compiler/Intel-C.cmake
index 006ba1f..cfd7421 100644
--- a/Modules/Compiler/Intel-C.cmake
+++ b/Modules/Compiler/Intel-C.cmake
@@ -8,18 +8,22 @@ set(CMAKE_C_FLAGS_RELWITHDEBINFO_INIT "-O2 -g -DNDEBUG")
 
 set(CMAKE_DEPFILE_FLAGS_C "-MD -MT <OBJECT> -MF <DEPFILE>")
 
-if(NOT "x${CMAKE_C_SIMULATE_ID}" STREQUAL "xMSVC")
-  if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 15.0.0)
-    set(CMAKE_C11_STANDARD_COMPILE_OPTION "-std=c11")
-    set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-std=c11")
-  endif()
+if("x${CMAKE_C_SIMULATE_ID}" STREQUAL "xMSVC")
+  set(_std -Qstd)
+else()
+  set(_std -std)
+endif()
 
-  if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 10.0)
-    set(CMAKE_C90_STANDARD_COMPILE_OPTION "-std=c89")
-    set(CMAKE_C90_EXTENSION_COMPILE_OPTION "-std=c89")
-    set(CMAKE_C99_STANDARD_COMPILE_OPTION "-std=c99")
-    set(CMAKE_C99_EXTENSION_COMPILE_OPTION "-std=c99")
-  endif()
+if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 15.0.0)
+  set(CMAKE_C11_STANDARD_COMPILE_OPTION "${_std}=c11")
+  set(CMAKE_C11_EXTENSION_COMPILE_OPTION "${_std}=c11")
+endif()
+
+if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 10.0)
+  set(CMAKE_C90_STANDARD_COMPILE_OPTION "${_std}=c89")
+  set(CMAKE_C90_EXTENSION_COMPILE_OPTION "${_std}=c89")
+  set(CMAKE_C99_STANDARD_COMPILE_OPTION "${_std}=c99")
+  set(CMAKE_C99_EXTENSION_COMPILE_OPTION "${_std}=c99")
 endif()
 
 if(NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 10.0)
@@ -38,6 +42,8 @@ if(NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 10.0)
   endif()
 endif()
 
+unset(_std)
+
 macro(cmake_record_c_compile_features)
   macro(_get_intel_c_features std_version list)
     record_compiler_features(C "${std_version}" ${list})
diff --git a/Modules/Compiler/Intel-CXX.cmake b/Modules/Compiler/Intel-CXX.cmake
index 2785fd3..369e041 100644
--- a/Modules/Compiler/Intel-CXX.cmake
+++ b/Modules/Compiler/Intel-CXX.cmake
@@ -8,29 +8,33 @@ set(CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT "-O2 -g -DNDEBUG")
 
 set(CMAKE_DEPFILE_FLAGS_CXX "-MD -MT <OBJECT> -MF <DEPFILE>")
 
-if(NOT "x${CMAKE_CXX_SIMULATE_ID}" STREQUAL "xMSVC")
-  if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 15.0.2)
-    set(CMAKE_CXX14_STANDARD_COMPILE_OPTION "-std=c++14")
-    # todo: there is no gnu++14 value supported; figure out what to do
-    set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION "-std=c++14")
-  elseif (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 15.0.0)
-    set(CMAKE_CXX14_STANDARD_COMPILE_OPTION "-std=c++1y")
-    # todo: there is no gnu++14 value supported; figure out what to do
-    set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION "-std=c++1y")
-  endif()
+if("x${CMAKE_CXX_SIMULATE_ID}" STREQUAL "xMSVC")
+  set(_std -Qstd)
+else()
+  set(_std -std)
+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")
-  elseif (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 12.1)
-    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 15.0.2)
+  set(CMAKE_CXX14_STANDARD_COMPILE_OPTION "${_std}=c++14")
+  # todo: there is no gnu++14 value supported; figure out what to do
+  set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION "${_std}=c++14")
+elseif (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 15.0.0)
+  set(CMAKE_CXX14_STANDARD_COMPILE_OPTION "${_std}=c++1y")
+  # todo: there is no gnu++14 value supported; figure out what to do
+  set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION "${_std}=c++1y")
+endif()
 
-  if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 12.1)
-    set(CMAKE_CXX98_STANDARD_COMPILE_OPTION "-std=c++98")
-    set(CMAKE_CXX98_EXTENSION_COMPILE_OPTION "-std=gnu++98")
-  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")
+elseif (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 12.1)
+  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 12.1)
+  set(CMAKE_CXX98_STANDARD_COMPILE_OPTION "${_std}=c++98")
+  set(CMAKE_CXX98_EXTENSION_COMPILE_OPTION "${_std}=gnu++98")
 endif()
 
 if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 12.1)
@@ -46,6 +50,8 @@ if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 12.1)
   endif()
 endif()
 
+unset(_std)
+
 macro(cmake_record_cxx_compile_features)
   macro(_get_intel_features std_version list)
     record_compiler_features(CXX "${std_version}" ${list})

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=0051fbac0ff7f3789b81b148e1770e1b469d487d
commit 0051fbac0ff7f3789b81b148e1770e1b469d487d
Author:     Robert Maynard <robert.maynard at kitware.com>
AuthorDate: Thu Apr 14 08:57:07 2016 -0400
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Wed Apr 20 10:34:15 2016 -0400

    WCDH: Add Intel to list of supported compilers

diff --git a/Modules/WriteCompilerDetectionHeader.cmake b/Modules/WriteCompilerDetectionHeader.cmake
index a3b73bb..2669a84 100644
--- a/Modules/WriteCompilerDetectionHeader.cmake
+++ b/Modules/WriteCompilerDetectionHeader.cmake
@@ -36,7 +36,7 @@
 #      PREFIX ClimbingStats
 #      OUTPUT_FILES_VAR support_files
 #      OUTPUT_DIR compilers
-#      COMPILERS GNU Clang MSVC
+#      COMPILERS GNU Clang MSVC Intel
 #      FEATURES cxx_variadic_templates
 #    )
 #    install(FILES
@@ -100,7 +100,7 @@
 #    write_compiler_detection_header(
 #      FILE climbingstats_compiler_detection.h
 #      PREFIX ClimbingStats
-#      COMPILERS GNU Clang AppleClang MSVC
+#      COMPILERS GNU Clang AppleClang MSVC Intel
 #      FEATURES cxx_variadic_templates
 #    )
 #
@@ -323,6 +323,7 @@ function(write_compiler_detection_header
     AppleClang
     MSVC
     SunPro
+    Intel
   )
 
   set(_hex_compilers ADSP Borland Embarcadero SunPro)
diff --git a/Tests/Module/WriteCompilerDetectionHeader/CMakeLists.txt b/Tests/Module/WriteCompilerDetectionHeader/CMakeLists.txt
index c538280..8b251d7 100644
--- a/Tests/Module/WriteCompilerDetectionHeader/CMakeLists.txt
+++ b/Tests/Module/WriteCompilerDetectionHeader/CMakeLists.txt
@@ -11,7 +11,7 @@ get_property(c_known_features GLOBAL PROPERTY CMAKE_C_KNOWN_FEATURES)
 write_compiler_detection_header(
   FILE "${CMAKE_CURRENT_BINARY_DIR}/test_compiler_detection.h"
   PREFIX TEST
-  COMPILERS GNU Clang AppleClang MSVC SunPro
+  COMPILERS GNU Clang AppleClang MSVC SunPro Intel
   VERSION 3.1
   PROLOG "// something"
   EPILOG "// more"
@@ -61,7 +61,8 @@ endmacro()
 if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU"
     OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang"
     OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang"
-    OR CMAKE_CXX_COMPILER_ID STREQUAL "SunPro")
+    OR CMAKE_CXX_COMPILER_ID STREQUAL "SunPro"
+    OR CMAKE_CXX_COMPILER_ID STREQUAL "Intel")
   # False for C++98 mode.
   list(APPEND false_defs EXPECTED_COMPILER_CXX_DELEGATING_CONSTRUCTORS)
   list(APPEND false_defs EXPECTED_COMPILER_CXX_VARIADIC_TEMPLATES)
@@ -80,7 +81,9 @@ endif()
 
 if (CMAKE_C_COMPILER_ID STREQUAL "GNU"
     OR CMAKE_C_COMPILER_ID STREQUAL "Clang"
-    OR CMAKE_C_COMPILER_ID STREQUAL "AppleClang")
+    OR CMAKE_C_COMPILER_ID STREQUAL "AppleClang"
+    OR CMAKE_C_COMPILER_ID STREQUAL "Intel")
+
   add_executable(C_undefined c_undefined.c)
   set_property(TARGET C_undefined PROPERTY C_STANDARD 90)
   target_compile_options(C_undefined PRIVATE -Werror=undef)
@@ -104,7 +107,7 @@ write_compiler_detection_header(
   PREFIX MULTI
   OUTPUT_FILES_VAR multi_files
   OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/compiler_multi_files/compiler_support"
-  COMPILERS GNU Clang AppleClang MSVC SunPro
+  COMPILERS GNU Clang AppleClang MSVC SunPro Intel
   VERSION 3.1
   FEATURES
     ${cxx_known_features} ${c_known_features}
@@ -142,7 +145,8 @@ set_defines(multi_files_11 "${true_defs}" "${false_defs}")
 
 if (CMAKE_C_COMPILER_ID STREQUAL "GNU"
     OR CMAKE_C_COMPILER_ID STREQUAL "Clang"
-    OR CMAKE_C_COMPILER_ID STREQUAL "AppleClang")
+    OR CMAKE_C_COMPILER_ID STREQUAL "AppleClang"
+    OR CMAKE_C_COMPILER_ID STREQUAL "Intel")
   add_executable(WriteCompilerDetectionHeader_C11 main.c)
   set_property(TARGET WriteCompilerDetectionHeader_C11 PROPERTY C_STANDARD 11)
   set_defines(WriteCompilerDetectionHeader_C11 "EXPECTED_COMPILER_C_FUNCTION_PROTOTYPES;EXPECTED_COMPILER_C_RESTRICT" "")

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=4ea64678dc88ca489a3ca6093d6ffb7ce69a6ce2
commit 4ea64678dc88ca489a3ca6093d6ffb7ce69a6ce2
Author:     Robert Maynard <robert.maynard at kitware.com>
AuthorDate: Fri Apr 15 13:40:30 2016 -0400
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Wed Apr 20 10:34:15 2016 -0400

    Features: Record standards and features for Intel C on UNIX
    
    Skip this for now on Windows where Intel C simulates MSVC.

diff --git a/Modules/Compiler/Intel-C-FeatureTests.cmake b/Modules/Compiler/Intel-C-FeatureTests.cmake
new file mode 100644
index 0000000..5a0860f
--- /dev/null
+++ b/Modules/Compiler/Intel-C-FeatureTests.cmake
@@ -0,0 +1,22 @@
+# References:
+#   - https://software.intel.com/en-us/articles/iso-iec-standards-language-conformance-for-intel-c-compiler
+#   - https://software.intel.com/en-us/articles/c99-support-in-intel-c-compiler
+#   - https://software.intel.com/en-us/articles/c11-support-in-intel-c-compiler
+
+# FIXME: Intel C feature detection works only when simulating the GNU compiler.
+if("x${CMAKE_C_SIMULATE_ID}" STREQUAL "xMSVC")
+  return()
+endif()
+
+set(DETECT_C99 "defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L")
+
+set(_cmake_feature_test_c_static_assert "__INTEL_COMPILER >= 1500 && ${DETECT_C99}")
+
+set(_cmake_oldestSupported "__INTEL_COMPILER >= 1110")
+set(Intel_C99 "${_cmake_oldestSupported} && ${DETECT_C99}")
+set(_cmake_feature_test_c_restrict "${Intel_C99}")
+set(_cmake_feature_test_c_variadic_macros "${Intel_C99}")
+set(_cmake_feature_test_c_function_prototypes "${_cmake_oldestSupported}")
+unset(Intel_C99)
+
+unset(DETECT_C99)
diff --git a/Modules/Compiler/Intel-C.cmake b/Modules/Compiler/Intel-C.cmake
index 77363eb..006ba1f 100644
--- a/Modules/Compiler/Intel-C.cmake
+++ b/Modules/Compiler/Intel-C.cmake
@@ -8,5 +8,55 @@ set(CMAKE_C_FLAGS_RELWITHDEBINFO_INIT "-O2 -g -DNDEBUG")
 
 set(CMAKE_DEPFILE_FLAGS_C "-MD -MT <OBJECT> -MF <DEPFILE>")
 
+if(NOT "x${CMAKE_C_SIMULATE_ID}" STREQUAL "xMSVC")
+  if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 15.0.0)
+    set(CMAKE_C11_STANDARD_COMPILE_OPTION "-std=c11")
+    set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-std=c11")
+  endif()
+
+  if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 10.0)
+    set(CMAKE_C90_STANDARD_COMPILE_OPTION "-std=c89")
+    set(CMAKE_C90_EXTENSION_COMPILE_OPTION "-std=c89")
+    set(CMAKE_C99_STANDARD_COMPILE_OPTION "-std=c99")
+    set(CMAKE_C99_EXTENSION_COMPILE_OPTION "-std=c99")
+  endif()
+endif()
+
+if(NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 10.0)
+  if (NOT CMAKE_C_COMPILER_FORCED)
+    if (NOT CMAKE_C_STANDARD_COMPUTED_DEFAULT)
+      message(FATAL_ERROR "CMAKE_C_STANDARD_COMPUTED_DEFAULT should be set for ${CMAKE_C_COMPILER_ID} (${CMAKE_C_COMPILER}) version ${CMAKE_C_COMPILER_VERSION}")
+    endif()
+    set(CMAKE_C_STANDARD_DEFAULT ${CMAKE_C_STANDARD_COMPUTED_DEFAULT})
+  elseif(NOT DEFINED CMAKE_C_STANDARD_DEFAULT)
+    # Compiler id was forced so just guess the default standard level.
+    if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 15.0.0)
+      set(CMAKE_C_STANDARD_DEFAULT 11)
+    else()
+      set(CMAKE_C_STANDARD_DEFAULT 90)
+    endif()
+  endif()
+endif()
+
+macro(cmake_record_c_compile_features)
+  macro(_get_intel_c_features std_version list)
+    record_compiler_features(C "${std_version}" ${list})
+  endmacro()
+
+  set(_result 0)
+  if (NOT "x${CMAKE_C_SIMULATE_ID}" STREQUAL "xMSVC" AND
+      NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 10.0)
+    if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 15.0.0)
+      _get_intel_c_features(${CMAKE_C11_STANDARD_COMPILE_OPTION} CMAKE_C11_COMPILE_FEATURES)
+    endif()
+    if (_result EQUAL 0)
+      _get_intel_c_features(${CMAKE_C99_STANDARD_COMPILE_OPTION} CMAKE_C99_COMPILE_FEATURES)
+    endif()
+    if (_result EQUAL 0)
+      _get_intel_c_features(${CMAKE_C90_STANDARD_COMPILE_OPTION} CMAKE_C90_COMPILE_FEATURES)
+    endif()
+  endif()
+endmacro()
+
 set(CMAKE_C_CREATE_PREPROCESSED_SOURCE "<CMAKE_C_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -E <SOURCE> > <PREPROCESSED_SOURCE>")
 set(CMAKE_C_CREATE_ASSEMBLY_SOURCE "<CMAKE_C_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -S <SOURCE> -o <ASSEMBLY_SOURCE>")
diff --git a/Tests/CompileFeatures/CMakeLists.txt b/Tests/CompileFeatures/CMakeLists.txt
index e6acee8..9f08523 100644
--- a/Tests/CompileFeatures/CMakeLists.txt
+++ b/Tests/CompileFeatures/CMakeLists.txt
@@ -226,6 +226,16 @@ if (CMAKE_C_COMPILE_FEATURES)
     list(APPEND expected_defs
       EXPECT_C_STATIC_ASSERT=1
     )
+  elseif (CMAKE_C_COMPILER_ID STREQUAL "Intel")
+    if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 15)
+      list(APPEND expected_defs
+        EXPECT_C_STATIC_ASSERT=1
+        )
+    else()
+      list(APPEND expected_defs
+        EXPECT_C_STATIC_ASSERT=0
+        )
+    endif()
   endif()
 
   list(APPEND expected_defs

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=4c40c93d666d84bfbb0d26919d972a0b05b5c7c3
commit 4c40c93d666d84bfbb0d26919d972a0b05b5c7c3
Author:     Levi Morrison <morrison.levi at gmail.com>
AuthorDate: Mon Nov 16 09:19:30 2015 -0700
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Wed Apr 20 10:34:15 2016 -0400

    Features: Record standards and features for Intel C++ on UNIX
    
    Skip this for now on Windows where Intel C++ simulates MSVC.

diff --git a/Help/manual/cmake-compile-features.7.rst b/Help/manual/cmake-compile-features.7.rst
index caf5bac..366d4ec 100644
--- a/Help/manual/cmake-compile-features.7.rst
+++ b/Help/manual/cmake-compile-features.7.rst
@@ -309,3 +309,4 @@ versions specified for each:
 * ``GNU``: GNU compiler versions 4.4 through 5.0.
 * ``MSVC``: Microsoft Visual Studio versions 2010 through 2015.
 * ``SunPro``: Oracle SolarisStudio version 12.4.
+* ``Intel``: Intel compiler versions 12.0 through 16.0 on UNIX platforms.
diff --git a/Modules/Compiler/Intel-CXX-FeatureTests.cmake b/Modules/Compiler/Intel-CXX-FeatureTests.cmake
new file mode 100644
index 0000000..eda3a8d
--- /dev/null
+++ b/Modules/Compiler/Intel-CXX-FeatureTests.cmake
@@ -0,0 +1,97 @@
+# References:
+#   - https://software.intel.com/en-us/articles/c0x-features-supported-by-intel-c-compiler
+#   - https://software.intel.com/en-us/articles/c14-features-supported-by-intel-c-compiler
+
+# FIXME: Intel C++ feature detection works only when simulating the GNU compiler.
+# When simulating MSVC, Intel always sets __cplusplus to 199711L.
+if("x${CMAKE_CXX_SIMULATE_ID}" STREQUAL "xMSVC")
+  return()
+endif()
+
+# these are not implemented in any version at time of writing
+#set(_cmake_feature_test_cxx_variable_templates "${Intel15_CXX14}")
+#set(_cmake_feature_test_cxx_relaxed_constexpr "${Intel15_CXX14}")
+
+
+set(_cmake_oldestSupported "__INTEL_COMPILER >= 1110")
+set(DETECT_CXX11 "((__cplusplus >= 201103L) || defined(__INTEL_CXX11_MODE__) || defined(__GXX_EXPERIMENTAL_CXX0X__))")
+set(DETECT_CXX14 "((__cplusplus >= 201300L) || ((__cplusplus == 201103L) && !defined(__INTEL_CXX11_MODE__)))")
+
+set(Intel16_CXX14 "__INTEL_COMPILER >= 1600 && ${DETECT_CXX14}")
+set(_cmake_feature_test_cxx_aggregate_default_initializers "${Intel16_CXX14}")
+set(_cmake_feature_test_cxx_contextual_conversions "${Intel16_CXX14}")
+set(_cmake_feature_test_cxx_generic_lambdas "${Intel16_CXX14}")
+set(_cmake_feature_test_cxx_digit_separators "${Intel16_CXX14}")
+# This test is supposed to work in Intel 14 but the compiler has a bug
+# in versions 14 and 15::
+# https://software.intel.com/en-us/forums/intel-c-compiler/topic/600514
+# It also appears to fail with an internal compiler error on Intel 16.
+#set(_cmake_feature_test_cxx_generalized_initializers "${Intel16_CXX14}")
+
+set(Intel15_CXX14 "__INTEL_COMPILER >= 1500 && ${DETECT_CXX14}")
+set(_cmake_feature_test_cxx_decltype_auto "${Intel15_CXX14}")
+set(_cmake_feature_test_cxx_lambda_init_captures "${Intel15_CXX14}")
+set(_cmake_feature_test_cxx_attribute_deprecated "${Intel15_CXX14}")
+set(_cmake_feature_test_cxx_return_type_deduction "${Intel15_CXX14}")
+
+set(Intel15_CXX11 "__INTEL_COMPILER >= 1500 && ${DETECT_CXX11}")
+set(_cmake_feature_test_cxx_alignas "${Intel15_CXX11}")
+set(_cmake_feature_test_cxx_alignof "${Intel15_CXX11}")
+set(_cmake_feature_test_cxx_inheriting_constructors "${Intel15_CXX11}")
+set(_cmake_feature_test_cxx_user_literals "${Intel15_CXX11}")
+set(_cmake_feature_test_cxx_thread_local "${Intel15_CXX11}")
+
+set(Intel14_CXX11 "${DETECT_CXX11} && (__INTEL_COMPILER > 1400 || (__INTEL_COMPILER == 1400 && __INTEL_COMPILER_UPDATE >= 2))")
+# Documented as 12.0+ but in testing it only works on 14.0.2+
+set(_cmake_feature_test_cxx_decltype_incomplete_return_types "${Intel14_CXX11}")
+
+set(Intel14_CXX11 "__INTEL_COMPILER >= 1400 && ${DETECT_CXX11}")
+set(_cmake_feature_test_cxx_delegating_constructors "${Intel14_CXX11}")
+set(_cmake_feature_test_cxx_constexpr "${Intel14_CXX11}")
+set(_cmake_feature_test_cxx_sizeof_member "${Intel14_CXX11}")
+set(_cmake_feature_test_cxx_strong_enums "${Intel14_CXX11}")
+set(_cmake_feature_test_cxx_reference_qualified_functions "${Intel14_CXX11}")
+set(_cmake_feature_test_cxx_raw_string_literals "${Intel14_CXX11}")
+set(_cmake_feature_test_cxx_unicode_literals "${Intel14_CXX11}")
+set(_cmake_feature_test_cxx_inline_namespaces "${Intel14_CXX11}")
+set(_cmake_feature_test_cxx_unrestricted_unions "${Intel14_CXX11}")
+set(_cmake_feature_test_cxx_nonstatic_member_init "${Intel14_CXX11}")
+set(_cmake_feature_test_cxx_enum_forward_declarations "${Intel14_CXX11}")
+set(_cmake_feature_test_cxx_override "${Intel14_CXX11}")
+set(_cmake_feature_test_cxx_final "${Intel14_CXX11}")
+set(_cmake_feature_test_cxx_noexcept "${Intel14_CXX11}")
+set(_cmake_feature_test_cxx_defaulted_move_initializers "${Intel14_CXX11}")
+
+set(Intel13_CXX11 "__INTEL_COMPILER >= 1300 && ${DETECT_CXX11}")
+set(_cmake_feature_test_cxx_explicit_conversions "${Intel13_CXX11}")
+set(_cmake_feature_test_cxx_range_for "${Intel13_CXX11}")
+# Cannot find Intel documentation for N2640: cxx_uniform_initialization
+set(_cmake_feature_test_cxx_uniform_initialization "${Intel13_CXX11}")
+
+set(Intel121_CXX11 "__INTEL_COMPILER >= 1210 && ${DETECT_CXX11}")
+set(_cmake_feature_test_cxx_variadic_templates "${Intel121_CXX11}")
+set(_cmake_feature_test_cxx_alias_templates "${Intel121_CXX11}")
+set(_cmake_feature_test_cxx_nullptr "${Intel121_CXX11}")
+set(_cmake_feature_test_cxx_trailing_return_types "${Intel121_CXX11}")
+set(_cmake_feature_test_cxx_attributes "${Intel121_CXX11}")
+set(_cmake_feature_test_cxx_default_function_template_args "${Intel121_CXX11}")
+
+set(Intel12_CXX11 "__INTEL_COMPILER >= 1200 && ${DETECT_CXX11}")
+set(_cmake_feature_test_cxx_extended_friend_declarations "${Intel12_CXX11}")
+set(_cmake_feature_test_cxx_rvalue_references "${Intel12_CXX11}")
+set(_cmake_feature_test_cxx_decltype "${Intel12_CXX11}")
+set(_cmake_feature_test_cxx_defaulted_functions "${Intel12_CXX11}")
+set(_cmake_feature_test_cxx_deleted_functions "${Intel12_CXX11}")
+set(_cmake_feature_test_cxx_local_type_template_args "${Intel12_CXX11}")
+set(_cmake_feature_test_cxx_lambdas "${Intel12_CXX11}")
+
+set(Intel11_CXX11 "${_cmake_oldestSupported} && ${DETECT_CXX11}")
+set(_cmake_feature_test_cxx_binary_literals "${Intel11_CXX11}")
+set(_cmake_feature_test_cxx_static_assert "${Intel11_CXX11}")
+set(_cmake_feature_test_cxx_right_angle_brackets "${Intel11_CXX11}")
+set(_cmake_feature_test_cxx_auto_type "${Intel11_CXX11}")
+set(_cmake_feature_test_cxx_extern_templates "${Intel11_CXX11}")
+set(_cmake_feature_test_cxx_variadic_macros "${Intel11_CXX11}")
+set(_cmake_feature_test_cxx_long_long_type "${Intel11_CXX11}")
+set(_cmake_feature_test_cxx_func_identifier "${Intel11_CXX11}")
+set(_cmake_feature_test_cxx_template_template_parameters "${Intel11_CXX11}")
diff --git a/Modules/Compiler/Intel-CXX.cmake b/Modules/Compiler/Intel-CXX.cmake
index 02c636c..2785fd3 100644
--- a/Modules/Compiler/Intel-CXX.cmake
+++ b/Modules/Compiler/Intel-CXX.cmake
@@ -8,5 +8,63 @@ set(CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT "-O2 -g -DNDEBUG")
 
 set(CMAKE_DEPFILE_FLAGS_CXX "-MD -MT <OBJECT> -MF <DEPFILE>")
 
+if(NOT "x${CMAKE_CXX_SIMULATE_ID}" STREQUAL "xMSVC")
+  if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 15.0.2)
+    set(CMAKE_CXX14_STANDARD_COMPILE_OPTION "-std=c++14")
+    # todo: there is no gnu++14 value supported; figure out what to do
+    set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION "-std=c++14")
+  elseif (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 15.0.0)
+    set(CMAKE_CXX14_STANDARD_COMPILE_OPTION "-std=c++1y")
+    # todo: there is no gnu++14 value supported; figure out what to do
+    set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION "-std=c++1y")
+  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")
+  elseif (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 12.1)
+    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 12.1)
+    set(CMAKE_CXX98_STANDARD_COMPILE_OPTION "-std=c++98")
+    set(CMAKE_CXX98_EXTENSION_COMPILE_OPTION "-std=gnu++98")
+  endif()
+endif()
+
+if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 12.1)
+  if (NOT CMAKE_CXX_COMPILER_FORCED)
+    if (NOT CMAKE_CXX_STANDARD_COMPUTED_DEFAULT)
+      message(FATAL_ERROR "CMAKE_CXX_STANDARD_COMPUTED_DEFAULT should be set for ${CMAKE_CXX_COMPILER_ID} (${CMAKE_CXX_COMPILER}) version ${CMAKE_CXX_COMPILER_VERSION}")
+    else()
+      set(CMAKE_CXX_STANDARD_DEFAULT ${CMAKE_CXX_STANDARD_COMPUTED_DEFAULT})
+    endif()
+  elseif (NOT CMAKE_CXX_STANDARD_COMPUTED_DEFAULT)
+    # Compiler id was forced so just guess the default standard level.
+    set(CMAKE_CXX_STANDARD_DEFAULT 98)
+  endif()
+endif()
+
+macro(cmake_record_cxx_compile_features)
+  macro(_get_intel_features std_version list)
+    record_compiler_features(CXX "${std_version}" ${list})
+  endmacro()
+
+  set(_result 0)
+  if(NOT "x${CMAKE_CXX_SIMULATE_ID}" STREQUAL "xMSVC" AND
+      NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 12.1)
+    if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 15.0)
+      _get_intel_features(${CMAKE_CXX14_STANDARD_COMPILE_OPTION} CMAKE_CXX14_COMPILE_FEATURES)
+    endif()
+    if (_result EQUAL 0)
+      _get_intel_features(${CMAKE_CXX11_STANDARD_COMPILE_OPTION} CMAKE_CXX11_COMPILE_FEATURES)
+    endif()
+    if (_result EQUAL 0)
+      _get_intel_features(${CMAKE_CXX98_STANDARD_COMPILE_OPTION} CMAKE_CXX98_COMPILE_FEATURES)
+    endif()
+  endif()
+endmacro()
+
 set(CMAKE_CXX_CREATE_PREPROCESSED_SOURCE "<CMAKE_CXX_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -E <SOURCE> > <PREPROCESSED_SOURCE>")
 set(CMAKE_CXX_CREATE_ASSEMBLY_SOURCE "<CMAKE_CXX_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -S <SOURCE> -o <ASSEMBLY_SOURCE>")
diff --git a/Tests/CompileFeatures/CMakeLists.txt b/Tests/CompileFeatures/CMakeLists.txt
index a32138d..e6acee8 100644
--- a/Tests/CompileFeatures/CMakeLists.txt
+++ b/Tests/CompileFeatures/CMakeLists.txt
@@ -119,6 +119,55 @@ if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
   endif()
 endif()
 
+if (CMAKE_CXX_COMPILER_ID STREQUAL "Intel")
+  if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 16.0)
+    if (CMAKE_CXX_COMIPLER_VERSION VERSION_EQUAL 15.0)
+      list(REMOVE_ITEM CXX_non_features
+        # The cxx_contextual_conversions feature happens to work
+        # (for *this* testcase) with Intel 13/14/15, but they do not
+        # document support until 16.
+        cxx_contextual_conversions
+        )
+
+    elseif (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 14.0)
+      list(REMOVE_ITEM CXX_non_features
+        cxx_alignof
+
+        # not supposed to work until 15
+        cxx_attribute_deprecated
+
+        # The cxx_contextual_conversions feature happens to work
+        # (for *this* testcase) with Intel 13/14/15, but they do not
+        # document support until 16.
+        cxx_contextual_conversions
+        )
+
+    elseif (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 12.1)
+      list(REMOVE_ITEM CXX_non_features
+        # These features happen to work but aren't documented to
+        # do so until 14.0
+        cxx_constexpr
+        cxx_enum_forward_declarations
+        cxx_sizeof_member
+        cxx_strong_enums
+        cxx_unicode_literals
+
+        # not supposed to work until 15
+        cxx_attribute_deprecated
+        cxx_nonstatic_member_init
+
+        # The cxx_contextual_conversions feature happens to work
+        # (for *this* testcase) with Intel 13/14/15, but they do not
+        # document support until 16.
+        cxx_contextual_conversions
+
+        # This is an undocumented feature; it does not work in future versions
+        cxx_aggregate_default_initializers
+        )
+    endif()
+  endif()
+endif()
+
 set(C_ext c)
 set(C_standard_flag 11)
 set(CXX_ext cpp)
@@ -301,6 +350,29 @@ if (CMAKE_CXX_COMPILE_FEATURES)
       -DEXPECT_FINAL=1
       -DEXPECT_INHERITING_CONSTRUCTORS_AND_FINAL=1
     )
+  elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Intel")
+    if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 15)
+      add_definitions(
+        -DEXPECT_OVERRIDE_CONTROL=1
+        -DEXPECT_INHERITING_CONSTRUCTORS=1
+        -DEXPECT_FINAL=1
+        -DEXPECT_INHERITING_CONSTRUCTORS_AND_FINAL=1
+      )
+    elseif (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 14)
+      add_definitions(
+        -DEXPECT_OVERRIDE_CONTROL=1
+        -DEXPECT_INHERITING_CONSTRUCTORS=0
+        -DEXPECT_FINAL=1
+        -DEXPECT_INHERITING_CONSTRUCTORS_AND_FINAL=0
+      )
+    else()
+      add_definitions(
+        -DEXPECT_OVERRIDE_CONTROL=0
+        -DEXPECT_INHERITING_CONSTRUCTORS=0
+        -DEXPECT_FINAL=0
+        -DEXPECT_INHERITING_CONSTRUCTORS_AND_FINAL=0
+      )
+    endif()
   endif()
 
   add_executable(CompileFeaturesGenex genex_test.cpp)

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=6d4bf1c80560b0c64837c487aae07d9747de7425
commit 6d4bf1c80560b0c64837c487aae07d9747de7425
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Fri Apr 15 16:06:41 2016 -0400
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Mon Apr 18 16:14:37 2016 -0400

    Features: Detect C default dialect on MSVC-like compilers
    
    These compilers default to C 90 but do not define __STDC__.  While MSVC
    itself has no option to change the dialect, compilers that document
    compatibility with MSVC and define _MSC_VER may (e.g. Intel).

diff --git a/Modules/CMakeCCompilerId.c.in b/Modules/CMakeCCompilerId.c.in
index c107dfd..95184c9 100644
--- a/Modules/CMakeCCompilerId.c.in
+++ b/Modules/CMakeCCompilerId.c.in
@@ -34,7 +34,11 @@ char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]";
 @CMAKE_C_COMPILER_ID_ERROR_FOR_TEST@
 
 #if !defined(__STDC__)
-# define C_DIALECT
+# if defined(_MSC_VER) && !defined(__clang__)
+#  define C_DIALECT "90"
+# else
+#  define C_DIALECT
+# endif
 #elif __STDC_VERSION__ >= 201000L
 # define C_DIALECT "11"
 #elif __STDC_VERSION__ >= 199901L

-----------------------------------------------------------------------

Summary of changes:
 Help/manual/cmake-compile-features.7.rst           |    1 +
 Help/release/dev/intel-compiler-features.rst       |    6 ++
 Modules/CMakeCCompilerId.c.in                      |    6 +-
 Modules/Compiler/Intel-C-FeatureTests.cmake        |   22 +++++
 Modules/Compiler/Intel-C.cmake                     |   56 +++++++++++
 Modules/Compiler/Intel-CXX-FeatureTests.cmake      |   97 ++++++++++++++++++++
 Modules/Compiler/Intel-CXX.cmake                   |   64 +++++++++++++
 Modules/WriteCompilerDetectionHeader.cmake         |    5 +-
 Tests/CompileFeatures/CMakeLists.txt               |   82 +++++++++++++++++
 .../WriteCompilerDetectionHeader/CMakeLists.txt    |   14 ++-
 10 files changed, 345 insertions(+), 8 deletions(-)
 create mode 100644 Help/release/dev/intel-compiler-features.rst
 create mode 100644 Modules/Compiler/Intel-C-FeatureTests.cmake
 create mode 100644 Modules/Compiler/Intel-CXX-FeatureTests.cmake


hooks/post-receive
-- 
CMake


More information about the Cmake-commits mailing list