Add a configure test for the visibility hidden attribute
authorIan Lynagh <igloo@earth.li>
Tue, 23 Nov 2010 17:05:41 +0000 (17:05 +0000)
committerIan Lynagh <igloo@earth.li>
Tue, 23 Nov 2010 17:05:41 +0000 (17:05 +0000)
aclocal.m4
configure.ac
includes/Rts.h
rts/BeginPrivate.h
rts/EndPrivate.h

index c50d348..288fd83 100644 (file)
@@ -35,6 +35,24 @@ AC_DEFUN([FPTOOLS_SET_C_LD_FLAGS],
 ])
 
 
+# FP_VISIBILITY_HIDDEN
+# ----------------------------------
+# Is the visibility hidden attribute supported?
+AC_DEFUN([FP_VISIBILITY_HIDDEN],
+[
+    AC_MSG_CHECKING([whether __attribute__((visibility("hidden"))) is supported])
+    echo '__attribute__((visibility("hidden"))) void foo(void) {}' > conftest.c
+    if $CC -Wall -Werror -c conftest.c > /dev/null 2>&1
+    then
+        AC_MSG_RESULT([yes])
+        AC_DEFINE(HAS_VISIBILITY_HIDDEN, 1, [Has visibility hidden])
+    else
+        AC_MSG_RESULT([no])
+    fi
+    rm -f conftest.c conftest.o
+])
+
+
 # FPTOOLS_FLOAT_WORD_ORDER_BIGENDIAN
 # ----------------------------------
 # Little endian Arm on Linux with some ABIs has big endian word order
index b09c5a7..5e88777 100644 (file)
@@ -835,6 +835,8 @@ AC_COMPILE_IFELSE(
     [AC_MSG_RESULT(no)])
 CFLAGS="$CFLAGS2"
 
+FP_VISIBILITY_HIDDEN
+
 dnl ** check for librt
 AC_CHECK_LIB(rt, clock_gettime)
 AC_CHECK_FUNCS(clock_gettime timer_create timer_settime)
index 394eb97..51351fa 100644 (file)
@@ -51,7 +51,7 @@ extern "C" {
 // Symbols that are extern, but private to the RTS, are declared
 // with visibility "hidden" to hide them outside the RTS shared
 // library.
-#if !defined(mingw32_HOST_OS)
+#if defined(HAS_VISIBILITY_HIDDEN)
 #define RTS_PRIVATE  GNUC3_ATTRIBUTE(visibility("hidden"))
 #else
 #define RTS_PRIVATE  /* disabled: RTS_PRIVATE */
index 6a7ca5f..6471b92 100644 (file)
@@ -5,6 +5,6 @@
 /* On Windows, with gcc 4.5.0-1, using visibility hidden gives:
        error: visibility attribute not supported in this configuration; ignored
    */
-#if __GNUC__ >= 4 && !defined(freebsd_HOST_OS) && !defined(mingw32_HOST_OS)
+#if defined(HAS_VISIBILITY_HIDDEN) && !defined(freebsd_HOST_OS)
 #pragma GCC visibility push(hidden)
 #endif
index f0080be..4cfb68f 100644 (file)
@@ -1,3 +1,3 @@
-#if __GNUC__ >= 4 && !defined(freebsd_HOST_OS) && !defined(mingw32_HOST_OS)
+#if defined(HAS_VISIBILITY_HIDDEN) && !defined(freebsd_HOST_OS)
 #pragma GCC visibility pop
 #endif