From 8ef42b1fab5e7608a8f90f303ec4c1d3524627d9 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Sun, 5 Mar 2006 18:28:33 +0000 Subject: r13847: Fix some portability issues with the visibility attribute. (This used to be commit fe5eae0e983d1c8634dd9b7caf19cd103c641223) --- source4/build/m4/check_cc.m4 | 16 +++++++++------- source4/include/includes.h | 10 ++++++---- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/source4/build/m4/check_cc.m4 b/source4/build/m4/check_cc.m4 index a2d2bae79b..219dc6ad37 100644 --- a/source4/build/m4/check_cc.m4 +++ b/source4/build/m4/check_cc.m4 @@ -124,14 +124,16 @@ if test x"$GCC" = x"yes" ; then fi if test -n "$VISIBILITY_CFLAGS"; then OLD_CFLAGS="${CFLAGS}" - CFLAGS="${CFLAGS} ${VISIBILITY_CFLAGS} -D_PUBLIC_=__attribute__((visibility(\"default\")))" - VISIBILITY_CFLAGS="${VISIBILITY_CFLAGS} -D_PUBLIC_=\"__attribute__((visibility(\\\"default\\\")))\"" - AC_MSG_CHECKING([that the C compiler can use the VISIBILITY_CFLAGS]) + CFLAGS="${CFLAGS} ${VISIBILITY_CFLAGS}" + AC_MSG_CHECKING([whether the C compiler supports the visibility attribute]) AC_TRY_RUN([ - _PUBLIC_ void vis_foo1(void) {} - __attribute__((visibility("default"))) void vis_foo2(void) {} - #include "${srcdir-.}/build/tests/trivial.c" - ], AC_MSG_RESULT(yes), [AC_MSG_RESULT(no);VISIBILITY_CFLAGS=""]) +#pragma GCC visibility push(hidden) +void vis_foo1(void) {} +__attribute__((visibility("default"))) void vis_foo2(void) {} +#include "${srcdir-.}/build/tests/trivial.c" +], [AC_MSG_RESULT(yes); +AC_DEFINE(HAVE_VISIBILITY_ATTR,1,[Whether the C compiler supports the visibility attribute])], +[AC_MSG_RESULT(no);VISIBILITY_CFLAGS=""]) CFLAGS="${OLD_CFLAGS}" fi diff --git a/source4/include/includes.h b/source4/include/includes.h index 83bc9569cb..32dda4a302 100644 --- a/source4/include/includes.h +++ b/source4/include/includes.h @@ -36,6 +36,12 @@ /** Feel free to add definitions for other compilers here. */ #endif +#ifdef HAVE_VISIBILITY_ATTR +# define _PUBLIC_ __attribute__((visibility("default"))) +#else +# define _PUBLIC_ +#endif + #ifndef PRINTF_ATTRIBUTE #if !defined(NO_PRINTF_ATTRIBUTE) && (__GNUC__ >= 3) /** Use gcc attribute to check printf fns. a1 is the 1-based index of @@ -158,8 +164,4 @@ extern int DEBUGLEVEL; #define discard_const(ptr) ((void *)((intptr_t)(ptr))) #define discard_const_p(type, ptr) ((type *)discard_const(ptr)) -#ifndef _PUBLIC_ -#define _PUBLIC_ -#endif - #endif /* _INCLUDES_H */ -- cgit