doc: Update for Solaris 11.4.
[gnulib.git] / m4 / wcrtomb.m4
blobe71c57a37611420db5b1522d21181d6f20ae9095
1 # wcrtomb.m4 serial 13
2 dnl Copyright (C) 2008-2018 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.
7 AC_DEFUN([gl_FUNC_WCRTOMB],
9   AC_REQUIRE([gl_WCHAR_H_DEFAULTS])
11   AC_REQUIRE([AC_TYPE_MBSTATE_T])
12   gl_MBSTATE_T_BROKEN
14   AC_CHECK_FUNCS_ONCE([wcrtomb])
15   if test $ac_cv_func_wcrtomb = no; then
16     HAVE_WCRTOMB=0
17     AC_CHECK_DECLS([wcrtomb],,, [[
18 /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
19    <wchar.h>.
20    BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
21    included before <wchar.h>.  */
22 #include <stddef.h>
23 #include <stdio.h>
24 #include <time.h>
25 #include <wchar.h>
26 ]])
27     if test $ac_cv_have_decl_wcrtomb = yes; then
28       dnl On Minix 3.1.8, the system's <wchar.h> declares wcrtomb() although
29       dnl it does not have the function. Avoid a collision with gnulib's
30       dnl replacement.
31       REPLACE_WCRTOMB=1
32     fi
33   else
34     if test $REPLACE_MBSTATE_T = 1; then
35       REPLACE_WCRTOMB=1
36     else
37       dnl On AIX 4.3, OSF/1 5.1 and Solaris <= 11.3, wcrtomb (NULL, 0, NULL)
38       dnl sometimes returns 0 instead of 1.
39       AC_REQUIRE([AC_PROG_CC])
40       AC_REQUIRE([gt_LOCALE_FR])
41       AC_REQUIRE([gt_LOCALE_FR_UTF8])
42       AC_REQUIRE([gt_LOCALE_JA])
43       AC_REQUIRE([gt_LOCALE_ZH_CN])
44       AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
45       AC_CACHE_CHECK([whether wcrtomb return value is correct],
46         [gl_cv_func_wcrtomb_retval],
47         [
48           dnl Initial guess, used when cross-compiling or when no suitable locale
49           dnl is present.
50 changequote(,)dnl
51           case "$host_os" in
52                                      # Guess no on AIX 4, OSF/1 and Solaris.
53             aix4* | osf* | solaris*) gl_cv_func_wcrtomb_retval="guessing no" ;;
54                                      # Guess yes on native Windows.
55             mingw*)                  gl_cv_func_wcrtomb_retval="guessing yes" ;;
56                                      # Guess yes otherwise.
57             *)                       gl_cv_func_wcrtomb_retval="guessing yes" ;;
58           esac
59 changequote([,])dnl
60           if test $LOCALE_FR != none || test $LOCALE_FR_UTF8 != none || test $LOCALE_JA != none || test $LOCALE_ZH_CN != none; then
61             AC_RUN_IFELSE(
62               [AC_LANG_SOURCE([[
63 #include <locale.h>
64 #include <string.h>
65 /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
66    <wchar.h>.
67    BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
68    included before <wchar.h>.  */
69 #include <stddef.h>
70 #include <stdio.h>
71 #include <time.h>
72 #include <wchar.h>
73 int main ()
75   int result = 0;
76   if (setlocale (LC_ALL, "$LOCALE_FR") != NULL)
77     {
78       if (wcrtomb (NULL, 0, NULL) != 1)
79         result |= 1;
80     }
81   if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL)
82     {
83       if (wcrtomb (NULL, 0, NULL) != 1)
84         result |= 2;
85     }
86   if (setlocale (LC_ALL, "$LOCALE_JA") != NULL)
87     {
88       if (wcrtomb (NULL, 0, NULL) != 1)
89         result |= 4;
90     }
91   if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL)
92     {
93       if (wcrtomb (NULL, 0, NULL) != 1)
94         result |= 8;
95     }
96   return result;
97 }]])],
98               [gl_cv_func_wcrtomb_retval=yes],
99               [gl_cv_func_wcrtomb_retval=no],
100               [:])
101           fi
102         ])
103       case "$gl_cv_func_wcrtomb_retval" in
104         *yes) ;;
105         *) REPLACE_WCRTOMB=1 ;;
106       esac
107     fi
108   fi
111 # Prerequisites of lib/wcrtomb.c.
112 AC_DEFUN([gl_PREREQ_WCRTOMB], [
113   :