Branch
Hash :
7b089321
Author :
Date :
2025-01-01T09:24:36
maint: run 'make update-copyright'
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145
#! /bin/sh
#
# Copyright (C) 2001-2025 Free Software Foundation, Inc.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
# This program creates a program's manual from the .x skeleton and its --help
# output.
#
# 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
# not part of the --help output. It is passed to help2man via
# its --include option. Its format is described in the help2man
# documentation.
# PROGRAM.1 The output file, a manual page in mandoc format.
#
# Options:
# --update Don't overwrite the output if nothing would change.
#
# Configure-time prerequisites:
#
# PERL Can be set through
# ac_aux_dir_abs=`cd $ac_aux_dir && pwd`
# AC_PATH_PROG([PERL], [perl], [$ac_aux_dir_abs/missing perl])
# or, alternatively, by the Gnulib 'perl' module.
#
# CROSS_COMPILING Can be set through
# CROSS_COMPILING=$cross_compiling
# AC_SUBST([CROSS_COMPILING])
# The variable 'cross_compiling' is set by AC_PROG_CC.
update=
while true; do
case "$1" in
--update) update=yes; shift;;
*) break;;
esac
done
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
# 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
"$PERL "*) ;;
*) 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
*"/missing perl")
perlok=no
;;
*)
# Determine whether all the perl modules that help2man needs are installed.
if $HELP2MAN --help >/dev/null 2>/dev/null; then
perlok=yes
else
perlok=no
fi
;;
esac
if test @CROSS_COMPILING@ = no && test -f $executable && test $perlok = yes; then
echo "Updating man page $output"
func_add_word_to_command "--include=$aux"
func_add_word_to_command "$executable"
echo "$command_for_print > $output"
rm -f t-$progname.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
rm -f t-$progname.1
else
mv t-$progname.1 $output
fi
else
mv t-$progname.1 $output
fi
else
echo "WARNING: The man page $output cannot be updated yet."
fi