diff options
author | Sergei Golubchik <serg@mariadb.org> | 2014-06-16 21:30:48 +0200 |
---|---|---|
committer | Sergei Golubchik <serg@mariadb.org> | 2014-06-26 11:54:13 +0200 |
commit | 6c0e3ef4503c6121f7d5b6b07dcd2ee035e26032 (patch) | |
tree | 693231d79fec36224f6ec0cd74bb33b9e65b8fb9 /cmake/check_compiler_flag.cmake | |
parent | afa4c36ca055328f52973d8b8d28a04520ccdc59 (diff) | |
download | mariadb-git-6c0e3ef4503c6121f7d5b6b07dcd2ee035e26032.tar.gz |
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.
Diffstat (limited to 'cmake/check_compiler_flag.cmake')
-rw-r--r-- | cmake/check_compiler_flag.cmake | 51 |
1 files changed, 51 insertions, 0 deletions
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() + |