Browse Source

Tests: Make CompileFeature tests use highest standard known.

Remove the use of check_cxx_source_compiles which is now just getting in
the way.

Blacklist the cxx_alignof feature in the test with GNU 4.7. The test
file compiles, but it is documented as available first in GNU 4.8.
Stephen Kelly 12 years ago
parent
commit
f5bf9d4311

+ 2 - 0
Modules/Compiler/GNU-CXX-FeatureTests.cmake

@@ -8,6 +8,8 @@ set(_cmake_feature_test_cxx_decltype_incomplete_return_types "${GNU481_CXX11}")
 set(_cmake_feature_test_cxx_reference_qualified_functions "${GNU481_CXX11}")
 set(GNU48_CXX11 "(__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L")
 set(_cmake_feature_test_cxx_alignas "${GNU48_CXX11}")
+# The alignof feature works with GNU 4.7 and -std=c++11, but it is documented
+# as available with GNU 4.8, so treat that as true.
 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}")

+ 19 - 3
Tests/CompileFeatures/CMakeLists.txt

@@ -27,13 +27,29 @@ foreach(feature ${cxx_features})
   run_test(${feature} CXX)
 endforeach()
 
+if (CMAKE_CXX_COMPILER_ID STREQUAL GNU
+    AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.8)
+  list(REMOVE_ITEM CXX_non_features
+    cxx_alignof
+  )
+endif()
+
 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)
+    message("Testing feature : ${feature}")
+    try_compile(${feature}_works
+      "${CMAKE_CURRENT_BINARY_DIR}/${feature}_test"
+      "${CMAKE_CURRENT_SOURCE_DIR}/feature_test.cpp"
+      COMPILE_DEFINITIONS "-DTEST=${CMAKE_CURRENT_SOURCE_DIR}/${feature}.cpp"
+      CMAKE_FLAGS "-DCMAKE_CXX_STANDARD=11"
+      OUTPUT_VARIABLE OUTPUT
+    )
     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.")
+        "Feature ${feature} expected not to work for ${CMAKE_CXX_COMPILER_ID}-${CMAKE_CXX_COMPILER_VERSION}.
+Update the supported features or blacklist it.\n${OUTPUT}")
+    else()
+      message("Testing feature : ${feature} -- Fails, as expected.")
     endif()
   endforeach()
 endif()

+ 10 - 0
Tests/CompileFeatures/feature_test.cpp

@@ -0,0 +1,10 @@
+
+#define STRINGIFY_IMPL(X) #X
+#define STRINGIFY(X) STRINGIFY_IMPL(X)
+
+#include STRINGIFY(TEST)
+
+int main()
+{
+  return 0;
+}