Blame m4/visibility.m4

Packit 0af36a
# visibility.m4 serial 3 (gettext-0.18)
Packit 0af36a
dnl Copyright (C) 2005, 2008-2010 Free Software Foundation, Inc.
Packit 0af36a
dnl This file is free software; the Free Software Foundation
Packit 0af36a
dnl gives unlimited permission to copy and/or distribute it,
Packit 0af36a
dnl with or without modifications, as long as this notice is preserved.
Packit 0af36a
Packit 0af36a
dnl From Bruno Haible.
Packit 0af36a
Packit 0af36a
dnl Tests whether the compiler supports the command-line option
Packit 0af36a
dnl -fvisibility=hidden and the function and variable attributes
Packit 0af36a
dnl __attribute__((__visibility__("hidden"))) and
Packit 0af36a
dnl __attribute__((__visibility__("default"))).
Packit 0af36a
dnl Does *not* test for __visibility__("protected") - which has tricky
Packit 0af36a
dnl semantics (see the 'vismain' test in glibc) and does not exist e.g. on
Packit 0af36a
dnl MacOS X.
Packit 0af36a
dnl Does *not* test for __visibility__("internal") - which has processor
Packit 0af36a
dnl dependent semantics.
Packit 0af36a
dnl Does *not* test for #pragma GCC visibility push(hidden) - which is
Packit 0af36a
dnl "really only recommended for legacy code".
Packit 0af36a
dnl Set the variable CFLAG_VISIBILITY.
Packit 0af36a
dnl Defines and sets the variable HAVE_VISIBILITY.
Packit 0af36a
Packit 0af36a
AC_DEFUN([gl_VISIBILITY],
Packit 0af36a
[
Packit 0af36a
  AC_REQUIRE([AC_PROG_CC])
Packit 0af36a
  CFLAG_VISIBILITY=
Packit 0af36a
  HAVE_VISIBILITY=0
Packit 0af36a
  if test -n "$GCC"; then
Packit 0af36a
    dnl First, check whether -Werror can be added to the command line, or
Packit 0af36a
    dnl whether it leads to an error because of some other option that the
Packit 0af36a
    dnl user has put into $CC $CFLAGS $CPPFLAGS.
Packit 0af36a
    AC_MSG_CHECKING([whether the -Werror option is usable])
Packit 0af36a
    AC_CACHE_VAL([gl_cv_cc_vis_werror], [
Packit 0af36a
      gl_save_CFLAGS="$CFLAGS"
Packit 0af36a
      CFLAGS="$CFLAGS -Werror"
Packit 0af36a
      AC_TRY_COMPILE([], [],
Packit 0af36a
        [gl_cv_cc_vis_werror=yes],
Packit 0af36a
        [gl_cv_cc_vis_werror=no])
Packit 0af36a
      CFLAGS="$gl_save_CFLAGS"])
Packit 0af36a
    AC_MSG_RESULT([$gl_cv_cc_vis_werror])
Packit 0af36a
    dnl Now check whether visibility declarations are supported.
Packit 0af36a
    AC_MSG_CHECKING([for simple visibility declarations])
Packit 0af36a
    AC_CACHE_VAL([gl_cv_cc_visibility], [
Packit 0af36a
      gl_save_CFLAGS="$CFLAGS"
Packit 0af36a
      CFLAGS="$CFLAGS -fvisibility=hidden"
Packit 0af36a
      dnl We use the option -Werror and a function dummyfunc, because on some
Packit 0af36a
      dnl platforms (Cygwin 1.7) the use of -fvisibility triggers a warning
Packit 0af36a
      dnl "visibility attribute not supported in this configuration; ignored"
Packit 0af36a
      dnl at the first function definition in every compilation unit, and we
Packit 0af36a
      dnl don't want to use the option in this case.
Packit 0af36a
      if test $gl_cv_cc_vis_werror = yes; then
Packit 0af36a
        CFLAGS="$CFLAGS -Werror"
Packit 0af36a
      fi
Packit 0af36a
      AC_TRY_COMPILE(
Packit 0af36a
        [extern __attribute__((__visibility__("hidden"))) int hiddenvar;
Packit 0af36a
         extern __attribute__((__visibility__("default"))) int exportedvar;
Packit 0af36a
         extern __attribute__((__visibility__("hidden"))) int hiddenfunc (void);
Packit 0af36a
         extern __attribute__((__visibility__("default"))) int exportedfunc (void);
Packit 0af36a
         void dummyfunc (void) {}],
Packit 0af36a
        [],
Packit 0af36a
        [gl_cv_cc_visibility=yes],
Packit 0af36a
        [gl_cv_cc_visibility=no])
Packit 0af36a
      CFLAGS="$gl_save_CFLAGS"])
Packit 0af36a
    AC_MSG_RESULT([$gl_cv_cc_visibility])
Packit 0af36a
    if test $gl_cv_cc_visibility = yes; then
Packit 0af36a
      CFLAG_VISIBILITY="-fvisibility=hidden"
Packit 0af36a
      HAVE_VISIBILITY=1
Packit 0af36a
    fi
Packit 0af36a
  fi
Packit 0af36a
  AC_SUBST([CFLAG_VISIBILITY])
Packit 0af36a
  AC_SUBST([HAVE_VISIBILITY])
Packit 0af36a
  AC_DEFINE_UNQUOTED([HAVE_VISIBILITY], [$HAVE_VISIBILITY],
Packit 0af36a
    [Define to 1 or 0, depending whether the compiler supports simple visibility declarations.])
Packit 0af36a
])