CMakeLists.txt 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. cmake_minimum_required(VERSION 2.8)
  2. project(CheckCXXCompilerFlag)
  3. macro(TEST_FAIL value msg)
  4. if (${value})
  5. message (SEND_ERROR "Test fail:" ${msg} ${Out} )
  6. endif ()
  7. endmacro()
  8. macro(TEST_PASS value msg)
  9. if (NOT ${value})
  10. message (SEND_ERROR "Test fail:" ${msg} ${Out} )
  11. endif ()
  12. endmacro()
  13. if(CMAKE_COMPILER_IS_GNUCXX)
  14. exec_program(${CMAKE_C_COMPILER} ARGS --version OUTPUT_VARIABLE _gcc_version_info)
  15. string (REGEX MATCH "[345]\\.[0-9]\\.[0-9]" _gcc_version "${_gcc_version_info}")
  16. # gcc on mac just reports: "gcc (GCC) 3.3 20030304 ..." without the
  17. # patch level, handle this here:
  18. if(NOT _gcc_version)
  19. string (REGEX REPLACE ".*\\(GCC\\).* ([34]\\.[0-9]) .*" "\\1.0" _gcc_version "${_gcc_version_info}")
  20. endif()
  21. endif()
  22. if(CMAKE_CXX_COMPILER_ID MATCHES Clang)
  23. exec_program(${CMAKE_CXX_COMPILER} ARGS --version OUTPUT_VARIABLE _clang_version_info)
  24. string (REGEX REPLACE ".*version ([0-9]\\.[0-9]).*" "\\1" _clang_version "${_clang_version_info}")
  25. endif()
  26. message("Platform:\n WIN32: ${WIN32}\n UNIX: ${UNIX}\n APPLE: ${APPLE}\n MINGW: ${MINGW}\n CYGWIN: ${CYGWIN}\n"
  27. " MSVC: ${MSVC}\n MSVC60: ${MSVC60}\n MSVC70: ${MSVC70}\n MSVC71: ${MSVC71}\n MSVC80: ${MSVC80}\n MSVC90: ${MSVC90}\n MSVC10: ${MSVC10}\n"
  28. " GCC: ${_gcc_version}\n"
  29. " Clang: ${_clang_version}\n"
  30. )
  31. include(CheckCXXCompilerFlag)
  32. check_cxx_compiler_flag(-fvisibility=hidden HAS_HIDDEN_VISIBILITY)
  33. message("HAS_HIDDEN_VISIBILITY: ${HAS_HIDDEN_VISIBILITY}\n\nCOMPILE OUTPUT:\n${OUTPUT}")
  34. if(CMAKE_COMPILER_IS_GNUCXX)
  35. if(NOT WIN32)
  36. # test_pass(HAS_HIDDEN_VISIBILITY "GCC should support hidden visibility, but does not.")
  37. endif()
  38. else()
  39. message("Unhandled Platform")
  40. endif()
  41. #
  42. # This is a no-op executable... If this test is going to fail, it fails during
  43. # the configure step while cmake is configuring this CMakeLists.txt file...
  44. #
  45. file(WRITE
  46. "${CMAKE_CURRENT_BINARY_DIR}/main.cxx"
  47. "int main() { return 0; }
  48. "
  49. )
  50. add_executable(
  51. CheckCXXCompilerFlag
  52. "${CMAKE_CURRENT_BINARY_DIR}/main.cxx"
  53. )