diff options
Diffstat (limited to 'gnulib-m4/getlocalename_l.m4')
| -rw-r--r-- | gnulib-m4/getlocalename_l.m4 | 119 | 
1 files changed, 119 insertions, 0 deletions
| diff --git a/gnulib-m4/getlocalename_l.m4 b/gnulib-m4/getlocalename_l.m4 new file mode 100644 index 00000000..629e510b --- /dev/null +++ b/gnulib-m4/getlocalename_l.m4 @@ -0,0 +1,119 @@ +# getlocalename_l.m4 +# serial 4 +dnl Copyright (C) 2025 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. +    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 () +{ +  const char *ret = getlocalename_l (LC_COLLATE, LC_GLOBAL_LOCALE); +  return strlen (ret) == 0; +}]])], +         [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" ;; +            *)       # 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 +]) | 
