summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSjoerd Simons <sjoerd@luon.net>2008-06-22 17:31:08 +0200
committerLennart Poettering <lennart@poettering.net>2008-06-24 00:17:34 +0200
commitd3c75ce883bf5b09321c44bb32522fe089ca1e52 (patch)
treec137c863225324925d79e8e36143991b603e062c
parent7fd720fcb51b7d1e7dd8dc8915f47ffc3f11edad (diff)
Hide everything except for the avahi_qt_poll_get symbol if possible in the qt bindings
-rw-r--r--avahi-qt/Makefile.am8
-rw-r--r--avahi-qt/qt-watch.h6
-rw-r--r--common/gcc_visibility.m436
-rw-r--r--configure.ac3
4 files changed, 47 insertions, 6 deletions
diff --git a/avahi-qt/Makefile.am b/avahi-qt/Makefile.am
index 4cd047b..de13595 100644
--- a/avahi-qt/Makefile.am
+++ b/avahi-qt/Makefile.am
@@ -40,10 +40,9 @@ libavahi_qt3_la_SOURCES = \
qt-watch.moc3: qt-watch.cpp
$(MOC_QT3) $^ > $@
-libavahi_qt3_la_CPPFLAGS = $(AM_CFLAGS) $(QT3_CFLAGS)
+libavahi_qt3_la_CPPFLAGS = $(AM_CFLAGS) $(QT3_CFLAGS) $(VISIBILITY_HIDDEN_CFLAGS)
libavahi_qt3_la_LIBADD = $(AM_LDADD) ../avahi-common/libavahi-common.la $(QT3_LIBS)
libavahi_qt3_la_LDFLAGS = $(AM_LDFLAGS) -export-dynamic -version-info $(LIBAVAHI_QT3_VERSION_INFO)
-
endif
if HAVE_QT4
@@ -63,10 +62,9 @@ libavahi_qt4_la_SOURCES = \
qt-watch.moc4: qt-watch.cpp
$(MOC_QT4) $^ > $@
-libavahi_qt4_la_CPPFLAGS = $(AM_CFLAGS) $(QT4_CFLAGS) -DQT4
+libavahi_qt4_la_CPPFLAGS = $(AM_CFLAGS) $(QT4_CFLAGS) -DQT4 $(VISIBILITY_HIDDEN_CFLAGS)
libavahi_qt4_la_LIBADD = $(AM_LDADD) ../avahi-common/libavahi-common.la $(QT4_LIBS)
-libavahi_qt4_la_LDFLAGS = $(AM_LDFLAGS) -export-dynamic -version-info $(LIBAVAHI_QT4_VERSION_INFO)
-
+libavahi_qt4_la_LDFLAGS = $(AM_LDFLAGS) -version-info $(LIBAVAHI_QT4_VERSION_INFO)
endif
CLEANFILES = $(BUILT_SOURCES)
diff --git a/avahi-qt/qt-watch.h b/avahi-qt/qt-watch.h
index 0a3476d..a702a76 100644
--- a/avahi-qt/qt-watch.h
+++ b/avahi-qt/qt-watch.h
@@ -29,7 +29,11 @@
AVAHI_C_DECL_BEGIN
/** Setup abstract poll structure for integration with Qt main loop */
-const AvahiPoll* avahi_qt_poll_get(void);
+const AvahiPoll* avahi_qt_poll_get(void)
+#ifdef HAVE_VISIBILITY_HIDDEN
+__attribute__ ((visibility("default")))
+#endif
+;
AVAHI_C_DECL_END
diff --git a/common/gcc_visibility.m4 b/common/gcc_visibility.m4
new file mode 100644
index 0000000..6b5a89d
--- /dev/null
+++ b/common/gcc_visibility.m4
@@ -0,0 +1,36 @@
+dnl @synopsis CHECK_VISIBILITY([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
+dnl
+dnl @summary check for the gcc -fvisibility flag
+dnl
+
+AC_DEFUN([CHECK_VISIBILITY_HIDDEN], [
+ save_CFLAGS="$CFLAGS"
+ VISIBILITY_HIDDEN_CFLAGS=""
+ OPTION=-fvisibility=hidden
+
+ AC_MSG_CHECKING(for gcc $OPTION support)
+
+ CFLAGS="$CFLAGS $OPTION"
+
+ AC_TRY_COMPILE([
+ int default_vis __attribute__ ((visibility("default")));
+ int hidden_vis __attribute__ ((visibility("hidden")));
+ ],
+ [],
+ ac_visibility_supported=yes,
+ ac_visibility_supported=no)
+ AC_MSG_RESULT($ac_visibility_supported)
+
+ if test x"$ac_visibility_supported" = xyes; then
+ ifelse([$1],,AC_DEFINE(HAVE_GCC_VISIBILITY,1,[Define if you have gcc -fvisibility=hidden support ]),[$1])
+ VISIBILITY_HIDDEN_CFLAGS="$OPTION -DHAVE_VISIBILITY_HIDDEN"
+ AC_DEFINE(HAVE_VISIBILITY_HIDDEN,[],[Support for visibility hidden])
+ else
+ $2
+ :
+ fi
+
+ AC_SUBST(VISIBILITY_HIDDEN_CFLAGS)
+
+ CFLAGS="$save_CFLAGS"
+])
diff --git a/configure.ac b/configure.ac
index 5590fdd..a4e4a0a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -366,6 +366,9 @@ AC_TYPE_PID_T
AC_CHECK_DECLS(environ)
+# check if gcc's -fvisibility is supported
+CHECK_VISIBILITY_HIDDEN
+
enable_chroot=yes
AC_CHECK_HEADERS([sys/capability.h],,enable_chroot=no)
AC_CHECK_HEADERS([sys/prctl.h],,enable_chroot=no)