summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGwenole Beauchesne <gwenole.beauchesne@intel.com>2012-08-06 18:16:58 +0200
committerGwenole Beauchesne <gwenole.beauchesne@intel.com>2012-08-06 18:44:04 +0200
commit10cb6155670a2a7b51356ada16206564cff748e2 (patch)
treeca2687063e9552d5cd96a8e438026200d01e0b26
parent2469fe878e55eddc37a15878e24b767bd6d8a33d (diff)
configure: check for visibility attribute.
Add a check for GCC "visibility" attribute. Also define DLL_HIDDEN helper so that to declare functions as internal to a particular shared library. Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
-rw-r--r--configure.ac22
-rw-r--r--va/sysdeps.h8
2 files changed, 30 insertions, 0 deletions
diff --git a/configure.ac b/configure.ac
index 7f7f9af..72eac8e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -171,6 +171,28 @@ if test "$enable_docs" = "yes"; then
fi
AM_CONDITIONAL(ENABLE_DOCS, test "$enable_docs" = "yes")
+# Check for __attribute__((visibility()))
+AC_CACHE_CHECK([whether __attribute__((visibility())) is supported],
+ ac_cv_have_gnuc_visibility_attribute,
+ [cat > conftest.c <<EOF
+int foo __attribute__ ((visibility ("hidden"))) = 1;
+int bar __attribute__ ((visibility ("protected"))) = 1;
+EOF
+ ac_cv_have_gnuc_visibility_attribute="no"
+ if ${CC-cc} -Werror -S conftest.c -o conftest.s >/dev/null 2>&1; then
+ if grep '\.hidden.*foo' conftest.s >/dev/null; then
+ if grep '\.protected.*bar' conftest.s >/dev/null; then
+ ac_cv_have_gnuc_visibility_attribute="yes"
+ fi
+ fi
+ fi
+ rm -f conftest.[cs]
+])
+if test "$ac_cv_have_gnuc_visibility_attribute" = "yes"; then
+ AC_DEFINE([HAVE_GNUC_VISIBILITY_ATTRIBUTE], [1],
+ [Defined to 1 if GCC visibility attribute is supported])
+fi
+
# Check for X11
USE_X11="no"
if test "$enable_x11" = "yes"; then
diff --git a/va/sysdeps.h b/va/sysdeps.h
index 2ab37e9..77db28a 100644
--- a/va/sysdeps.h
+++ b/va/sysdeps.h
@@ -42,4 +42,12 @@
# define False 0
#endif
+#if defined __GNUC__ && defined HAVE_GNUC_VISIBILITY_ATTRIBUTE
+# define DLL_HIDDEN __attribute__((visibility("hidden")))
+# define DLL_EXPORT __attribute__((visibility("default")))
+#else
+# define DLL_HIDDEN
+# define DLL_EXPORT
+#endif
+
#endif /* SYSDEPS_H */