You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

57 lines
2.1 KiB

  1. include(CheckCSourceCompiles)
  2. include(CheckCXXSourceCompiles)
  3. # We need some extra FAIL_REGEX patterns
  4. # Note that CHECK_C_SOURCE_COMPILES is a misnomer, it will also link.
  5. SET(fail_patterns
  6. FAIL_REGEX "argument unused during compilation"
  7. FAIL_REGEX "unsupported .*option"
  8. FAIL_REGEX "unknown .*option"
  9. FAIL_REGEX "unrecognized .*option"
  10. FAIL_REGEX "ignoring unknown option"
  11. FAIL_REGEX "warning:.*ignored"
  12. FAIL_REGEX "warning:.*is valid for.*but not for"
  13. FAIL_REGEX "warning:.*redefined"
  14. FAIL_REGEX "[Ww]arning: [Oo]ption"
  15. )
  16. #The regex patterns above are not localized, thus LANG=C
  17. SET(ENV{LANG} C)
  18. MACRO (MY_CHECK_C_COMPILER_FLAG flag)
  19. STRING(REGEX REPLACE "[-,= +]" "_" result "HAVE_C_${flag}")
  20. SET(SAVE_CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}")
  21. SET(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} ${flag}")
  22. CHECK_C_SOURCE_COMPILES("int main(void) { return 0; }" ${result}
  23. ${fail_patterns})
  24. SET(CMAKE_REQUIRED_FLAGS "${SAVE_CMAKE_REQUIRED_FLAGS}")
  25. ENDMACRO()
  26. MACRO (MY_CHECK_CXX_COMPILER_FLAG flag)
  27. STRING(REGEX REPLACE "[-,= +]" "_" result "HAVE_CXX_${flag}")
  28. SET(SAVE_CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}")
  29. SET(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} ${flag}")
  30. CHECK_CXX_SOURCE_COMPILES("int main(void) { return 0; }" ${result}
  31. ${fail_patterns})
  32. SET(CMAKE_REQUIRED_FLAGS "${SAVE_CMAKE_REQUIRED_FLAGS}")
  33. ENDMACRO()
  34. FUNCTION(MY_CHECK_AND_SET_COMPILER_FLAG flag_to_set)
  35. # At the moment this is gcc-only.
  36. # Let's avoid expensive compiler tests on Windows:
  37. IF(WIN32)
  38. RETURN()
  39. ENDIF()
  40. STRING(REGEX REPLACE "^-Wno-" "-W" flag_to_check ${flag_to_set})
  41. MY_CHECK_C_COMPILER_FLAG(${flag_to_check})
  42. MY_CHECK_CXX_COMPILER_FLAG(${flag_to_check})
  43. STRING(REGEX REPLACE "[-,= +]" "_" result "${flag_to_check}")
  44. FOREACH(lang C CXX)
  45. IF (HAVE_${lang}_${result})
  46. IF(ARGN)
  47. FOREACH(type ${ARGN})
  48. SET(CMAKE_${lang}_FLAGS_${type} "${CMAKE_${lang}_FLAGS_${type}} ${flag_to_set}" PARENT_SCOPE)
  49. ENDFOREACH()
  50. ELSE()
  51. SET(CMAKE_${lang}_FLAGS "${CMAKE_${lang}_FLAGS} ${flag_to_set}" PARENT_SCOPE)
  52. ENDIF()
  53. ENDIF()
  54. ENDFOREACH()
  55. ENDFUNCTION()