8bd12e80e5a05436895f22d46bb0e9331e676d9c
[bpt/guile.git] / m4 / locale_h.m4
1 # locale_h.m4 serial 19
2 dnl Copyright (C) 2007, 2009-2013 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 AC_DEFUN([gl_LOCALE_H],
8 [
9 dnl Use AC_REQUIRE here, so that the default behavior below is expanded
10 dnl once only, before all statements that occur in other macros.
11 AC_REQUIRE([gl_LOCALE_H_DEFAULTS])
12
13 dnl Persuade glibc <locale.h> to define locale_t and the int_p_*, int_n_*
14 dnl members of 'struct lconv'.
15 AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
16
17 dnl If <stddef.h> is replaced, then <locale.h> must also be replaced.
18 AC_REQUIRE([gl_STDDEF_H])
19
20 dnl Solaris 11 2011-11 defines the int_p_*, int_n_* members of 'struct lconv'
21 dnl only if _LCONV_C99 is defined.
22 AC_REQUIRE([AC_CANONICAL_HOST])
23 case "$host_os" in
24 solaris*)
25 AC_DEFINE([_LCONV_C99], [1], [Define to 1 on Solaris.])
26 ;;
27 esac
28
29 AC_CACHE_CHECK([whether locale.h conforms to POSIX:2001],
30 [gl_cv_header_locale_h_posix2001],
31 [AC_COMPILE_IFELSE(
32 [AC_LANG_PROGRAM(
33 [[#include <locale.h>
34 int x = LC_MESSAGES;
35 int y = sizeof (((struct lconv *) 0)->decimal_point);]],
36 [[]])],
37 [gl_cv_header_locale_h_posix2001=yes],
38 [gl_cv_header_locale_h_posix2001=no])])
39
40 dnl Check for <xlocale.h>.
41 AC_CHECK_HEADERS_ONCE([xlocale.h])
42 if test $ac_cv_header_xlocale_h = yes; then
43 HAVE_XLOCALE_H=1
44 dnl Check whether use of locale_t requires inclusion of <xlocale.h>,
45 dnl e.g. on Mac OS X 10.5. If <locale.h> does not define locale_t by
46 dnl itself, we assume that <xlocale.h> will do so.
47 AC_CACHE_CHECK([whether locale.h defines locale_t],
48 [gl_cv_header_locale_has_locale_t],
49 [AC_COMPILE_IFELSE(
50 [AC_LANG_PROGRAM(
51 [[#include <locale.h>
52 locale_t x;]],
53 [[]])],
54 [gl_cv_header_locale_has_locale_t=yes],
55 [gl_cv_header_locale_has_locale_t=no])
56 ])
57 if test $gl_cv_header_locale_has_locale_t = yes; then
58 gl_cv_header_locale_h_needs_xlocale_h=no
59 else
60 gl_cv_header_locale_h_needs_xlocale_h=yes
61 fi
62 else
63 HAVE_XLOCALE_H=0
64 gl_cv_header_locale_h_needs_xlocale_h=no
65 fi
66 AC_SUBST([HAVE_XLOCALE_H])
67
68 dnl Check whether 'struct lconv' is complete.
69 dnl Bionic libc's 'struct lconv' is just a dummy.
70 dnl On OpenBSD 4.9, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin 1.5.x,
71 dnl mingw, MSVC 9, it lacks the int_p_* and int_n_* members.
72 AC_CACHE_CHECK([whether struct lconv is properly defined],
73 [gl_cv_sys_struct_lconv_ok],
74 [AC_COMPILE_IFELSE(
75 [AC_LANG_PROGRAM(
76 [[#include <locale.h>
77 struct lconv l;
78 int x = sizeof (l.decimal_point);
79 int y = sizeof (l.int_p_cs_precedes);]],
80 [[]])],
81 [gl_cv_sys_struct_lconv_ok=yes],
82 [gl_cv_sys_struct_lconv_ok=no])
83 ])
84 if test $gl_cv_sys_struct_lconv_ok = no; then
85 REPLACE_STRUCT_LCONV=1
86 fi
87
88 dnl <locale.h> is always overridden, because of GNULIB_POSIXCHECK.
89 gl_NEXT_HEADERS([locale.h])
90
91 dnl Check for declarations of anything we want to poison if the
92 dnl corresponding gnulib module is not in use.
93 gl_WARN_ON_USE_PREPARE([[#include <locale.h>
94 /* Some systems provide declarations in a non-standard header. */
95 #if HAVE_XLOCALE_H
96 # include <xlocale.h>
97 #endif
98 ]],
99 [setlocale duplocale])
100 ])
101
102 AC_DEFUN([gl_LOCALE_MODULE_INDICATOR],
103 [
104 dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
105 AC_REQUIRE([gl_LOCALE_H_DEFAULTS])
106 gl_MODULE_INDICATOR_SET_VARIABLE([$1])
107 dnl Define it also as a C macro, for the benefit of the unit tests.
108 gl_MODULE_INDICATOR_FOR_TESTS([$1])
109 ])
110
111 AC_DEFUN([gl_LOCALE_H_DEFAULTS],
112 [
113 GNULIB_LOCALECONV=0; AC_SUBST([GNULIB_LOCALECONV])
114 GNULIB_SETLOCALE=0; AC_SUBST([GNULIB_SETLOCALE])
115 GNULIB_DUPLOCALE=0; AC_SUBST([GNULIB_DUPLOCALE])
116 dnl Assume proper GNU behavior unless another module says otherwise.
117 HAVE_DUPLOCALE=1; AC_SUBST([HAVE_DUPLOCALE])
118 REPLACE_LOCALECONV=0; AC_SUBST([REPLACE_LOCALECONV])
119 REPLACE_SETLOCALE=0; AC_SUBST([REPLACE_SETLOCALE])
120 REPLACE_DUPLOCALE=0; AC_SUBST([REPLACE_DUPLOCALE])
121 REPLACE_STRUCT_LCONV=0; AC_SUBST([REPLACE_STRUCT_LCONV])
122 ])