[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
localename: fix test failure on AIX 7.2
From: |
Bruno Haible |
Subject: |
localename: fix test failure on AIX 7.2 |
Date: |
Thu, 19 Dec 2019 02:15:29 +0100 |
User-agent: |
KMail/5.1.3 (Linux/4.4.0-166-generic; KDE/5.18.0; x86_64; ; ) |
On AIX 7.2 I see this test failure:
FAIL: test-localename
../../gltests/test-localename.c:211: assertion 'strcmp (name, "fr_FR.UTF-8") ==
0' failed
The reason is that AIX does not give access to the names of the categories
in a locale_t object - neither through nl_langinfo, nor through internals
detailed in <sys/localedef.h>, nor through other API.
The fix is to enable some code (HAVE_NAMELESS_LOCALES) that I had originally
developed for Solaris 11.4, before realizing that there is a better approach
on Solaris.
2019-12-18 Bruno Haible <address@hidden>
localename: Fix test failure on AIX 7.2.
* m4/intl-thread-locale.m4 (gt_INTL_THREAD_LOCALE_NAME): Enable nameless
locales on AIX.
* lib/localename.c (gl_locale_name_thread_unsafe): Handle nameless
locales on AIX.
diff --git a/lib/localename.c b/lib/localename.c
index 65dddeb..5e51201 100644
--- a/lib/localename.c
+++ b/lib/localename.c
@@ -3191,6 +3191,8 @@ gl_locale_name_thread_unsafe (int category, const char
*categoryname)
return "";
}
# endif
+# elif defined _AIX && HAVE_NAMELESS_LOCALES
+ return get_locale_t_name (category, thread_locale);
# elif defined __CYGWIN__
/* Cygwin < 2.6 lacks uselocale and thread-local locales altogether.
Cygwin <= 2.6.1 lacks NL_LOCALE_NAME, requiring peeking inside
diff --git a/m4/intl-thread-locale.m4 b/m4/intl-thread-locale.m4
index e43f602..f74f116 100644
--- a/m4/intl-thread-locale.m4
+++ b/m4/intl-thread-locale.m4
@@ -1,4 +1,4 @@
-# intl-thread-locale.m4 serial 5
+# intl-thread-locale.m4 serial 6
dnl Copyright (C) 2015-2019 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
@@ -17,7 +17,7 @@ dnl Check how to retrieve the name of a per-thread locale
(POSIX locale_t).
dnl Sets gt_nameless_locales.
AC_DEFUN([gt_INTL_THREAD_LOCALE_NAME],
[
- AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+ AC_REQUIRE([AC_CANONICAL_HOST])
dnl Persuade Solaris <locale.h> to define 'locale_t'.
AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
@@ -119,18 +119,20 @@ int main ()
;;
esac
- dnl This code is for future use, in case we some day have to port to a
- dnl platform where the locale_t type does not provide access to the name of
- dnl each locale category. This code has the drawback that it requires the
- dnl gnulib overrides of 'newlocale', 'duplocale', 'freelocale', which is a
- dnl problem for GNU libunistring. Therefore try hard to avoid enabling this
- dnl code!
+ dnl This code is for platforms where the locale_t type does not provide
access
+ dnl to the name of each locale category. This code has the drawback that it
+ dnl requires the gnulib overrides of 'newlocale', 'duplocale', 'freelocale',
+ dnl which is a problem for GNU libunistring. Therefore try hard to avoid
+ dnl enabling this code!
gt_nameless_locales=no
- if false; then
- gt_nameless_locales=yes
- AC_DEFINE([HAVE_NAMELESS_LOCALES], [1],
- [Define if the locale_t type does not contain the name of each locale
category.])
- fi
+ case "$host_os" in
+ dnl It's needed on AIX 7.2.
+ aix*)
+ gt_nameless_locales=yes
+ AC_DEFINE([HAVE_NAMELESS_LOCALES], [1],
+ [Define if the locale_t type does not contain the name of each locale
category.])
+ ;;
+ esac
])
dnl Tests whether uselocale() exists and is usable.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- localename: fix test failure on AIX 7.2,
Bruno Haible <=