xref: /Universal-ctags/m4/btowc.m4 (revision 820c1a8d46849a90376d8eb15b319ac05439f656)
1*820c1a8dSHiroo HAYASHI# btowc.m4 serial 12
2*820c1a8dSHiroo HAYASHIdnl Copyright (C) 2008-2021 Free Software Foundation, Inc.
3*820c1a8dSHiroo HAYASHIdnl This file is free software; the Free Software Foundation
4*820c1a8dSHiroo HAYASHIdnl gives unlimited permission to copy and/or distribute it,
5*820c1a8dSHiroo HAYASHIdnl with or without modifications, as long as this notice is preserved.
6*820c1a8dSHiroo HAYASHI
7*820c1a8dSHiroo HAYASHIAC_DEFUN([gl_FUNC_BTOWC],
8*820c1a8dSHiroo HAYASHI[
9*820c1a8dSHiroo HAYASHI  AC_REQUIRE([gl_WCHAR_H_DEFAULTS])
10*820c1a8dSHiroo HAYASHI
11*820c1a8dSHiroo HAYASHI  dnl Check whether <wchar.h> is usable at all, first. Otherwise the test
12*820c1a8dSHiroo HAYASHI  dnl program below may lead to an endless loop. See
13*820c1a8dSHiroo HAYASHI  dnl <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=42440>.
14*820c1a8dSHiroo HAYASHI  AC_REQUIRE([gl_WCHAR_H_INLINE_OK])
15*820c1a8dSHiroo HAYASHI
16*820c1a8dSHiroo HAYASHI  AC_CHECK_FUNCS_ONCE([btowc])
17*820c1a8dSHiroo HAYASHI  if test $ac_cv_func_btowc = no; then
18*820c1a8dSHiroo HAYASHI    HAVE_BTOWC=0
19*820c1a8dSHiroo HAYASHI  else
20*820c1a8dSHiroo HAYASHI
21*820c1a8dSHiroo HAYASHI    AC_REQUIRE([AC_PROG_CC])
22*820c1a8dSHiroo HAYASHI    AC_REQUIRE([gt_LOCALE_FR])
23*820c1a8dSHiroo HAYASHI    AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
24*820c1a8dSHiroo HAYASHI
25*820c1a8dSHiroo HAYASHI    dnl Cygwin 1.7.2 btowc('\0') is WEOF, not 0.
26*820c1a8dSHiroo HAYASHI    AC_CACHE_CHECK([whether btowc(0) is correct],
27*820c1a8dSHiroo HAYASHI      [gl_cv_func_btowc_nul],
28*820c1a8dSHiroo HAYASHI      [
29*820c1a8dSHiroo HAYASHI        AC_RUN_IFELSE(
30*820c1a8dSHiroo HAYASHI          [AC_LANG_SOURCE([[
31*820c1a8dSHiroo HAYASHI#include <wchar.h>
32*820c1a8dSHiroo HAYASHIint main ()
33*820c1a8dSHiroo HAYASHI{
34*820c1a8dSHiroo HAYASHI  if (btowc ('\0') != 0)
35*820c1a8dSHiroo HAYASHI    return 1;
36*820c1a8dSHiroo HAYASHI  return 0;
37*820c1a8dSHiroo HAYASHI}]])],
38*820c1a8dSHiroo HAYASHI          [gl_cv_func_btowc_nul=yes],
39*820c1a8dSHiroo HAYASHI          [gl_cv_func_btowc_nul=no],
40*820c1a8dSHiroo HAYASHI          [
41*820c1a8dSHiroo HAYASHIchangequote(,)dnl
42*820c1a8dSHiroo HAYASHI           case "$host_os" in
43*820c1a8dSHiroo HAYASHI                      # Guess no on Cygwin.
44*820c1a8dSHiroo HAYASHI             cygwin*) gl_cv_func_btowc_nul="guessing no" ;;
45*820c1a8dSHiroo HAYASHI                      # Guess yes on native Windows.
46*820c1a8dSHiroo HAYASHI             mingw*)  gl_cv_func_btowc_nul="guessing yes" ;;
47*820c1a8dSHiroo HAYASHI                      # Guess yes otherwise.
48*820c1a8dSHiroo HAYASHI             *)       gl_cv_func_btowc_nul="guessing yes" ;;
49*820c1a8dSHiroo HAYASHI           esac
50*820c1a8dSHiroo HAYASHIchangequote([,])dnl
51*820c1a8dSHiroo HAYASHI          ])
52*820c1a8dSHiroo HAYASHI      ])
53*820c1a8dSHiroo HAYASHI
54*820c1a8dSHiroo HAYASHI    dnl IRIX 6.5 btowc(EOF) is 0xFF, not WEOF.
55*820c1a8dSHiroo HAYASHI    AC_CACHE_CHECK([whether btowc(EOF) is correct],
56*820c1a8dSHiroo HAYASHI      [gl_cv_func_btowc_eof],
57*820c1a8dSHiroo HAYASHI      [
58*820c1a8dSHiroo HAYASHI        dnl Initial guess, used when cross-compiling or when no suitable locale
59*820c1a8dSHiroo HAYASHI        dnl is present.
60*820c1a8dSHiroo HAYASHIchangequote(,)dnl
61*820c1a8dSHiroo HAYASHI        case "$host_os" in
62*820c1a8dSHiroo HAYASHI                  # Guess no on IRIX.
63*820c1a8dSHiroo HAYASHI          irix*)  gl_cv_func_btowc_eof="guessing no" ;;
64*820c1a8dSHiroo HAYASHI                  # Guess yes on native Windows.
65*820c1a8dSHiroo HAYASHI          mingw*) gl_cv_func_btowc_eof="guessing yes" ;;
66*820c1a8dSHiroo HAYASHI                  # Guess yes otherwise.
67*820c1a8dSHiroo HAYASHI          *)      gl_cv_func_btowc_eof="guessing yes" ;;
68*820c1a8dSHiroo HAYASHI        esac
69*820c1a8dSHiroo HAYASHIchangequote([,])dnl
70*820c1a8dSHiroo HAYASHI        if test $LOCALE_FR != none; then
71*820c1a8dSHiroo HAYASHI          AC_RUN_IFELSE(
72*820c1a8dSHiroo HAYASHI            [AC_LANG_SOURCE([[
73*820c1a8dSHiroo HAYASHI#include <locale.h>
74*820c1a8dSHiroo HAYASHI#include <stdio.h>
75*820c1a8dSHiroo HAYASHI#include <wchar.h>
76*820c1a8dSHiroo HAYASHIint main ()
77*820c1a8dSHiroo HAYASHI{
78*820c1a8dSHiroo HAYASHI  if (setlocale (LC_ALL, "$LOCALE_FR") != NULL)
79*820c1a8dSHiroo HAYASHI    {
80*820c1a8dSHiroo HAYASHI      if (btowc (EOF) != WEOF)
81*820c1a8dSHiroo HAYASHI        return 1;
82*820c1a8dSHiroo HAYASHI    }
83*820c1a8dSHiroo HAYASHI  return 0;
84*820c1a8dSHiroo HAYASHI}]])],
85*820c1a8dSHiroo HAYASHI            [gl_cv_func_btowc_eof=yes],
86*820c1a8dSHiroo HAYASHI            [gl_cv_func_btowc_eof=no],
87*820c1a8dSHiroo HAYASHI            [:])
88*820c1a8dSHiroo HAYASHI        fi
89*820c1a8dSHiroo HAYASHI      ])
90*820c1a8dSHiroo HAYASHI
91*820c1a8dSHiroo HAYASHI    case "$gl_cv_func_btowc_nul" in
92*820c1a8dSHiroo HAYASHI      *yes) ;;
93*820c1a8dSHiroo HAYASHI      *) REPLACE_BTOWC=1 ;;
94*820c1a8dSHiroo HAYASHI    esac
95*820c1a8dSHiroo HAYASHI    case "$gl_cv_func_btowc_eof" in
96*820c1a8dSHiroo HAYASHI      *yes) ;;
97*820c1a8dSHiroo HAYASHI      *) REPLACE_BTOWC=1 ;;
98*820c1a8dSHiroo HAYASHI    esac
99*820c1a8dSHiroo HAYASHI  fi
100*820c1a8dSHiroo HAYASHI])
101*820c1a8dSHiroo HAYASHI
102*820c1a8dSHiroo HAYASHI# Prerequisites of lib/btowc.c.
103*820c1a8dSHiroo HAYASHIAC_DEFUN([gl_PREREQ_BTOWC], [
104*820c1a8dSHiroo HAYASHI  :
105*820c1a8dSHiroo HAYASHI])
106