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)])