GEH.cmake 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. # Test add_compiler_export_flags without deprecation warning.
  2. set(CMAKE_WARN_DEPRECATED OFF)
  3. project(GenerateExportHeader)
  4. include(CheckCXXCompilerFlag)
  5. set( CMAKE_INCLUDE_CURRENT_DIR ON )
  6. macro(TEST_FAIL value msg)
  7. if (${value})
  8. message (SEND_ERROR "Test fail:" "${msg}\n" ${Out} )
  9. endif ()
  10. endmacro()
  11. macro(TEST_PASS value msg)
  12. if (NOT ${value})
  13. message (SEND_ERROR "Test fail:" "${msg}\n" ${Out} )
  14. endif ()
  15. endmacro()
  16. check_cxx_compiler_flag(-Werror HAS_WERROR_FLAG)
  17. if(HAS_WERROR_FLAG)
  18. set(ERROR_FLAG "-Werror")
  19. else()
  20. # MSVC
  21. # And intel on windows?
  22. # http://software.intel.com/en-us/articles/how-to-handle-warnings-message-in-compiler/?wapkw=%28compiler+warning+message%29
  23. check_cxx_compiler_flag("/WX" HAS_WX_FLAG)
  24. if(HAS_WX_FLAG)
  25. set(ERROR_FLAG "/WX")
  26. else()
  27. # Sun CC
  28. # http://www.acsu.buffalo.edu/~charngda/sunstudio.html
  29. check_cxx_compiler_flag("-errwarn=%all" HAS_ERRWARN_ALL)
  30. if (HAS_ERRWARN_ALL)
  31. set(ERROR_FLAG "-errwarn=%all")
  32. else()
  33. endif()
  34. endif()
  35. endif()
  36. include(GenerateExportHeader)
  37. set(CMAKE_CXX_STANDARD 98)
  38. # Clang/C2 in C++98 mode cannot properly handle some of MSVC headers
  39. if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND
  40. CMAKE_CXX_SIMULATE_ID STREQUAL "MSVC")
  41. set(CMAKE_CXX_STANDARD 11)
  42. endif()
  43. add_subdirectory(lib_shared_and_static)
  44. if(CMAKE_SYSTEM_NAME MATCHES "AIX" AND CMAKE_CXX_COMPILER_ID STREQUAL "GNU"
  45. AND CMAKE_CXX_COMPILE_OPTIONS_VISIBILITY)
  46. # With GNU 7 on AIX, passing -fvisibility=hidden when driving the
  47. # linker for a shared library drops the so init/destruct symbols.
  48. # Just use the modern approach instead of testing the macro.
  49. set(CMAKE_CXX_VISIBILITY_PRESET hidden)
  50. set(CMAKE_VISIBILITY_INLINES_HIDDEN 1)
  51. else()
  52. add_compiler_export_flags()
  53. endif()
  54. set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
  55. set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_CURRENT_BINARY_DIR})
  56. message(STATUS "COMPILER_HAS_DEPRECATED: " ${COMPILER_HAS_DEPRECATED})
  57. message(STATUS "COMPILER_HAS_HIDDEN_VISIBILITY: " ${COMPILER_HAS_HIDDEN_VISIBILITY})
  58. message(STATUS "WIN32: " ${WIN32})
  59. message(STATUS "HAS_WERROR_FLAG: " ${HAS_WERROR_FLAG})
  60. set(link_libraries)
  61. macro(macro_add_test_library name)
  62. add_subdirectory(${name})
  63. include_directories(${name}
  64. ${CMAKE_CURRENT_BINARY_DIR}/${name} # For the export header.
  65. )
  66. list(APPEND link_libraries ${name})
  67. endmacro()
  68. macro_add_test_library(libshared)
  69. macro_add_test_library(libstatic)
  70. add_subdirectory(nodeprecated)
  71. add_subdirectory(includeguard)
  72. if(NOT BORLAND)
  73. add_subdirectory(c_identifier)
  74. endif()
  75. if (CMAKE_COMPILER_IS_GNUCXX OR (${CMAKE_CXX_COMPILER_ID} MATCHES Clang))
  76. # No need to clutter the test output with warnings.
  77. string(APPEND CMAKE_CXX_FLAGS " -Wno-deprecated-declarations")
  78. endif()
  79. if(MSVC AND COMPILER_HAS_DEPRECATED)
  80. add_definitions(/wd4996)
  81. endif()
  82. add_executable(GenerateExportHeader exportheader_test.cpp)
  83. target_link_libraries(GenerateExportHeader ${link_libraries})
  84. if (WIN32 OR CYGWIN)
  85. if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND
  86. CMAKE_CXX_SIMULATE_ID STREQUAL "MSVC")
  87. set(_platform Win32-Clang)
  88. elseif(MSVC AND COMPILER_HAS_DEPRECATED)
  89. set(_platform Win32)
  90. elseif((MINGW OR CYGWIN) AND COMPILER_HAS_DEPRECATED)
  91. set(_platform MinGW)
  92. else()
  93. set(_platform WinEmpty)
  94. endif()
  95. elseif(COMPILER_HAS_HIDDEN_VISIBILITY)
  96. set(_platform UNIX)
  97. elseif(COMPILER_HAS_DEPRECATED)
  98. set(_platform UNIX_DeprecatedOnly)
  99. else()
  100. set(_platform Empty)
  101. endif()
  102. message(STATUS "Testing reference: ${_platform}")
  103. target_compile_definitions(GenerateExportHeader
  104. PRIVATE
  105. "SRC_DIR=\"${CMAKE_CURRENT_SOURCE_DIR}/reference/${_platform}\""
  106. "BIN_DIR=\"${CMAKE_CURRENT_BINARY_DIR}\""
  107. )
  108. include(${CMAKE_CURRENT_LIST_DIR}/GEH-failures.cmake)