diff options
4 files changed, 21 insertions, 7 deletions
diff --git a/Modules/GenerateExportHeader.cmake b/Modules/GenerateExportHeader.cmake index 92b9433..f690655 100644 --- a/Modules/GenerateExportHeader.cmake +++ b/Modules/GenerateExportHeader.cmake @@ -140,6 +140,20 @@ macro(_test_compiler_hidden_visibility) endif() endmacro() +macro(_test_compiler_has_deprecated) + if (WIN32) + if (NOT ${CMAKE_CXX_COMPILER_ID} MATCHES Borland) + set(COMPILER_HAS_DEPRECATED TRUE) + endif() + else() + # TODO: Test properly for this + if(COMPILER_HAS_HIDDEN_VISIBILITY AND USE_COMPILER_HIDDEN_VISIBILITY) + set(COMPILER_HAS_DEPRECATED TRUE) + endif() + endif() + set(COMPILER_HAS_DEPRECATED "${COMPILER_HAS_DEPRECATED}" CACHE INTERNAL "Compiler support for a deprecated attribute") +endmacro() + set(myDir ${CMAKE_CURRENT_LIST_DIR}) macro(_DO_SET_MACRO_VALUES TARGET_LIBRARY) @@ -149,13 +163,11 @@ macro(_DO_SET_MACRO_VALUES TARGET_LIBRARY) set(DEFINE_NO_EXPORT) if(WIN32) - message("Compiler is ${CMAKE_CXX_COMPILER_ID}") - if (NOT ${CMAKE_CXX_COMPILER_ID} MATCHES Borland) - message("Deprecation macro enabled.") + if (COMPILER_HAS_DEPRECATED) set(DEFINE_DEPRECATED "__declspec(deprecated)") endif() else() - if(COMPILER_HAS_HIDDEN_VISIBILITY AND USE_COMPILER_HIDDEN_VISIBILITY) + if(COMPILER_HAS_DEPRECATED) set(DEFINE_DEPRECATED "__attribute__ ((__deprecated__))") endif() endif() @@ -244,6 +256,7 @@ function(GENERATE_EXPORT_HEADER TARGET_LIBRARY) return() endif() _test_compiler_hidden_visibility() + _test_compiler_has_deprecated() _do_set_macro_values(${TARGET_LIBRARY}) _do_generate_export_header(${TARGET_LIBRARY} ${ARGN}) endfunction() @@ -251,6 +264,7 @@ endfunction() function(add_compiler_export_flags) _test_compiler_hidden_visibility() + _test_compiler_has_deprecated() if(NOT (USE_COMPILER_HIDDEN_VISIBILITY AND COMPILER_HAS_HIDDEN_VISIBILITY)) message(WARNING "Compiler doesn't have hidden visibility") diff --git a/Tests/Module/GenerateExportHeader/lib_shared_and_statictest/CMakeLists.txt b/Tests/Module/GenerateExportHeader/lib_shared_and_statictest/CMakeLists.txt index d25eed0..1401eec 100644 --- a/Tests/Module/GenerateExportHeader/lib_shared_and_statictest/CMakeLists.txt +++ b/Tests/Module/GenerateExportHeader/lib_shared_and_statictest/CMakeLists.txt @@ -17,7 +17,7 @@ endmacro() static_variant_build_pass("return libshared_and_static_exported();" "Failed to build static variant") shared_variant_build_pass("return libshared_and_static_exported();" "Failed to build shared variant") -if (NOT ${CMAKE_CXX_COMPILER_ID} MATCHES Borland) +if (COMPILER_HAS_DEPRECATED) shared_variant_build_fail("return libshared_and_static_deprecated();" "Built shared deprecated variant") static_variant_build_fail("return libshared_and_static_deprecated();" "Built static deprecated variant") else() diff --git a/Tests/Module/GenerateExportHeader/libsharedtest/CMakeLists.txt b/Tests/Module/GenerateExportHeader/libsharedtest/CMakeLists.txt index 9edc53f..b763036 100644 --- a/Tests/Module/GenerateExportHeader/libsharedtest/CMakeLists.txt +++ b/Tests/Module/GenerateExportHeader/libsharedtest/CMakeLists.txt @@ -9,7 +9,7 @@ endmacro() shared_build_pass("Libshared l; return l.libshared_exported();" "Failed to build exported") -if (NOT ${CMAKE_CXX_COMPILER_ID} MATCHES Borland) +if (COMPILER_HAS_DEPRECATED) shared_build_fail("Libshared l; return l.libshared_deprecated();" "Built use of deprecated class method. This should not be possible.") else() shared_build_pass("Libshared l; return l.libshared_deprecated();" "Built use of deprecated class method. This should not be possible.") diff --git a/Tests/Module/GenerateExportHeader/libstatictest/CMakeLists.txt b/Tests/Module/GenerateExportHeader/libstatictest/CMakeLists.txt index 168cae8..14ca05b 100644 --- a/Tests/Module/GenerateExportHeader/libstatictest/CMakeLists.txt +++ b/Tests/Module/GenerateExportHeader/libstatictest/CMakeLists.txt @@ -9,7 +9,7 @@ endmacro() static_build_pass("Libstatic l; return l.libstatic_exported();" "Failed to build exported.") -if (NOT ${CMAKE_CXX_COMPILER_ID} MATCHES Borland) +if (COMPILER_HAS_DEPRECATED) static_build_fail("Libstatic l; return l.libstatic_deprecated();" "Built use of deprecated class method. This should not be possible.") static_build_fail("libstatic_deprecated();" "Built use of deprecated function. This should not be possible.") else() |