From 96c59ff7ed2d6bd0d3b54b655889f7c909fbe3b6 Mon Sep 17 00:00:00 2001 From: Dmitry Marakasov Date: Thu, 25 Dec 2014 22:16:41 +0300 Subject: [PATCH] Add checks for useful c++1y features --- CMakeLists.txt | 13 +++++++++++++ SDL2pp/Config.hh.in | 2 ++ cmake/CheckCompile.cmake | 11 +++++++++++ cmake/attribute_deprecated_test.cc | 7 +++++++ cmake/std_experimental_optional_test.cc | 8 ++++++++ 5 files changed, 41 insertions(+) create mode 100644 cmake/CheckCompile.cmake create mode 100644 cmake/attribute_deprecated_test.cc create mode 100644 cmake/std_experimental_optional_test.cc diff --git a/CMakeLists.txt b/CMakeLists.txt index 97e6735..a1877ca 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -52,6 +52,19 @@ IF(SDL2PP_WITH_WERROR) SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${WERROR_FLAG}") ENDIF(SDL2PP_WITH_WERROR) +# platform checks +INCLUDE(CheckCompile) +CHECK_COMPILE( + SDL2PP_WITH_EXPERIMENTAL_OPTIONAL + ${PROJECT_SOURCE_DIR}/cmake/std_experimental_optional_test.cc + "Checking for experimental/optional header" +) +CHECK_COMPILE( + SDL2PP_WITH_DEPRECATED + ${PROJECT_SOURCE_DIR}/cmake/attribute_deprecated_test.cc + "Checking for [[deprecated]] attribute" +) + # config.h CONFIGURE_FILE( SDL2pp/Config.hh.in diff --git a/SDL2pp/Config.hh.in b/SDL2pp/Config.hh.in index ac60ca8..e12670b 100644 --- a/SDL2pp/Config.hh.in +++ b/SDL2pp/Config.hh.in @@ -30,5 +30,7 @@ #cmakedefine SDL2PP_WITH_IMAGE #cmakedefine SDL2PP_WITH_2_0_4 +#cmakedefine SDL2PP_WITH_EXPERIMENTAL_OPTIONAL +#cmakedefine SDL2PP_WITH_DEPRECATED #endif diff --git a/cmake/CheckCompile.cmake b/cmake/CheckCompile.cmake new file mode 100644 index 0000000..33e72cb --- /dev/null +++ b/cmake/CheckCompile.cmake @@ -0,0 +1,11 @@ +MACRO(CHECK_COMPILE RESULT_VAR SOURCE_FILE DESCRIPTION) + SET(SAVED_CXX_FLAGS "${CMAKE_CXX_FLAGS}") + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${WERROR_FLAG}") + TRY_COMPILE(${RESULT_VAR} ${CMAKE_BINARY_DIR} ${SOURCE_FILE}) + IF(${RESULT_VAR}) + MESSAGE(STATUS "${DESCRIPTION}: yes") + ELSE(${RESULT_VAR}) + MESSAGE(STATUS "${DESCRIPTION}: no") + ENDIF(${RESULT_VAR}) + SET(CMAKE_CXX_FLAGS "${SAVED_CXX_FLAGS}") +ENDMACRO(CHECK_COMPILE) diff --git a/cmake/attribute_deprecated_test.cc b/cmake/attribute_deprecated_test.cc new file mode 100644 index 0000000..fe6b4af --- /dev/null +++ b/cmake/attribute_deprecated_test.cc @@ -0,0 +1,7 @@ +[[deprecated]] +void f() { +} + +int main() { + return 0; +} diff --git a/cmake/std_experimental_optional_test.cc b/cmake/std_experimental_optional_test.cc new file mode 100644 index 0000000..8d77d5d --- /dev/null +++ b/cmake/std_experimental_optional_test.cc @@ -0,0 +1,8 @@ +#include +#include + +int main() { + std::experimental::optional o; + + return !o; +}