-dnl Copyright © 2015, 2021-2023 Nick Bowler
+dnl Copyright © 2015, 2021-2024 Nick Bowler
dnl
dnl License WTFPL2: Do What The Fuck You Want To Public License, version 2.
dnl This is free software: you are free to do what the fuck you want to.
AT_SETUP([help_print_optstring])
AT_KEYWORDS([help])
-AT_SKIP_IF([test ! -x "$builddir/t/helpopt"])
-
-AT_CHECK([m4_join([ ],
- ["$builddir/t/helpopt"],
- [--foo],
- [--bar -b],
- [--baz ARG],
- [--baz -B ARG],
- [--quux '@<:@ARG@:>@'],
- [--quux -q '@<:@ARG@:>@'],
- [--hello-this-is-a-very-long-option 20],
- [--hello-this-is-a-very-long-option 50],
- [--not-long 12],
- [--flagged -f \&])], [0],
+AT_DATA([expout],
[[ --foo 6
-b, --bar 10
--baz=ARG 10
--flagged 10
]])
-AT_CLEANUP
-
-AT_SETUP([help_print_optstring (getopt_long_only)])
-AT_KEYWORDS([help])
-
-AT_SKIP_IF([test ! -x "$builddir/t/helpopt2"])
+# Some very old printf implementations return 0 on success instead of the
+# number of bytes written. The help_print_optstring function is not fully
+# functional in this case. It should fallback to printing a newline and
+# returning 0 so the overall --help output should be mostly acceptable.
+#
+# We verify that this indeed works properly by adjusting the expected
+# output accordingly, but ...
+AS_IF(["$builddir/t/printfchk" >/dev/null], [ancient_printf=false],
+[[sed -n -e 's/ [0-9]*$//' -e '/^ *-/p' -e 's/^ *-.*/ 0/p' expout >expout.tmp
+mv -f expout.tmp expout
+ancient_printf=:]])
AT_CHECK([m4_join([ ],
- ["$builddir/t/helpopt2"],
+ ["$builddir/t/helpopt"],
[--foo],
[--bar -b],
[--baz ARG],
[--hello-this-is-a-very-long-option 20],
[--hello-this-is-a-very-long-option 50],
[--not-long 12],
- [--flagged -f \&])], [0],
+ [--flagged -f \&])], [0], [expout])
+
+# ... we ultimately skip the test so there's an indication (other than an
+# outright failure) that the function is not working completely.
+AT_SKIP_IF([$ancient_printf])
+
+AT_CLEANUP
+
+AT_SETUP([help_print_optstring (getopt_long_only)])
+AT_KEYWORDS([help])
+
+AT_DATA([expout],
[[ -foo 5
-bar 5
-baz ARG 9
-flagged 9
]])
+# Some very old printf implementations return 0 on success instead of the
+# number of bytes written. The help_print_optstring function is not fully
+# functional in this case. It should fallback to printing a newline and
+# returning 0 so the overall --help output should be mostly acceptable.
+#
+# We verify that this indeed works properly by adjusting the expected
+# output accordingly, but ...
+AS_IF(["$builddir/t/printfchk" >/dev/null], [ancient_printf=false],
+[[sed -n -e 's/ [0-9]*$//' -e '/^ *-/p' -e 's/^ *-.*/ 0/p' expout >expout.tmp
+mv -f expout.tmp expout
+ancient_printf=:]])
+
+AT_CHECK([m4_join([ ],
+ ["$builddir/t/helpopt2"],
+ [--foo],
+ [--bar -b],
+ [--baz ARG],
+ [--baz -B ARG],
+ [--quux '@<:@ARG@:>@'],
+ [--quux -q '@<:@ARG@:>@'],
+ [--hello-this-is-a-very-long-option 20],
+ [--hello-this-is-a-very-long-option 50],
+ [--not-long 12],
+ [--flagged -f \&])], [0], [expout])
+
+# ... we ultimately skip the test so there's an indication (other than an
+# outright failure) that the function is not working completely.
+AT_SKIP_IF([$ancient_printf])
+
AT_CLEANUP
AT_SETUP([help_print_optstring (NLS fullwidth/halfwidth)])
# Avoid some deficient shell parsers barfing on UTF-8 sequences by
# generating them this way using octal escapes.
-$AWK -f - >expout <<'EOF'
-BEGIN {
+$AWK 'BEGIN {
zenkaku = "--\345\205\250\350\247\222";
hankaku = "--\357\276\212\357\276\235\357\275\266\357\275\270"
print " " zenkaku "\t" "7"
print " " hankaku "\t" "7"
-}
-EOF
+}' >expout </dev/null
AT_CHECK([LC_ALL=$locale_utf8 xargs "$builddir/t/helpopt3" <args],
[0], [expout])