beta-0.89.2
[luatex.git] / source / m4 / kpse-visibility.m4
blob8eeb029cc587db31c2f35331130b16666d3cfc82
1 # Public macros for the TeX Live (TL) tree.
2 # Copyright (C) 2013, 2014 Peter Breitenlohner <tex-live@tug.org>
4 # This file is free software; the copyright holder
5 # gives unlimited permission to copy and/or distribute it,
6 # with or without modifications, as long as this notice is preserved.
8 # KPSE_COMPILER_VISIBILITY
9 # ------------------------
10 # Set up compiler flags for C and C++ to hide external symbols.
11 # This macro determines and substitutes VISIBILITY_CFLAGS for the C compiler
12 # and, if applicable, VISIBILITY_CXXFLAGS for the C++ compiler. To activate
13 # them a Makefile.am must use them, e.g., in AM_CFLAGS or AM_CXXFLAGS.
14 AC_DEFUN([KPSE_COMPILER_VISIBILITY],
15 [dnl arrange that AC_PROG_CC uses _KPSE_VISIBILITY_CFLAGS etc.
16 AC_PROVIDE_IFELSE([AC_PROG_CC],
17                   [_KPSE_VISIBILITY_CFLAGS],
18                   [m4_define([AC_PROG_CC],
19                              m4_defn([AC_PROG_CC])[_KPSE_VISIBILITY_CFLAGS
20 ])])
21 AC_PROVIDE_IFELSE([AC_PROG_CXX],
22                   [_KPSE_VISIBILITY_CXXFLAGS],
23                   [m4_define([AC_PROG_CXX],
24                              m4_defn([AC_PROG_CXX])[_KPSE_VISIBILITY_CXXFLAGS
25 ])])
26 ]) # KPSE_COMPILER_VISIBILITY
28 _KPSE_VISIBILITY_CFLAGS
29 # ---------------------
30 # Internal subroutine.
31 # Set up compiler flags for C to hide external symbols.
32 AC_DEFUN([_KPSE_VISIBILITY_CFLAGS], [dnl
33 AC_REQUIRE([AC_PROG_CC])[]dnl
34 _KPSE_VISIBILITY_FLAGS([C], [cflags])
35 m4_define([_KPSE_VISIBILITY_CFLAGS], [])[]dnl
36 ]) # _KPSE_VISIBILITY_CFLAGS
38 _KPSE_VISIBILITY_CXXFLAGS
39 # -----------------------
40 # Internal subroutine.
41 # Set up compiler flags for C++ to hide external symbols.
42 AC_DEFUN([_KPSE_VISIBILITY_CXXFLAGS], [dnl
43 AC_REQUIRE([AC_PROG_CXX])[]dnl
44 _KPSE_VISIBILITY_FLAGS([C++], [cxxflags])
45 m4_define([_KPSE_VISIBILITY_CXXFLAGS], [])[]dnl
46 ]) # _KPSE_VISIBILITY_CFLAGS
48 _KPSE_VISIBILITY_FLAGS(LANG, TAG)
49 # -------------------------------
50 # Internal subroutine.
51 # Set up compiler flags for C or C++ to hide external symbols.
52 m4_define([_KPSE_VISIBILITY_FLAGS], [dnl
53 AC_CACHE_CHECK(AS_TR_CPP($2) [for $1 to hide external symbols],
54                [kpse_cv_visibility_$2],
55                [dnl
56 AC_LANG_PUSH([$1])
57 kpse_cv_visibility_$2=unknown
58 kpse_save_flags=$AS_TR_CPP($2)
59 AC_LANG_CONFTEST([AC_LANG_SOURCE([[#include <stdio.h>
60                                    extern void foo(void);
61                                    void foo(void){printf("foo\n");}]])])
62 # FIXME: Add tests for non-GNU compilers
63 for kpse_flag in '-fvisibility=hidden -fvisibility-inlines-hidden' '-fvisibility=hidden'; do
64   AS_TR_CPP($2)="$kpse_save_flags -Werror $kpse_flag"
65   AC_COMPILE_IFELSE([], [kpse_cv_visibility_$2=$kpse_flag; break])
66 done
67 AC_LANG_POP([$1])
69 AS_TR_CPP($2)=$kpse_save_flags
70 AS_CASE([$kpse_cv_visibility_$2],
71         [unknown], [],
72         [AC_SUBST([VISIBILITY_]AS_TR_CPP($2), [$kpse_cv_visibility_$2])])
73 ]) # _KPSE_VISIBILITY_FLAGS