Blame m4/visibility.m4

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