summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source4/build/m4/check_cc.m416
-rw-r--r--source4/include/includes.h10
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 */