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