diff options
Diffstat (limited to 'gl/m4/locale_h.m4')
-rw-r--r-- | gl/m4/locale_h.m4 | 134 |
1 files changed, 93 insertions, 41 deletions
diff --git a/gl/m4/locale_h.m4 b/gl/m4/locale_h.m4 index 8bd12e8..a33a0a4 100644 --- a/gl/m4/locale_h.m4 +++ b/gl/m4/locale_h.m4 | |||
@@ -1,13 +1,13 @@ | |||
1 | # locale_h.m4 serial 19 | 1 | # locale_h.m4 serial 28 |
2 | dnl Copyright (C) 2007, 2009-2013 Free Software Foundation, Inc. | 2 | dnl Copyright (C) 2007, 2009-2023 Free Software Foundation, Inc. |
3 | dnl This file is free software; the Free Software Foundation | 3 | dnl This file is free software; the Free Software Foundation |
4 | dnl gives unlimited permission to copy and/or distribute it, | 4 | dnl gives unlimited permission to copy and/or distribute it, |
5 | dnl with or without modifications, as long as this notice is preserved. | 5 | dnl with or without modifications, as long as this notice is preserved. |
6 | 6 | ||
7 | AC_DEFUN([gl_LOCALE_H], | 7 | AC_DEFUN_ONCE([gl_LOCALE_H], |
8 | [ | 8 | [ |
9 | dnl Use AC_REQUIRE here, so that the default behavior below is expanded | 9 | dnl Ensure to expand the default settings once only, before all statements |
10 | dnl once only, before all statements that occur in other macros. | 10 | dnl that occur in other macros. |
11 | AC_REQUIRE([gl_LOCALE_H_DEFAULTS]) | 11 | AC_REQUIRE([gl_LOCALE_H_DEFAULTS]) |
12 | 12 | ||
13 | dnl Persuade glibc <locale.h> to define locale_t and the int_p_*, int_n_* | 13 | dnl Persuade glibc <locale.h> to define locale_t and the int_p_*, int_n_* |
@@ -17,7 +17,9 @@ AC_DEFUN([gl_LOCALE_H], | |||
17 | dnl If <stddef.h> is replaced, then <locale.h> must also be replaced. | 17 | dnl If <stddef.h> is replaced, then <locale.h> must also be replaced. |
18 | AC_REQUIRE([gl_STDDEF_H]) | 18 | AC_REQUIRE([gl_STDDEF_H]) |
19 | 19 | ||
20 | dnl Solaris 11 2011-11 defines the int_p_*, int_n_* members of 'struct lconv' | 20 | AC_REQUIRE([gl_LOCALE_T]) |
21 | |||
22 | dnl Solaris 11.0 defines the int_p_*, int_n_* members of 'struct lconv' | ||
21 | dnl only if _LCONV_C99 is defined. | 23 | dnl only if _LCONV_C99 is defined. |
22 | AC_REQUIRE([AC_CANONICAL_HOST]) | 24 | AC_REQUIRE([AC_CANONICAL_HOST]) |
23 | case "$host_os" in | 25 | case "$host_os" in |
@@ -37,34 +39,6 @@ AC_DEFUN([gl_LOCALE_H], | |||
37 | [gl_cv_header_locale_h_posix2001=yes], | 39 | [gl_cv_header_locale_h_posix2001=yes], |
38 | [gl_cv_header_locale_h_posix2001=no])]) | 40 | [gl_cv_header_locale_h_posix2001=no])]) |
39 | 41 | ||
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. | 42 | dnl Check whether 'struct lconv' is complete. |
69 | dnl Bionic libc's 'struct lconv' is just a dummy. | 43 | 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, | 44 | dnl On OpenBSD 4.9, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin 1.5.x, |
@@ -82,7 +56,20 @@ AC_DEFUN([gl_LOCALE_H], | |||
82 | [gl_cv_sys_struct_lconv_ok=no]) | 56 | [gl_cv_sys_struct_lconv_ok=no]) |
83 | ]) | 57 | ]) |
84 | if test $gl_cv_sys_struct_lconv_ok = no; then | 58 | if test $gl_cv_sys_struct_lconv_ok = no; then |
85 | REPLACE_STRUCT_LCONV=1 | 59 | dnl On native Windows with MSVC, merely define these member names as macros. |
60 | dnl This avoids trouble in C++ mode. | ||
61 | case "$host_os" in | ||
62 | mingw*) | ||
63 | AC_EGREP_CPP([Special], [ | ||
64 | #ifdef _MSC_VER | ||
65 | Special | ||
66 | #endif | ||
67 | ], | ||
68 | [], | ||
69 | [REPLACE_STRUCT_LCONV=1]) | ||
70 | ;; | ||
71 | *) REPLACE_STRUCT_LCONV=1 ;; | ||
72 | esac | ||
86 | fi | 73 | fi |
87 | 74 | ||
88 | dnl <locale.h> is always overridden, because of GNULIB_POSIXCHECK. | 75 | dnl <locale.h> is always overridden, because of GNULIB_POSIXCHECK. |
@@ -96,27 +83,92 @@ AC_DEFUN([gl_LOCALE_H], | |||
96 | # include <xlocale.h> | 83 | # include <xlocale.h> |
97 | #endif | 84 | #endif |
98 | ]], | 85 | ]], |
99 | [setlocale duplocale]) | 86 | [setlocale newlocale duplocale freelocale]) |
87 | ]) | ||
88 | |||
89 | dnl Checks to determine whether the system has the locale_t type, | ||
90 | dnl and how to obtain it. | ||
91 | AC_DEFUN([gl_LOCALE_T], | ||
92 | [ | ||
93 | dnl Persuade glibc and Solaris <locale.h> to define locale_t. | ||
94 | AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) | ||
95 | |||
96 | dnl Check whether use of locale_t requires inclusion of <xlocale.h>, | ||
97 | dnl e.g. on Mac OS X 10.5. If <locale.h> does not define locale_t by | ||
98 | dnl itself, we assume that <xlocale.h> will do so. | ||
99 | AC_CACHE_CHECK([whether locale.h defines locale_t], | ||
100 | [gl_cv_header_locale_has_locale_t], | ||
101 | [AC_COMPILE_IFELSE( | ||
102 | [AC_LANG_PROGRAM( | ||
103 | [[#include <locale.h> | ||
104 | locale_t x;]], | ||
105 | [[]])], | ||
106 | [gl_cv_header_locale_has_locale_t=yes], | ||
107 | [gl_cv_header_locale_has_locale_t=no]) | ||
108 | ]) | ||
109 | |||
110 | dnl Check for <xlocale.h>. | ||
111 | AC_CHECK_HEADERS_ONCE([xlocale.h]) | ||
112 | if test $ac_cv_header_xlocale_h = yes; then | ||
113 | HAVE_XLOCALE_H=1 | ||
114 | if test $gl_cv_header_locale_has_locale_t = yes; then | ||
115 | gl_cv_header_locale_h_needs_xlocale_h=no | ||
116 | else | ||
117 | gl_cv_header_locale_h_needs_xlocale_h=yes | ||
118 | fi | ||
119 | HAVE_LOCALE_T=1 | ||
120 | else | ||
121 | HAVE_XLOCALE_H=0 | ||
122 | gl_cv_header_locale_h_needs_xlocale_h=no | ||
123 | if test $gl_cv_header_locale_has_locale_t = yes; then | ||
124 | HAVE_LOCALE_T=1 | ||
125 | else | ||
126 | HAVE_LOCALE_T=0 | ||
127 | fi | ||
128 | fi | ||
129 | AC_SUBST([HAVE_XLOCALE_H]) | ||
100 | ]) | 130 | ]) |
101 | 131 | ||
132 | # gl_LOCALE_MODULE_INDICATOR([modulename]) | ||
133 | # sets the shell variable that indicates the presence of the given module | ||
134 | # to a C preprocessor expression that will evaluate to 1. | ||
135 | # This macro invocation must not occur in macros that are AC_REQUIREd. | ||
102 | AC_DEFUN([gl_LOCALE_MODULE_INDICATOR], | 136 | AC_DEFUN([gl_LOCALE_MODULE_INDICATOR], |
103 | [ | 137 | [ |
104 | dnl Use AC_REQUIRE here, so that the default settings are expanded once only. | 138 | dnl Ensure to expand the default settings once only. |
105 | AC_REQUIRE([gl_LOCALE_H_DEFAULTS]) | 139 | gl_LOCALE_H_REQUIRE_DEFAULTS |
106 | gl_MODULE_INDICATOR_SET_VARIABLE([$1]) | 140 | gl_MODULE_INDICATOR_SET_VARIABLE([$1]) |
107 | dnl Define it also as a C macro, for the benefit of the unit tests. | 141 | dnl Define it also as a C macro, for the benefit of the unit tests. |
108 | gl_MODULE_INDICATOR_FOR_TESTS([$1]) | 142 | gl_MODULE_INDICATOR_FOR_TESTS([$1]) |
109 | ]) | 143 | ]) |
110 | 144 | ||
145 | # Initializes the default values for AC_SUBSTed shell variables. | ||
146 | # This macro must not be AC_REQUIREd. It must only be invoked, and only | ||
147 | # outside of macros or in macros that are not AC_REQUIREd. | ||
148 | AC_DEFUN([gl_LOCALE_H_REQUIRE_DEFAULTS], | ||
149 | [ | ||
150 | m4_defun(GL_MODULE_INDICATOR_PREFIX[_LOCALE_H_MODULE_INDICATOR_DEFAULTS], [ | ||
151 | gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOCALECONV]) | ||
152 | gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SETLOCALE]) | ||
153 | gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SETLOCALE_NULL]) | ||
154 | gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_DUPLOCALE]) | ||
155 | gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOCALENAME]) | ||
156 | ]) | ||
157 | m4_require(GL_MODULE_INDICATOR_PREFIX[_LOCALE_H_MODULE_INDICATOR_DEFAULTS]) | ||
158 | AC_REQUIRE([gl_LOCALE_H_DEFAULTS]) | ||
159 | ]) | ||
160 | |||
111 | AC_DEFUN([gl_LOCALE_H_DEFAULTS], | 161 | AC_DEFUN([gl_LOCALE_H_DEFAULTS], |
112 | [ | 162 | [ |
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. | 163 | dnl Assume proper GNU behavior unless another module says otherwise. |
164 | HAVE_NEWLOCALE=1; AC_SUBST([HAVE_NEWLOCALE]) | ||
117 | HAVE_DUPLOCALE=1; AC_SUBST([HAVE_DUPLOCALE]) | 165 | HAVE_DUPLOCALE=1; AC_SUBST([HAVE_DUPLOCALE]) |
166 | HAVE_FREELOCALE=1; AC_SUBST([HAVE_FREELOCALE]) | ||
118 | REPLACE_LOCALECONV=0; AC_SUBST([REPLACE_LOCALECONV]) | 167 | REPLACE_LOCALECONV=0; AC_SUBST([REPLACE_LOCALECONV]) |
119 | REPLACE_SETLOCALE=0; AC_SUBST([REPLACE_SETLOCALE]) | 168 | REPLACE_SETLOCALE=0; AC_SUBST([REPLACE_SETLOCALE]) |
169 | REPLACE_NEWLOCALE=0; AC_SUBST([REPLACE_NEWLOCALE]) | ||
120 | REPLACE_DUPLOCALE=0; AC_SUBST([REPLACE_DUPLOCALE]) | 170 | REPLACE_DUPLOCALE=0; AC_SUBST([REPLACE_DUPLOCALE]) |
171 | REPLACE_FREELOCALE=0; AC_SUBST([REPLACE_FREELOCALE]) | ||
121 | REPLACE_STRUCT_LCONV=0; AC_SUBST([REPLACE_STRUCT_LCONV]) | 172 | REPLACE_STRUCT_LCONV=0; AC_SUBST([REPLACE_STRUCT_LCONV]) |
173 | LOCALENAME_ENHANCE_LOCALE_FUNCS=0; AC_SUBST([LOCALENAME_ENHANCE_LOCALE_FUNCS]) | ||
122 | ]) | 174 | ]) |