summaryrefslogtreecommitdiffstats
path: root/gl/m4/locale_h.m4
diff options
context:
space:
mode:
Diffstat (limited to 'gl/m4/locale_h.m4')
-rw-r--r--gl/m4/locale_h.m480
1 files changed, 55 insertions, 25 deletions
diff --git a/gl/m4/locale_h.m4 b/gl/m4/locale_h.m4
index 18a119b8..8bd12e80 100644
--- a/gl/m4/locale_h.m4
+++ b/gl/m4/locale_h.m4
@@ -1,5 +1,5 @@
1# locale_h.m4 serial 10 1# locale_h.m4 serial 19
2dnl Copyright (C) 2007, 2009-2010 Free Software Foundation, Inc. 2dnl Copyright (C) 2007, 2009-2013 Free Software Foundation, Inc.
3dnl This file is free software; the Free Software Foundation 3dnl This file is free software; the Free Software Foundation
4dnl gives unlimited permission to copy and/or distribute it, 4dnl gives unlimited permission to copy and/or distribute it,
5dnl with or without modifications, as long as this notice is preserved. 5dnl with or without modifications, as long as this notice is preserved.
@@ -10,16 +10,30 @@ AC_DEFUN([gl_LOCALE_H],
10 dnl once only, before all statements that occur in other macros. 10 dnl once only, before all statements 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. 13 dnl Persuade glibc <locale.h> to define locale_t and the int_p_*, int_n_*
14 dnl members of 'struct lconv'.
14 AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) 15 AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
15 16
16 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.
17 AC_REQUIRE([gl_STDDEF_H]) 18 AC_REQUIRE([gl_STDDEF_H])
18 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
19 AC_CACHE_CHECK([whether locale.h conforms to POSIX:2001], 29 AC_CACHE_CHECK([whether locale.h conforms to POSIX:2001],
20 [gl_cv_header_locale_h_posix2001], 30 [gl_cv_header_locale_h_posix2001],
21 [AC_TRY_COMPILE([#include <locale.h> 31 [AC_COMPILE_IFELSE(
22int x = LC_MESSAGES;], [], 32 [AC_LANG_PROGRAM(
33 [[#include <locale.h>
34 int x = LC_MESSAGES;
35 int y = sizeof (((struct lconv *) 0)->decimal_point);]],
36 [[]])],
23 [gl_cv_header_locale_h_posix2001=yes], 37 [gl_cv_header_locale_h_posix2001=yes],
24 [gl_cv_header_locale_h_posix2001=no])]) 38 [gl_cv_header_locale_h_posix2001=no])])
25 39
@@ -28,12 +42,15 @@ int x = LC_MESSAGES;], [],
28 if test $ac_cv_header_xlocale_h = yes; then 42 if test $ac_cv_header_xlocale_h = yes; then
29 HAVE_XLOCALE_H=1 43 HAVE_XLOCALE_H=1
30 dnl Check whether use of locale_t requires inclusion of <xlocale.h>, 44 dnl Check whether use of locale_t requires inclusion of <xlocale.h>,
31 dnl e.g. on MacOS X 10.5. If <locale.h> does not define locale_t by 45 dnl e.g. on Mac OS X 10.5. If <locale.h> does not define locale_t by
32 dnl itself, we assume that <xlocale.h> will do so. 46 dnl itself, we assume that <xlocale.h> will do so.
33 AC_CACHE_CHECK([whether locale.h defines locale_t], 47 AC_CACHE_CHECK([whether locale.h defines locale_t],
34 [gl_cv_header_locale_has_locale_t], 48 [gl_cv_header_locale_has_locale_t],
35 [AC_TRY_COMPILE([#include <locale.h> 49 [AC_COMPILE_IFELSE(
36locale_t x;], [], 50 [AC_LANG_PROGRAM(
51 [[#include <locale.h>
52 locale_t x;]],
53 [[]])],
37 [gl_cv_header_locale_has_locale_t=yes], 54 [gl_cv_header_locale_has_locale_t=yes],
38 [gl_cv_header_locale_has_locale_t=no]) 55 [gl_cv_header_locale_has_locale_t=no])
39 ]) 56 ])
@@ -48,15 +65,29 @@ locale_t x;], [],
48 fi 65 fi
49 AC_SUBST([HAVE_XLOCALE_H]) 66 AC_SUBST([HAVE_XLOCALE_H])
50 67
51 dnl <locale.h> is always overridden, because of GNULIB_POSIXCHECK. 68 dnl Check whether 'struct lconv' is complete.
52 gl_CHECK_NEXT_HEADERS([locale.h]) 69 dnl Bionic libc's 'struct lconv' is just a dummy.
53 70 dnl On OpenBSD 4.9, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin 1.5.x,
54 if test -n "$STDDEF_H" \ 71 dnl mingw, MSVC 9, it lacks the int_p_* and int_n_* members.
55 || test $gl_cv_header_locale_h_posix2001 = no \ 72 AC_CACHE_CHECK([whether struct lconv is properly defined],
56 || test $gl_cv_header_locale_h_needs_xlocale_h = yes; then 73 [gl_cv_sys_struct_lconv_ok],
57 gl_REPLACE_LOCALE_H 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
58 fi 86 fi
59 87
88 dnl <locale.h> is always overridden, because of GNULIB_POSIXCHECK.
89 gl_NEXT_HEADERS([locale.h])
90
60 dnl Check for declarations of anything we want to poison if the 91 dnl Check for declarations of anything we want to poison if the
61 dnl corresponding gnulib module is not in use. 92 dnl corresponding gnulib module is not in use.
62 gl_WARN_ON_USE_PREPARE([[#include <locale.h> 93 gl_WARN_ON_USE_PREPARE([[#include <locale.h>
@@ -64,14 +95,8 @@ locale_t x;], [],
64#if HAVE_XLOCALE_H 95#if HAVE_XLOCALE_H
65# include <xlocale.h> 96# include <xlocale.h>
66#endif 97#endif
67 ]], [duplocale]) 98 ]],
68]) 99 [setlocale duplocale])
69
70dnl Unconditionally enables the replacement of <locale.h>.
71AC_DEFUN([gl_REPLACE_LOCALE_H],
72[
73 dnl This is a no-op, because <locale.h> is always overridden.
74 :
75]) 100])
76 101
77AC_DEFUN([gl_LOCALE_MODULE_INDICATOR], 102AC_DEFUN([gl_LOCALE_MODULE_INDICATOR],
@@ -85,8 +110,13 @@ AC_DEFUN([gl_LOCALE_MODULE_INDICATOR],
85 110
86AC_DEFUN([gl_LOCALE_H_DEFAULTS], 111AC_DEFUN([gl_LOCALE_H_DEFAULTS],
87[ 112[
113 GNULIB_LOCALECONV=0; AC_SUBST([GNULIB_LOCALECONV])
114 GNULIB_SETLOCALE=0; AC_SUBST([GNULIB_SETLOCALE])
88 GNULIB_DUPLOCALE=0; AC_SUBST([GNULIB_DUPLOCALE]) 115 GNULIB_DUPLOCALE=0; AC_SUBST([GNULIB_DUPLOCALE])
89 dnl Assume proper GNU behavior unless another module says otherwise. 116 dnl Assume proper GNU behavior unless another module says otherwise.
90 HAVE_DUPLOCALE=1; AC_SUBST([HAVE_DUPLOCALE]) 117 HAVE_DUPLOCALE=1; AC_SUBST([HAVE_DUPLOCALE])
91 REPLACE_DUPLOCALE=0; AC_SUBST([REPLACE_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])
92]) 122])