1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
|
# getlocalename_l.m4
# serial 5
dnl Copyright (C) 2025-2026 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl This file is offered as-is, without any warranty.
AC_DEFUN([gl_FUNC_GETLOCALENAME_L_SIMPLE],
[
AC_REQUIRE([gl_LOCALE_H_DEFAULTS])
dnl Persuade glibc <locale.h> to declare getlocalename_l().
AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
AC_REQUIRE([gl_FUNC_GETLOCALENAME_L_UNSAFE])
])
# Prerequisites of lib/getlocalename_l.c.
AC_DEFUN([gl_PREREQ_GETLOCALENAME_L_SIMPLE],
[
:
])
AC_DEFUN_ONCE([gl_FUNC_GETLOCALENAME_L_UNSAFE],
[
AC_REQUIRE([gl_LOCALE_H_DEFAULTS])
AC_REQUIRE([gl_FUNC_SETLOCALE_NULL])
AC_CHECK_FUNCS_ONCE([getlocalename_l])
if test $ac_cv_func_getlocalename_l = yes; then
dnl Check against the Cygwin 3.6.0 bug: It returns an invalid pointer when
dnl the second argument is LC_GLOBAL_LOCALE.
dnl Check against a Haiku >= hrev59293 oddity: It returns "POSIX" instead
dnl of "C". We prefer "C".
AC_REQUIRE([AC_CANONICAL_HOST])
AC_CACHE_CHECK([whether getlocalename_l works],
[gl_cv_func_getlocalename_l_works],
[AC_RUN_IFELSE(
[AC_LANG_SOURCE([[
#include <locale.h>
#include <string.h>
int main ()
{
int result = 0;
/* Check against the Cygwin bug. */
{
const char *ret = getlocalename_l (LC_COLLATE, LC_GLOBAL_LOCALE);
if (strlen (ret) == 0)
result |= 1;
}
/* Check against the Haiku oddity. */
{
const char *ret =
getlocalename_l (LC_COLLATE, newlocale (LC_ALL_MASK, "C", NULL));
if (strcmp (ret, "C") != 0)
result |= 2;
}
return result;
}]])],
[gl_cv_func_getlocalename_l_works=yes],
[gl_cv_func_getlocalename_l_works=no],
[case "$host_os" in
cygwin*) # Guess no on Cygwin.
gl_cv_func_getlocalename_l_works="guessing no" ;;
haiku*) # Guess no on Haiku.
gl_cv_func_getlocalename_l_works="guessing no" ;;
*) # Guess yes otherwise.
gl_cv_func_getlocalename_l_works="guessing yes" ;;
esac
])
])
case "$gl_cv_func_getlocalename_l_works" in
*yes) ;;
*) REPLACE_GETLOCALENAME_L=1 ;;
esac
else
HAVE_GETLOCALENAME_L=0
fi
if test $HAVE_GETLOCALENAME_L = 0 || test $REPLACE_GETLOCALENAME_L = 1; then
GETLOCALENAME_L_LIB="$SETLOCALE_NULL_LIB"
else
GETLOCALENAME_L_LIB=
fi
dnl GETLOCALENAME_L_LIB is expected to be '-pthread' or '-lpthread' on AIX
dnl with gcc or xlc, and empty otherwise.
AC_SUBST([GETLOCALENAME_L_LIB])
])
# Prerequisites of lib/getlocalename_l-unsafe.c.
AC_DEFUN([gl_PREREQ_GETLOCALENAME_L_UNSAFE],
[
AC_REQUIRE([gl_LOCALE_H_DEFAULTS])
AC_REQUIRE([gl_LOCALE_T])
AC_REQUIRE([gt_INTL_THREAD_LOCALE_NAME])
AC_CHECK_HEADERS_ONCE([langinfo.h])
if test $HAVE_LOCALE_T = 1; then
gl_CHECK_FUNCS_ANDROID([newlocale], [[#include <locale.h>]])
gl_CHECK_FUNCS_ANDROID([duplocale], [[#include <locale.h>]])
gl_CHECK_FUNCS_ANDROID([freelocale], [[#include <locale.h>]])
gl_func_newlocale="$ac_cv_func_newlocale"
gl_func_duplocale="$ac_cv_func_duplocale"
gl_func_freelocale="$ac_cv_func_freelocale"
else
dnl In 2019, some versions of z/OS lack the locale_t type and have broken
dnl newlocale, duplocale, freelocale functions.
gl_cv_onwards_func_newlocale='future OS version'
gl_cv_onwards_func_duplocale='future OS version'
gl_cv_onwards_func_freelocale='future OS version'
gl_func_newlocale=no
gl_func_duplocale=no
gl_func_freelocale=no
fi
if test $gl_func_newlocale != yes; then
HAVE_NEWLOCALE=0
case "$gl_cv_onwards_func_newlocale" in
future*) REPLACE_NEWLOCALE=1 ;;
esac
fi
if test $gl_func_duplocale != yes; then
HAVE_DUPLOCALE=0
case "$gl_cv_onwards_func_duplocale" in
future*) REPLACE_DUPLOCALE=1 ;;
esac
fi
if test $gl_func_freelocale != yes; then
HAVE_FREELOCALE=0
case "$gl_cv_onwards_func_freelocale" in
future*) REPLACE_FREELOCALE=1 ;;
esac
fi
if test $gt_localename_enhances_locale_funcs = yes; then
REPLACE_NEWLOCALE=1
REPLACE_DUPLOCALE=1
REPLACE_FREELOCALE=1
fi
])
|