bug-gnulib
[Top][All Lists]
Advanced

[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.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]