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

4
scriptversion=2009-04-28.21; # UTC
5

6 7
# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006,
# 2008, 2009 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

# 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
21
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
Jason Merrill committed
22

23 24 25 26 27
# 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
28 29 30 31 32
if test $# -eq 0; then
  echo 1>&2 "Try \`$0 --help' for more information"
  exit 1
fi

33
run=:
34 35
sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
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

45 46
msg="missing on your system"

47
case $1 in
48 49 50 51 52
--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

Supported PROGRAM values:
  aclocal      touch file \`aclocal.m4'
  autoconf     touch file \`configure'
  autoheader   touch file \`config.h.in'
80
  autom4te     touch the output file, or create a stub one
Jason Merrill committed
81
  automake     touch all \`Makefile.in' files
82 83
  bison        create \`y.tab.[ch]', if possible, from existing .[ch]
  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
Jason Merrill committed
86
  makeinfo     touch the output file
87
  tar          try tar, gnutar, gtar, then tar without non-portable flags
88 89
  yacc         create \`y.tab.[ch]', if possible, from existing .[ch]

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

93
Send bug reports to <bug-automake@gnu.org>."
94
    exit $?
Jason Merrill committed
95 96 97
    ;;

  -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
98
    echo "missing $scriptversion (GNU Automake)"
99
    exit $?
Jason Merrill 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
    ;;

108 109
esac

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

116 117
# 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
118 119 120 121
# the program).  This is about non-GNU programs, so use $1 not
# $program.
case $1 in
  lex*|yacc*)
122 123 124
    # Not GNU programs, they don't have --version.
    ;;

125
  tar*)
126 127 128 129 130 131 132 133 134
    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
    ;;

  *)
135 136 137
    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
       # We have it, but it failed.
       exit 1
138 139 140 141 142
    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
143
    fi
144 145
    ;;
esac
146

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

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

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

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

198
  autom4te*)
199
    echo 1>&2 "\
200 201
WARNING: \`$1' is needed, but is $msg.
         You might have modified some files without having the
202 203 204 205
         proper tools for further handling them.
         You can get \`$1' as part of \`Autoconf' from any GNU
         archive site."

206 207
    file=`echo "$*" | sed -n "$sed_output"`
    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
208 209 210 211 212 213 214 215 216 217 218 219 220
    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
    ;;

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

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

274
  help2man*)
275
    echo 1>&2 "\
276
WARNING: \`$1' is $msg.  You should only need it if
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."

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

292
  makeinfo*)
Jason Merrill committed
293
    echo 1>&2 "\
294
WARNING: \`$1' is $msg.  You should only need it if
Jason Merrill 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."
300
    # The file to touch is that specified with -o ...
301 302
    file=`echo "$*" | sed -n "$sed_output"`
    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
Jason Merrill committed
303
    if test -z "$file"; then
304 305
      # ... or it is the one specified with @setfilename ...
      infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
306 307 308 309 310 311
      file=`sed -n '
	/^@setfilename/{
	  s/.* \([^ ]*\) *$/\1/
	  p
	  q
	}' $infile`
312 313
      # ... or it is derived from the source name (dir/f.texi becomes f.info)
      test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
Jason Merrill committed
314
    fi
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
Jason Merrill committed
318 319 320
    touch $file
    ;;

321
  tar*)
322 323 324 325 326 327 328 329 330 331 332 333 334
    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
335
	case $firstarg in
336 337 338 339 340
	*o*)
	    firstarg=`echo "$firstarg" | sed s/o//`
	    tar "$firstarg" "$@" && exit 0
	    ;;
	esac
341
	case $firstarg in
342 343 344 345 346 347 348 349 350 351 352 353 354 355
	*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
356 357
  *)
    echo 1>&2 "\
358 359
WARNING: \`$1' is needed, and is $msg.
         You might have modified some files without having the
Jason Merrill committed
360
         proper tools for further handling them.  Check the \`README' file,
361
         it often tells you about the needed prerequisites for installing
Jason Merrill 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
369 370 371 372 373

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