Commit c9584096 authored by Martin Lucina's avatar Martin Lucina Committed by Martin Sustrik

Control symbol exports using -fvisibility

On systems using GCC 4.0 or newer which support symbol visibility in shared
libraries, use -fvisibility=hidden and only export explict API functions
defined in zmq.cpp. We do not enable -fvisibility on MinGW since this uses a
separate mechanism (__declspec).
Signed-off-by: 's avatarMartin Lucina <mato@kotelna.sk>
parent 734624be
...@@ -223,6 +223,18 @@ case "${host_os}" in ...@@ -223,6 +223,18 @@ case "${host_os}" in
;; ;;
esac esac
# Check if the compiler supports -fvisibility=hidden. If so, use it, but not
# on MinGW32 where we use a separate mechanism (__declspec).
_LT_COMPILER_OPTION([if $compiler supports -fvisibility=hidden],
ac_cv_prog_compiler_visibility,
[-fvisibility=hidden],
[],
[have_dso_visibility=yes])
if test "x$have_dso_visibility" = "xyes" -a "x$on_mingw32" = "xno"; then
LIBZMQ_EXTRA_CFLAGS="-fvisibility=hidden $LIBZMQ_EXTRA_CFLAGS"
LIBZMQ_EXTRA_CXXFLAGS="-fvisibility=hidden $LIBZMQ_EXTRA_CXXFLAGS"
fi
# CPU-specific optimizations # CPU-specific optimizations
case "${host_cpu}" in case "${host_cpu}" in
*sparc*) *sparc*)
......
...@@ -39,6 +39,9 @@ extern "C" { ...@@ -39,6 +39,9 @@ extern "C" {
# endif # endif
#else #else
# define ZMQ_EXPORT # define ZMQ_EXPORT
# if defined __GNUC__ && __GNUC__ >= 4
# pragma GCC visibility push(default)
# endif
#endif #endif
/******************************************************************************/ /******************************************************************************/
...@@ -242,6 +245,11 @@ ZMQ_EXPORT int zmq_poll (zmq_pollitem_t *items, int nitems, long timeout); ...@@ -242,6 +245,11 @@ ZMQ_EXPORT int zmq_poll (zmq_pollitem_t *items, int nitems, long timeout);
ZMQ_EXPORT int zmq_device (int device, void * insocket, void* outsocket); ZMQ_EXPORT int zmq_device (int device, void * insocket, void* outsocket);
#undef ZMQ_EXPORT
#if defined __GNUC__ && __GNUC__ >= 4 && !defined _WIN32
# pragma GCC visibility pop
#endif
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
......
...@@ -33,6 +33,9 @@ extern "C" { ...@@ -33,6 +33,9 @@ extern "C" {
# endif # endif
#else #else
# define ZMQ_EXPORT # define ZMQ_EXPORT
# if defined __GNUC__ && __GNUC__ >= 4
# pragma GCC visibility push(default)
# endif
#endif #endif
/* Helper functions are used by perf tests so that they don't have to care */ /* Helper functions are used by perf tests so that they don't have to care */
...@@ -49,6 +52,9 @@ ZMQ_EXPORT unsigned long zmq_stopwatch_stop (void *watch_); ...@@ -49,6 +52,9 @@ ZMQ_EXPORT unsigned long zmq_stopwatch_stop (void *watch_);
ZMQ_EXPORT void zmq_sleep (int seconds_); ZMQ_EXPORT void zmq_sleep (int seconds_);
#undef ZMQ_EXPORT #undef ZMQ_EXPORT
#if defined __GNUC__ && __GNUC__ >= 4 && !defined _WIN32
# pragma GCC visibility pop
#endif
#ifdef __cplusplus #ifdef __cplusplus
} }
......
...@@ -203,7 +203,6 @@ libpgm_diff_flags = \ ...@@ -203,7 +203,6 @@ libpgm_diff_flags = \
-DCONFIG_HAVE_ISO_VARARGS \ -DCONFIG_HAVE_ISO_VARARGS \
-DCONFIG_HAVE_TSC \ -DCONFIG_HAVE_TSC \
-DCONFIG_HAVE_WSACMSGHDR \ -DCONFIG_HAVE_WSACMSGHDR \
-DCONFIG_HAVE_DSO_VISIBILITY \
-DCONFIG_BIND_INADDR_ANY -DCONFIG_BIND_INADDR_ANY
else else
...@@ -225,7 +224,6 @@ libpgm_diff_flags = \ ...@@ -225,7 +224,6 @@ libpgm_diff_flags = \
-DCONFIG_HAVE_IP_MREQN \ -DCONFIG_HAVE_IP_MREQN \
-DCONFIG_HAVE_SPRINTF_GROUPING \ -DCONFIG_HAVE_SPRINTF_GROUPING \
-DCONFIG_HAVE_VASPRINTF \ -DCONFIG_HAVE_VASPRINTF \
-DCONFIG_HAVE_DSO_VISIBILITY \
-DCONFIG_BIND_INADDR_ANY \ -DCONFIG_BIND_INADDR_ANY \
-DCONFIG_HAVE_GETOPT -DCONFIG_HAVE_GETOPT
endif endif
...@@ -237,6 +235,7 @@ libpgm_la_CFLAGS = -I$(top_srcdir)/foreign/openpgm/@pgm_basename@/openpgm/pgm/in ...@@ -237,6 +235,7 @@ libpgm_la_CFLAGS = -I$(top_srcdir)/foreign/openpgm/@pgm_basename@/openpgm/pgm/in
-DCONFIG_16BIT_CHECKSUM \ -DCONFIG_16BIT_CHECKSUM \
-DCONFIG_GALOIS_MUL_LUT \ -DCONFIG_GALOIS_MUL_LUT \
-DGETTEXT_PACKAGE='"pgm"' \ -DGETTEXT_PACKAGE='"pgm"' \
-DPGM_GNUC_INTERNAL= \
${libpgm_diff_flags} ${libpgm_diff_flags}
libzmq_la_CXXFLAGS = -I$(top_srcdir)/foreign/openpgm/@pgm_basename@/openpgm/pgm/include/ \ libzmq_la_CXXFLAGS = -I$(top_srcdir)/foreign/openpgm/@pgm_basename@/openpgm/pgm/include/ \
......
...@@ -60,6 +60,10 @@ ...@@ -60,6 +60,10 @@
#include <pgm/pgm.h> #include <pgm/pgm.h>
#endif #endif
#if defined __GNUC__ && __GNUC__ >= 4 && !defined ZMQ_HAVE_WINDOWS
#pragma GCC visibility push(default)
#endif
void zmq_version (int *major_, int *minor_, int *patch_) void zmq_version (int *major_, int *minor_, int *patch_)
{ {
*major_ = ZMQ_VERSION_MAJOR; *major_ = ZMQ_VERSION_MAJOR;
...@@ -725,3 +729,7 @@ unsigned long zmq_stopwatch_stop (void *watch_) ...@@ -725,3 +729,7 @@ unsigned long zmq_stopwatch_stop (void *watch_)
return (unsigned long) (end - start); return (unsigned long) (end - start);
} }
#if defined __GNUC__ && __GNUC__ >= 4 && !defined ZMQ_HAVE_WINDOWS
#pragma GCC visibility pop
#endif
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment