Blame m4/visibility.m4

Packit f546b1
# visibility.m4 serial 1 (gettext-0.15)
Packit f546b1
dnl Copyright (C) 2005 Free Software Foundation, Inc.
Packit f546b1
dnl This file is free software; the Free Software Foundation
Packit f546b1
dnl gives unlimited permission to copy and/or distribute it,
Packit f546b1
dnl with or without modifications, as long as this notice is preserved.
Packit f546b1
Packit f546b1
dnl From Bruno Haible.
Packit f546b1
Packit f546b1
dnl Tests whether the compiler supports the command-line option
Packit f546b1
dnl -fvisibility=hidden and the function and variable attributes
Packit f546b1
dnl __attribute__((__visibility__("hidden"))) and
Packit f546b1
dnl __attribute__((__visibility__("default"))).
Packit f546b1
dnl Does *not* test for __visibility__("protected") - which has tricky
Packit f546b1
dnl semantics (see the 'vismain' test in glibc) and does not exist e.g. on
Packit f546b1
dnl MacOS X.
Packit f546b1
dnl Does *not* test for __visibility__("internal") - which has processor
Packit f546b1
dnl dependent semantics.
Packit f546b1
dnl Does *not* test for #pragma GCC visibility push(hidden) - which is
Packit f546b1
dnl "really only recommended for legacy code".
Packit f546b1
dnl Set the variable CFLAG_VISIBILITY.
Packit f546b1
dnl Defines and sets the variable HAVE_VISIBILITY.
Packit f546b1
Packit f546b1
AC_DEFUN([gl_VISIBILITY],
Packit f546b1
[
Packit f546b1
  AC_REQUIRE([AC_PROG_CC])
Packit f546b1
  CFLAG_VISIBILITY=
Packit f546b1
  HAVE_VISIBILITY=0
Packit f546b1
  if test -n "$GCC"; then
Packit f546b1
    AC_MSG_CHECKING([for simple visibility declarations])
Packit f546b1
    AC_CACHE_VAL(gl_cv_cc_visibility, [
Packit f546b1
      gl_save_CFLAGS="$CFLAGS"
Packit f546b1
      CFLAGS="$CFLAGS -fvisibility=hidden"
Packit f546b1
      AC_TRY_COMPILE(
Packit f546b1
        [extern __attribute__((__visibility__("hidden"))) int hiddenvar;
Packit f546b1
         extern __attribute__((__visibility__("default"))) int exportedvar;
Packit f546b1
         extern __attribute__((__visibility__("hidden"))) int hiddenfunc (void);
Packit f546b1
         extern __attribute__((__visibility__("default"))) int exportedfunc (void);],
Packit f546b1
        [],
Packit f546b1
        gl_cv_cc_visibility=yes,
Packit f546b1
        gl_cv_cc_visibility=no)
Packit f546b1
      CFLAGS="$gl_save_CFLAGS"])
Packit f546b1
    AC_MSG_RESULT([$gl_cv_cc_visibility])
Packit f546b1
    if test $gl_cv_cc_visibility = yes; then
Packit f546b1
      CFLAG_VISIBILITY="-fvisibility=hidden"
Packit f546b1
      HAVE_VISIBILITY=1
Packit f546b1
    fi
Packit f546b1
  fi
Packit f546b1
  AC_SUBST([CFLAG_VISIBILITY])
Packit f546b1
  AC_SUBST([HAVE_VISIBILITY])
Packit f546b1
  AC_DEFINE_UNQUOTED([HAVE_VISIBILITY], [$HAVE_VISIBILITY],
Packit f546b1
    [Define to 1 or 0, depending whether the compiler supports simple visibility declarations.])
Packit f546b1
])