--- /dev/null
+configure_define(HAVE_VISIBILITY)
+
+check_flag(-fvisibility=hidden HAVE_VISIBILITY_FLAG)
+if(NOT HAVE_VISIBILITY_FLAG)
+ check_flag(-Wl,-fvisibility=hidden HAVE_VISIBILITY_LINKER_FLAG)
+endif()
+check_c_source("
+ __attribute__ ((visibility (\"default\")))
+ int main(int argc, char **argv) {
+ return *argv[argc-1];
+ }"
+ HAVE_VISIBILITY_ATTR
+)
+
+if(HAVE_VISIBILITY_ATTR AND (HAVE_VISIBILITY_FLAG OR HAVE_VISIBILITY_LINKER_FLAG))
+ if(HAVE_VISIBILITY_LINKER_FLAG)
+ string(APPEND CMAKE_SHARED_LINKER_FLAGS " -Wl,-fvisibility=hidden")
+ else()
+ add_compile_options("-fvisibility=hidden")
+ endif()
+ set(HAVE_VISIBILITY 1 CACHE INTERNAL "-fvisibility and __attribute__((visibility(...)))")
+endif()