# Test add_compiler_export_flags without deprecation warning. set(CMAKE_WARN_DEPRECATED OFF) project(GenerateExportHeader) include(CheckCXXCompilerFlag) set( CMAKE_INCLUDE_CURRENT_DIR ON ) macro(TEST_FAIL value msg) if (${value}) message (SEND_ERROR "Test fail:" "${msg}\n" ${Out} ) endif () endmacro() macro(TEST_PASS value msg) if (NOT ${value}) message (SEND_ERROR "Test fail:" "${msg}\n" ${Out} ) endif () endmacro() check_cxx_compiler_flag(-Werror HAS_WERROR_FLAG) if(HAS_WERROR_FLAG) set(ERROR_FLAG "-Werror") else() # MSVC # And intel on windows? # http://software.intel.com/en-us/articles/how-to-handle-warnings-message-in-compiler/?wapkw=%28compiler+warning+message%29 check_cxx_compiler_flag("/WX" HAS_WX_FLAG) if(HAS_WX_FLAG) set(ERROR_FLAG "/WX") else() # Sun CC # http://www.acsu.buffalo.edu/~charngda/sunstudio.html check_cxx_compiler_flag("-errwarn=%all" HAS_ERRWARN_ALL) if (HAS_ERRWARN_ALL) set(ERROR_FLAG "-errwarn=%all") else() endif() endif() endif() include(GenerateExportHeader) set(CMAKE_CXX_STANDARD 98) # Clang/C2 in C++98 mode cannot properly handle some of MSVC headers if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND CMAKE_CXX_SIMULATE_ID STREQUAL "MSVC") set(CMAKE_CXX_STANDARD 11) endif() add_subdirectory(lib_shared_and_static) if(CMAKE_SYSTEM_NAME MATCHES "AIX" AND CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILE_OPTIONS_VISIBILITY) # With GNU 7 on AIX, passing -fvisibility=hidden when driving the # linker for a shared library drops the so init/destruct symbols. # Just use the modern approach instead of testing the macro. set(CMAKE_CXX_VISIBILITY_PRESET hidden) set(CMAKE_VISIBILITY_INLINES_HIDDEN 1) else() add_compiler_export_flags() endif() set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_CURRENT_BINARY_DIR}) message(STATUS "COMPILER_HAS_DEPRECATED: " ${COMPILER_HAS_DEPRECATED}) message(STATUS "COMPILER_HAS_HIDDEN_VISIBILITY: " ${COMPILER_HAS_HIDDEN_VISIBILITY}) message(STATUS "WIN32: " ${WIN32}) message(STATUS "HAS_WERROR_FLAG: " ${HAS_WERROR_FLAG}) set(link_libraries) macro(macro_add_test_library name) add_subdirectory(${name}) include_directories(${name} ${CMAKE_CURRENT_BINARY_DIR}/${name} # For the export header. ) list(APPEND link_libraries ${name}) endmacro() macro_add_test_library(libshared) macro_add_test_library(libstatic) add_subdirectory(nodeprecated) add_subdirectory(includeguard) if(NOT BORLAND) add_subdirectory(c_identifier) endif() if (CMAKE_COMPILER_IS_GNUCXX OR (${CMAKE_CXX_COMPILER_ID} MATCHES Clang)) # No need to clutter the test output with warnings. string(APPEND CMAKE_CXX_FLAGS " -Wno-deprecated-declarations") endif() if(MSVC AND COMPILER_HAS_DEPRECATED) add_definitions(/wd4996) endif() add_executable(GenerateExportHeader exportheader_test.cpp) target_link_libraries(GenerateExportHeader ${link_libraries}) if (WIN32 OR CYGWIN) if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND CMAKE_CXX_SIMULATE_ID STREQUAL "MSVC") set(_platform Win32-Clang) elseif(MSVC AND COMPILER_HAS_DEPRECATED) set(_platform Win32) elseif((MINGW OR CYGWIN) AND COMPILER_HAS_DEPRECATED) set(_platform MinGW) else() set(_platform WinEmpty) endif() elseif(COMPILER_HAS_HIDDEN_VISIBILITY) set(_platform UNIX) elseif(COMPILER_HAS_DEPRECATED) set(_platform UNIX_DeprecatedOnly) else() set(_platform Empty) endif() message(STATUS "Testing reference: ${_platform}") target_compile_definitions(GenerateExportHeader PRIVATE "SRC_DIR=\"${CMAKE_CURRENT_SOURCE_DIR}/reference/${_platform}\"" "BIN_DIR=\"${CMAKE_CURRENT_BINARY_DIR}\"" ) include(${CMAKE_CURRENT_LIST_DIR}/GEH-failures.cmake)