summaryrefslogtreecommitdiff
path: root/build-aux
diff options
context:
space:
mode:
authorBruno Haible <bruno@clisp.org>2023-02-09 03:42:39 +0100
committerBruno Haible <bruno@clisp.org>2023-02-09 03:42:39 +0100
commitbe8e401adf67e4e0b6638e8d396b6aaa0fd6834b (patch)
tree9a16a3343c5d014b6ce19915c62014b08a73d1e2 /build-aux
parent60f01e711ae6890c38b9d5e3712a6434ca9d7d59 (diff)
downloadgnulib-be8e401adf67e4e0b6638e8d396b6aaa0fd6834b.tar.gz
x-to-1: Accept additional help2man arguments.
Suggested by Reuben Thomas <rrt@sc3d.org> in <https://lists.gnu.org/archive/html/bug-gnulib/2023-02/msg00078.html>. * build-aux/x-to-1.in: Allow additional options after the HELP2MAN argument, and pass them down to help2man.
Diffstat (limited to 'build-aux')
-rw-r--r--build-aux/x-to-1.in58
1 files changed, 48 insertions, 10 deletions
diff --git a/build-aux/x-to-1.in b/build-aux/x-to-1.in
index 6dc01157f5..daa37c85aa 100644
--- a/build-aux/x-to-1.in
+++ b/build-aux/x-to-1.in
@@ -19,12 +19,13 @@
# This program creates a program's manual from the .x skeleton and its --help
# output.
#
-# Usage: x-to-1 [OPTIONS] PERL HELP2MAN EXECUTABLE PROGRAM.x PROGRAM.1
+# Usage: x-to-1 [OPTIONS] PERL HELP2MAN [HELP2MAN-OPTIONS] EXECUTABLE PROGRAM.x PROGRAM.1
# where
#
# PERL The file name of the perl program.
# HELP2MAN Either the file name of the help2man perl script, or a complete
# command such as "$PERL -w -- help2man".
+# HELP2MAN-OPTIONS Options to pass to the help2man perl script.
# EXECUTABLE The file name of the program to invoke with --help.
# PROGRAM The name of the program.
# PROGRAM.x The .x skeleton is a file containing manual page text that is
@@ -56,15 +57,34 @@ while true; do
esac
done
-if test $# != 5; then
- echo "Usage: x-to-1 [OPTIONS] PERL HELP2MAN executable program.x program.1" 1>&2
+if test $# -lt 5; then
+ echo "Usage: x-to-1 [OPTIONS] PERL HELP2MAN [HELP2MAN-OPTIONS] executable program.x program.1" 1>&2
exit 1
fi
-PERL="$1"
-HELP2MAN="$2"
-executable="$3"
-aux="$4"
-output="$5"
+
+# In order to construct a command that invokes HELP2MAN [HELP2MAN-OPTIONS] ...
+# we need 'eval'.
+command_for_print=
+command_for_eval=
+# Protecting special characters, hiding them from 'eval':
+# Double each backslash.
+sed_protect_1='s/\\/\\\\/g'
+# Escape each dollar, backquote, double-quote.
+sed_protect_2a='s/\$/\\$/g'
+sed_protect_2b='s/`/\\`/g'
+sed_protect_2c='s/"/\\"/g'
+# Add double-quotes at the beginning and end of the word.
+sed_protect_3a='1s/^/"/'
+sed_protect_3b='$s/$/"/'
+func_add_word_to_command ()
+{
+ command_for_print="${command_for_print:+$command_for_print }$1"
+ word_protected=`echo "$1" | sed -e "$sed_protect_1" -e "$sed_protect_2a" -e "$sed_protect_2b" -e "$sed_protect_2c" -e "$sed_protect_3a" -e "$sed_protect_3b"`
+ command_for_eval="${command_for_eval:+$command_for_eval }$word_protected"
+}
+
+PERL="$1"; shift
+HELP2MAN="$1"; shift
# Accommodate both possible forms of the HELP2MAN argument.
case "$HELP2MAN" in
@@ -72,6 +92,22 @@ case "$HELP2MAN" in
*) HELP2MAN="$PERL $HELP2MAN" ;;
esac
+# Do word-splitting of $HELP2MAN, but carefully.
+for word in $HELP2MAN; do
+ func_add_word_to_command "$word"
+done
+
+# Now grok the HELP2MAN-OPTIONS.
+while test $# -gt 3; do
+ arg="$1"; shift
+ func_add_word_to_command "$arg"
+done
+
+# Grok the final arguments.
+executable="$1"
+aux="$2"
+output="$3"
+
progname=`basename $aux .x`
# configure determined whether perl exists.
case "$PERL" in
@@ -89,9 +125,11 @@ case "$PERL" in
esac
if test @CROSS_COMPILING@ = no && test -f $executable && test $perlok = yes; then
echo "Updating man page $output"
- echo "$HELP2MAN --include=$aux $executable > $output"
+ func_add_word_to_command "--include=$aux"
+ func_add_word_to_command "$executable"
+ echo "$command_for_print > $output"
rm -f t-$progname.1
- $HELP2MAN --include=$aux $executable > t-$progname.1 || exit 1
+ eval $command_for_eval > t-$progname.1 || exit 1
if test -n "$update"; then
# In --update mode, don't overwrite the output if nothing would change.
if cmp t-$progname.1 $output >/dev/null 2>&1; then