1c0abf9e6Sopenharmony_ci#! /bin/sh
2c0abf9e6Sopenharmony_ci# Common wrapper for a few potentially missing GNU programs.
3c0abf9e6Sopenharmony_ci
4c0abf9e6Sopenharmony_ciscriptversion=2018-03-07.03; # UTC
5c0abf9e6Sopenharmony_ci
6c0abf9e6Sopenharmony_ci# Copyright (C) 1996-2021 Free Software Foundation, Inc.
7c0abf9e6Sopenharmony_ci# Originally written by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
8c0abf9e6Sopenharmony_ci
9c0abf9e6Sopenharmony_ci# This program is free software; you can redistribute it and/or modify
10c0abf9e6Sopenharmony_ci# it under the terms of the GNU General Public License as published by
11c0abf9e6Sopenharmony_ci# the Free Software Foundation; either version 2, or (at your option)
12c0abf9e6Sopenharmony_ci# any later version.
13c0abf9e6Sopenharmony_ci
14c0abf9e6Sopenharmony_ci# This program is distributed in the hope that it will be useful,
15c0abf9e6Sopenharmony_ci# but WITHOUT ANY WARRANTY; without even the implied warranty of
16c0abf9e6Sopenharmony_ci# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17c0abf9e6Sopenharmony_ci# GNU General Public License for more details.
18c0abf9e6Sopenharmony_ci
19c0abf9e6Sopenharmony_ci# You should have received a copy of the GNU General Public License
20c0abf9e6Sopenharmony_ci# along with this program.  If not, see <https://www.gnu.org/licenses/>.
21c0abf9e6Sopenharmony_ci
22c0abf9e6Sopenharmony_ci# As a special exception to the GNU General Public License, if you
23c0abf9e6Sopenharmony_ci# distribute this file as part of a program that contains a
24c0abf9e6Sopenharmony_ci# configuration script generated by Autoconf, you may include it under
25c0abf9e6Sopenharmony_ci# the same distribution terms that you use for the rest of that program.
26c0abf9e6Sopenharmony_ci
27c0abf9e6Sopenharmony_ciif test $# -eq 0; then
28c0abf9e6Sopenharmony_ci  echo 1>&2 "Try '$0 --help' for more information"
29c0abf9e6Sopenharmony_ci  exit 1
30c0abf9e6Sopenharmony_cifi
31c0abf9e6Sopenharmony_ci
32c0abf9e6Sopenharmony_cicase $1 in
33c0abf9e6Sopenharmony_ci
34c0abf9e6Sopenharmony_ci  --is-lightweight)
35c0abf9e6Sopenharmony_ci    # Used by our autoconf macros to check whether the available missing
36c0abf9e6Sopenharmony_ci    # script is modern enough.
37c0abf9e6Sopenharmony_ci    exit 0
38c0abf9e6Sopenharmony_ci    ;;
39c0abf9e6Sopenharmony_ci
40c0abf9e6Sopenharmony_ci  --run)
41c0abf9e6Sopenharmony_ci    # Back-compat with the calling convention used by older automake.
42c0abf9e6Sopenharmony_ci    shift
43c0abf9e6Sopenharmony_ci    ;;
44c0abf9e6Sopenharmony_ci
45c0abf9e6Sopenharmony_ci  -h|--h|--he|--hel|--help)
46c0abf9e6Sopenharmony_ci    echo "\
47c0abf9e6Sopenharmony_ci$0 [OPTION]... PROGRAM [ARGUMENT]...
48c0abf9e6Sopenharmony_ci
49c0abf9e6Sopenharmony_ciRun 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due
50c0abf9e6Sopenharmony_cito PROGRAM being missing or too old.
51c0abf9e6Sopenharmony_ci
52c0abf9e6Sopenharmony_ciOptions:
53c0abf9e6Sopenharmony_ci  -h, --help      display this help and exit
54c0abf9e6Sopenharmony_ci  -v, --version   output version information and exit
55c0abf9e6Sopenharmony_ci
56c0abf9e6Sopenharmony_ciSupported PROGRAM values:
57c0abf9e6Sopenharmony_ci  aclocal   autoconf  autoheader   autom4te  automake  makeinfo
58c0abf9e6Sopenharmony_ci  bison     yacc      flex         lex       help2man
59c0abf9e6Sopenharmony_ci
60c0abf9e6Sopenharmony_ciVersion suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and
61c0abf9e6Sopenharmony_ci'g' are ignored when checking the name.
62c0abf9e6Sopenharmony_ci
63c0abf9e6Sopenharmony_ciSend bug reports to <bug-automake@gnu.org>."
64c0abf9e6Sopenharmony_ci    exit $?
65c0abf9e6Sopenharmony_ci    ;;
66c0abf9e6Sopenharmony_ci
67c0abf9e6Sopenharmony_ci  -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
68c0abf9e6Sopenharmony_ci    echo "missing $scriptversion (GNU Automake)"
69c0abf9e6Sopenharmony_ci    exit $?
70c0abf9e6Sopenharmony_ci    ;;
71c0abf9e6Sopenharmony_ci
72c0abf9e6Sopenharmony_ci  -*)
73c0abf9e6Sopenharmony_ci    echo 1>&2 "$0: unknown '$1' option"
74c0abf9e6Sopenharmony_ci    echo 1>&2 "Try '$0 --help' for more information"
75c0abf9e6Sopenharmony_ci    exit 1
76c0abf9e6Sopenharmony_ci    ;;
77c0abf9e6Sopenharmony_ci
78c0abf9e6Sopenharmony_ciesac
79c0abf9e6Sopenharmony_ci
80c0abf9e6Sopenharmony_ci# Run the given program, remember its exit status.
81c0abf9e6Sopenharmony_ci"$@"; st=$?
82c0abf9e6Sopenharmony_ci
83c0abf9e6Sopenharmony_ci# If it succeeded, we are done.
84c0abf9e6Sopenharmony_citest $st -eq 0 && exit 0
85c0abf9e6Sopenharmony_ci
86c0abf9e6Sopenharmony_ci# Also exit now if we it failed (or wasn't found), and '--version' was
87c0abf9e6Sopenharmony_ci# passed; such an option is passed most likely to detect whether the
88c0abf9e6Sopenharmony_ci# program is present and works.
89c0abf9e6Sopenharmony_cicase $2 in --version|--help) exit $st;; esac
90c0abf9e6Sopenharmony_ci
91c0abf9e6Sopenharmony_ci# Exit code 63 means version mismatch.  This often happens when the user
92c0abf9e6Sopenharmony_ci# tries to use an ancient version of a tool on a file that requires a
93c0abf9e6Sopenharmony_ci# minimum version.
94c0abf9e6Sopenharmony_ciif test $st -eq 63; then
95c0abf9e6Sopenharmony_ci  msg="probably too old"
96c0abf9e6Sopenharmony_cielif test $st -eq 127; then
97c0abf9e6Sopenharmony_ci  # Program was missing.
98c0abf9e6Sopenharmony_ci  msg="missing on your system"
99c0abf9e6Sopenharmony_cielse
100c0abf9e6Sopenharmony_ci  # Program was found and executed, but failed.  Give up.
101c0abf9e6Sopenharmony_ci  exit $st
102c0abf9e6Sopenharmony_cifi
103c0abf9e6Sopenharmony_ci
104c0abf9e6Sopenharmony_ciperl_URL=https://www.perl.org/
105c0abf9e6Sopenharmony_ciflex_URL=https://github.com/westes/flex
106c0abf9e6Sopenharmony_cignu_software_URL=https://www.gnu.org/software
107c0abf9e6Sopenharmony_ci
108c0abf9e6Sopenharmony_ciprogram_details ()
109c0abf9e6Sopenharmony_ci{
110c0abf9e6Sopenharmony_ci  case $1 in
111c0abf9e6Sopenharmony_ci    aclocal|automake)
112c0abf9e6Sopenharmony_ci      echo "The '$1' program is part of the GNU Automake package:"
113c0abf9e6Sopenharmony_ci      echo "<$gnu_software_URL/automake>"
114c0abf9e6Sopenharmony_ci      echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:"
115c0abf9e6Sopenharmony_ci      echo "<$gnu_software_URL/autoconf>"
116c0abf9e6Sopenharmony_ci      echo "<$gnu_software_URL/m4/>"
117c0abf9e6Sopenharmony_ci      echo "<$perl_URL>"
118c0abf9e6Sopenharmony_ci      ;;
119c0abf9e6Sopenharmony_ci    autoconf|autom4te|autoheader)
120c0abf9e6Sopenharmony_ci      echo "The '$1' program is part of the GNU Autoconf package:"
121c0abf9e6Sopenharmony_ci      echo "<$gnu_software_URL/autoconf/>"
122c0abf9e6Sopenharmony_ci      echo "It also requires GNU m4 and Perl in order to run:"
123c0abf9e6Sopenharmony_ci      echo "<$gnu_software_URL/m4/>"
124c0abf9e6Sopenharmony_ci      echo "<$perl_URL>"
125c0abf9e6Sopenharmony_ci      ;;
126c0abf9e6Sopenharmony_ci  esac
127c0abf9e6Sopenharmony_ci}
128c0abf9e6Sopenharmony_ci
129c0abf9e6Sopenharmony_cigive_advice ()
130c0abf9e6Sopenharmony_ci{
131c0abf9e6Sopenharmony_ci  # Normalize program name to check for.
132c0abf9e6Sopenharmony_ci  normalized_program=`echo "$1" | sed '
133c0abf9e6Sopenharmony_ci    s/^gnu-//; t
134c0abf9e6Sopenharmony_ci    s/^gnu//; t
135c0abf9e6Sopenharmony_ci    s/^g//; t'`
136c0abf9e6Sopenharmony_ci
137c0abf9e6Sopenharmony_ci  printf '%s\n' "'$1' is $msg."
138c0abf9e6Sopenharmony_ci
139c0abf9e6Sopenharmony_ci  configure_deps="'configure.ac' or m4 files included by 'configure.ac'"
140c0abf9e6Sopenharmony_ci  case $normalized_program in
141c0abf9e6Sopenharmony_ci    autoconf*)
142c0abf9e6Sopenharmony_ci      echo "You should only need it if you modified 'configure.ac',"
143c0abf9e6Sopenharmony_ci      echo "or m4 files included by it."
144c0abf9e6Sopenharmony_ci      program_details 'autoconf'
145c0abf9e6Sopenharmony_ci      ;;
146c0abf9e6Sopenharmony_ci    autoheader*)
147c0abf9e6Sopenharmony_ci      echo "You should only need it if you modified 'acconfig.h' or"
148c0abf9e6Sopenharmony_ci      echo "$configure_deps."
149c0abf9e6Sopenharmony_ci      program_details 'autoheader'
150c0abf9e6Sopenharmony_ci      ;;
151c0abf9e6Sopenharmony_ci    automake*)
152c0abf9e6Sopenharmony_ci      echo "You should only need it if you modified 'Makefile.am' or"
153c0abf9e6Sopenharmony_ci      echo "$configure_deps."
154c0abf9e6Sopenharmony_ci      program_details 'automake'
155c0abf9e6Sopenharmony_ci      ;;
156c0abf9e6Sopenharmony_ci    aclocal*)
157c0abf9e6Sopenharmony_ci      echo "You should only need it if you modified 'acinclude.m4' or"
158c0abf9e6Sopenharmony_ci      echo "$configure_deps."
159c0abf9e6Sopenharmony_ci      program_details 'aclocal'
160c0abf9e6Sopenharmony_ci      ;;
161c0abf9e6Sopenharmony_ci   autom4te*)
162c0abf9e6Sopenharmony_ci      echo "You might have modified some maintainer files that require"
163c0abf9e6Sopenharmony_ci      echo "the 'autom4te' program to be rebuilt."
164c0abf9e6Sopenharmony_ci      program_details 'autom4te'
165c0abf9e6Sopenharmony_ci      ;;
166c0abf9e6Sopenharmony_ci    bison*|yacc*)
167c0abf9e6Sopenharmony_ci      echo "You should only need it if you modified a '.y' file."
168c0abf9e6Sopenharmony_ci      echo "You may want to install the GNU Bison package:"
169c0abf9e6Sopenharmony_ci      echo "<$gnu_software_URL/bison/>"
170c0abf9e6Sopenharmony_ci      ;;
171c0abf9e6Sopenharmony_ci    lex*|flex*)
172c0abf9e6Sopenharmony_ci      echo "You should only need it if you modified a '.l' file."
173c0abf9e6Sopenharmony_ci      echo "You may want to install the Fast Lexical Analyzer package:"
174c0abf9e6Sopenharmony_ci      echo "<$flex_URL>"
175c0abf9e6Sopenharmony_ci      ;;
176c0abf9e6Sopenharmony_ci    help2man*)
177c0abf9e6Sopenharmony_ci      echo "You should only need it if you modified a dependency" \
178c0abf9e6Sopenharmony_ci           "of a man page."
179c0abf9e6Sopenharmony_ci      echo "You may want to install the GNU Help2man package:"
180c0abf9e6Sopenharmony_ci      echo "<$gnu_software_URL/help2man/>"
181c0abf9e6Sopenharmony_ci    ;;
182c0abf9e6Sopenharmony_ci    makeinfo*)
183c0abf9e6Sopenharmony_ci      echo "You should only need it if you modified a '.texi' file, or"
184c0abf9e6Sopenharmony_ci      echo "any other file indirectly affecting the aspect of the manual."
185c0abf9e6Sopenharmony_ci      echo "You might want to install the Texinfo package:"
186c0abf9e6Sopenharmony_ci      echo "<$gnu_software_URL/texinfo/>"
187c0abf9e6Sopenharmony_ci      echo "The spurious makeinfo call might also be the consequence of"
188c0abf9e6Sopenharmony_ci      echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might"
189c0abf9e6Sopenharmony_ci      echo "want to install GNU make:"
190c0abf9e6Sopenharmony_ci      echo "<$gnu_software_URL/make/>"
191c0abf9e6Sopenharmony_ci      ;;
192c0abf9e6Sopenharmony_ci    *)
193c0abf9e6Sopenharmony_ci      echo "You might have modified some files without having the proper"
194c0abf9e6Sopenharmony_ci      echo "tools for further handling them.  Check the 'README' file, it"
195c0abf9e6Sopenharmony_ci      echo "often tells you about the needed prerequisites for installing"
196c0abf9e6Sopenharmony_ci      echo "this package.  You may also peek at any GNU archive site, in"
197c0abf9e6Sopenharmony_ci      echo "case some other package contains this missing '$1' program."
198c0abf9e6Sopenharmony_ci      ;;
199c0abf9e6Sopenharmony_ci  esac
200c0abf9e6Sopenharmony_ci}
201c0abf9e6Sopenharmony_ci
202c0abf9e6Sopenharmony_cigive_advice "$1" | sed -e '1s/^/WARNING: /' \
203c0abf9e6Sopenharmony_ci                       -e '2,$s/^/         /' >&2
204c0abf9e6Sopenharmony_ci
205c0abf9e6Sopenharmony_ci# Propagate the correct exit status (expected to be 127 for a program
206c0abf9e6Sopenharmony_ci# not found, 63 for a program that failed due to version mismatch).
207c0abf9e6Sopenharmony_ciexit $st
208c0abf9e6Sopenharmony_ci
209c0abf9e6Sopenharmony_ci# Local variables:
210c0abf9e6Sopenharmony_ci# eval: (add-hook 'before-save-hook 'time-stamp)
211c0abf9e6Sopenharmony_ci# time-stamp-start: "scriptversion="
212c0abf9e6Sopenharmony_ci# time-stamp-format: "%:y-%02m-%02d.%02H"
213c0abf9e6Sopenharmony_ci# time-stamp-time-zone: "UTC0"
214c0abf9e6Sopenharmony_ci# time-stamp-end: "; # UTC"
215c0abf9e6Sopenharmony_ci# End:
216