diff --git a/ares/ares.h b/ares/ares.h index 593a14563..63eb6810e 100644 --- a/ares/ares.h +++ b/ares/ares.h @@ -79,11 +79,11 @@ extern "C" { # endif #else /* visibility function decoration for other cases */ -# if !defined(CARES_HIDDEN_SYMBOLS) || \ +# if !defined(CARES_SYMBOL_HIDING) || \ defined(WIN32) || defined(_WIN32) || defined(__SYMBIAN32__) # define CARES_EXTERN # else -# define CARES_EXTERN CARES_EXTERN_SYMBOL +# define CARES_EXTERN CARES_SYMBOL_SCOPE_EXTERN # endif #endif diff --git a/ares/configure.ac b/ares/configure.ac index 722da4c8c..8f1cddb5b 100644 --- a/ares/configure.ac +++ b/ares/configure.ac @@ -14,7 +14,7 @@ CARES_CHECK_OPTION_DEBUG CARES_CHECK_OPTION_OPTIMIZE CARES_CHECK_OPTION_WARNINGS CARES_CHECK_OPTION_CURLDEBUG -CARES_CHECK_OPTION_HIDDEN_SYMBOLS +CARES_CHECK_OPTION_SYMBOL_HIDING CARES_CHECK_PATH_SEPARATOR_REQUIRED @@ -164,7 +164,7 @@ esac CARES_CHECK_COMPILER_HALT_ON_ERROR CARES_CHECK_COMPILER_ARRAY_SIZE_NEGATIVE -CARES_CHECK_COMPILER_HIDDEN_SYMBOLS +CARES_CHECK_COMPILER_SYMBOL_HIDING CARES_CHECK_NO_UNDEFINED AM_CONDITIONAL(NO_UNDEFINED, test x$need_no_undefined = xyes) @@ -897,7 +897,7 @@ fi CARES_CHECK_OPTION_NONBLOCKING CARES_CHECK_NONBLOCKING_SOCKET -CARES_CONFIGURE_HIDDEN_SYMBOLS +CARES_CONFIGURE_SYMBOL_HIDING CARES_PRIVATE_LIBS="$LIBS" AC_SUBST(CARES_PRIVATE_LIBS) diff --git a/ares/m4/cares-compilers.m4 b/ares/m4/cares-compilers.m4 index a8f1cd58a..68f47efd8 100644 --- a/ares/m4/cares-compilers.m4 +++ b/ares/m4/cares-compilers.m4 @@ -16,7 +16,7 @@ #*************************************************************************** # File version for 'aclocal' use. Keep it a single number. -# serial 60 +# serial 61 dnl CARES_CHECK_COMPILER @@ -1249,98 +1249,6 @@ AC_DEFUN([CARES_CHECK_COMPILER_ARRAY_SIZE_NEGATIVE], [ ]) -dnl CARES_CHECK_COMPILER_HIDDEN_SYMBOLS -dnl ------------------------------------------------- -dnl Verify if compiler supports hiding library internal symbols, setting -dnl shell variable hidden_symbols_supported value as appropriate, as well as -dnl variables hidden_symbols_CFLAGS and hidden_symbols_extern when supported. - -AC_DEFUN([CARES_CHECK_COMPILER_HIDDEN_SYMBOLS], [ - AC_REQUIRE([CARES_CHECK_COMPILER])dnl - AC_BEFORE([$0],[CARES_CONFIGURE_HIDDEN_SYMBOLS])dnl - AC_MSG_CHECKING([if compiler supports hiding library internal symbols]) - hidden_symbols_supported="no" - hidden_symbols_CFLAGS="" - hidden_symbols_extern="" - tmp_CFLAGS="" - tmp_extern="" - case "$compiler_id" in - GNU_C) - dnl Only gcc 3.4 or later - if test "$compiler_num" -ge "304"; then - if $CC --help --verbose 2>&1 | grep fvisibility= > /dev/null ; then - tmp_extern="__attribute__ ((visibility (\"default\")))" - tmp_CFLAGS="-fvisibility=hidden" - hidden_symbols_supported="yes" - echo " " >&6 - echo "debug: should work with this compiler and version" >&6 - echo " " >&6 - fi - fi - ;; - INTEL_UNIX_C) - dnl Only icc 9.0 or later - if test "$compiler_num" -ge "900"; then - if $CC --help --verbose 2>&1 | grep fvisibility= > /dev/null ; then - tmp_extern="__attribute__ ((visibility (\"default\")))" - tmp_CFLAGS="-fvisibility=hidden" - hidden_symbols_supported="yes" - echo " " >&6 - echo "debug: should work with this compiler and version" >&6 - echo " " >&6 - fi - fi - ;; - SUNPRO_C) - if $CC 2>&1 | grep flags >/dev/null && $CC -flags | grep xldscope= >/dev/null ; then - tmp_extern="__global" - tmp_CFLAGS="-xldscope=hidden" - hidden_symbols_supported="yes" - echo " " >&6 - echo "debug: should work with this compiler and version" >&6 - echo " " >&6 - fi - ;; - esac - if test "$hidden_symbols_supported" = "yes"; then - tmp_save_CFLAGS="$CFLAGS" - CFLAGS="$tmp_save_CFLAGS $tmp_CFLAGS" - squeeze CFLAGS - AC_COMPILE_IFELSE([ - AC_LANG_PROGRAM([[ - $tmp_extern char *dummy(char *buff); - char *dummy(char *buff) - { - if(buff) - return ++buff; - else - return buff; - } - ]],[[ - char b[16]; - char *r = dummy(&b); - if(r) - return (int)*r; - ]]) - ],[ - hidden_symbols_supported="yes" - ],[ - hidden_symbols_supported="no" - sed 's/^/cc-src: /' conftest.$ac_ext >&6 - sed 's/^/cc-err: /' conftest.err >&6 - ]) - CFLAGS="$tmp_save_CFLAGS" - fi - if test "$hidden_symbols_supported" = "yes"; then - AC_MSG_RESULT([yes]) - hidden_symbols_CFLAGS="$tmp_CFLAGS" - hidden_symbols_extern="$tmp_extern" - else - AC_MSG_RESULT([no]) - fi -]) - - dnl CARES_CHECK_COMPILER_STRUCT_MEMBER_SIZE dnl ------------------------------------------------- dnl Verifies if the compiler is capable of handling the @@ -1403,6 +1311,91 @@ AC_DEFUN([CARES_CHECK_COMPILER_STRUCT_MEMBER_SIZE], [ ]) +dnl CARES_CHECK_COMPILER_SYMBOL_HIDING +dnl ------------------------------------------------- +dnl Verify if compiler supports hiding library internal symbols, setting +dnl shell variable supports_symbol_hiding value as appropriate, as well as +dnl variables symbol_hiding_CFLAGS and symbol_hiding_EXTERN when supported. + +AC_DEFUN([CARES_CHECK_COMPILER_SYMBOL_HIDING], [ + AC_REQUIRE([CARES_CHECK_COMPILER])dnl + AC_BEFORE([$0],[CARES_CONFIGURE_SYMBOL_HIDING])dnl + AC_MSG_CHECKING([if compiler supports hiding library internal symbols]) + supports_symbol_hiding="no" + symbol_hiding_CFLAGS="" + symbol_hiding_EXTERN="" + tmp_CFLAGS="" + tmp_EXTERN="" + case "$compiler_id" in + GNU_C) + dnl Only gcc 3.4 or later + if test "$compiler_num" -ge "304"; then + if $CC --help --verbose 2>&1 | grep fvisibility= > /dev/null ; then + tmp_EXTERN="__attribute__ ((visibility (\"default\")))" + tmp_CFLAGS="-fvisibility=hidden" + supports_symbol_hiding="yes" + fi + fi + ;; + INTEL_UNIX_C) + dnl Only icc 9.0 or later + if test "$compiler_num" -ge "900"; then + if $CC --help --verbose 2>&1 | grep fvisibility= > /dev/null ; then + tmp_EXTERN="__attribute__ ((visibility (\"default\")))" + tmp_CFLAGS="-fvisibility=hidden" + supports_symbol_hiding="yes" + fi + fi + ;; + SUNPRO_C) + if $CC 2>&1 | grep flags >/dev/null && $CC -flags | grep xldscope= >/dev/null ; then + tmp_EXTERN="__global" + tmp_CFLAGS="-xldscope=hidden" + supports_symbol_hiding="yes" + fi + ;; + esac + if test "$supports_symbol_hiding" = "yes"; then + tmp_save_CFLAGS="$CFLAGS" + CFLAGS="$tmp_save_CFLAGS $tmp_CFLAGS" + squeeze CFLAGS + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + $tmp_EXTERN char *dummy(char *buff); + char *dummy(char *buff) + { + if(buff) + return ++buff; + else + return buff; + } + ]],[[ + char b[16]; + char *r = dummy(&b); + if(r) + return (int)*r; + ]]) + ],[ + supports_symbol_hiding="yes" + ],[ + supports_symbol_hiding="no" + echo " " >&6 + sed 's/^/cc-src: /' conftest.$ac_ext >&6 + sed 's/^/cc-err: /' conftest.err >&6 + echo " " >&6 + ]) + CFLAGS="$tmp_save_CFLAGS" + fi + if test "$supports_symbol_hiding" = "yes"; then + AC_MSG_RESULT([yes]) + symbol_hiding_CFLAGS="$tmp_CFLAGS" + symbol_hiding_EXTERN="$tmp_EXTERN" + else + AC_MSG_RESULT([no]) + fi +]) + + dnl CARES_VAR_MATCH (VARNAME, VALUE) dnl ------------------------------------------------- dnl Verifies if shell variable VARNAME contains VALUE. diff --git a/ares/m4/cares-confopts.m4 b/ares/m4/cares-confopts.m4 index 241bb498e..438f9cdc7 100644 --- a/ares/m4/cares-confopts.m4 +++ b/ares/m4/cares-confopts.m4 @@ -16,7 +16,7 @@ #*************************************************************************** # File version for 'aclocal' use. Keep it a single number. -# serial 7 +# serial 8 dnl CARES_CHECK_OPTION_CURLDEBUG @@ -92,46 +92,6 @@ AC_HELP_STRING([--disable-debug],[Disable debug build options]), ]) -dnl CARES_CHECK_OPTION_HIDDEN_SYMBOLS -dnl ------------------------------------------------- -dnl Verify if configure has been invoked with option -dnl --enable-hidden-symbols or --disable-hidden-symbols, -dnl setting shell variable want_hidden_symbols value. - -AC_DEFUN([CARES_CHECK_OPTION_HIDDEN_SYMBOLS], [ - AC_BEFORE([$0],[CARES_CHECK_COMPILER_HIDDEN_SYMBOLS])dnl - AC_MSG_CHECKING([whether to enable hiding symbols]) - OPT_HIDDEN_SYMBOLS="default" - AC_ARG_ENABLE(hidden-symbols, -AC_HELP_STRING([--enable-hidden-symbols],[Enable hiding of library internal symbols]) -AC_HELP_STRING([--disable-hidden-symbols],[Disable hiding of library internal symbols]), - OPT_HIDDEN_SYMBOLS=$enableval) - case "$OPT_HIDDEN_SYMBOLS" in - no) - dnl --disable-hidden-symbols option used. - dnl This is an indication to not attempt hiding of library internal - dnl symbols. Default symbol visibility will be used, which normally - dnl exposes all library internal symbols. - want_hidden_symbols="no" - AC_MSG_RESULT([no]) - ;; - default) - dnl configure's hidden-symbols option not specified. - dnl Handle this as if --enable-hidden-symbols option was given. - want_hidden_symbols="yes" - AC_MSG_RESULT([not specified (assuming yes)]) - ;; - *) - dnl --enable-hidden-symbols option used. - dnl This is an indication to attempt hiding of library internal - dnl symbols. This is only supported on some compilers/linkers. - want_hidden_symbols="yes" - AC_MSG_RESULT([yes]) - ;; - esac -]) - - dnl CARES_CHECK_OPTION_NONBLOCKING dnl ------------------------------------------------- dnl Verify if configure has been invoked with option @@ -220,6 +180,46 @@ AC_HELP_STRING([--disable-optimize],[Disable compiler optimizations]), ]) +dnl CARES_CHECK_OPTION_SYMBOL_HIDING +dnl ------------------------------------------------- +dnl Verify if configure has been invoked with option +dnl --enable-symbol-hiding or --disable-symbol-hiding, +dnl setting shell variable want_symbol_hiding value. + +AC_DEFUN([CARES_CHECK_OPTION_SYMBOL_HIDING], [ + AC_BEFORE([$0],[CARES_CHECK_COMPILER_SYMBOL_HIDING])dnl + AC_MSG_CHECKING([whether to enable hiding of library internal symbols]) + OPT_SYMBOL_HIDING="default" + AC_ARG_ENABLE(symbol-hiding, +AC_HELP_STRING([--enable-symbol-hiding],[Enable hiding of library internal symbols]) +AC_HELP_STRING([--disable-symbol-hiding],[Disable hiding of library internal symbols]), + OPT_SYMBOL_HIDING=$enableval) + case "$OPT_SYMBOL_HIDING" in + no) + dnl --disable-symbol-hiding option used. + dnl This is an indication to not attempt hiding of library internal + dnl symbols. Default symbol visibility will be used, which normally + dnl exposes all library internal symbols. + want_symbol_hiding="no" + AC_MSG_RESULT([no]) + ;; + default) + dnl configure's symbol-hiding option not specified. + dnl Handle this as if --enable-symbol-hiding option was given. + want_symbol_hiding="yes" + AC_MSG_RESULT([yes]) + ;; + *) + dnl --enable-symbol-hiding option used. + dnl This is an indication to attempt hiding of library internal + dnl symbols. This is only supported on some compilers/linkers. + want_symbol_hiding="yes" + AC_MSG_RESULT([yes]) + ;; + esac +]) + + dnl CARES_CHECK_OPTION_WARNINGS dnl ------------------------------------------------- dnl Verify if configure has been invoked with option @@ -293,24 +293,24 @@ AC_DEFUN([CARES_CHECK_NONBLOCKING_SOCKET], [ ]) -dnl CARES_CONFIGURE_HIDDEN_SYMBOLS +dnl CARES_CONFIGURE_SYMBOL_HIDING dnl ------------------------------------------------- -dnl Depending on --enable-hidden-symbols or --disable-hidden-symbols +dnl Depending on --enable-symbol-hiding or --disable-symbol-hiding dnl configure option, and compiler capability to actually honor such -dnl option, compiler flags will be modified as appropriate. +dnl option, this will modify compiler flags as appropriate and also +dnl provide needed definitions for configuration file. dnl This macro should not be used until all compilation tests have dnl been done to prevent interferences on other tests. -AC_DEFUN([CARES_CONFIGURE_HIDDEN_SYMBOLS], [ - AC_MSG_CHECKING([whether to actually hide library internal symbols]) +AC_DEFUN([CARES_CONFIGURE_SYMBOL_HIDING], [ + AC_MSG_CHECKING([whether hiding of library internal symbols will actually happen]) if test x"$ac_cv_native_windows" != "xyes" && - test "$want_hidden_symbols" = "yes" && - test "$hidden_symbols_supported" = "yes"; then - tmp_save_CFLAGS="$CFLAGS" - CFLAGS="$tmp_save_CFLAGS $hidden_symbols_CFLAGS" - AC_DEFINE_UNQUOTED(CARES_HIDDEN_SYMBOLS, 1, + test "$want_symbol_hiding" = "yes" && + test "$supports_symbol_hiding" = "yes"; then + CFLAGS="$CFLAGS $symbol_hiding_CFLAGS" + AC_DEFINE_UNQUOTED(CARES_SYMBOL_HIDING, 1, [Define to 1 to enable hiding of library internal symbols.]) - AC_DEFINE_UNQUOTED(CARES_EXTERN_SYMBOL, $hidden_symbols_extern, + AC_DEFINE_UNQUOTED(CARES_SYMBOL_SCOPE_EXTERN, $symbol_hiding_EXTERN, [Definition to make a library symbol externally visible.]) AC_MSG_RESULT([yes]) else