| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 | 
#!#! \brief Helper macro which appends gcc compatible visibility flags to the#! variable given by RESULT_VAR.#!#! If supported, the flags -fvisibility=hidden and -fvisibility-inlines-hidden#! will be added. This applies to gcc >= 4.5 and Clang.#!#! Usage:#!   ctkFunctionGetCompilerVisibilityFlags(RESULT_VAR)#!#! Example:#!#! \code#! set(myflags "-Werror")#! ctkFunctionGetCompilerVisibilityFlags(myflags)#! \endcode#!#! The variable \emph myflags will contain the string "-Werror -fvisibility -fvisibility-inlines-hidden"#! if for example gcc 4.6 is used.#!#! \ingroup CMakeUtilitiesfunction(ctkFunctionGetCompilerVisibilityFlags RESULT_VAR)    # We only support hidden visibility for gcc for now. Clang 3.0 still has troubles with  # correctly marking template declarations and explicit template instantiations as exported.  # See http://comments.gmane.org/gmane.comp.compilers.clang.scm/50028  # and http://llvm.org/bugs/show_bug.cgi?id=10113  set(use_visibility_flags 0)  if(CMAKE_COMPILER_IS_GNUCXX)      set(use_visibility_flags 1)    ctkFunctionGetGccVersion(${CMAKE_CXX_COMPILER} GCC_VERSION)      # MinGW does not export all symbols automatically, so no need to set flags.    #    # With gcc < 4.5, RTTI symbols from classes declared in third-party libraries    # which are not "gcc visibility aware" are marked with hidden visibility in    # DSOs which include the class declaration and which are compiled with    # hidden visibility. This leads to dynamic_cast and exception handling problems.    # While this problem could be worked around by sandwiching the include    # directives for the third-party headers between "#pragma visibility push/pop"    # statements, it is generally safer to just use default visibility with    # gcc < 4.5.        if(${GCC_VERSION} VERSION_LESS "4.5" OR MINGW)      set(use_visibility_flags 0)    endif()      endif()    if(use_visibility_flags)    set(visibility_flags "")    ctkFunctionCheckCompilerFlags("-fvisibility=hidden" visibility_flags)    ctkFunctionCheckCompilerFlags("-fvisibility-inlines-hidden" visibility_flags)    set(${RESULT_VAR} "${${RESULT_VAR}} ${visibility_flags}" PARENT_SCOPE)  endif()  endfunction()
 |