Commit | Line | Data |
---|---|---|
005de2e8 | 1 | # locale_h.m4 serial 19 |
5e69ceb7 | 2 | dnl Copyright (C) 2007, 2009-2014 Free Software Foundation, Inc. |
414e4441 LC |
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 | ||
005de2e8 LC |
13 | dnl Persuade glibc <locale.h> to define locale_t and the int_p_*, int_n_* |
14 | dnl members of 'struct lconv'. | |
414e4441 LC |
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 | ||
005de2e8 LC |
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 | ||
414e4441 LC |
29 | AC_CACHE_CHECK([whether locale.h conforms to POSIX:2001], |
30 | [gl_cv_header_locale_h_posix2001], | |
9157d901 LC |
31 | [AC_COMPILE_IFELSE( |
32 | [AC_LANG_PROGRAM( | |
33 | [[#include <locale.h> | |
005de2e8 LC |
34 | int x = LC_MESSAGES; |
35 | int y = sizeof (((struct lconv *) 0)->decimal_point);]], | |
9157d901 | 36 | [[]])], |
414e4441 LC |
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>, | |
005de2e8 | 45 | dnl e.g. on Mac OS X 10.5. If <locale.h> does not define locale_t by |
414e4441 LC |
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], | |
9157d901 LC |
49 | [AC_COMPILE_IFELSE( |
50 | [AC_LANG_PROGRAM( | |
51 | [[#include <locale.h> | |
52 | locale_t x;]], | |
53 | [[]])], | |
414e4441 LC |
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 | ||
005de2e8 LC |
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 | ||
61cd9dc9 | 88 | dnl <locale.h> is always overridden, because of GNULIB_POSIXCHECK. |
49114fd4 | 89 | gl_NEXT_HEADERS([locale.h]) |
414e4441 | 90 | |
61cd9dc9 LC |
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 | |
49114fd4 LC |
98 | ]], |
99 | [setlocale duplocale]) | |
414e4441 LC |
100 | ]) |
101 | ||
414e4441 LC |
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]) | |
a927b6c1 | 106 | gl_MODULE_INDICATOR_SET_VARIABLE([$1]) |
f4c79b3c | 107 | dnl Define it also as a C macro, for the benefit of the unit tests. |
a927b6c1 | 108 | gl_MODULE_INDICATOR_FOR_TESTS([$1]) |
414e4441 LC |
109 | ]) |
110 | ||
111 | AC_DEFUN([gl_LOCALE_H_DEFAULTS], | |
112 | [ | |
005de2e8 | 113 | GNULIB_LOCALECONV=0; AC_SUBST([GNULIB_LOCALECONV]) |
49114fd4 | 114 | GNULIB_SETLOCALE=0; AC_SUBST([GNULIB_SETLOCALE]) |
414e4441 LC |
115 | GNULIB_DUPLOCALE=0; AC_SUBST([GNULIB_DUPLOCALE]) |
116 | dnl Assume proper GNU behavior unless another module says otherwise. | |
005de2e8 LC |
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]) | |
414e4441 | 122 | ]) |