missing 11.2 KB
Newer Older
eg's avatar
eg committed
1 2
#! /bin/sh
# Common stub for a few missing GNU programs while installing.
Erick's avatar
Erick committed
3 4 5 6 7

scriptversion=2009-04-28.21; # UTC

# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006,
# 2008, 2009 Free Software Foundation, Inc.
eg's avatar
eg committed
8 9 10 11 12 13 14 15 16 17 18 19 20
# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.

# 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
Erick's avatar
Erick committed
21
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
eg's avatar
eg committed
22 23 24 25 26 27 28 29 30 31 32 33

# 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.

if test $# -eq 0; then
  echo 1>&2 "Try \`$0 --help' for more information"
  exit 1
fi

run=:
Erick's avatar
Erick committed
34 35
sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
eg's avatar
eg committed
36 37 38 39 40 41 42 43 44

# 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

Erick's avatar
Erick committed
45 46 47
msg="missing on your system"

case $1 in
eg's avatar
eg committed
48 49 50 51 52
--run)
  # Try to run requested program, and just exit if it succeeds.
  run=
  shift
  "$@" && exit 0
Erick's avatar
Erick committed
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
eg's avatar
eg committed
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
  ;;

  -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
  --run           try to run the given command, and emulate it if it fails

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

Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and
\`g' are ignored when checking the name.

Send bug reports to <bug-automake@gnu.org>."
    exit $?
eg's avatar
eg committed
95 96 97
    ;;

  -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
Erick's avatar
Erick committed
98 99
    echo "missing $scriptversion (GNU Automake)"
    exit $?
eg's avatar
eg committed
100 101 102 103 104 105 106 107
    ;;

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

Erick's avatar
Erick committed
108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150
esac

# normalize program name to check for.
program=`echo "$1" | sed '
  s/^gnu-//; t
  s/^gnu//; t
  s/^g//; t'`

# 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).  This is about non-GNU programs, so use $1 not
# $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
    ;;

  *)
    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
       # We have it, but it failed.
       exit 1
    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
    fi
    ;;
esac

# If it does not exist, or fails to run (possibly an outdated version),
# try to emulate it.
case $program in
  aclocal*)
