From 15c81590df7ef0ff8ec387b259fee8dac8ceda0e Mon Sep 17 00:00:00 2001 From: Nick Bowler Date: Fri, 17 Nov 2023 00:28:11 -0500 Subject: [PATCH] help: Fix NLS test on HP-UX 11. This system has a "C.utf8" locale which appears disfunctional, all other utf8 locales are OK. So change the locale probe to avoid this one if possible. The HP-UX shell also seems to have some trouble with UTF-8 (especially if the user set this C.utf8 locale where it just barfs on everything), so rework the test to not involve the shell trying to decode strings. --- snippet/test-nls.at | 35 ++++++++++++++++++++++++----------- tests/functions.at | 24 ++++++++++++++++-------- 2 files changed, 40 insertions(+), 19 deletions(-) diff --git a/snippet/test-nls.at b/snippet/test-nls.at index 103cb5b..c713abb 100644 --- a/snippet/test-nls.at +++ b/snippet/test-nls.at @@ -39,7 +39,8 @@ test_find_locale_charmap '[[Uu][Tt][Ff]-*8]']) # standard output. # # By default, the user's own LC_CTYPE is preferred. Otherwise, the first -# match in the output of "locale -a" is chosen. +# match in the output of "locale -a" is chosen, unless that starts with +# "C" in which case we prefer the next one. m4_defun_once([_TEST_NLS_SETUP], [m4_divert_push([HEADER-COPYRIGHT]) # save user locale setting before m4sh clobbers it @@ -59,19 +60,31 @@ test_find_locale_charmap () { $[1] = ""; sub(/^ "/, ""); sub(/"$/, ""); print }'` - LC_ALL=$save_LC_ALL + LC_ALL=$save_LC_ALL found_locale= if test_check_locale_charmap "$init_ctype" "$re"; then - AS_ECHO(["$init_ctype"]) - return; + found_locale=$init_ctype fi - set x `locale -a | grep "$re"`; shift - for arg; do - if test_check_locale_charmap "$arg" "$re"; then - AS_ECHO(["$arg"]) - return; - fi - done + case $found_locale in + C*|"") + set x `locale -a | grep "$re"`; shift + for arg; do + if test_check_locale_charmap "$arg" "$re"; then + found_locale=$arg; + case $found_locale in + C*) :;; + *) break ;; + esac + fi + done + ;; + esac + + test ${found_locale+y} && { + AS_ECHO(["found matching locale $found_locale"]) >&AS_MESSAGE_LOG_FD + LC_ALL=$found_locale locale >&AS_MESSAGE_LOG_FD 2>&1 + AS_ECHO(["$found_locale"]) + } } m4_divert_pop([PREPARE_TESTS]) ]) diff --git a/tests/functions.at b/tests/functions.at index fd1e10f..e1d556b 100644 --- a/tests/functions.at +++ b/tests/functions.at @@ -116,14 +116,22 @@ AT_KEYWORDS([help nls]) AT_SKIP_IF([test ! -x "$builddir/t/helpopt3"]) TEST_UTF8_LOCALE([locale_utf8]) -AT_CHECK([m4_join([ ], - [LC_ALL=$locale_utf8 "$builddir/t/helpopt3"], - [--全角], - [--ハンカク], - )], [0], -[[ --全角 8 - --ハンカク 8 -]]) +# Avoid some deficient shell parsers barfing on UTF-8 sequences by +# generating them this way using octal escapes. +$AWK -f - >expout <<'EOF' +BEGIN { + zenkaku = "--\345\205\250\350\247\222"; + hankaku = "--\357\276\212\357\276\235\357\275\266\357\275\270" + + print zenkaku, hankaku >"args" + + print " " zenkaku "\t" "8" + print " " hankaku "\t" "8" +} +EOF + +AT_CHECK([LC_ALL=$locale_utf8 xargs "$builddir/t/helpopt3"