Blame missing

Packit 56e0ee
#! /bin/sh
Packit 56e0ee
# Common wrapper for a few potentially missing GNU programs.
Packit 56e0ee
Packit 56e0ee
scriptversion=2013-10-28.13; # UTC
Packit 56e0ee
Packit 56e0ee
# Copyright (C) 1996-2014 Free Software Foundation, Inc.
Packit 56e0ee
# Originally written by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
Packit 56e0ee
Packit 56e0ee
# This program is free software; you can redistribute it and/or modify
Packit 56e0ee
# it under the terms of the GNU General Public License as published by
Packit 56e0ee
# the Free Software Foundation; either version 2, or (at your option)
Packit 56e0ee
# any later version.
Packit 56e0ee
Packit 56e0ee
# This program is distributed in the hope that it will be useful,
Packit 56e0ee
# but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 56e0ee
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit 56e0ee
# GNU General Public License for more details.
Packit 56e0ee
Packit 56e0ee
# You should have received a copy of the GNU General Public License
Packit 56e0ee
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
Packit 56e0ee
Packit 56e0ee
# As a special exception to the GNU General Public License, if you
Packit 56e0ee
# distribute this file as part of a program that contains a
Packit 56e0ee
# configuration script generated by Autoconf, you may include it under
Packit 56e0ee
# the same distribution terms that you use for the rest of that program.
Packit 56e0ee
Packit 56e0ee
if test $# -eq 0; then
Packit 56e0ee
  echo 1>&2 "Try '$0 --help' for more information"
Packit 56e0ee
  exit 1
Packit 56e0ee
fi
Packit 56e0ee
Packit 56e0ee
case $1 in
Packit 56e0ee
Packit 56e0ee
  --is-lightweight)
Packit 56e0ee
    # Used by our autoconf macros to check whether the available missing
Packit 56e0ee
    # script is modern enough.
Packit 56e0ee
    exit 0
Packit 56e0ee
    ;;
Packit 56e0ee
Packit 56e0ee
  --run)
Packit 56e0ee
    # Back-compat with the calling convention used by older automake.
Packit 56e0ee
    shift
Packit 56e0ee
    ;;
Packit 56e0ee
Packit 56e0ee
  -h|--h|--he|--hel|--help)
Packit 56e0ee
    echo "\
Packit 56e0ee
$0 [OPTION]... PROGRAM [ARGUMENT]...
Packit 56e0ee
Packit 56e0ee
Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due
Packit 56e0ee
to PROGRAM being missing or too old.
Packit 56e0ee
Packit 56e0ee
Options:
Packit 56e0ee
  -h, --help      display this help and exit
Packit 56e0ee
  -v, --version   output version information and exit
Packit 56e0ee
Packit 56e0ee
Supported PROGRAM values:
Packit 56e0ee
  aclocal   autoconf  autoheader   autom4te  automake  makeinfo
Packit 56e0ee
  bison     yacc      flex         lex       help2man
Packit 56e0ee
Packit 56e0ee
Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and
Packit 56e0ee
'g' are ignored when checking the name.
Packit 56e0ee
Packit 56e0ee
Send bug reports to <bug-automake@gnu.org>."
Packit 56e0ee
    exit $?
Packit 56e0ee
    ;;
Packit 56e0ee
Packit 56e0ee
  -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
Packit 56e0ee
    echo "missing $scriptversion (GNU Automake)"
Packit 56e0ee
    exit $?
Packit 56e0ee
    ;;
Packit 56e0ee
Packit 56e0ee
  -*)
Packit 56e0ee
    echo 1>&2 "$0: unknown '$1' option"
Packit 56e0ee
    echo 1>&2 "Try '$0 --help' for more information"
Packit 56e0ee
    exit 1
Packit 56e0ee
    ;;
