From 6c0e3ef4503c6121f7d5b6b07dcd2ee035e26032 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Mon, 16 Jun 2014 21:30:48 +0200 Subject: cmake cleanup: use MY_CHECK_AND_SET_COMPILER_FLAG. move MY_CHECK_C_COMPILER_FLAG and MY_CHECK_CXX_COMPILER_FLAG to a separate file, introduce MY_CHECK_AND_SET_COMPILER_FLAG, use it where possible. --- cmake/check_compiler_flag.cmake | 51 +++++++++++++++++++++++++++++++++++++++++ cmake/os/Windows.cmake | 1 - cmake/os/WindowsCache.cmake | 1 - 3 files changed, 51 insertions(+), 2 deletions(-) create mode 100644 cmake/check_compiler_flag.cmake (limited to 'cmake') diff --git a/cmake/check_compiler_flag.cmake b/cmake/check_compiler_flag.cmake new file mode 100644 index 00000000000..25e4af23dd9 --- /dev/null +++ b/cmake/check_compiler_flag.cmake @@ -0,0 +1,51 @@ +include(CheckCSourceCompiles) +include(CheckCXXSourceCompiles) +# We need some extra FAIL_REGEX patterns +# Note that CHECK_C_SOURCE_COMPILES is a misnomer, it will also link. +SET(fail_patterns + FAIL_REGEX "argument unused during compilation" + FAIL_REGEX "unsupported .*option" + FAIL_REGEX "unknown .*option" + FAIL_REGEX "unrecognized .*option" + FAIL_REGEX "ignoring unknown option" + FAIL_REGEX "warning:.*ignored" + FAIL_REGEX "[Ww]arning: [Oo]ption" + ) + +MACRO (MY_CHECK_C_COMPILER_FLAG flag result) + SET(SAVE_CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}") + SET(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} ${flag}") + CHECK_C_SOURCE_COMPILES("int main(void) { return 0; }" ${result} + ${fail_patterns}) + SET(CMAKE_REQUIRED_FLAGS "${SAVE_CMAKE_REQUIRED_FLAGS}") +ENDMACRO() + +MACRO (MY_CHECK_CXX_COMPILER_FLAG flag result) + SET(SAVE_CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}") + SET(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} ${flag}") + CHECK_CXX_SOURCE_COMPILES("int main(void) { return 0; }" ${result} + ${fail_patterns}) + SET(CMAKE_REQUIRED_FLAGS "${SAVE_CMAKE_REQUIRED_FLAGS}") +ENDMACRO() + +FUNCTION(MY_CHECK_AND_SET_COMPILER_FLAG flag) + # At the moment this is gcc-only. + # Let's avoid expensive compiler tests on Windows: + IF(WIN32) + RETURN() + ENDIF() + MY_CHECK_C_COMPILER_FLAG(${flag} HAVE_C_${flag}) + MY_CHECK_CXX_COMPILER_FLAG(${flag} HAVE_CXX_${flag}) + IF (HAVE_C_${flag} AND HAVE_CXX_${flag}) + IF(ARGN) + FOREACH(type ${ARGN}) + SET(CMAKE_C_FLAGS_${type} "${CMAKE_C_FLAGS_${type}} ${flag}" PARENT_SCOPE) + SET(CMAKE_CXX_FLAGS_${type} "${CMAKE_CXX_FLAGS_${type}} ${flag}" PARENT_SCOPE) + ENDFOREACH() + ELSE() + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${flag}" PARENT_SCOPE) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}" PARENT_SCOPE) + ENDIF() + ENDIF() +ENDFUNCTION() + diff --git a/cmake/os/Windows.cmake b/cmake/os/Windows.cmake index 254d9f6d946..53c3bad7fed 100644 --- a/cmake/os/Windows.cmake +++ b/cmake/os/Windows.cmake @@ -20,7 +20,6 @@ INCLUDE (CheckCXXSourceCompiles) INCLUDE (CheckStructHasMember) INCLUDE (CheckLibraryExists) INCLUDE (CheckFunctionExists) -INCLUDE (CheckCCompilerFlag) INCLUDE (CheckCSourceRuns) INCLUDE (CheckSymbolExists) INCLUDE (CheckTypeSize) diff --git a/cmake/os/WindowsCache.cmake b/cmake/os/WindowsCache.cmake index 1453cc55053..4786108ec8c 100644 --- a/cmake/os/WindowsCache.cmake +++ b/cmake/os/WindowsCache.cmake @@ -370,5 +370,4 @@ SET(HAVE_SYS_UTSNAME_H CACHE INTERNAL "") SET(HAVE_PTHREAD_ATTR_GETGUARDSIZE CACHE INTERNAL "") SET(HAVE_UCONTEXT_H CACHE INTERNAL "") SET(HAVE_SOCKPEERCRED CACHE INTERNAL "") -SET(HAVE_GGDB3 CACHE INTERNAL "") ENDIF(MSVC) -- cgit v1.2.1