missing 10.3 KB
Newer Older
Jason Merrill committed
1 2
#! /bin/sh
# Common stub for a few missing GNU programs while installing.
3 4 5 6 7

scriptversion=2004-09-07.08

# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004
#   Free Software Foundation, Inc.
8
# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
Jason Merrill committed
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24

# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.

# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, USA.

25 26 27 28 29
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program.

Jason Merrill committed
30 31 32 33 34
if test $# -eq 0; then
  echo 1>&2 "Try \`$0 --help' for more information"
  exit 1
fi

35 36 37 38 39 40 41 42 43 44
run=:

# In the cases where this matters, `missing' is being run in the
# srcdir already.
if test -f configure.ac; then
  configure_ac=configure.ac
else
  configure_ac=configure.in
fi

45 46
msg="missing on your system"

47 48 49 50 51 52
case "$1" in
--run)
  # Try to run requested program, and just exit if it succeeds.
  run=
  shift
  "$@" && exit 0
53 54 55 56 57 58 59 60 61
  # Exit code 63 means version mismatch.  This often happens
  # when the user try to use an ancient version of a tool on
  # a file that requires a minimum version.  In this case we
  # we should proceed has if the program had been absent, or
  # if --run hadn't been passed.
  if test $? = 63; then
    run=:
    msg="probably too old"
  fi
62
  ;;
Jason Merrill committed
63 64 65 66 67 68 69 70 71 72 73

  -h|--h|--he|--hel|--help)
    echo "\
$0 [OPTION]... PROGRAM [ARGUMENT]...

Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
error status if there is no known handling for PROGRAM.

Options:
  -h, --help      display this help and exit
  -v, --version   output version information and exit
74
  --run           try to run the given command, and emulate it if it fails
Jason Merrill committed
75 76 77 78 79 80

Supported PROGRAM values:
  aclocal      touch file \`aclocal.m4'
  autoconf     touch file \`configure'
  autoheader   touch file \`config.h.in'
  automake     touch all \`Makefile.in' files
81 82
  bison        create \`y.tab.[ch]', if possible, from existing .[ch]
  flex         create \`lex.yy.c', if possible, from existing .c
83
  help2man     touch the output file
84
  lex          create \`lex.yy.c', if possible, from existing .c
Jason Merrill committed
85
  makeinfo     touch the output file
86
  tar          try tar, gnutar, gtar, then tar without non-portable flags
87 88 89 90
  yacc         create \`y.tab.[ch]', if possible, from existing .[ch]

Send bug reports to <bug-automake@gnu.org>."
    exit 0
Jason Merrill committed
91 92 93
    ;;

  -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
94 95
    echo "missing $scriptversion (GNU Automake)"
    exit 0
Jason Merrill committed
96 97 98 99 100 101 102 103
    ;;

  -*)
    echo 1>&2 "$0: Unknown \`$1' option"
    echo 1>&2 "Try \`$0 --help' for more information"
    exit 1
    ;;

104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
esac

# Now exit if we have it, but it failed.  Also exit now if we
# don't have it and --version was passed (most likely to detect
# the program).
case "$1" in
  lex|yacc)
    # Not GNU programs, they don't have --version.
    ;;

  tar)
    if test -n "$run"; then
       echo 1>&2 "ERROR: \`tar' requires --run"
       exit 1
    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
       exit 1
    fi
    ;;

  *)
124 125 126
    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
       # We have it, but it failed.
       exit 1
127 128 129 130 131
    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
       # Could not run --version or --help.  This is probably someone
       # running `$TOOL --version' or `$TOOL --help' to check whether
       # $TOOL exists and not knowing $TOOL uses missing.
       exit 1
132
    fi
133 134
    ;;
esac
135

136 137 138 139
# If it does not exist, or fails to run (possibly an outdated version),
# try to emulate it.
case "$1" in
  aclocal*)
Jason Merrill committed
140
    echo 1>&2 "\
141
WARNING: \`$1' is $msg.  You should only need it if
142
         you modified \`acinclude.m4' or \`${configure_ac}'.  You might want
Jason Merrill committed
143 144 145 146 147 148 149
         to install the \`Automake' and \`Perl' packages.  Grab them from
         any GNU archive site."
    touch aclocal.m4
    ;;

  autoconf)
    echo 1>&2 "\
150
WARNING: \`$1' is $msg.  You should only need it if
151
         you modified \`${configure_ac}'.  You might want to install the
Jason Merrill committed
152 153 154 155 156 157 158
         \`Autoconf' and \`GNU m4' packages.  Grab them from any GNU
         archive site."
    touch configure
    ;;

  autoheader)
    echo 1>&2 "\
159
WARNING: \`$1' is $msg.  You should only need it if
160
         you modified \`acconfig.h' or \`${configure_ac}'.  You might want
Jason Merrill committed
161 162
         to install the \`Autoconf' and \`GNU m4' packages.  Grab them
         from any GNU archive site."
163
    files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
Jason Merrill committed
164 165 166 167 168 169 170 171 172 173
    test -z "$files" && files="config.h"
    touch_files=
    for f in $files; do
      case "$f" in
      *:*) touch_files="$touch_files "`echo "$f" |
				       sed -e 's/^[^:]*://' -e 's/:.*//'`;;
      *) touch_files="$touch_files $f.in";;
      esac
    done
    touch $touch_files
Jason Merrill committed
174 175
    ;;

176
  automake*)
Jason Merrill committed
177
    echo 1>&2 "\
178
WARNING: \`$1' is $msg.  You should only need it if
179
         you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
Jason Merrill committed
180 181
         You might want to install the \`Automake' and \`Perl' packages.
         Grab them from any GNU archive site."
Jason Merrill committed
182 183 184
    find . -type f -name Makefile.am -print |
	   sed 's/\.am$/.in/' |
	   while read f; do touch "$f"; done
Jason Merrill committed
185 186
    ;;

187 188
  autom4te)
    echo 1>&2 "\
189 190
WARNING: \`$1' is needed, but is $msg.
         You might have modified some files without having the
191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209
         proper tools for further handling them.
         You can get \`$1' as part of \`Autoconf' from any GNU
         archive site."

    file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'`
    test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'`
    if test -f "$file"; then
	touch $file
    else
	test -z "$file" || exec >$file
	echo "#! /bin/sh"
	echo "# Created by GNU Automake missing as a replacement of"
	echo "#  $ $@"
	echo "exit 0"
	chmod +x $file
	exit 1
    fi
    ;;

