From: Ian Lynagh Date: Tue, 23 Nov 2010 17:05:41 +0000 (+0000) Subject: Add a configure test for the visibility hidden attribute X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=commitdiff_plain;h=b6fff39114fee90b806ed2e29cc8f5d9728d85a8 Add a configure test for the visibility hidden attribute --- diff --git a/aclocal.m4 b/aclocal.m4 index c50d348..288fd83 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -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 diff --git a/configure.ac b/configure.ac index b09c5a7..5e88777 100644 --- a/configure.ac +++ b/configure.ac @@ -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) diff --git a/includes/Rts.h b/includes/Rts.h index 394eb97..51351fa 100644 --- a/includes/Rts.h +++ b/includes/Rts.h @@ -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 */ diff --git a/rts/BeginPrivate.h b/rts/BeginPrivate.h index 6a7ca5f..6471b92 100644 --- a/rts/BeginPrivate.h +++ b/rts/BeginPrivate.h @@ -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 diff --git a/rts/EndPrivate.h b/rts/EndPrivate.h index f0080be..4cfb68f 100644 --- a/rts/EndPrivate.h +++ b/rts/EndPrivate.h @@ -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