Home | History | Annotate | Download | only in src
      1 #! /bin/sh
      2 # Common stub for a few missing GNU programs while installing.
      3 
      4 scriptversion=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 (at] iro.umontreal.ca>, 1996.
      9 
     10 # This program is free software; you can redistribute it and/or modify
     11 # it under the terms of the GNU General Public License as published by
     12 # the Free Software Foundation; either version 2, or (at your option)
     13 # any later version.
     14 
     15 # This program is distributed in the hope that it will be useful,
     16 # but WITHOUT ANY WARRANTY; without even the implied warranty of
     17 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     18 # GNU General Public License for more details.
     19 
     20 # You should have received a copy of the GNU General Public License
     21 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
     22 
     23 # As a special exception to the GNU General Public License, if you
     24 # distribute this file as part of a program that contains a
     25 # configuration script generated by Autoconf, you may include it under
     26 # the same distribution terms that you use for the rest of that program.
     27 
     28 if test $# -eq 0; then
     29   echo 1>&2 "Try \`$0 --help' for more information"
     30   exit 1
     31 fi
     32 
     33 run=:
     34 sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
     35 sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
     36 
     37 # In the cases where this matters, `missing' is being run in the
     38 # srcdir already.
     39 if test -f configure.ac; then
     40   configure_ac=configure.ac
     41 else
     42   configure_ac=configure.in
     43 fi
     44 
     45 msg="missing on your system"
     46 
     47 case $1 in
     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   ;;
     63 
     64   -h|--h|--he|--hel|--help)
     65     echo "\
     66 $0 [OPTION]... PROGRAM [ARGUMENT]...
     67 
     68 Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
     69 error status if there is no known handling for PROGRAM.
     70 
     71 Options:
     72   -h, --help      display this help and exit
     73   -v, --version   output version information and exit
     74   --run           try to run the given command, and emulate it if it fails
     75 
     76 Supported PROGRAM values:
     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 
     89 Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and
     90 \`g' are ignored when checking the name.
     91 
     92 Send bug reports to <bug-automake@gnu.org>."
     93     exit $?
     94     ;;
     95 
     96   -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
     97     echo "missing $scriptversion (GNU Automake)"
     98     exit $?
     99     ;;
    100 
    101   -*)
    102     echo 1>&2 "$0: Unknown \`$1' option"
    103     echo 1>&2 "Try \`$0 --help' for more information"
    104     exit 1
    105     ;;
    106 
    107 esac
    108 
    109 # normalize program name to check for.
    110 program=`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.
    119 case $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     ;;
    135 esac
    136 
    137 # If it does not exist, or fails to run (possibly an outdated version),
    138 # try to emulate it.
    139 case $program in
    140   aclocal*)
    141     echo 1>&2 "\
    142 WARNING: \`$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 "\
    151 WARNING: \`$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 "\
    160 WARNING: \`$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 "\
    179 WARNING: \`$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 "\
    190 WARNING: \`$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 "\
    213 WARNING: \`$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 "\
    243 WARNING: \`$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 "\
    266 WARNING: \`$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 "\
    284 WARNING: \`$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 "\
    313 WARNING: \`$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     ;;
    321 esac
    322 
    323 exit 0
    324 
    325 # Local variables:
    326 # eval: (add-hook 'write-file-hooks 'time-stamp)
    327 # time-stamp-start: "scriptversion="
    328 # time-stamp-format: "%:y-%02m-%02d.%02H"
    329 # time-stamp-time-zone: "UTC"
    330 # time-stamp-end: "; # UTC"
    331 # End:
    332