CMakeLists.txt 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. cmake_minimum_required(VERSION 2.8.5 FATAL_ERROR)
  2. cmake_policy(SET CMP0054 NEW)
  3. project(GenerateExportHeader)
  4. # Prevent timeout on Watcom by not running the tests.
  5. if ("${CMAKE_CXX_COMPILER_ID}" MATCHES Watcom)
  6. file(WRITE
  7. "${CMAKE_CURRENT_BINARY_DIR}/main.cxx"
  8. "int main() { return 0; }
  9. "
  10. )
  11. add_executable(
  12. GenerateExportHeader
  13. "${CMAKE_CURRENT_BINARY_DIR}/main.cxx"
  14. )
  15. return()
  16. endif()
  17. include(CheckCXXCompilerFlag)
  18. set( CMAKE_INCLUDE_CURRENT_DIR ON )
  19. macro(TEST_FAIL value msg)
  20. if (${value})
  21. message (SEND_ERROR "Test fail:" "${msg}\n" ${Out} )
  22. endif ()
  23. endmacro()
  24. macro(TEST_PASS value msg)
  25. if (NOT ${value})
  26. message (SEND_ERROR "Test fail:" "${msg}\n" ${Out} )
  27. endif ()
  28. endmacro()
  29. check_cxx_compiler_flag(-Werror HAS_WERROR_FLAG)
  30. if(HAS_WERROR_FLAG)
  31. set(ERROR_FLAG "-Werror")
  32. else()
  33. # MSVC
  34. # And intel on windows?
  35. # http://software.intel.com/en-us/articles/how-to-handle-warnings-message-in-compiler/?wapkw=%28compiler+warning+message%29
  36. check_cxx_compiler_flag("/WX" HAS_WX_FLAG)
  37. if(HAS_WX_FLAG)
  38. set(ERROR_FLAG "/WX")
  39. else()
  40. # Sun CC
  41. # http://www.acsu.buffalo.edu/~charngda/sunstudio.html
  42. check_cxx_compiler_flag("-errwarn=%all" HAS_ERRWARN_ALL)
  43. if (HAS_ERRWARN_ALL)
  44. set(ERROR_FLAG "-errwarn=%all")
  45. else()
  46. endif()
  47. endif()
  48. endif()
  49. include(GenerateExportHeader)
  50. set(CMAKE_CXX_STANDARD 98)
  51. # Those versions of the HP compiler that need a flag to get proper C++98
  52. # template support also need a flag to use the newer C++ library.
  53. if (CMAKE_CXX_COMPILER_ID STREQUAL HP AND
  54. CMAKE_CXX98_STANDARD_COMPILE_OPTION STREQUAL "+hpxstd98")
  55. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -AA")
  56. endif ()
  57. # Clang/C2 in C++98 mode cannot properly handle some of MSVC headers
  58. if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND
  59. CMAKE_CXX_SIMULATE_ID STREQUAL "MSVC")
  60. set(CMAKE_CXX_STANDARD 11)
  61. endif()
  62. add_subdirectory(lib_shared_and_static)
  63. add_compiler_export_flags()
  64. set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
  65. message("#### COMPILER_HAS_DEPRECATED: " ${COMPILER_HAS_DEPRECATED})
  66. message("#### COMPILER_HAS_HIDDEN_VISIBILITY: " ${COMPILER_HAS_HIDDEN_VISIBILITY})
  67. message("#### WIN32: " ${WIN32})
  68. message("#### HAS_WERROR_FLAG: " ${HAS_WERROR_FLAG})
  69. set(link_libraries)
  70. macro(macro_add_test_library name)
  71. add_subdirectory(${name})
  72. include_directories(${name}
  73. ${${name}_BINARY_DIR} # For the export header.
  74. )
  75. list(APPEND link_libraries ${name})
  76. endmacro()
  77. macro_add_test_library(libshared)
  78. macro_add_test_library(libstatic)
  79. add_subdirectory(nodeprecated)
  80. if(NOT BORLAND)
  81. add_subdirectory(c_identifier)
  82. endif()
  83. if (CMAKE_COMPILER_IS_GNUCXX OR (${CMAKE_CXX_COMPILER_ID} MATCHES Clang))
  84. # No need to clutter the test output with warnings.
  85. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated-declarations")
  86. endif()
  87. if(MSVC AND COMPILER_HAS_DEPRECATED)
  88. add_definitions(/wd4996)
  89. endif()
  90. add_executable(GenerateExportHeader exportheader_test.cpp)
  91. target_link_libraries(GenerateExportHeader ${link_libraries})
  92. if (WIN32 OR CYGWIN)
  93. if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND
  94. CMAKE_CXX_SIMULATE_ID STREQUAL "MSVC")
  95. set(_platform Win32-Clang)
  96. elseif(MSVC AND COMPILER_HAS_DEPRECATED)
  97. set(_platform Win32)
  98. elseif((MINGW OR CYGWIN) AND COMPILER_HAS_DEPRECATED)
  99. set(_platform MinGW)
  100. else()
  101. set(_platform WinEmpty)
  102. endif()
  103. elseif(COMPILER_HAS_HIDDEN_VISIBILITY AND USE_COMPILER_HIDDEN_VISIBILITY)
  104. set(_platform UNIX)
  105. elseif(COMPILER_HAS_DEPRECATED)
  106. set(_platform UNIX_DeprecatedOnly)
  107. else()
  108. set(_platform Empty)
  109. endif()
  110. message("#### Testing reference: ${_platform}")
  111. target_compile_definitions(GenerateExportHeader
  112. PRIVATE
  113. "SRC_DIR=\"${CMAKE_CURRENT_SOURCE_DIR}/reference/${_platform}\""
  114. "BIN_DIR=\"${CMAKE_CURRENT_BINARY_DIR}\""
  115. )