• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# visibility.m4 serial 4 (gettext-0.18.2)
2dnl Copyright (C) 2005, 2008, 2010-2011 Free Software Foundation, Inc.
3dnl This file is free software; the Free Software Foundation
4dnl gives unlimited permission to copy and/or distribute it,
5dnl with or without modifications, as long as this notice is preserved.
6
7dnl From Bruno Haible.
8
9dnl Tests whether the compiler supports the command-line option
10dnl -fvisibility=hidden and the function and variable attributes
11dnl __attribute__((__visibility__("hidden"))) and
12dnl __attribute__((__visibility__("default"))).
13dnl Does *not* test for __visibility__("protected") - which has tricky
14dnl semantics (see the 'vismain' test in glibc) and does not exist e.g. on
15dnl MacOS X.
16dnl Does *not* test for __visibility__("internal") - which has processor
17dnl dependent semantics.
18dnl Does *not* test for #pragma GCC visibility push(hidden) - which is
19dnl "really only recommended for legacy code".
20dnl Set the variable CFLAG_VISIBILITY.
21dnl Defines and sets the variable HAVE_VISIBILITY.
22
23dnl Modified to fit with PCRE build environment by Cristian Rodríguez.
24
25AC_DEFUN([PCRE_VISIBILITY],
26[
27  AC_REQUIRE([AC_PROG_CC])
28  VISIBILITY_CFLAGS=
29  VISIBILITY_CXXFLAGS=
30  HAVE_VISIBILITY=0
31  if test -n "$GCC"; then
32    dnl First, check whether -Werror can be added to the command line, or
33    dnl whether it leads to an error because of some other option that the
34    dnl user has put into $CC $CFLAGS $CPPFLAGS.
35    AC_MSG_CHECKING([whether the -Werror option is usable])
36    AC_CACHE_VAL([pcre_cv_cc_vis_werror], [
37      pcre_save_CFLAGS="$CFLAGS"
38      CFLAGS="$CFLAGS -Werror"
39      AC_COMPILE_IFELSE(
40        [AC_LANG_PROGRAM([[]], [[]])],
41        [pcre_cv_cc_vis_werror=yes],
42        [pcre_cv_cc_vis_werror=no])
43      CFLAGS="$pcre_save_CFLAGS"])
44    AC_MSG_RESULT([$pcre_cv_cc_vis_werror])
45    dnl Now check whether visibility declarations are supported.
46    AC_MSG_CHECKING([for simple visibility declarations])
47    AC_CACHE_VAL([pcre_cv_cc_visibility], [
48      pcre_save_CFLAGS="$CFLAGS"
49      CFLAGS="$CFLAGS -fvisibility=hidden"
50      dnl We use the option -Werror and a function dummyfunc, because on some
51      dnl platforms (Cygwin 1.7) the use of -fvisibility triggers a warning
52      dnl "visibility attribute not supported in this configuration; ignored"
53      dnl at the first function definition in every compilation unit, and we
54      dnl don't want to use the option in this case.
55      if test $pcre_cv_cc_vis_werror = yes; then
56        CFLAGS="$CFLAGS -Werror"
57      fi
58      AC_COMPILE_IFELSE(
59        [AC_LANG_PROGRAM(
60           [[extern __attribute__((__visibility__("hidden"))) int hiddenvar;
61             extern __attribute__((__visibility__("default"))) int exportedvar;
62             extern __attribute__((__visibility__("hidden"))) int hiddenfunc (void);
63             extern __attribute__((__visibility__("default"))) int exportedfunc (void);
64             void dummyfunc (void) {}
65           ]],
66           [[]])],
67        [pcre_cv_cc_visibility=yes],
68        [pcre_cv_cc_visibility=no])
69      CFLAGS="$pcre_save_CFLAGS"])
70    AC_MSG_RESULT([$pcre_cv_cc_visibility])
71    if test $pcre_cv_cc_visibility = yes; then
72      VISIBILITY_CFLAGS="-fvisibility=hidden"
73      VISIBILITY_CXXFLAGS="-fvisibility=hidden -fvisibility-inlines-hidden"
74      HAVE_VISIBILITY=1
75      AC_DEFINE(PCRE_EXP_DECL, [extern __attribute__ ((visibility ("default")))], [to make a symbol visible])
76      AC_DEFINE(PCRE_EXP_DEFN, [__attribute__ ((visibility ("default")))], [to make a symbol visible])
77      AC_DEFINE(PCRE_EXP_DATA_DEFN, [__attribute__ ((visibility ("default")))], [to make a symbol visible])
78      AC_DEFINE(PCREPOSIX_EXP_DECL, [extern __attribute__ ((visibility ("default")))], [to make a symbol visible])
79      AC_DEFINE(PCREPOSIX_EXP_DEFN, [extern __attribute__ ((visibility ("default")))], [to make a symbol visible])
80      AC_DEFINE(PCRECPP_EXP_DECL, [extern __attribute__ ((visibility ("default")))], [to make a symbol visible])
81      AC_DEFINE(PCRECPP_EXP_DEFN, [__attribute__ ((visibility ("default")))], [to make a symbol visible])
82    fi
83  fi
84  AC_SUBST([VISIBILITY_CFLAGS])
85  AC_SUBST([VISIBILITY_CXXFLAGS])
86  AC_SUBST([HAVE_VISIBILITY])
87  AC_DEFINE_UNQUOTED([HAVE_VISIBILITY], [$HAVE_VISIBILITY],
88    [Define to 1 if the compiler supports simple visibility declarations.])
89])
90