Packit 56e0ee
Packit 56e0ee
esac
Packit 56e0ee
Packit 56e0ee
# Run the given program, remember its exit status.
Packit 56e0ee
"$@"; st=$?
Packit 56e0ee
Packit 56e0ee
# If it succeeded, we are done.
Packit 56e0ee
test $st -eq 0 && exit 0
Packit 56e0ee
Packit 56e0ee
# Also exit now if we it failed (or wasn't found), and '--version' was
Packit 56e0ee
# passed; such an option is passed most likely to detect whether the
Packit 56e0ee
# program is present and works.
Packit 56e0ee
case $2 in --version|--help) exit $st;; esac
Packit 56e0ee
Packit 56e0ee
# Exit code 63 means version mismatch.  This often happens when the user
Packit 56e0ee
# tries to use an ancient version of a tool on a file that requires a
Packit 56e0ee
# minimum version.
Packit 56e0ee
if test $st -eq 63; then
Packit 56e0ee
  msg="probably too old"
Packit 56e0ee
elif test $st -eq 127; then
Packit 56e0ee
  # Program was missing.
Packit 56e0ee
  msg="missing on your system"
Packit 56e0ee
else
Packit 56e0ee
  # Program was found and executed, but failed.  Give up.
Packit 56e0ee
  exit $st
Packit 56e0ee
fi
Packit 56e0ee
Packit 56e0ee
perl_URL=http://www.perl.org/
Packit 56e0ee
flex_URL=http://flex.sourceforge.net/
Packit 56e0ee
gnu_software_URL=http://www.gnu.org/software
Packit 56e0ee
Packit 56e0ee
program_details ()
Packit 56e0ee
{
Packit 56e0ee
  case $1 in
Packit 56e0ee
    aclocal|automake)
Packit 56e0ee
      echo "The '$1' program is part of the GNU Automake package:"
Packit 56e0ee
      echo "<$gnu_software_URL/automake>"
Packit 56e0ee
      echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:"
Packit 56e0ee
      echo "<$gnu_software_URL/autoconf>"
Packit 56e0ee
      echo "<$gnu_software_URL/m4/>"
Packit 56e0ee
      echo "<$perl_URL>"
Packit 56e0ee
      ;;
Packit 56e0ee
    autoconf|autom4te|autoheader)
Packit 56e0ee
      echo "The '$1' program is part of the GNU Autoconf package:"
Packit 56e0ee
      echo "<$gnu_software_URL/autoconf/>"
Packit 56e0ee
      echo "It also requires GNU m4 and Perl in order to run:"
Packit 56e0ee
      echo "<$gnu_software_URL/m4/>"
Packit 56e0ee
      echo "<$perl_URL>"
Packit 56e0ee
      ;;
Packit 56e0ee
  esac
Packit 56e0ee
}
Packit 56e0ee
Packit 56e0ee
give_advice ()
Packit 56e0ee
{
Packit 56e0ee
  # Normalize program name to check for.
Packit 56e0ee
  normalized_program=`echo "$1" | sed '
Packit 56e0ee
    s/^gnu-//; t
Packit 56e0ee
    s/^gnu//; t
Packit 56e0ee
    s/^g//; t'`
Packit 56e0ee
Packit 56e0ee
  printf '%s\n' "'$1' is $msg."
Packit 56e0ee
Packit 56e0ee
  configure_deps="'configure.ac' or m4 files included by 'configure.ac'"
Packit 56e0ee
  case $normalized_program in
Packit 56e0ee
    autoconf*)
Packit 56e0ee
      echo "You should only need it if you modified 'configure.ac',"
Packit 56e0ee
      echo "or m4 files included by it."
Packit 56e0ee
      program_details 'autoconf'
Packit 56e0ee
      ;;
Packit 56e0ee
    autoheader*)
Packit 56e0ee
      echo "You should only need it if you modified 'acconfig.h' or"
Packit 56e0ee
      echo "$configure_deps."
Packit 56e0ee
      program_details 'autoheader'
Packit 56e0ee
      ;;
Packit 56e0ee
    automake*)
