Enable --enable-hidden-symbols for SunPro C

This commit is contained in:
Dan Fandrich 2006-07-11 21:35:35 +00:00
parent fe22872d14
commit 10489879f7
2 changed files with 22 additions and 8 deletions

View File

@ -1962,29 +1962,42 @@ AC_HELP_STRING([--disable-cookies],[Disable cookies support]),
dnl ************************************************************ dnl ************************************************************
dnl Enable hiding of internal symbols in library to reduce its size and dnl Enable hiding of internal symbols in library to reduce its size and
dnl speed dynamic linking of applications. This currently is only supported dnl speed dynamic linking of applications. This currently is only supported
dnl on gcc >= 4.0 dnl on gcc >= 4.0 and SunPro C.
dnl dnl
AC_MSG_CHECKING([whether to enable hidden symbols in the library]) AC_MSG_CHECKING([whether to enable hidden symbols in the library])
AC_ARG_ENABLE(hidden-symbols, AC_ARG_ENABLE(hidden-symbols,
AC_HELP_STRING([--enable-hidden-symbols],[Hide internal symbols in library (gcc>=4)]) AC_HELP_STRING([--enable-hidden-symbols],[Hide internal symbols in library])
AC_HELP_STRING([--disable-hidden-symbols],[Leave all symbols with default visibility in library]), AC_HELP_STRING([--disable-hidden-symbols],[Leave all symbols with default visibility in library]),
[ case "$enableval" in [ case "$enableval" in
no) no)
AC_MSG_RESULT(no) AC_MSG_RESULT(no)
;; ;;
*) *)
AC_MSG_CHECKING([whether $CC supports it])
if test "$GCC" = yes ; then if test "$GCC" = yes ; then
AC_MSG_CHECKING([whether $CC supports it])
if $CC --help --verbose 2>&1 | grep fvisibility= > /dev/null ; then if $CC --help --verbose 2>&1 | grep fvisibility= > /dev/null ; then
AC_MSG_RESULT(yes) AC_MSG_RESULT(yes)
AC_DEFINE(CURL_HIDDEN_SYMBOLS, 1, [to enable hidden symbols]) AC_DEFINE(CURL_HIDDEN_SYMBOLS, 1, [to enable hidden symbols])
AC_SUBST(CURL_HIDDEN_SYMBOLS) AC_SUBST(CURL_HIDDEN_SYMBOLS)
AC_DEFINE(CURL_EXTERN_SYMBOL, [__attribute__ ((visibility ("default")))], [to make a symbol visible])
AC_SUBST(CURL_EXTERN_SYMBOL)
CFLAGS="$CFLAGS -fvisibility=hidden" CFLAGS="$CFLAGS -fvisibility=hidden"
else else
AC_MSG_RESULT(no) AC_MSG_RESULT(no)
fi fi
else else
AC_MSG_RESULT([no (not gcc)]) dnl Test for SunPro cc
if $CC 2>&1 | grep flags >/dev/null && $CC -flags | grep xldscope= >/dev/null ; then
AC_MSG_RESULT(yes)
AC_DEFINE(CURL_HIDDEN_SYMBOLS, 1, [to enable hidden symbols])
AC_SUBST(CURL_HIDDEN_SYMBOLS)
AC_DEFINE(CURL_EXTERN_SYMBOL, [__global], [to make a symbol visible])
AC_SUBST(CURL_EXTERN_SYMBOL)
CFLAGS="$CFLAGS -xldscope=hidden"
else
AC_MSG_RESULT(no)
fi
fi fi
;; ;;
esac ], esac ],

View File

@ -61,11 +61,12 @@ extern "C" {
#ifdef CURL_HIDDEN_SYMBOLS #ifdef CURL_HIDDEN_SYMBOLS
/* /*
* On gcc >= 4 if -fvisibility=hidden is given then this is used to cause * This definition is used to make external definitions visibile in the
* external definitions to be put into the shared library. It makes no * shared library when symbols are hidden by default. It makes no
* difference to applications whether this is set or not, only the library. * difference when compiling applications whether this is set or not,
* only when compiling the library.
*/ */
#define CURL_EXTERN __attribute__ ((visibility ("default"))) #define CURL_EXTERN CURL_EXTERN_SYMBOL
#else #else
#define CURL_EXTERN #define CURL_EXTERN
#endif #endif