17914d74bSmrg#! /bin/sh
2e6d5e4e0Smrg# Common wrapper for a few potentially missing GNU programs.
37914d74bSmrg
40ea508b1Smrgscriptversion=2018-03-07.03; # UTC
57914d74bSmrg
60ea508b1Smrg# Copyright (C) 1996-2021 Free Software Foundation, Inc.
7e6d5e4e0Smrg# Originally written by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
87914d74bSmrg
97914d74bSmrg# This program is free software; you can redistribute it and/or modify
107914d74bSmrg# it under the terms of the GNU General Public License as published by
117914d74bSmrg# the Free Software Foundation; either version 2, or (at your option)
127914d74bSmrg# any later version.
137914d74bSmrg
147914d74bSmrg# This program is distributed in the hope that it will be useful,
157914d74bSmrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
167914d74bSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
177914d74bSmrg# GNU General Public License for more details.
187914d74bSmrg
197914d74bSmrg# You should have received a copy of the GNU General Public License
200ea508b1Smrg# along with this program.  If not, see <https://www.gnu.org/licenses/>.
217914d74bSmrg
227914d74bSmrg# As a special exception to the GNU General Public License, if you
237914d74bSmrg# distribute this file as part of a program that contains a
247914d74bSmrg# configuration script generated by Autoconf, you may include it under
257914d74bSmrg# the same distribution terms that you use for the rest of that program.
267914d74bSmrg
277914d74bSmrgif test $# -eq 0; then
28e6d5e4e0Smrg  echo 1>&2 "Try '$0 --help' for more information"
297914d74bSmrg  exit 1
307914d74bSmrgfi
317914d74bSmrg
32e6d5e4e0Smrgcase $1 in
337914d74bSmrg
34e6d5e4e0Smrg  --is-lightweight)
35e6d5e4e0Smrg    # Used by our autoconf macros to check whether the available missing
36e6d5e4e0Smrg    # script is modern enough.
37e6d5e4e0Smrg    exit 0
38e6d5e4e0Smrg    ;;
397914d74bSmrg
40e6d5e4e0Smrg  --run)
41e6d5e4e0Smrg    # Back-compat with the calling convention used by older automake.
42e6d5e4e0Smrg    shift
43e6d5e4e0Smrg    ;;
447914d74bSmrg
457914d74bSmrg  -h|--h|--he|--hel|--help)
467914d74bSmrg    echo "\
477914d74bSmrg$0 [OPTION]... PROGRAM [ARGUMENT]...
487914d74bSmrg
49e6d5e4e0SmrgRun 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due
50e6d5e4e0Smrgto PROGRAM being missing or too old.
517914d74bSmrg
527914d74bSmrgOptions:
537914d74bSmrg  -h, --help      display this help and exit
547914d74bSmrg  -v, --version   output version information and exit
557914d74bSmrg
567914d74bSmrgSupported PROGRAM values:
57e6d5e4e0Smrg  aclocal   autoconf  autoheader   autom4te  automake  makeinfo
58e6d5e4e0Smrg  bison     yacc      flex         lex       help2man
597914d74bSmrg
60e6d5e4e0SmrgVersion suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and
61e6d5e4e0Smrg'g' are ignored when checking the name.
62e8ead290Smrg
637914d74bSmrgSend bug reports to <bug-automake@gnu.org>."
647914d74bSmrg    exit $?
657914d74bSmrg    ;;
667914d74bSmrg
677914d74bSmrg  -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
687914d74bSmrg    echo "missing $scriptversion (GNU Automake)"
697914d74bSmrg    exit $?
707914d74bSmrg    ;;
717914d74bSmrg
727914d74bSmrg  -*)
73e6d5e4e0Smrg    echo 1>&2 "$0: unknown '$1' option"
74e6d5e4e0Smrg    echo 1>&2 "Try '$0 --help' for more information"
757914d74bSmrg    exit 1
767914d74bSmrg    ;;
777914d74bSmrg
787914d74bSmrgesac
797914d74bSmrg
80e6d5e4e0Smrg# Run the given program, remember its exit status.
81e6d5e4e0Smrg"$@"; st=$?
82e6d5e4e0Smrg
83e6d5e4e0Smrg# If it succeeded, we are done.
84e6d5e4e0Smrgtest $st -eq 0 && exit 0
85e6d5e4e0Smrg
86e6d5e4e0Smrg# Also exit now if we it failed (or wasn't found), and '--version' was
87e6d5e4e0Smrg# passed; such an option is passed most likely to detect whether the
88e6d5e4e0Smrg# program is present and works.
89e6d5e4e0Smrgcase $2 in --version|--help) exit $st;; esac
90e6d5e4e0Smrg
91e6d5e4e0Smrg# Exit code 63 means version mismatch.  This often happens when the user
92e6d5e4e0Smrg# tries to use an ancient version of a tool on a file that requires a
93e6d5e4e0Smrg# minimum version.
94e6d5e4e0Smrgif test $st -eq 63; then
95e6d5e4e0Smrg  msg="probably too old"
96e6d5e4e0Smrgelif test $st -eq 127; then
97e6d5e4e0Smrg  # Program was missing.
98e6d5e4e0Smrg  msg="missing on your system"
99e6d5e4e0Smrgelse
100e6d5e4e0Smrg  # Program was found and executed, but failed.  Give up.
101e6d5e4e0Smrg  exit $st
102e6d5e4e0Smrgfi
1037914d74bSmrg
1040ea508b1Smrgperl_URL=https://www.perl.org/
1050ea508b1Smrgflex_URL=https://github.com/westes/flex
1060ea508b1Smrggnu_software_URL=https://www.gnu.org/software
107e6d5e4e0Smrg
108e6d5e4e0Smrgprogram_details ()
109e6d5e4e0Smrg{
110e6d5e4e0Smrg  case $1 in
111e6d5e4e0Smrg    aclocal|automake)
112e6d5e4e0Smrg      echo "The '$1' program is part of the GNU Automake package:"
113e6d5e4e0Smrg      echo "<$gnu_software_URL/automake>"
114e6d5e4e0Smrg      echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:"
115e6d5e4e0Smrg      echo "<$gnu_software_URL/autoconf>"
116e6d5e4e0Smrg      echo "<$gnu_software_URL/m4/>"
117e6d5e4e0Smrg      echo "<$perl_URL>"
118e6d5e4e0Smrg      ;;
119e6d5e4e0Smrg    autoconf|autom4te|autoheader)
120e6d5e4e0Smrg      echo "The '$1' program is part of the GNU Autoconf package:"
121e6d5e4e0Smrg      echo "<$gnu_software_URL/autoconf/>"
122e6d5e4e0Smrg      echo "It also requires GNU m4 and Perl in order to run:"
123e6d5e4e0Smrg      echo "<$gnu_software_URL/m4/>"
124e6d5e4e0Smrg      echo "<$perl_URL>"
125e6d5e4e0Smrg      ;;
126e6d5e4e0Smrg  esac
127e6d5e4e0Smrg}
128e6d5e4e0Smrg
129e6d5e4e0Smrggive_advice ()
130e6d5e4e0Smrg{
131e6d5e4e0Smrg  # Normalize program name to check for.
132e6d5e4e0Smrg  normalized_program=`echo "$1" | sed '
133e6d5e4e0Smrg    s/^gnu-//; t
134e6d5e4e0Smrg    s/^gnu//; t
135e6d5e4e0Smrg    s/^g//; t'`
136e6d5e4e0Smrg
137e6d5e4e0Smrg  printf '%s\n' "'$1' is $msg."
138e6d5e4e0Smrg
139e6d5e4e0Smrg  configure_deps="'configure.ac' or m4 files included by 'configure.ac'"
140e6d5e4e0Smrg  case $normalized_program in
141e6d5e4e0Smrg    autoconf*)
142e6d5e4e0Smrg      echo "You should only need it if you modified 'configure.ac',"
143e6d5e4e0Smrg      echo "or m4 files included by it."
144e6d5e4e0Smrg      program_details 'autoconf'
145e6d5e4e0Smrg      ;;
146e6d5e4e0Smrg    autoheader*)
147e6d5e4e0Smrg      echo "You should only need it if you modified 'acconfig.h' or"
148e6d5e4e0Smrg      echo "$configure_deps."
149e6d5e4e0Smrg      program_details 'autoheader'
150e6d5e4e0Smrg      ;;
151e6d5e4e0Smrg    automake*)
152e6d5e4e0Smrg      echo "You should only need it if you modified 'Makefile.am' or"
153e6d5e4e0Smrg      echo "$configure_deps."
154e6d5e4e0Smrg      program_details 'automake'
155e6d5e4e0Smrg      ;;
156e6d5e4e0Smrg    aclocal*)
157e6d5e4e0Smrg      echo "You should only need it if you modified 'acinclude.m4' or"
158e6d5e4e0Smrg      echo "$configure_deps."
159e6d5e4e0Smrg      program_details 'aclocal'
160e6d5e4e0Smrg      ;;
161e6d5e4e0Smrg   autom4te*)
162e6d5e4e0Smrg      echo "You might have modified some maintainer files that require"
1639d0ccd10Smrg      echo "the 'autom4te' program to be rebuilt."
164e6d5e4e0Smrg      program_details 'autom4te'
165e6d5e4e0Smrg      ;;
166e6d5e4e0Smrg    bison*|yacc*)
167e6d5e4e0Smrg      echo "You should only need it if you modified a '.y' file."
168e6d5e4e0Smrg      echo "You may want to install the GNU Bison package:"
169e6d5e4e0Smrg      echo "<$gnu_software_URL/bison/>"
170e6d5e4e0Smrg      ;;
171e6d5e4e0Smrg    lex*|flex*)
172e6d5e4e0Smrg      echo "You should only need it if you modified a '.l' file."
173e6d5e4e0Smrg      echo "You may want to install the Fast Lexical Analyzer package:"
174e6d5e4e0Smrg      echo "<$flex_URL>"
175e6d5e4e0Smrg      ;;
176e6d5e4e0Smrg    help2man*)
177e6d5e4e0Smrg      echo "You should only need it if you modified a dependency" \
178e6d5e4e0Smrg           "of a man page."
179e6d5e4e0Smrg      echo "You may want to install the GNU Help2man package:"
180e6d5e4e0Smrg      echo "<$gnu_software_URL/help2man/>"
181e6d5e4e0Smrg    ;;
182e6d5e4e0Smrg    makeinfo*)
183e6d5e4e0Smrg      echo "You should only need it if you modified a '.texi' file, or"
184e6d5e4e0Smrg      echo "any other file indirectly affecting the aspect of the manual."
185e6d5e4e0Smrg      echo "You might want to install the Texinfo package:"
186e6d5e4e0Smrg      echo "<$gnu_software_URL/texinfo/>"
187e6d5e4e0Smrg      echo "The spurious makeinfo call might also be the consequence of"
188e6d5e4e0Smrg      echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might"
189e6d5e4e0Smrg      echo "want to install GNU make:"
190e6d5e4e0Smrg      echo "<$gnu_software_URL/make/>"
191e6d5e4e0Smrg      ;;
192e6d5e4e0Smrg    *)
193e6d5e4e0Smrg      echo "You might have modified some files without having the proper"
194e6d5e4e0Smrg      echo "tools for further handling them.  Check the 'README' file, it"
195e6d5e4e0Smrg      echo "often tells you about the needed prerequisites for installing"
196e6d5e4e0Smrg      echo "this package.  You may also peek at any GNU archive site, in"
197e6d5e4e0Smrg      echo "case some other package contains this missing '$1' program."
198e6d5e4e0Smrg      ;;
199e6d5e4e0Smrg  esac
200e6d5e4e0Smrg}
201e6d5e4e0Smrg
202e6d5e4e0Smrggive_advice "$1" | sed -e '1s/^/WARNING: /' \
203e6d5e4e0Smrg                       -e '2,$s/^/         /' >&2
204e6d5e4e0Smrg
205e6d5e4e0Smrg# Propagate the correct exit status (expected to be 127 for a program
206e6d5e4e0Smrg# not found, 63 for a program that failed due to version mismatch).
207e6d5e4e0Smrgexit $st
2087914d74bSmrg
2097914d74bSmrg# Local variables:
2100ea508b1Smrg# eval: (add-hook 'before-save-hook 'time-stamp)
2117914d74bSmrg# time-stamp-start: "scriptversion="
2127914d74bSmrg# time-stamp-format: "%:y-%02m-%02d.%02H"
2130ea508b1Smrg# time-stamp-time-zone: "UTC0"
214e8ead290Smrg# time-stamp-end: "; # UTC"
2157914d74bSmrg# End:
216