]> Savannah Git Hosting - gnulib.git/commitdiff
x-to-1: Accept additional help2man arguments.
authorBruno Haible <bruno@clisp.org>
Thu, 9 Feb 2023 02:42:39 +0000 (03:42 +0100)
committerBruno Haible <bruno@clisp.org>
Thu, 9 Feb 2023 02:42:39 +0000 (03:42 +0100)
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.

ChangeLog
build-aux/x-to-1.in

index 1e2a4e2e9d1d54e22b2c72a6e1e51c46cb516af7..9b7a6fee50539040b2bb78a15b70da50490a9c15 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2023-02-08  Bruno Haible  <bruno@clisp.org>
+
+       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.
+
 2023-02-08  Bruno Haible  <bruno@clisp.org>
 
        x-to-1: Document the configure-time prerequisites.
index 6dc01157f51460321b7840727cd4dfc6261ae44c..daa37c85aa3cd45f560ba35793228303e30596f6 100644 (file)
 # 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