Revamp compiler flag support detection logic

This commit is contained in:
Dmitry Marakasov 2015-09-17 16:02:36 +03:00
parent 8be33f4fb4
commit be5bc9d1de
5 changed files with 26 additions and 24 deletions

View File

@ -59,16 +59,17 @@ FIND_PACKAGE(Doxygen)
# compiler flags & definitions # compiler flags & definitions
IF(MSVC) IF(MSVC)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W3") SET(SDL2PP_WARNINGS "${SDL2PP_WARNINGS} /W3")
SET(WERROR_FLAG "/WX") SET(SDL2PP_WERROR_FLAG "/WX")
ELSE(MSVC) ELSE(MSVC)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=${SDL2PP_CXXSTD} -Wall -Wextra -pedantic") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=${SDL2PP_CXXSTD}")
SET(WERROR_FLAG "-Werror") SET(SDL2PP_WARNINGS "${SDL2PP_WARNINGS} -Wall -Wextra -pedantic")
SET(SDL2PP_WERROR_FLAG "-Werror")
INCLUDE(EnableCXXFlagIfSupported) INCLUDE(AppendCXXFlagIfSupported)
ENABLE_CXX_FLAG_IF_SUPPORTED(-Wmissing-prototypes) APPEND_CXX_FLAG_IF_SUPPORTED(-Wmissing-prototypes SDL2PP_WARNINGS)
ENABLE_CXX_FLAG_IF_SUPPORTED(-Wtautological-compare) APPEND_CXX_FLAG_IF_SUPPORTED(-Wtautological-compare SDL2PP_WARNINGS)
ENABLE_CXX_FLAG_IF_SUPPORTED(-Wshorten-64-to-32) APPEND_CXX_FLAG_IF_SUPPORTED(-Wshorten-64-to-32 SDL2PP_WARNINGS)
ENDIF(MSVC) ENDIF(MSVC)
LIST(REMOVE_DUPLICATES SDL2_ALL_INCLUDE_DIRS) 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(BEFORE ${PROJECT_SOURCE_DIR})
INCLUDE_DIRECTORIES(SYSTEM ${SDL2_ALL_INCLUDE_DIRS}) 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) INCLUDE(CheckCompile)
CHECK_COMPILE( CHECK_COMPILE(
SDL2PP_WITH_EXPERIMENTAL_OPTIONAL SDL2PP_WITH_EXPERIMENTAL_OPTIONAL
@ -93,6 +89,12 @@ CHECK_COMPILE(
"Checking for [[deprecated]] attribute" "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 # config.h
CONFIGURE_FILE( CONFIGURE_FILE(
SDL2pp/Config.hh.in SDL2pp/Config.hh.in

View File

@ -1,14 +1,14 @@
INCLUDE(CheckCXXCompilerFlag) INCLUDE(CheckCXXCompilerFlag)
MACRO(ENABLE_CXX_FLAG_IF_SUPPORTED FLAG) MACRO(APPEND_CXX_FLAG_IF_SUPPORTED FLAG VARIABLE)
UNSET(HAS_FLAG CACHE) UNSET(HAS_FLAG CACHE)
SET(CMAKE_REQUIRED_QUIET YES) SET(CMAKE_REQUIRED_QUIET YES)
CHECK_CXX_COMPILER_FLAG(${FLAG} HAS_FLAG) CHECK_CXX_COMPILER_FLAG(${FLAG} HAS_FLAG)
SET(CMAKE_REQUIRED_QUIET NO) SET(CMAKE_REQUIRED_QUIET NO)
IF(HAS_FLAG) IF(HAS_FLAG)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FLAG}") SET(VARIABLE "${VARIABLE} ${FLAG}")
MESSAGE(STATUS "Checking for ${FLAG}: yes") MESSAGE(STATUS "Checking for ${FLAG}: yes")
ELSE(HAS_FLAG) ELSE(HAS_FLAG)
MESSAGE(STATUS "Checking for ${FLAG}: no") MESSAGE(STATUS "Checking for ${FLAG}: no")
ENDIF(HAS_FLAG) ENDIF(HAS_FLAG)
ENDMACRO(ENABLE_CXX_FLAG_IF_SUPPORTED) ENDMACRO(APPEND_CXX_FLAG_IF_SUPPORTED)

View File

@ -1,11 +1,11 @@
MACRO(CHECK_COMPILE RESULT_VAR SOURCE_FILE DESCRIPTION) MACRO(CHECK_COMPILE RESULT_VAR SOURCE_FILE DESCRIPTION)
SET(SAVED_CXX_FLAGS "${CMAKE_CXX_FLAGS}") SET(SAVED_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${WERROR_FLAG}") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SDL2PP_WERROR_FLAG}")
TRY_COMPILE(${RESULT_VAR} ${CMAKE_BINARY_DIR} ${SOURCE_FILE}) TRY_COMPILE(RESULT_VAR ${CMAKE_BINARY_DIR} ${SOURCE_FILE})
IF(${RESULT_VAR}) IF(RESULT_VAR)
MESSAGE(STATUS "${DESCRIPTION}: yes") MESSAGE(STATUS "${DESCRIPTION}: yes")
ELSE(${RESULT_VAR}) ELSE(RESULT_VAR)
MESSAGE(STATUS "${DESCRIPTION}: no") MESSAGE(STATUS "${DESCRIPTION}: no")
ENDIF(${RESULT_VAR}) ENDIF(RESULT_VAR)
SET(CMAKE_CXX_FLAGS "${SAVED_CXX_FLAGS}") SET(CMAKE_CXX_FLAGS "${SAVED_CXX_FLAGS}")
ENDMACRO(CHECK_COMPILE) ENDMACRO(CHECK_COMPILE)

View File

@ -1,5 +1,5 @@
[[deprecated]] [[deprecated]]
void f() { static void f() {
} }
int main() { int main() {

View File

@ -17,8 +17,8 @@ IF(SDL2PP_WITH_MIXER)
ENDIF(SDL2PP_WITH_MIXER) ENDIF(SDL2PP_WITH_MIXER)
# disable self-move warning: it's deliberately used in tests # disable self-move warning: it's deliberately used in tests
INCLUDE(EnableCXXFlagIfSupported) INCLUDE(AppendCXXFlagIfSupported)
ENABLE_CXX_FLAG_IF_SUPPORTED(-Wno-self-move) APPEND_CXX_FLAG_IF_SUPPORTED(-Wno-self-move CMAKE_CXX_FLAGS)
ADD_DEFINITIONS(-DTESTDATA_DIR="${PROJECT_SOURCE_DIR}/testdata") ADD_DEFINITIONS(-DTESTDATA_DIR="${PROJECT_SOURCE_DIR}/testdata")