Features: Extend the tests for the COMPILE_FEATURES genex.

This commit is contained in:
Stephen Kelly 2015-01-12 20:02:17 +01:00
parent 811a29c950
commit 06ff525492
2 changed files with 81 additions and 0 deletions

View File

@ -144,11 +144,56 @@ if (CMAKE_CXX_COMPILE_FEATURES)
add_definitions(-DEXPECT_OVERRIDE_CONTROL=1) add_definitions(-DEXPECT_OVERRIDE_CONTROL=1)
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.8)
add_definitions(
-DEXPECT_INHERITING_CONSTRUCTORS=1
-DEXPECT_FINAL=1
-DEXPECT_INHERITING_CONSTRUCTORS_AND_FINAL=1
)
elseif (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.7)
add_definitions(
-DEXPECT_INHERITING_CONSTRUCTORS=0
-DEXPECT_FINAL=1
-DEXPECT_INHERITING_CONSTRUCTORS_AND_FINAL=0
)
else()
add_definitions(
-DEXPECT_INHERITING_CONSTRUCTORS=0
-DEXPECT_FINAL=0
-DEXPECT_INHERITING_CONSTRUCTORS_AND_FINAL=0
)
endif()
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
add_definitions(
-DEXPECT_INHERITING_CONSTRUCTORS=1
-DEXPECT_FINAL=1
-DEXPECT_INHERITING_CONSTRUCTORS_AND_FINAL=1
)
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.0)
add_definitions(
-DEXPECT_INHERITING_CONSTRUCTORS=1
-DEXPECT_FINAL=1
-DEXPECT_INHERITING_CONSTRUCTORS_AND_FINAL=1
)
else()
add_definitions(
-DEXPECT_INHERITING_CONSTRUCTORS=0
-DEXPECT_FINAL=1
-DEXPECT_INHERITING_CONSTRUCTORS_AND_FINAL=0
)
endif()
endif()
add_executable(CompileFeaturesGenex genex_test.cpp) add_executable(CompileFeaturesGenex genex_test.cpp)
set_property(TARGET CompileFeaturesGenex PROPERTY CXX_STANDARD 11) set_property(TARGET CompileFeaturesGenex PROPERTY CXX_STANDARD 11)
target_compile_definitions(CompileFeaturesGenex PRIVATE target_compile_definitions(CompileFeaturesGenex PRIVATE
HAVE_OVERRIDE_CONTROL=$<COMPILE_FEATURES:cxx_final,cxx_override> HAVE_OVERRIDE_CONTROL=$<COMPILE_FEATURES:cxx_final,cxx_override>
HAVE_NULLPTR=$<COMPILE_FEATURES:cxx_nullptr> HAVE_NULLPTR=$<COMPILE_FEATURES:cxx_nullptr>
HAVE_INHERITING_CONSTRUCTORS=$<COMPILE_FEATURES:cxx_inheriting_constructors>
HAVE_FINAL=$<COMPILE_FEATURES:cxx_final>
HAVE_INHERITING_CONSTRUCTORS_AND_FINAL=$<COMPILE_FEATURES:cxx_inheriting_constructors,cxx_final>
) )
add_executable(CompileFeaturesGenex2 genex_test.cpp) add_executable(CompileFeaturesGenex2 genex_test.cpp)
@ -156,6 +201,9 @@ if (CMAKE_CXX_COMPILE_FEATURES)
target_compile_definitions(CompileFeaturesGenex2 PRIVATE target_compile_definitions(CompileFeaturesGenex2 PRIVATE
HAVE_OVERRIDE_CONTROL=$<COMPILE_FEATURES:cxx_final,cxx_override> HAVE_OVERRIDE_CONTROL=$<COMPILE_FEATURES:cxx_final,cxx_override>
HAVE_NULLPTR=$<COMPILE_FEATURES:cxx_nullptr> HAVE_NULLPTR=$<COMPILE_FEATURES:cxx_nullptr>
HAVE_INHERITING_CONSTRUCTORS=$<COMPILE_FEATURES:cxx_inheriting_constructors>
HAVE_FINAL=$<COMPILE_FEATURES:cxx_final>
HAVE_INHERITING_CONSTRUCTORS_AND_FINAL=$<COMPILE_FEATURES:cxx_inheriting_constructors,cxx_final>
) )
add_library(static_assert_iface INTERFACE) add_library(static_assert_iface INTERFACE)
@ -165,5 +213,8 @@ if (CMAKE_CXX_COMPILE_FEATURES)
target_compile_definitions(CompileFeaturesGenex3 PRIVATE target_compile_definitions(CompileFeaturesGenex3 PRIVATE
HAVE_OVERRIDE_CONTROL=$<COMPILE_FEATURES:cxx_final,cxx_override> HAVE_OVERRIDE_CONTROL=$<COMPILE_FEATURES:cxx_final,cxx_override>
HAVE_NULLPTR=$<COMPILE_FEATURES:cxx_nullptr> HAVE_NULLPTR=$<COMPILE_FEATURES:cxx_nullptr>
HAVE_INHERITING_CONSTRUCTORS=$<COMPILE_FEATURES:cxx_inheriting_constructors>
HAVE_FINAL=$<COMPILE_FEATURES:cxx_final>
HAVE_INHERITING_CONSTRUCTORS_AND_FINAL=$<COMPILE_FEATURES:cxx_inheriting_constructors,cxx_final>
) )
endif() endif()

View File

@ -21,6 +21,36 @@ struct B final : A
#error "Expect nullptr feature" #error "Expect nullptr feature"
#else #else
#if !HAVE_INHERITING_CONSTRUCTORS
# if EXPECT_INHERITING_CONSTRUCTORS
# error Expect cxx_inheriting_constructors support
# endif
#else
# if !EXPECT_INHERITING_CONSTRUCTORS
# error Expect no cxx_inheriting_constructors support
# endif
#endif
#if !HAVE_FINAL
# if EXPECT_FINAL
# error Expect cxx_final support
# endif
#else
# if !EXPECT_FINAL
# error Expect no cxx_final support
# endif
#endif
#if !HAVE_INHERITING_CONSTRUCTORS_AND_FINAL
# if EXPECT_INHERITING_CONSTRUCTORS_AND_FINAL
# error Expect cxx_inheriting_constructors and cxx_final support
# endif
#else
# if !EXPECT_INHERITING_CONSTRUCTORS_AND_FINAL
# error Expect no combined cxx_inheriting_constructors and cxx_final support
# endif
#endif
const char* getString() const char* getString()
{ {
return nullptr; return nullptr;