Packit 56e0ee
      echo "You should only need it if you modified 'Makefile.am' or"
Packit 56e0ee
      echo "$configure_deps."
Packit 56e0ee
      program_details 'automake'
Packit 56e0ee
      ;;
Packit 56e0ee
    aclocal*)
Packit 56e0ee
      echo "You should only need it if you modified 'acinclude.m4' or"
Packit 56e0ee
      echo "$configure_deps."
Packit 56e0ee
      program_details 'aclocal'
Packit 56e0ee
      ;;
Packit 56e0ee
   autom4te*)
Packit 56e0ee
      echo "You might have modified some maintainer files that require"
Packit 56e0ee
      echo "the 'autom4te' program to be rebuilt."
Packit 56e0ee
      program_details 'autom4te'
Packit 56e0ee
      ;;
Packit 56e0ee
    bison*|yacc*)
Packit 56e0ee
      echo "You should only need it if you modified a '.y' file."
Packit 56e0ee
      echo "You may want to install the GNU Bison package:"
Packit 56e0ee
      echo "<$gnu_software_URL/bison/>"
Packit 56e0ee
      ;;
Packit 56e0ee
    lex*|flex*)
Packit 56e0ee
      echo "You should only need it if you modified a '.l' file."
Packit 56e0ee
      echo "You may want to install the Fast Lexical Analyzer package:"
Packit 56e0ee
      echo "<$flex_URL>"
Packit 56e0ee
      ;;
Packit 56e0ee
    help2man*)
Packit 56e0ee
      echo "You should only need it if you modified a dependency" \
Packit 56e0ee
           "of a man page."
Packit 56e0ee
      echo "You may want to install the GNU Help2man package:"
Packit 56e0ee
      echo "<$gnu_software_URL/help2man/>"
Packit 56e0ee
    ;;
Packit 56e0ee
    makeinfo*)
Packit 56e0ee
      echo "You should only need it if you modified a '.texi' file, or"
Packit 56e0ee
      echo "any other file indirectly affecting the aspect of the manual."
Packit 56e0ee
      echo "You might want to install the Texinfo package:"
Packit 56e0ee
      echo "<$gnu_software_URL/texinfo/>"
Packit 56e0ee
      echo "The spurious makeinfo call might also be the consequence of"
Packit 56e0ee
      echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might"
Packit 56e0ee
      echo "want to install GNU make:"
Packit 56e0ee
      echo "<$gnu_software_URL/make/>"
Packit 56e0ee
      ;;
Packit 56e0ee
    *)
Packit 56e0ee
      echo "You might have modified some files without having the proper"
Packit 56e0ee
      echo "tools for further handling them.  Check the 'README' file, it"
Packit 56e0ee
      echo "often tells you about the needed prerequisites for installing"
Packit 56e0ee
      echo "this package.  You may also peek at any GNU archive site, in"
Packit 56e0ee
      echo "case some other package contains this missing '$1' program."
Packit 56e0ee
      ;;
Packit 56e0ee
  esac
Packit 56e0ee
}
Packit 56e0ee
Packit 56e0ee
give_advice "$1" | sed -e '1s/^/WARNING: /' \
Packit 56e0ee
                       -e '2,$s/^/         /' >&2
Packit 56e0ee
Packit 56e0ee
# Propagate the correct exit status (expected to be 127 for a program
Packit 56e0ee
# not found, 63 for a program that failed due to version mismatch).
Packit 56e0ee
exit $st
Packit 56e0ee
Packit 56e0ee
# Local variables:
Packit 56e0ee
# eval: (add-hook 'write-file-hooks 'time-stamp)
Packit 56e0ee
# time-stamp-start: "scriptversion="
Packit 56e0ee
# time-stamp-format: "%:y-%02m-%02d.%02H"
Packit 56e0ee
# time-stamp-time-zone: "UTC"
Packit 56e0ee
# time-stamp-end: "; # UTC"
Packit 56e0ee
# End: