--- m4-1.4.18/tests/localename.c.old 2016-12-31 13:54:43.000000000 +0000 +++ m4-1.4.18/tests/localename.c 2017-07-30 16:40:47.098541270 +0000 @@ -40,7 +40,7 @@ # if defined __APPLE__ && defined __MACH__ # include <xlocale.h> # endif -# if __GLIBC__ >= 2 && !defined __UCLIBC__ +# if defined __linux__ # include <langinfo.h> # endif # if !defined IN_LIBINTL @@ -2692,16 +2692,19 @@ locale_t thread_locale = uselocale (NULL); if (thread_locale != LC_GLOBAL_LOCALE) { -# if __GLIBC__ >= 2 && !defined __UCLIBC__ +# if defined(_NL_LOCALE_NAME) + const char *name = nl_langinfo(_NL_LOCALE_NAME(category)); +# if __GLIBC__ >= 2 && !defined __UCLIBC__ /* Work around an incorrect definition of the _NL_LOCALE_NAME macro in glibc < 2.12. See <http://sourceware.org/bugzilla/show_bug.cgi?id=10968>. */ - const char *name = - nl_langinfo (_NL_ITEM ((category), _NL_ITEM_INDEX (-1))); + if (name[0] == '\0') + name = nl_langinfo (_NL_ITEM ((category), _NL_ITEM_INDEX (-1))); if (name[0] == '\0') /* Fallback code for glibc < 2.4, which did not implement nl_langinfo (_NL_LOCALE_NAME (category)). */ name = thread_locale->__names[category]; +# endif return name; # elif defined __FreeBSD__ || (defined __APPLE__ && defined __MACH__) /* FreeBSD, Mac OS X */