Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • automake/missing

    r44f44617 r00cc023  
    11#! /bin/sh
    2 # Common wrapper for a few potentially missing GNU programs.
    3 
    4 scriptversion=2013-10-28.13; # UTC
    5 
    6 # Copyright (C) 1996-2014 Free Software Foundation, Inc.
    7 # Originally written by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
     2# Common stub for a few missing GNU programs while installing.
     3
     4scriptversion=2012-01-06.13; # UTC
     5
     6# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006,
     7# 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
     8# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
    89
    910# This program is free software; you can redistribute it and/or modify
     
    2627
    2728if test $# -eq 0; then
    28   echo 1>&2 "Try '$0 --help' for more information"
     29  echo 1>&2 "Try \`$0 --help' for more information"
    2930  exit 1
    3031fi
    3132
     33run=:
     34sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
     35sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
     36
     37# In the cases where this matters, `missing' is being run in the
     38# srcdir already.
     39if test -f configure.ac; then
     40  configure_ac=configure.ac
     41else
     42  configure_ac=configure.in
     43fi
     44
     45msg="missing on your system"
     46
    3247case $1 in
    33 
    34   --is-lightweight)
    35     # Used by our autoconf macros to check whether the available missing
    36     # script is modern enough.
    37     exit 0
    38     ;;
    39 
    40   --run)
    41     # Back-compat with the calling convention used by older automake.
    42     shift
    43     ;;
     48--run)
     49  # Try to run requested program, and just exit if it succeeds.
     50  run=
     51  shift
     52  "$@" && exit 0
     53  # Exit code 63 means version mismatch.  This often happens
     54  # when the user try to use an ancient version of a tool on
     55  # a file that requires a minimum version.  In this case we
     56  # we should proceed has if the program had been absent, or
     57  # if --run hadn't been passed.
     58  if test $? = 63; then
     59    run=:
     60    msg="probably too old"
     61  fi
     62  ;;
    4463
    4564  -h|--h|--he|--hel|--help)
     
    4766$0 [OPTION]... PROGRAM [ARGUMENT]...
    4867
    49 Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due
    50 to PROGRAM being missing or too old.
     68Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
     69error status if there is no known handling for PROGRAM.
    5170
    5271Options:
    5372  -h, --help      display this help and exit
    5473  -v, --version   output version information and exit
     74  --run           try to run the given command, and emulate it if it fails
    5575
    5676Supported PROGRAM values:
    57   aclocal   autoconf  autoheader   autom4te  automake  makeinfo
    58   bison     yacc      flex         lex       help2man
    59 
    60 Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and
    61 'g' are ignored when checking the name.
     77  aclocal      touch file \`aclocal.m4'
     78  autoconf     touch file \`configure'
     79  autoheader   touch file \`config.h.in'
     80  autom4te     touch the output file, or create a stub one
     81  automake     touch all \`Makefile.in' files
     82  bison        create \`y.tab.[ch]', if possible, from existing .[ch]
     83  flex         create \`lex.yy.c', if possible, from existing .c
     84  help2man     touch the output file
     85  lex          create \`lex.yy.c', if possible, from existing .c
     86  makeinfo     touch the output file
     87  yacc         create \`y.tab.[ch]', if possible, from existing .[ch]
     88
     89Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and
     90\`g' are ignored when checking the name.
    6291
    6392Send bug reports to <bug-automake@gnu.org>."
     
    71100
    72101  -*)
    73     echo 1>&2 "$0: unknown '$1' option"
    74     echo 1>&2 "Try '$0 --help' for more information"
     102    echo 1>&2 "$0: Unknown \`$1' option"
     103    echo 1>&2 "Try \`$0 --help' for more information"
    75104    exit 1
    76105    ;;
     
    78107esac
    79108
    80 # Run the given program, remember its exit status.
    81 "$@"; st=$?
    82 
    83 # If it succeeded, we are done.
    84 test $st -eq 0 && exit 0
    85 
    86 # Also exit now if we it failed (or wasn't found), and '--version' was
    87 # passed; such an option is passed most likely to detect whether the
    88 # program is present and works.
    89 case $2 in --version|--help) exit $st;; esac
    90 
    91 # Exit code 63 means version mismatch.  This often happens when the user
    92 # tries to use an ancient version of a tool on a file that requires a
    93 # minimum version.
    94 if test $st -eq 63; then
    95   msg="probably too old"
    96 elif test $st -eq 127; then
    97   # Program was missing.
    98   msg="missing on your system"
    99 else
    100   # Program was found and executed, but failed.  Give up.
    101   exit $st
    102 fi
    103 
    104 perl_URL=http://www.perl.org/
    105 flex_URL=http://flex.sourceforge.net/
    106 gnu_software_URL=http://www.gnu.org/software
    107 
    108 program_details ()
    109 {
    110   case $1 in
    111     aclocal|automake)
    112       echo "The '$1' program is part of the GNU Automake package:"
    113       echo "<$gnu_software_URL/automake>"
    114       echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:"
    115       echo "<$gnu_software_URL/autoconf>"
    116       echo "<$gnu_software_URL/m4/>"
    117       echo "<$perl_URL>"
    118       ;;
    119     autoconf|autom4te|autoheader)
    120       echo "The '$1' program is part of the GNU Autoconf package:"
    121       echo "<$gnu_software_URL/autoconf/>"
    122       echo "It also requires GNU m4 and Perl in order to run:"
    123       echo "<$gnu_software_URL/m4/>"
    124       echo "<$perl_URL>"
    125       ;;
    126   esac
    127 }
    128 
    129 give_advice ()
    130 {
    131   # Normalize program name to check for.
    132   normalized_program=`echo "$1" | sed '
    133     s/^gnu-//; t
    134     s/^gnu//; t
    135     s/^g//; t'`
    136 
    137   printf '%s\n' "'$1' is $msg."
    138 
    139   configure_deps="'configure.ac' or m4 files included by 'configure.ac'"
    140   case $normalized_program in
    141     autoconf*)
    142       echo "You should only need it if you modified 'configure.ac',"
    143       echo "or m4 files included by it."
    144       program_details 'autoconf'
    145       ;;
    146     autoheader*)
    147       echo "You should only need it if you modified 'acconfig.h' or"
    148       echo "$configure_deps."
    149       program_details 'autoheader'
    150       ;;
    151     automake*)
    152       echo "You should only need it if you modified 'Makefile.am' or"
    153       echo "$configure_deps."
    154       program_details 'automake'
    155       ;;
    156     aclocal*)
    157       echo "You should only need it if you modified 'acinclude.m4' or"
    158       echo "$configure_deps."
    159       program_details 'aclocal'
    160       ;;
    161    autom4te*)
    162       echo "You might have modified some maintainer files that require"
    163       echo "the 'autom4te' program to be rebuilt."
    164       program_details 'autom4te'
    165       ;;
    166     bison*|yacc*)
    167       echo "You should only need it if you modified a '.y' file."
    168       echo "You may want to install the GNU Bison package:"
    169       echo "<$gnu_software_URL/bison/>"
    170       ;;
    171     lex*|flex*)
    172       echo "You should only need it if you modified a '.l' file."
    173       echo "You may want to install the Fast Lexical Analyzer package:"
    174       echo "<$flex_URL>"
    175       ;;
    176     help2man*)
    177       echo "You should only need it if you modified a dependency" \
    178            "of a man page."
    179       echo "You may want to install the GNU Help2man package:"
    180       echo "<$gnu_software_URL/help2man/>"
    181     ;;
    182     makeinfo*)
    183       echo "You should only need it if you modified a '.texi' file, or"
    184       echo "any other file indirectly affecting the aspect of the manual."
    185       echo "You might want to install the Texinfo package:"
    186       echo "<$gnu_software_URL/texinfo/>"
    187       echo "The spurious makeinfo call might also be the consequence of"
    188       echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might"
    189       echo "want to install GNU make:"
    190       echo "<$gnu_software_URL/make/>"
    191       ;;
    192     *)
    193       echo "You might have modified some files without having the proper"
    194       echo "tools for further handling them.  Check the 'README' file, it"
    195       echo "often tells you about the needed prerequisites for installing"
    196       echo "this package.  You may also peek at any GNU archive site, in"
    197       echo "case some other package contains this missing '$1' program."
    198       ;;
    199   esac
    200 }
    201 
    202 give_advice "$1" | sed -e '1s/^/WARNING: /' \
    203                        -e '2,$s/^/         /' >&2
    204 
    205 # Propagate the correct exit status (expected to be 127 for a program
    206 # not found, 63 for a program that failed due to version mismatch).
    207 exit $st
     109# normalize program name to check for.
     110program=`echo "$1" | sed '
     111  s/^gnu-//; t
     112  s/^gnu//; t
     113  s/^g//; t'`
     114
     115# Now exit if we have it, but it failed.  Also exit now if we
     116# don't have it and --version was passed (most likely to detect
     117# the program).  This is about non-GNU programs, so use $1 not
     118# $program.
     119case $1 in
     120  lex*|yacc*)
     121    # Not GNU programs, they don't have --version.
     122    ;;
     123
     124  *)
     125    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
     126       # We have it, but it failed.
     127       exit 1
     128    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
     129       # Could not run --version or --help.  This is probably someone
     130       # running `$TOOL --version' or `$TOOL --help' to check whether
     131       # $TOOL exists and not knowing $TOOL uses missing.
     132       exit 1
     133    fi
     134    ;;
     135esac
     136
     137# If it does not exist, or fails to run (possibly an outdated version),
     138# try to emulate it.
     139case $program in
     140  aclocal*)
     141    echo 1>&2 "\
     142WARNING: \`$1' is $msg.  You should only need it if
     143         you modified \`acinclude.m4' or \`${configure_ac}'.  You might want
     144         to install the \`Automake' and \`Perl' packages.  Grab them from
     145         any GNU archive site."
     146    touch aclocal.m4
     147    ;;
     148
     149  autoconf*)
     150    echo 1>&2 "\
     151WARNING: \`$1' is $msg.  You should only need it if
     152         you modified \`${configure_ac}'.  You might want to install the
     153         \`Autoconf' and \`GNU m4' packages.  Grab them from any GNU
     154         archive site."
     155    touch configure
     156    ;;
     157
     158  autoheader*)
     159    echo 1>&2 "\
     160WARNING: \`$1' is $msg.  You should only need it if
     161         you modified \`acconfig.h' or \`${configure_ac}'.  You might want
     162         to install the \`Autoconf' and \`GNU m4' packages.  Grab them
     163         from any GNU archive site."
     164    files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
     165    test -z "$files" && files="config.h"
     166    touch_files=
     167    for f in $files; do
     168      case $f in
     169      *:*) touch_files="$touch_files "`echo "$f" |
     170                                       sed -e 's/^[^:]*://' -e 's/:.*//'`;;
     171      *) touch_files="$touch_files $f.in";;
     172      esac
     173    done
     174    touch $touch_files
     175    ;;
     176
     177  automake*)
     178    echo 1>&2 "\
     179WARNING: \`$1' is $msg.  You should only need it if
     180         you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
     181         You might want to install the \`Automake' and \`Perl' packages.
     182         Grab them from any GNU archive site."
     183    find . -type f -name Makefile.am -print |
     184           sed 's/\.am$/.in/' |
     185           while read f; do touch "$f"; done
     186    ;;
     187
     188  autom4te*)
     189    echo 1>&2 "\
     190WARNING: \`$1' is needed, but is $msg.
     191         You might have modified some files without having the
     192         proper tools for further handling them.
     193         You can get \`$1' as part of \`Autoconf' from any GNU
     194         archive site."
     195
     196    file=`echo "$*" | sed -n "$sed_output"`
     197    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
     198    if test -f "$file"; then
     199        touch $file
     200    else
     201        test -z "$file" || exec >$file
     202        echo "#! /bin/sh"
     203        echo "# Created by GNU Automake missing as a replacement of"
     204        echo "#  $ $@"
     205        echo "exit 0"
     206        chmod +x $file
     207        exit 1
     208    fi
     209    ;;
     210
     211  bison*|yacc*)
     212    echo 1>&2 "\
     213WARNING: \`$1' $msg.  You should only need it if
     214         you modified a \`.y' file.  You may need the \`Bison' package
     215         in order for those modifications to take effect.  You can get
     216         \`Bison' from any GNU archive site."
     217    rm -f y.tab.c y.tab.h
     218    if test $# -ne 1; then
     219        eval LASTARG=\${$#}
     220        case $LASTARG in
     221        *.y)
     222            SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
     223            if test -f "$SRCFILE"; then
     224                 cp "$SRCFILE" y.tab.c
     225            fi
     226            SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
     227            if test -f "$SRCFILE"; then
     228                 cp "$SRCFILE" y.tab.h
     229            fi
     230          ;;
     231        esac
     232    fi
     233    if test ! -f y.tab.h; then
     234        echo >y.tab.h
     235    fi
     236    if test ! -f y.tab.c; then
     237        echo 'main() { return 0; }' >y.tab.c
     238    fi
     239    ;;
     240
     241  lex*|flex*)
     242    echo 1>&2 "\
     243WARNING: \`$1' is $msg.  You should only need it if
     244         you modified a \`.l' file.  You may need the \`Flex' package
     245         in order for those modifications to take effect.  You can get
     246         \`Flex' from any GNU archive site."
     247    rm -f lex.yy.c
     248    if test $# -ne 1; then
     249        eval LASTARG=\${$#}
     250        case $LASTARG in
     251        *.l)
     252            SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
     253            if test -f "$SRCFILE"; then
     254                 cp "$SRCFILE" lex.yy.c
     255            fi
     256          ;;
     257        esac
     258    fi
     259    if test ! -f lex.yy.c; then
     260        echo 'main() { return 0; }' >lex.yy.c
     261    fi
     262    ;;
     263
     264  help2man*)
     265    echo 1>&2 "\
     266WARNING: \`$1' is $msg.  You should only need it if
     267         you modified a dependency of a manual page.  You may need the
     268         \`Help2man' package in order for those modifications to take
     269         effect.  You can get \`Help2man' from any GNU archive site."
     270
     271    file=`echo "$*" | sed -n "$sed_output"`
     272    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
     273    if test -f "$file"; then
     274        touch $file
     275    else
     276        test -z "$file" || exec >$file
     277        echo ".ab help2man is required to generate this page"
     278        exit $?
     279    fi
     280    ;;
     281
     282  makeinfo*)
     283    echo 1>&2 "\
     284WARNING: \`$1' is $msg.  You should only need it if
     285         you modified a \`.texi' or \`.texinfo' file, or any other file
     286         indirectly affecting the aspect of the manual.  The spurious
     287         call might also be the consequence of using a buggy \`make' (AIX,
     288         DU, IRIX).  You might want to install the \`Texinfo' package or
     289         the \`GNU make' package.  Grab either from any GNU archive site."
     290    # The file to touch is that specified with -o ...
     291    file=`echo "$*" | sed -n "$sed_output"`
     292    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
     293    if test -z "$file"; then
     294      # ... or it is the one specified with @setfilename ...
     295      infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
     296      file=`sed -n '
     297        /^@setfilename/{
     298          s/.* \([^ ]*\) *$/\1/
     299          p
     300          q
     301        }' $infile`
     302      # ... or it is derived from the source name (dir/f.texi becomes f.info)
     303      test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
     304    fi
     305    # If the file does not exist, the user really needs makeinfo;
     306    # let's fail without touching anything.
     307    test -f $file || exit 1
     308    touch $file
     309    ;;
     310
     311  *)
     312    echo 1>&2 "\
     313WARNING: \`$1' is needed, and is $msg.
     314         You might have modified some files without having the
     315         proper tools for further handling them.  Check the \`README' file,
     316         it often tells you about the needed prerequisites for installing
     317         this package.  You may also peek at any GNU archive site, in case
     318         some other package would contain this missing \`$1' program."
     319    exit 1
     320    ;;
     321esac
     322
     323exit 0
    208324
    209325# Local variables:
Note: See TracChangeset for help on using the changeset viewer.