From be5bc9d1dea0eb443e91457f78b6eee5261d1f36 Mon Sep 17 00:00:00 2001 From: Dmitry Marakasov Date: Thu, 17 Sep 2015 16:02:36 +0300 Subject: [PATCH] Revamp compiler flag support detection logic --- CMakeLists.txt | 28 ++++++++++--------- ...d.cmake => AppendCXXFlagIfSupported.cmake} | 6 ++-- cmake/CheckCompile.cmake | 10 +++---- cmake/attribute_deprecated_test.cc | 2 +- tests/CMakeLists.txt | 4 +-- 5 files changed, 26 insertions(+), 24 deletions(-) rename cmake/{EnableCXXFlagIfSupported.cmake => AppendCXXFlagIfSupported.cmake} (69%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 520bca0..f439048 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -59,16 +59,17 @@ FIND_PACKAGE(Doxygen) # compiler flags & definitions IF(MSVC) - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W3") - SET(WERROR_FLAG "/WX") + SET(SDL2PP_WARNINGS "${SDL2PP_WARNINGS} /W3") + SET(SDL2PP_WERROR_FLAG "/WX") ELSE(MSVC) - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=${SDL2PP_CXXSTD} -Wall -Wextra -pedantic") - SET(WERROR_FLAG "-Werror") + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=${SDL2PP_CXXSTD}") + SET(SDL2PP_WARNINGS "${SDL2PP_WARNINGS} -Wall -Wextra -pedantic") + SET(SDL2PP_WERROR_FLAG "-Werror") - INCLUDE(EnableCXXFlagIfSupported) - ENABLE_CXX_FLAG_IF_SUPPORTED(-Wmissing-prototypes) - ENABLE_CXX_FLAG_IF_SUPPORTED(-Wtautological-compare) - ENABLE_CXX_FLAG_IF_SUPPORTED(-Wshorten-64-to-32) + INCLUDE(AppendCXXFlagIfSupported) + APPEND_CXX_FLAG_IF_SUPPORTED(-Wmissing-prototypes SDL2PP_WARNINGS) + APPEND_CXX_FLAG_IF_SUPPORTED(-Wtautological-compare SDL2PP_WARNINGS) + APPEND_CXX_FLAG_IF_SUPPORTED(-Wshorten-64-to-32 SDL2PP_WARNINGS) ENDIF(MSVC) LIST(REMOVE_DUPLICATES SDL2_ALL_INCLUDE_DIRS) @@ -76,11 +77,6 @@ LIST(REMOVE_DUPLICATES SDL2_ALL_INCLUDE_DIRS) INCLUDE_DIRECTORIES(BEFORE ${PROJECT_SOURCE_DIR}) INCLUDE_DIRECTORIES(SYSTEM ${SDL2_ALL_INCLUDE_DIRS}) -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 @@ -93,6 +89,12 @@ CHECK_COMPILE( "Checking for [[deprecated]] attribute" ) +SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SDL2PP_WARNINGS}") + +IF(SDL2PP_WITH_WERROR) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SDL2PP_WERROR_FLAG}") +ENDIF(SDL2PP_WITH_WERROR) + # config.h CONFIGURE_FILE( SDL2pp/Config.hh.in diff --git a/cmake/EnableCXXFlagIfSupported.cmake b/cmake/AppendCXXFlagIfSupported.cmake similarity index 69% rename from cmake/EnableCXXFlagIfSupported.cmake rename to cmake/AppendCXXFlagIfSupported.cmake index fb37aed..7421109 100644 --- a/cmake/EnableCXXFlagIfSupported.cmake +++ b/cmake/AppendCXXFlagIfSupported.cmake @@ -1,14 +1,14 @@ INCLUDE(CheckCXXCompilerFlag) -MACRO(ENABLE_CXX_FLAG_IF_SUPPORTED FLAG) +MACRO(APPEND_CXX_FLAG_IF_SUPPORTED FLAG VARIABLE) UNSET(HAS_FLAG CACHE) SET(CMAKE_REQUIRED_QUIET YES) CHECK_CXX_COMPILER_FLAG(${FLAG} HAS_FLAG) SET(CMAKE_REQUIRED_QUIET NO) IF(HAS_FLAG) - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FLAG}") + SET(VARIABLE "${VARIABLE} ${FLAG}") MESSAGE(STATUS "Checking for ${FLAG}: yes") ELSE(HAS_FLAG) MESSAGE(STATUS "Checking for ${FLAG}: no") ENDIF(HAS_FLAG) -ENDMACRO(ENABLE_CXX_FLAG_IF_SUPPORTED) +ENDMACRO(APPEND_CXX_FLAG_IF_SUPPORTED) diff --git a/cmake/CheckCompile.cmake b/cmake/CheckCompile.cmake index 33e72cb..ce52160 100644 --- a/cmake/CheckCompile.cmake +++ b/cmake/CheckCompile.cmake @@ -1,11 +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}) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SDL2PP_WERROR_FLAG}") + TRY_COMPILE(RESULT_VAR ${CMAKE_BINARY_DIR} ${SOURCE_FILE}) + IF(RESULT_VAR) MESSAGE(STATUS "${DESCRIPTION}: yes") - ELSE(${RESULT_VAR}) + ELSE(RESULT_VAR) MESSAGE(STATUS "${DESCRIPTION}: no") - ENDIF(${RESULT_VAR}) + 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 index fe6b4af..77e0e49 100644 --- a/cmake/attribute_deprecated_test.cc +++ b/cmake/attribute_deprecated_test.cc @@ -1,5 +1,5 @@ [[deprecated]] -void f() { +static void f() { } int main() { diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index b2d2831..656b876 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -17,8 +17,8 @@ IF(SDL2PP_WITH_MIXER) ENDIF(SDL2PP_WITH_MIXER) # disable self-move warning: it's deliberately used in tests -INCLUDE(EnableCXXFlagIfSupported) -ENABLE_CXX_FLAG_IF_SUPPORTED(-Wno-self-move) +INCLUDE(AppendCXXFlagIfSupported) +APPEND_CXX_FLAG_IF_SUPPORTED(-Wno-self-move CMAKE_CXX_FLAGS) ADD_DEFINITIONS(-DTESTDATA_DIR="${PROJECT_SOURCE_DIR}/testdata")