eg's avatar
eg committed
151
    echo 1>&2 "\
Erick's avatar
Erick committed
152
WARNING: \`$1' is $msg.  You should only need it if
eg's avatar
eg committed
153 154 155 156 157 158
         you modified \`acinclude.m4' or \`${configure_ac}'.  You might want
         to install the \`Automake' and \`Perl' packages.  Grab them from
         any GNU archive site."
    touch aclocal.m4
    ;;

Erick's avatar
Erick committed
159
  autoconf*)
eg's avatar
eg committed
160
    echo 1>&2 "\
Erick's avatar
Erick committed
161
WARNING: \`$1' is $msg.  You should only need it if
eg's avatar
eg committed
162 163 164 165 166 167
         you modified \`${configure_ac}'.  You might want to install the
         \`Autoconf' and \`GNU m4' packages.  Grab them from any GNU
         archive site."
    touch configure
    ;;

Erick's avatar
Erick committed
168
  autoheader*)
eg's avatar
eg committed
169
    echo 1>&2 "\
Erick's avatar
Erick committed
170
WARNING: \`$1' is $msg.  You should only need it if
eg's avatar
eg committed
171 172 173 174 175 176 177
         you modified \`acconfig.h' or \`${configure_ac}'.  You might want
         to install the \`Autoconf' and \`GNU m4' packages.  Grab them
         from any GNU archive site."
    files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
    test -z "$files" && files="config.h"
    touch_files=
    for f in $files; do
Erick's avatar
Erick committed
178
      case $f in
eg's avatar
eg committed
179 180 181 182 183 184 185 186
      *:*) touch_files="$touch_files "`echo "$f" |
				       sed -e 's/^[^:]*://' -e 's/:.*//'`;;
      *) touch_files="$touch_files $f.in";;
      esac
    done
    touch $touch_files
    ;;

Erick's avatar
Erick committed
187
  automake*)
eg's avatar
eg committed
188
    echo 1>&2 "\
Erick's avatar
Erick committed
189
WARNING: \`$1' is $msg.  You should only need it if
eg's avatar
eg committed
190 191 192 193 194 195 196 197
         you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
         You might want to install the \`Automake' and \`Perl' packages.
         Grab them from any GNU archive site."
    find . -type f -name Makefile.am -print |
	   sed 's/\.am$/.in/' |
	   while read f; do touch "$f"; done
    ;;

Erick's avatar
Erick committed
198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221
  autom4te*)
    echo 1>&2 "\
WARNING: \`$1' is needed, but is $msg.
         You might have modified some files without having the
         proper tools for further handling them.
         You can get \`$1' as part of \`Autoconf' from any GNU
         archive site."

    file=`echo "$*" | sed -n "$sed_output"`
    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
    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
    ;;

  bison*|yacc*)
eg's avatar
eg committed
222
    echo 1>&2 "\
Erick's avatar
Erick committed
223
WARNING: \`$1' $msg.  You should only need it if
eg's avatar
eg committed
224 225 226 227
         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."
    rm -f y.tab.c y.tab.h
Erick's avatar
Erick committed
228
    if test $# -ne 1; then
eg's avatar
eg committed
229
        eval LASTARG="\${$#}"
Erick's avatar
Erick committed
230
	case $LASTARG in
eg's avatar
eg committed
231 232
	*.y)
	    SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
Erick's avatar
Erick committed
233
	    if test -f "$SRCFILE"; then
eg's avatar
eg committed
234 235 236
	         cp "$SRCFILE" y.tab.c
	    fi
	    SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
Erick's avatar
Erick committed
237
	    if test -f "$SRCFILE"; then
eg's avatar
eg committed
238 239 240 241 242
	         cp "$SRCFILE" y.tab.h
	    fi
	  ;;
	esac
    fi
Erick's avatar
Erick committed
243
    if test ! -f y.tab.h; then
eg's avatar
eg committed
244 245
	echo >y.tab.h
    fi
Erick's avatar
Erick committed
246
    if test ! -f y.tab.c; then
eg's avatar
eg committed
247 248 249 250
	echo 'main() { return 0; }' >y.tab.c
    fi
    ;;

Erick's avatar
Erick committed
251
  lex*|flex*)
eg's avatar
eg committed
252
    echo 1>&2 "\
Erick's avatar
Erick committed
253
WARNING: \`$1' is $msg.  You should only need it if
eg's avatar
eg committed
254 255 256 257
         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
Erick's avatar
Erick committed
258
    if test $# -ne 1; then
eg's avatar
eg committed
259
        eval LASTARG="\${$#}"
Erick's avatar
Erick committed
260
	case $LASTARG in
eg's avatar
eg committed
261 262
	*.l)
	    SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
Erick's avatar
Erick committed
263
	    if test -f "$SRCFILE"; then
eg's avatar
eg committed
264 265 266 267 268
	         cp "$SRCFILE" lex.yy.c
	    fi
	  ;;
	esac
    fi
Erick's avatar
Erick committed
269
    if test ! -f lex.yy.c; then
eg's avatar
eg committed
270 271 272 273
	echo 'main() { return 0; }' >lex.yy.c
    fi
    ;;

Erick's avatar
Erick committed
274
  help2man*)
eg's avatar
eg committed
275
    echo 1>&2 "\
Erick's avatar
Erick committed
276
WARNING: \`$1' is $msg.  You should only need it if
eg's avatar
eg committed
277 278 279 280
	 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."

Erick's avatar
Erick committed
281 282 283
    file=`echo "$*" | sed -n "$sed_output"`
    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
    if test -f "$file"; then
eg's avatar
eg committed
284 285 286 287
	touch $file
    else
	test -z "$file" || exec >$file
	echo ".ab help2man is required to generate this page"
Erick's avatar
Erick committed
288
	exit $?
eg's avatar
eg committed
289 290 291
    fi
    ;;

Erick's avatar
Erick committed
292
  makeinfo*)
eg's avatar
eg committed
293
    echo 1>&2 "\
Erick's avatar
Erick committed
294
WARNING: \`$1' is $msg.  You should only need it if
eg's avatar
eg committed
295 296 297 298 299
         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."
Erick's avatar
Erick committed
300 301 302
    # The file to touch is that specified with -o ...
    file=`echo "$*" | sed -n "$sed_output"`
    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
eg's avatar
eg committed
303
    if test -z "$file"; then
Erick's avatar
Erick committed
304 305 306 307 308 309 310 311 312 313
      # ... or it is the one specified with @setfilename ...
      infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
      file=`sed -n '
	/^@setfilename/{
	  s/.* \([^ ]*\) *$/\1/
	  p
	  q
	}' $infile`
      # ... or it is derived from the source name (dir/f.texi becomes f.info)
      test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
eg's avatar
eg committed
314
    fi
Erick's avatar
Erick committed
315 316 317
    # If the file does not exist, the user really needs makeinfo;
    # let's fail without touching anything.
    test -f $file || exit 1
eg's avatar
eg committed
318 319 320
    touch $file
    ;;

Erick's avatar
Erick committed
321
  tar*)
eg's avatar
eg committed
322 323 324 325 326 327
    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
Erick's avatar
Erick committed
328
       gnutar "$@" && exit 0
eg's avatar
eg committed
329 330
    fi
    if (gtar --version > /dev/null 2>&1); then
Erick's avatar
Erick committed
331
       gtar "$@" && exit 0
eg's avatar
eg committed
332 333 334
    fi
    firstarg="$1"
    if shift; then
Erick's avatar
Erick committed
335
	case $firstarg in
eg's avatar
eg committed
336 337
	*o*)
	    firstarg=`echo "$firstarg" | sed s/o//`
Erick's avatar
Erick committed
338
	    tar "$firstarg" "$@" && exit 0
eg's avatar
eg committed
339 340
	    ;;
	esac
Erick's avatar
Erick committed
341
	case $firstarg in
eg's avatar
eg committed
342 343
	*h*)
	    firstarg=`echo "$firstarg" | sed s/h//`
Erick's avatar
Erick committed
344
	    tar "$firstarg" "$@" && exit 0
eg's avatar
eg committed
345 346 347 348 349 350 351 352 353 354 355 356 357
	    ;;
	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
    ;;

  *)
    echo 1>&2 "\
Erick's avatar
Erick committed
358 359
WARNING: \`$1' is needed, and is $msg.
         You might have modified some files without having the
eg's avatar
eg committed
360
         proper tools for further handling them.  Check the \`README' file,
Erick's avatar
Erick committed
361
         it often tells you about the needed prerequisites for installing
eg's avatar
eg committed
362 363 364 365 366 367 368
         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
Erick's avatar
Erick committed
369 370 371 372 373 374 375 376

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