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