xref: /freebsd/contrib/openpam/missing (revision 45538173c120eadca115fd7e56c657905bf73771)
1ca236e63SDag-Erling Smørgrav#! /bin/sh
2*45538173SDag-Erling Smørgrav# Common wrapper for a few potentially missing GNU and other programs.
3b33ab329SDag-Erling Smørgrav
4*45538173SDag-Erling Smørgravscriptversion=2024-06-07.14; # UTC
5b33ab329SDag-Erling Smørgrav
6*45538173SDag-Erling Smørgrav# shellcheck disable=SC2006,SC2268 # we must support pre-POSIX shells
7*45538173SDag-Erling Smørgrav
8*45538173SDag-Erling Smørgrav# Copyright (C) 1996-2024 Free Software Foundation, Inc.
9ce77a8d6SDag-Erling Smørgrav# Originally written by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
10ca236e63SDag-Erling Smørgrav
11ca236e63SDag-Erling Smørgrav# This program is free software; you can redistribute it and/or modify
12ca236e63SDag-Erling Smørgrav# it under the terms of the GNU General Public License as published by
13ca236e63SDag-Erling Smørgrav# the Free Software Foundation; either version 2, or (at your option)
14ca236e63SDag-Erling Smørgrav# any later version.
15ca236e63SDag-Erling Smørgrav
16ca236e63SDag-Erling Smørgrav# This program is distributed in the hope that it will be useful,
17ca236e63SDag-Erling Smørgrav# but WITHOUT ANY WARRANTY; without even the implied warranty of
18ca236e63SDag-Erling Smørgrav# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19ca236e63SDag-Erling Smørgrav# GNU General Public License for more details.
20ca236e63SDag-Erling Smørgrav
21ca236e63SDag-Erling Smørgrav# You should have received a copy of the GNU General Public License
2223d17223SDag-Erling Smørgrav# along with this program.  If not, see <https://www.gnu.org/licenses/>.
23ca236e63SDag-Erling Smørgrav
24ca236e63SDag-Erling Smørgrav# As a special exception to the GNU General Public License, if you
25ca236e63SDag-Erling Smørgrav# distribute this file as part of a program that contains a
26ca236e63SDag-Erling Smørgrav# configuration script generated by Autoconf, you may include it under
27ca236e63SDag-Erling Smørgrav# the same distribution terms that you use for the rest of that program.
28ca236e63SDag-Erling Smørgrav
29ca236e63SDag-Erling Smørgravif test $# -eq 0; then
30ce77a8d6SDag-Erling Smørgrav  echo 1>&2 "Try '$0 --help' for more information"
31ca236e63SDag-Erling Smørgrav  exit 1
32ca236e63SDag-Erling Smørgravfi
33ca236e63SDag-Erling Smørgrav
347f106882SDag-Erling Smørgravcase $1 in
35ce77a8d6SDag-Erling Smørgrav
36ce77a8d6SDag-Erling Smørgrav  --is-lightweight)
37ce77a8d6SDag-Erling Smørgrav    # Used by our autoconf macros to check whether the available missing
38ce77a8d6SDag-Erling Smørgrav    # script is modern enough.
39ce77a8d6SDag-Erling Smørgrav    exit 0
40ce77a8d6SDag-Erling Smørgrav    ;;
41ce77a8d6SDag-Erling Smørgrav
42ca236e63SDag-Erling Smørgrav  --run)
43ce77a8d6SDag-Erling Smørgrav    # Back-compat with the calling convention used by older automake.
44ca236e63SDag-Erling Smørgrav    shift
45ca236e63SDag-Erling Smørgrav    ;;
46ca236e63SDag-Erling Smørgrav
47ca236e63SDag-Erling Smørgrav  -h|--h|--he|--hel|--help)
48ca236e63SDag-Erling Smørgrav    echo "\
49ca236e63SDag-Erling Smørgrav$0 [OPTION]... PROGRAM [ARGUMENT]...
50ca236e63SDag-Erling Smørgrav
51ce77a8d6SDag-Erling SmørgravRun 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due
52ce77a8d6SDag-Erling Smørgravto PROGRAM being missing or too old.
53ca236e63SDag-Erling Smørgrav
54ca236e63SDag-Erling SmørgravOptions:
55ca236e63SDag-Erling Smørgrav  -h, --help      display this help and exit
56ca236e63SDag-Erling Smørgrav  -v, --version   output version information and exit
57ca236e63SDag-Erling Smørgrav
58ca236e63SDag-Erling SmørgravSupported PROGRAM values:
59*45538173SDag-Erling Smørgravaclocal autoconf autogen  autoheader autom4te automake autoreconf
60*45538173SDag-Erling Smørgravbison   flex     help2man lex        makeinfo perl     yacc
61b33ab329SDag-Erling Smørgrav
62ce77a8d6SDag-Erling SmørgravVersion suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and
63ce77a8d6SDag-Erling Smørgrav'g' are ignored when checking the name.
647f106882SDag-Erling Smørgrav
65*45538173SDag-Erling SmørgravReport bugs to <bug-automake@gnu.org>.
66*45538173SDag-Erling SmørgravGNU Automake home page: <https://www.gnu.org/software/automake/>.
67*45538173SDag-Erling SmørgravGeneral help using GNU software: <https://www.gnu.org/gethelp/>."
68fe980754SDag-Erling Smørgrav    exit $?
69ca236e63SDag-Erling Smørgrav    ;;
70ca236e63SDag-Erling Smørgrav
71ca236e63SDag-Erling Smørgrav  -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
72*45538173SDag-Erling Smørgrav    echo "missing (GNU Automake) $scriptversion"
73fe980754SDag-Erling Smørgrav    exit $?
74ca236e63SDag-Erling Smørgrav    ;;
75ca236e63SDag-Erling Smørgrav
76ca236e63SDag-Erling Smørgrav  -*)
77ce77a8d6SDag-Erling Smørgrav    echo 1>&2 "$0: unknown '$1' option"
78ce77a8d6SDag-Erling Smørgrav    echo 1>&2 "Try '$0 --help' for more information"
79ca236e63SDag-Erling Smørgrav    exit 1
80ca236e63SDag-Erling Smørgrav    ;;
81ca236e63SDag-Erling Smørgrav
82fe980754SDag-Erling Smørgravesac
83fe980754SDag-Erling Smørgrav
84ce77a8d6SDag-Erling Smørgrav# Run the given program, remember its exit status.
85ce77a8d6SDag-Erling Smørgrav"$@"; st=$?
86ce77a8d6SDag-Erling Smørgrav
87ce77a8d6SDag-Erling Smørgrav# If it succeeded, we are done.
88ce77a8d6SDag-Erling Smørgravtest $st -eq 0 && exit 0
89ce77a8d6SDag-Erling Smørgrav
90ce77a8d6SDag-Erling Smørgrav# Also exit now if we it failed (or wasn't found), and '--version' was
91ce77a8d6SDag-Erling Smørgrav# passed; such an option is passed most likely to detect whether the
92ce77a8d6SDag-Erling Smørgrav# program is present and works.
93ce77a8d6SDag-Erling Smørgravcase $2 in --version|--help) exit $st;; esac
94ce77a8d6SDag-Erling Smørgrav
95ce77a8d6SDag-Erling Smørgrav# Exit code 63 means version mismatch.  This often happens when the user
96ce77a8d6SDag-Erling Smørgrav# tries to use an ancient version of a tool on a file that requires a
97ce77a8d6SDag-Erling Smørgrav# minimum version.
98ce77a8d6SDag-Erling Smørgravif test $st -eq 63; then
99ce77a8d6SDag-Erling Smørgrav  msg="probably too old"
100ce77a8d6SDag-Erling Smørgravelif test $st -eq 127; then
101ce77a8d6SDag-Erling Smørgrav  # Program was missing.
102ce77a8d6SDag-Erling Smørgrav  msg="missing on your system"
103ce77a8d6SDag-Erling Smørgravelse
104ce77a8d6SDag-Erling Smørgrav  # Program was found and executed, but failed.  Give up.
105ce77a8d6SDag-Erling Smørgrav  exit $st
106ce77a8d6SDag-Erling Smørgravfi
107ce77a8d6SDag-Erling Smørgrav
10823d17223SDag-Erling Smørgravperl_URL=https://www.perl.org/
10923d17223SDag-Erling Smørgravflex_URL=https://github.com/westes/flex
11023d17223SDag-Erling Smørgravgnu_software_URL=https://www.gnu.org/software
111ce77a8d6SDag-Erling Smørgrav
112ce77a8d6SDag-Erling Smørgravprogram_details ()
113ce77a8d6SDag-Erling Smørgrav{
114ce77a8d6SDag-Erling Smørgrav  case $1 in
115*45538173SDag-Erling Smørgrav    aclocal|automake|autoreconf)
116ce77a8d6SDag-Erling Smørgrav      echo "The '$1' program is part of the GNU Automake package:"
117ce77a8d6SDag-Erling Smørgrav      echo "<$gnu_software_URL/automake>"
118ce77a8d6SDag-Erling Smørgrav      echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:"
119ce77a8d6SDag-Erling Smørgrav      echo "<$gnu_software_URL/autoconf>"
120ce77a8d6SDag-Erling Smørgrav      echo "<$gnu_software_URL/m4/>"
121ce77a8d6SDag-Erling Smørgrav      echo "<$perl_URL>"
122ce77a8d6SDag-Erling Smørgrav      ;;
123ce77a8d6SDag-Erling Smørgrav    autoconf|autom4te|autoheader)
124ce77a8d6SDag-Erling Smørgrav      echo "The '$1' program is part of the GNU Autoconf package:"
125ce77a8d6SDag-Erling Smørgrav      echo "<$gnu_software_URL/autoconf/>"
126ce77a8d6SDag-Erling Smørgrav      echo "It also requires GNU m4 and Perl in order to run:"
127ce77a8d6SDag-Erling Smørgrav      echo "<$gnu_software_URL/m4/>"
128ce77a8d6SDag-Erling Smørgrav      echo "<$perl_URL>"
129ce77a8d6SDag-Erling Smørgrav      ;;
130*45538173SDag-Erling Smørgrav    *)
131*45538173SDag-Erling Smørgrav      :
132*45538173SDag-Erling Smørgrav      ;;
133ce77a8d6SDag-Erling Smørgrav  esac
134ce77a8d6SDag-Erling Smørgrav}
135ce77a8d6SDag-Erling Smørgrav
136ce77a8d6SDag-Erling Smørgravgive_advice ()
137ce77a8d6SDag-Erling Smørgrav{
138ce77a8d6SDag-Erling Smørgrav  # Normalize program name to check for.
139ce77a8d6SDag-Erling Smørgrav  normalized_program=`echo "$1" | sed '
1407f106882SDag-Erling Smørgrav    s/^gnu-//; t
1417f106882SDag-Erling Smørgrav    s/^gnu//; t
1427f106882SDag-Erling Smørgrav    s/^g//; t'`
1437f106882SDag-Erling Smørgrav
144ce77a8d6SDag-Erling Smørgrav  printf '%s\n' "'$1' is $msg."
145fe980754SDag-Erling Smørgrav
146ce77a8d6SDag-Erling Smørgrav  configure_deps="'configure.ac' or m4 files included by 'configure.ac'"
147*45538173SDag-Erling Smørgrav  autoheader_deps="'acconfig.h'"
148*45538173SDag-Erling Smørgrav  automake_deps="'Makefile.am'"
149*45538173SDag-Erling Smørgrav  aclocal_deps="'acinclude.m4'"
150ce77a8d6SDag-Erling Smørgrav  case $normalized_program in
151*45538173SDag-Erling Smørgrav    aclocal*)
152*45538173SDag-Erling Smørgrav      echo "You should only need it if you modified $aclocal_deps or"
153*45538173SDag-Erling Smørgrav      echo "$configure_deps."
154*45538173SDag-Erling Smørgrav      ;;
1557f106882SDag-Erling Smørgrav    autoconf*)
156*45538173SDag-Erling Smørgrav      echo "You should only need it if you modified $configure_deps."
157*45538173SDag-Erling Smørgrav      ;;
158*45538173SDag-Erling Smørgrav    autogen*)
159*45538173SDag-Erling Smørgrav      echo "You should only need it if you modified a '.def' or '.tpl' file."
160*45538173SDag-Erling Smørgrav      echo "You may want to install the GNU AutoGen package:"
161*45538173SDag-Erling Smørgrav      echo "<$gnu_software_URL/autogen/>"
162ca236e63SDag-Erling Smørgrav      ;;
1637f106882SDag-Erling Smørgrav    autoheader*)
164*45538173SDag-Erling Smørgrav      echo "You should only need it if you modified $autoheader_deps or"
165ce77a8d6SDag-Erling Smørgrav      echo "$configure_deps."
166ca236e63SDag-Erling Smørgrav      ;;
167b33ab329SDag-Erling Smørgrav    automake*)
168*45538173SDag-Erling Smørgrav      echo "You should only need it if you modified $automake_deps or"
169ce77a8d6SDag-Erling Smørgrav      echo "$configure_deps."
170ce77a8d6SDag-Erling Smørgrav      ;;
1717f106882SDag-Erling Smørgrav    autom4te*)
172ce77a8d6SDag-Erling Smørgrav      echo "You might have modified some maintainer files that require"
173f3b0ac34SDag-Erling Smørgrav      echo "the 'autom4te' program to be rebuilt."
174*45538173SDag-Erling Smørgrav      ;;
175*45538173SDag-Erling Smørgrav    autoreconf*)
176*45538173SDag-Erling Smørgrav      echo "You should only need it if you modified $aclocal_deps or"
177*45538173SDag-Erling Smørgrav      echo "$automake_deps or $autoheader_deps or $automake_deps or"
178*45538173SDag-Erling Smørgrav      echo "$configure_deps."
179b33ab329SDag-Erling Smørgrav      ;;
1807f106882SDag-Erling Smørgrav    bison*|yacc*)
181ce77a8d6SDag-Erling Smørgrav      echo "You should only need it if you modified a '.y' file."
182ce77a8d6SDag-Erling Smørgrav      echo "You may want to install the GNU Bison package:"
183ce77a8d6SDag-Erling Smørgrav      echo "<$gnu_software_URL/bison/>"
184ca236e63SDag-Erling Smørgrav      ;;
1857f106882SDag-Erling Smørgrav    help2man*)
186ce77a8d6SDag-Erling Smørgrav      echo "You should only need it if you modified a dependency" \
187ce77a8d6SDag-Erling Smørgrav           "of a man page."
188ce77a8d6SDag-Erling Smørgrav      echo "You may want to install the GNU Help2man package:"
189ce77a8d6SDag-Erling Smørgrav      echo "<$gnu_software_URL/help2man/>"
190ca236e63SDag-Erling Smørgrav    ;;
191*45538173SDag-Erling Smørgrav    lex*|flex*)
192*45538173SDag-Erling Smørgrav      echo "You should only need it if you modified a '.l' file."
193*45538173SDag-Erling Smørgrav      echo "You may want to install the Fast Lexical Analyzer package:"
194*45538173SDag-Erling Smørgrav      echo "<$flex_URL>"
195*45538173SDag-Erling Smørgrav      ;;
1967f106882SDag-Erling Smørgrav    makeinfo*)
197ce77a8d6SDag-Erling Smørgrav      echo "You should only need it if you modified a '.texi' file, or"
198ce77a8d6SDag-Erling Smørgrav      echo "any other file indirectly affecting the aspect of the manual."
199ce77a8d6SDag-Erling Smørgrav      echo "You might want to install the Texinfo package:"
200ce77a8d6SDag-Erling Smørgrav      echo "<$gnu_software_URL/texinfo/>"
201ce77a8d6SDag-Erling Smørgrav      echo "The spurious makeinfo call might also be the consequence of"
202ce77a8d6SDag-Erling Smørgrav      echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might"
203ce77a8d6SDag-Erling Smørgrav      echo "want to install GNU make:"
204ce77a8d6SDag-Erling Smørgrav      echo "<$gnu_software_URL/make/>"
205ca236e63SDag-Erling Smørgrav      ;;
206*45538173SDag-Erling Smørgrav    perl*)
207*45538173SDag-Erling Smørgrav      echo "You should only need it to run GNU Autoconf, GNU Automake, "
208*45538173SDag-Erling Smørgrav      echo "  assorted other tools, or if you modified a Perl source file."
209*45538173SDag-Erling Smørgrav      echo "You may want to install the Perl 5 language interpreter:"
210*45538173SDag-Erling Smørgrav      echo "<$perl_URL>"
211*45538173SDag-Erling Smørgrav      ;;
212ca236e63SDag-Erling Smørgrav    *)
213ce77a8d6SDag-Erling Smørgrav      echo "You might have modified some files without having the proper"
214ce77a8d6SDag-Erling Smørgrav      echo "tools for further handling them.  Check the 'README' file, it"
215ce77a8d6SDag-Erling Smørgrav      echo "often tells you about the needed prerequisites for installing"
216ce77a8d6SDag-Erling Smørgrav      echo "this package.  You may also peek at any GNU archive site, in"
217ce77a8d6SDag-Erling Smørgrav      echo "case some other package contains this missing '$1' program."
218ca236e63SDag-Erling Smørgrav      ;;
219ca236e63SDag-Erling Smørgrav  esac
220*45538173SDag-Erling Smørgrav  program_details "$normalized_program"
221ce77a8d6SDag-Erling Smørgrav}
222ca236e63SDag-Erling Smørgrav
223ce77a8d6SDag-Erling Smørgravgive_advice "$1" | sed -e '1s/^/WARNING: /' \
224ce77a8d6SDag-Erling Smørgrav                       -e '2,$s/^/         /' >&2
225ce77a8d6SDag-Erling Smørgrav
226ce77a8d6SDag-Erling Smørgrav# Propagate the correct exit status (expected to be 127 for a program
227ce77a8d6SDag-Erling Smørgrav# not found, 63 for a program that failed due to version mismatch).
228ce77a8d6SDag-Erling Smørgravexit $st
229b33ab329SDag-Erling Smørgrav
230b33ab329SDag-Erling Smørgrav# Local variables:
23123d17223SDag-Erling Smørgrav# eval: (add-hook 'before-save-hook 'time-stamp)
232b33ab329SDag-Erling Smørgrav# time-stamp-start: "scriptversion="
233b33ab329SDag-Erling Smørgrav# time-stamp-format: "%:y-%02m-%02d.%02H"
23423d17223SDag-Erling Smørgrav# time-stamp-time-zone: "UTC0"
2357f106882SDag-Erling Smørgrav# time-stamp-end: "; # UTC"
236b33ab329SDag-Erling Smørgrav# End:
237