summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephen Kelly <steveire@gmail.com>2014-04-06 11:00:17 (GMT)
committerStephen Kelly <steveire@gmail.com>2014-05-07 20:02:02 (GMT)
commit9cbc63e40caa1c3afd771d1e20c4c4c188953c00 (patch)
tree2ea284db94fe079998b3edc43e9620b85856524c
parentc010e7cc806d845f1b048bc8c41d2c1326075beb (diff)
downloadCMake-9cbc63e40caa1c3afd771d1e20c4c4c188953c00.zip
CMake-9cbc63e40caa1c3afd771d1e20c4c4c188953c00.tar.gz
CMake-9cbc63e40caa1c3afd771d1e20c4c4c188953c00.tar.bz2
Features: Record for GNU 4.7.
Update the CompileFeatures test to verify that unsupported features do not work.
-rw-r--r--Modules/Compiler/GNU-CXX-FeatureTests.cmake5
-rw-r--r--Modules/Compiler/GNU-CXX.cmake2
-rw-r--r--Tests/CompileFeatures/CMakeLists.txt25
3 files changed, 21 insertions, 11 deletions
diff --git a/Modules/Compiler/GNU-CXX-FeatureTests.cmake b/Modules/Compiler/GNU-CXX-FeatureTests.cmake
index fe0ff0b..b19ee49 100644
--- a/Modules/Compiler/GNU-CXX-FeatureTests.cmake
+++ b/Modules/Compiler/GNU-CXX-FeatureTests.cmake
@@ -1,7 +1,7 @@
# Reference: http://gcc.gnu.org/projects/cxx0x.html
-set(_oldestSupported "(__GNUC__ * 100 + __GNUC_MINOR__) >= 408")
+set(_oldestSupported "(__GNUC__ * 100 + __GNUC_MINOR__) >= 407")
# Introduced in GCC 4.8.1
set(GNU481_CXX11 "((__GNUC__ * 100 + __GNUC_MINOR__) > 408 || __GNUC_PATCHLEVEL__ >= 1) && __cplusplus >= 201103L")
set(_cmake_feature_test_cxx_decltype_incomplete_return_types "${GNU481_CXX11}")
@@ -12,8 +12,7 @@ set(_cmake_feature_test_cxx_alignof "${GNU48_CXX11}")
set(_cmake_feature_test_cxx_attributes "${GNU48_CXX11}")
set(_cmake_feature_test_cxx_inheriting_constructors "${GNU48_CXX11}")
set(_cmake_feature_test_cxx_thread_local "${GNU48_CXX11}")
-# TODO: Should be supported by GNU 4.7
-set(GNU47_CXX11 "${_oldestSupported} && __cplusplus >= 201103L")
+set(GNU47_CXX11 "(__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L")
set(_cmake_feature_test_cxx_alias_templates "${GNU47_CXX11}")
set(_cmake_feature_test_cxx_delegating_constructors "${GNU47_CXX11}")
set(_cmake_feature_test_cxx_extended_friend_declarations "${GNU47_CXX11}")
diff --git a/Modules/Compiler/GNU-CXX.cmake b/Modules/Compiler/GNU-CXX.cmake
index 6ec3958..d0de14c 100644
--- a/Modules/Compiler/GNU-CXX.cmake
+++ b/Modules/Compiler/GNU-CXX.cmake
@@ -32,7 +32,7 @@ macro(cmake_record_cxx_compile_features)
endif()
endmacro()
- if (UNIX AND NOT APPLE AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.8)
+ if (UNIX AND NOT APPLE AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.7)
_get_gcc_features(c++11 CMAKE_CXX11_COMPILE_FEATURES)
_get_gcc_features(c++98 CMAKE_CXX98_COMPILE_FEATURES)
else()
diff --git a/Tests/CompileFeatures/CMakeLists.txt b/Tests/CompileFeatures/CMakeLists.txt
index 501138d..61160c5 100644
--- a/Tests/CompileFeatures/CMakeLists.txt
+++ b/Tests/CompileFeatures/CMakeLists.txt
@@ -11,22 +11,33 @@ if (NOT CMAKE_CXX_COMPILE_FEATURES)
return()
endif()
-macro(run_test feature)
- if (";${CMAKE_CXX_COMPILE_FEATURES};" MATCHES ${feature})
- add_library(test_${feature} OBJECT ${feature}.cpp)
+macro(run_test feature lang)
+ if (";${CMAKE_${lang}_COMPILE_FEATURES};" MATCHES ${feature})
+ add_library(test_${feature} OBJECT ${feature})
set_property(TARGET test_${feature}
PROPERTY COMPILE_FEATURES "${feature}"
)
else()
- message("Not supported: ${feature}")
+ list(APPEND ${lang}_non_features ${feature})
endif()
endmacro()
-get_property(features GLOBAL PROPERTY CMAKE_CXX_KNOWN_FEATURES)
-foreach(feature ${features})
- run_test(${feature})
+get_property(cxx_features GLOBAL PROPERTY CMAKE_CXX_KNOWN_FEATURES)
+foreach(feature ${cxx_features})
+ run_test(${feature} CXX)
endforeach()
+if (CMAKE_CXX_COMPILE_FEATURES)
+ include(CheckCXXSourceCompiles)
+ foreach(feature ${CXX_non_features})
+ check_cxx_source_compiles("#include \"${CMAKE_CURRENT_SOURCE_DIR}/${feature}.cpp\"\nint main() { return 0; }\n" ${feature}_works)
+ if (${feature}_works)
+ message(SEND_ERROR
+ "Feature ${feature} expected not to work for ${CMAKE_CXX_COMPILER_ID}-${CMAKE_CXX_COMPILER_VERSION}. Update the supported features or blacklist it.")
+ endif()
+ endforeach()
+endif()
+
add_executable(CompileFeatures main.cpp)
set_property(TARGET CompileFeatures
PROPERTY COMPILE_FEATURES "cxx_auto_type"