diff options
Diffstat (limited to 'configure.ac')
-rw-r--r-- | configure.ac | 106 |
1 files changed, 105 insertions, 1 deletions
diff --git a/configure.ac b/configure.ac index 7390bc1..64b2752 100644 --- a/configure.ac +++ b/configure.ac @@ -1,5 +1,5 @@ # configure.ac for libgpg-error -# Copyright (C) 2003, 2004, 2006, 2010, 2013 g10 Code GmbH +# Copyright (C) 2003, 2004, 2006, 2010, 2013, 2014 g10 Code GmbH # # This file is part of libgpg-error. # @@ -250,6 +250,110 @@ if test "$gcry_cv_gcc_attribute_aligned" = "yes" ; then [Defined if a GCC style "__attribute__ ((aligned (n))" is supported]) fi +# +# Check for ELF visibility support. +# +AC_CACHE_CHECK(whether the visibility attribute is supported, + gcry_cv_visibility_attribute, + [gcry_cv_visibility_attribute=no + AC_LANG_CONFTEST([AC_LANG_SOURCE( + [[int foo __attribute__ ((visibility ("hidden"))) = 1; + int bar __attribute__ ((visibility ("protected"))) = 1; + ]])]) + + if ${CC-cc} -Werror -S conftest.c -o conftest.s \ + 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ; then + if grep '\.hidden.*foo' conftest.s >/dev/null 2>&1 ; then + if grep '\.protected.*bar' conftest.s >/dev/null 2>&1; then + gcry_cv_visibility_attribute=yes + fi + fi + fi + ]) +if test "$gcry_cv_visibility_attribute" = "yes"; then + AC_CACHE_CHECK(for broken visibility attribute, + gcry_cv_broken_visibility_attribute, + [gcry_cv_broken_visibility_attribute=yes + AC_LANG_CONFTEST([AC_LANG_SOURCE( + [[int foo (int x); + int bar (int x) __asm__ ("foo") + __attribute__ ((visibility ("hidden"))); + int bar (int x) { return x; } + ]])]) + + if ${CC-cc} -Werror -S conftest.c -o conftest.s \ + 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ; then + if grep '\.hidden@<:@ _@:>@foo' conftest.s >/dev/null 2>&1; + then + gcry_cv_broken_visibility_attribute=no + fi + fi + ]) +fi +if test "$gcry_cv_visibility_attribute" = "yes"; then + AC_CACHE_CHECK(for broken alias attribute, + gcry_cv_broken_alias_attribute, + [gcry_cv_broken_alias_attribute=yes + AC_LANG_CONFTEST([AC_LANG_SOURCE( + [[extern int foo (int x) __asm ("xyzzy"); + int bar (int x) { return x; } + extern __typeof (bar) foo __attribute ((weak, alias ("bar"))); + extern int dfoo; + extern __typeof (dfoo) dfoo __asm ("abccb"); + int dfoo = 1; + ]])]) + + if ${CC-cc} -Werror -S conftest.c -o conftest.s \ + 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ; then + if grep 'xyzzy' conftest.s >/dev/null 2>&1 && \ + grep 'abccb' conftest.s >/dev/null 2>&1; then + gcry_cv_broken_alias_attribute=no + fi + fi + ]) +fi +if test "$gcry_cv_visibility_attribute" = "yes"; then + AC_CACHE_CHECK(if gcc supports -fvisibility=hidden, + gcry_cv_gcc_has_f_visibility, + [gcry_cv_gcc_has_f_visibility=no + _gcc_cflags_save=$CFLAGS + CFLAGS="-fvisibility=hidden" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])], + gcry_cv_gcc_has_f_visibility=yes) + CFLAGS=$_gcc_cflags_save; + ]) +fi +if test "$gcry_cv_visibility_attribute" = "yes" \ + && test "$gcry_cv_broken_visibility_attribute" != "yes" \ + && test "$gcry_cv_broken_alias_attribute" != "yes" \ + && test "$gcry_cv_gcc_has_f_visibility" = "yes" + then + AC_DEFINE(GPGRT_USE_VISIBILITY, 1, + [Define to use the GNU C visibility attribute.]) + CFLAGS="$CFLAGS -fvisibility=hidden" +fi + +# +# Check whether ld supports a version script. +# (Actually not a check but a list of systems which are known to support it.) +# +have_ld_version_script=no +case "${host}" in + *-*-linux*) + have_ld_version_script=yes + ;; + *-*-gnu*) + have_ld_version_script=yes + ;; +esac +AC_ARG_ENABLE([ld-version-script], + AC_HELP_STRING([--enable-ld-version-script], + [enable/disable use of linker version script. + (default is system dependent)]), + [have_ld_version_script=$enableval], + [ : ] ) +AM_CONDITIONAL(HAVE_LD_VERSION_SCRIPT, test "$have_ld_version_script" = "yes") + # # Check for thread library. |