| 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 CMakeUtilities
 
- function(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()
 
 
  |