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
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

View File

@ -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)

View File

@ -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)

View File

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

View File

@ -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")