Jason Merrill committed
210 211
  bison|yacc)
    echo 1>&2 "\
212
WARNING: \`$1' $msg.  You should only need it if
Jason Merrill committed
213 214 215
         you modified a \`.y' file.  You may need the \`Bison' package
         in order for those modifications to take effect.  You can get
         \`Bison' from any GNU archive site."
216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241
    rm -f y.tab.c y.tab.h
    if [ $# -ne 1 ]; then
        eval LASTARG="\${$#}"
	case "$LASTARG" in
	*.y)
	    SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
	    if [ -f "$SRCFILE" ]; then
	         cp "$SRCFILE" y.tab.c
	    fi
	    SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
	    if [ -f "$SRCFILE" ]; then
	         cp "$SRCFILE" y.tab.h
	    fi
	  ;;
	esac
    fi
    if [ ! -f y.tab.h ]; then
	echo >y.tab.h
    fi
    if [ ! -f y.tab.c ]; then
	echo 'main() { return 0; }' >y.tab.c
    fi
    ;;

  lex|flex)
    echo 1>&2 "\
242
WARNING: \`$1' is $msg.  You should only need it if
243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260
         you modified a \`.l' file.  You may need the \`Flex' package
         in order for those modifications to take effect.  You can get
         \`Flex' from any GNU archive site."
    rm -f lex.yy.c
    if [ $# -ne 1 ]; then
        eval LASTARG="\${$#}"
	case "$LASTARG" in
	*.l)
	    SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
	    if [ -f "$SRCFILE" ]; then
	         cp "$SRCFILE" lex.yy.c
	    fi
	  ;;
	esac
    fi
    if [ ! -f lex.yy.c ]; then
	echo 'main() { return 0; }' >lex.yy.c
    fi
Jason Merrill committed
261 262
    ;;

263 264
  help2man)
    echo 1>&2 "\
265
WARNING: \`$1' is $msg.  You should only need it if
266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282
	 you modified a dependency of a manual page.  You may need the
	 \`Help2man' package in order for those modifications to take
	 effect.  You can get \`Help2man' from any GNU archive site."

    file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
    if test -z "$file"; then
	file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'`
    fi
    if [ -f "$file" ]; then
	touch $file
    else
	test -z "$file" || exec >$file
	echo ".ab help2man is required to generate this page"
	exit 1
    fi
    ;;

Jason Merrill committed
283 284
  makeinfo)
    echo 1>&2 "\
285
WARNING: \`$1' is $msg.  You should only need it if
Jason Merrill committed
286 287 288 289 290 291 292 293 294 295 296 297 298
         you modified a \`.texi' or \`.texinfo' file, or any other file
         indirectly affecting the aspect of the manual.  The spurious
         call might also be the consequence of using a buggy \`make' (AIX,
         DU, IRIX).  You might want to install the \`Texinfo' package or
         the \`GNU make' package.  Grab either from any GNU archive site."
    file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
    if test -z "$file"; then
      file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
      file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file`
    fi
    touch $file
    ;;

299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333
  tar)
    shift

    # We have already tried tar in the generic part.
    # Look for gnutar/gtar before invocation to avoid ugly error
    # messages.
    if (gnutar --version > /dev/null 2>&1); then
       gnutar "$@" && exit 0
    fi
    if (gtar --version > /dev/null 2>&1); then
       gtar "$@" && exit 0
    fi
    firstarg="$1"
    if shift; then
	case "$firstarg" in
	*o*)
	    firstarg=`echo "$firstarg" | sed s/o//`
	    tar "$firstarg" "$@" && exit 0
	    ;;
	esac
	case "$firstarg" in
	*h*)
	    firstarg=`echo "$firstarg" | sed s/h//`
	    tar "$firstarg" "$@" && exit 0
	    ;;
	esac
    fi

    echo 1>&2 "\
WARNING: I can't seem to be able to run \`tar' with the given arguments.
         You may want to install GNU tar or Free paxutils, or check the
         command line arguments."
    exit 1
    ;;

Jason Merrill committed
334 335
  *)
    echo 1>&2 "\
336 337
WARNING: \`$1' is needed, and is $msg.
         You might have modified some files without having the
Jason Merrill committed
338
         proper tools for further handling them.  Check the \`README' file,
339
         it often tells you about the needed prerequisites for installing
Jason Merrill committed
340 341 342 343 344 345 346
         this package.  You may also peek at any GNU archive site, in case
         some other package would contain this missing \`$1' program."
    exit 1
    ;;
esac

exit 0
347 348 349 350 351 352 353

# Local variables:
# eval: (add-hook 'write-file-hooks 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
# time-stamp-end: "$"
# End: