From 17053c2babe56896fd62b9aac059852675e1a119 Mon Sep 17 00:00:00 2001 From: Dmitry Marakasov Date: Thu, 25 Dec 2014 19:40:50 +0300 Subject: [PATCH 1/8] Move cpp_optional into separate directory --- SDL2pp/Optional.hh | 2 +- SDL2pp/{ => external}/libcpp_optional.hh | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename SDL2pp/{ => external}/libcpp_optional.hh (100%) diff --git a/SDL2pp/Optional.hh b/SDL2pp/Optional.hh index 8641d1b..3c647c8 100644 --- a/SDL2pp/Optional.hh +++ b/SDL2pp/Optional.hh @@ -22,7 +22,7 @@ #ifndef SDL2PP_OPTIONAL_HH #define SDL2PP_OPTIONAL_HH -#include +#include namespace SDL2pp { diff --git a/SDL2pp/libcpp_optional.hh b/SDL2pp/external/libcpp_optional.hh similarity index 100% rename from SDL2pp/libcpp_optional.hh rename to SDL2pp/external/libcpp_optional.hh From 76f2d746ca507ccda0d0ccc82079533fd300625e Mon Sep 17 00:00:00 2001 From: Dmitry Marakasov Date: Thu, 25 Dec 2014 19:41:32 +0300 Subject: [PATCH 2/8] Add Optional to library headers --- CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5d3fe76..97e6735 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -82,6 +82,7 @@ SET(LIBRARY_HEADERS SDL2pp/AudioSpec.hh SDL2pp/ContainerRWops.hh SDL2pp/Exception.hh + SDL2pp/Optional.hh SDL2pp/Point.hh SDL2pp/RWops.hh SDL2pp/Rect.hh From 96c59ff7ed2d6bd0d3b54b655889f7c909fbe3b6 Mon Sep 17 00:00:00 2001 From: Dmitry Marakasov Date: Thu, 25 Dec 2014 22:16:41 +0300 Subject: [PATCH 3/8] 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; +} From e8c0218fe4be186fa09ae6c684ffdc41358c1e82 Mon Sep 17 00:00:00 2001 From: Dmitry Marakasov Date: Thu, 25 Dec 2014 22:17:09 +0300 Subject: [PATCH 4/8] Allow to set c++ standard --- CMakeLists.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a1877ca..89157d1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,6 +16,8 @@ SET(SDL2PP_VERSION "${SDL2PP_MAJOR_VERSION}.${SDL2PP_MINOR_VERSION}.${SDL2PP_PAT OPTION(SDL2PP_WITH_2_0_4 "Enable new functions available only in SDL2 2.0.4+" OFF) OPTION(SDL2PP_WITH_WERROR "Make warnings fatal" OFF) +SET(SDL2PP_CSTD "c++11" CACHE STRING "Used c++ standard") + IF(CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR) OPTION(SDL2PP_WITH_IMAGE "Enable SDL2_image support" ON) ELSE(CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR) @@ -39,7 +41,7 @@ IF(MSVC) SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W3") SET(WERROR_FLAG "/WX") ELSE(MSVC) - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Wextra -pedantic") + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=${SDL2PP_CSTD} -Wall -Wextra -pedantic") SET(WERROR_FLAG "-Werror") ENDIF(MSVC) From 74bff27f8602c3a4908200b158130ef80bd2a749 Mon Sep 17 00:00:00 2001 From: Dmitry Marakasov Date: Thu, 25 Dec 2014 22:17:44 +0300 Subject: [PATCH 5/8] Use experimental/optional if available --- SDL2pp/Optional.hh | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/SDL2pp/Optional.hh b/SDL2pp/Optional.hh index 3c647c8..137afd0 100644 --- a/SDL2pp/Optional.hh +++ b/SDL2pp/Optional.hh @@ -22,6 +22,25 @@ #ifndef SDL2PP_OPTIONAL_HH #define SDL2PP_OPTIONAL_HH +#include + +#if defined(SDL2PP_WITH_EXPERIMENTAL_OPTIONAL) + +#include + +namespace SDL2pp { + +template +using Optional = std::experimental::optional; + +using BadOptionalAccess = std::experimental::bad_optional_access; + +constexpr std::experimental::nullopt_t NullOpt = std::experimental::nullopt; + +} + +#else + #include namespace SDL2pp { @@ -36,3 +55,5 @@ constexpr sdl2pp_libcpp_optional::nullopt_t NullOpt = sdl2pp_libcpp_optional::nu } #endif + +#endif From f31497f9a75012a310863eb4363b98bf2ad41319 Mon Sep 17 00:00:00 2001 From: Dmitry Marakasov Date: Thu, 25 Dec 2014 22:19:34 +0300 Subject: [PATCH 6/8] Add c++1y test to travis --- .travis.yml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 60d4617..c581186 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,10 +2,17 @@ language: cpp compiler: - gcc - clang +env: + - SDL2PP_CSTD=c++11 + - SDL2PP_CSTD=c++1y before_install: - sudo add-apt-repository --yes ppa:zoogie/sdl2-snapshots - sudo add-apt-repository --yes ppa:ubuntu-toolchain-r/test - sudo apt-get update -qq - sudo apt-get install -qq cmake libsdl2-dev libsdl2-image-dev g++-4.8 - if [ "$CXX" = "g++" ]; then export CXX="g++-4.8" CC="gcc-4.8"; fi -script: cmake . -DSDL2PP_ENABLE_GUI_TEST=OFF -DCMAKE_INSTALL_PREFIX=`pwd`/_prefix -DSDL2PP_WITH_WERROR=YES && make && make test && make install +script: + - cmake . -DSDL2PP_ENABLE_GUI_TEST=OFF -DCMAKE_INSTALL_PREFIX=`pwd`/_prefix -DSDL2PP_WITH_WERROR=YES -DSDL2PP_CSTD=$SDL2PP_CSTD + - make + - make test + - make install From 19154ec765ac01f698b16ef2ec71618ebce959ec Mon Sep 17 00:00:00 2001 From: Dmitry Marakasov Date: Thu, 25 Dec 2014 22:25:44 +0300 Subject: [PATCH 7/8] Ident nested preprocessor --- SDL2pp/Optional.hh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SDL2pp/Optional.hh b/SDL2pp/Optional.hh index 137afd0..a87c252 100644 --- a/SDL2pp/Optional.hh +++ b/SDL2pp/Optional.hh @@ -26,7 +26,7 @@ #if defined(SDL2PP_WITH_EXPERIMENTAL_OPTIONAL) -#include +# include namespace SDL2pp { @@ -41,7 +41,7 @@ constexpr std::experimental::nullopt_t NullOpt = std::experimental::nullopt; #else -#include +# include namespace SDL2pp { From f5a2b5fb5718e36bc74ffd440a7373304f913725 Mon Sep 17 00:00:00 2001 From: Dmitry Marakasov Date: Thu, 25 Dec 2014 22:26:51 +0300 Subject: [PATCH 8/8] Define a macro for deprecated attribute --- SDL2pp/Config.hh.in | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/SDL2pp/Config.hh.in b/SDL2pp/Config.hh.in index e12670b..a9ce0bc 100644 --- a/SDL2pp/Config.hh.in +++ b/SDL2pp/Config.hh.in @@ -33,4 +33,10 @@ #cmakedefine SDL2PP_WITH_EXPERIMENTAL_OPTIONAL #cmakedefine SDL2PP_WITH_DEPRECATED +#if defined(SDL2PP_WITH_DEPRECATED) +# define SDL2PP_DEPRECATED [[deprecated]] +#else +# define SDL2PP_DEPRECATED +#endif + #endif