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

4
scriptversion=2009-04-28.21; # UTC
bjornroche's avatar
bjornroche committed
5

6 7
# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006,
# 2008, 2009 Free Software Foundation, Inc.
bjornroche's avatar
bjornroche 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
21
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
bjornroche's avatar
bjornroche 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=:
34 35
sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
bjornroche's avatar
bjornroche committed
36 37 38 39 40 41 42 43 44 45 46

# 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

msg="missing on your system"

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

  -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'
80
  autom4te     touch the output file, or create a stub one
bjornroche's avatar
bjornroche committed
81 82 83 84 85 86 87 88 89
  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
  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.

bjornroche's avatar
bjornroche committed
93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
Send bug reports to <bug-automake@gnu.org>."
    exit $?
    ;;

  -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
    echo "missing $scriptversion (GNU Automake)"
    exit $?
    ;;

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

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'`

bjornroche's avatar
bjornroche committed
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*)
bjornroche's avatar
bjornroche committed
122 123 124
    # Not GNU programs, they don't have --version.
    ;;

125
  tar*)
bjornroche's avatar
bjornroche committed
126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148
    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.
149
case $program in
bjornroche's avatar
bjornroche committed
150 151 152 153 154 155 156 157 158
  aclocal*)
    echo 1>&2 "\
WARNING: \`$1' is $msg.  You should only need it if
         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
    ;;

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

168
  autoheader*)
bjornroche's avatar
bjornroche committed
169 170 171 172 173 174 175 176 177
    echo 1>&2 "\
WARNING: \`$1' is $msg.  You should only need it if
         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
178
      case $f in
bjornroche's avatar
bjornroche committed
179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197
      *:*) touch_files="$touch_files "`echo "$f" |
				       sed -e 's/^[^:]*://' -e 's/:.*//'`;;
      *) touch_files="$touch_files $f.in";;
      esac
    done
    touch $touch_files
    ;;

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

198
  autom4te*)
bjornroche's avatar
bjornroche committed
199 200 201 202 203 204 205
    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."

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

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

274
  help2man*)
bjornroche's avatar
bjornroche committed
275 276 277 278 279 280
    echo 1>&2 "\
WARNING: \`$1' is $msg.  You should only need it if
	 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
bjornroche's avatar
bjornroche committed
284 285 286 287
	touch $file
    else
	test -z "$file" || exec >$file
	echo ".ab help2man is required to generate this page"
288
	exit $?
bjornroche's avatar
bjornroche committed
289 290 291
    fi
    ;;

292
  makeinfo*)
bjornroche's avatar
bjornroche committed
293 294 295 296 297 298 299 300
    echo 1>&2 "\
WARNING: \`$1' is $msg.  You should only need it if
         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."
    # 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"`
bjornroche's avatar
bjornroche committed
303 304 305
    if test -z "$file"; then
      # ... 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`
bjornroche's avatar
bjornroche committed
312 313 314 315 316 317 318 319 320
      # ... or it is derived from the source name (dir/f.texi becomes f.info)
      test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
    fi
    # If the file does not exist, the user really needs makeinfo;
    # let's fail without touching anything.
    test -f $file || exit 1
    touch $file
    ;;

321
  tar*)
bjornroche's avatar
bjornroche committed
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
bjornroche's avatar
bjornroche committed
336 337 338 339 340
	*o*)
	    firstarg=`echo "$firstarg" | sed s/o//`
	    tar "$firstarg" "$@" && exit 0
	    ;;
	esac
341
	case $firstarg in
bjornroche's avatar
bjornroche committed
342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373
	*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
    ;;

  *)
    echo 1>&2 "\
WARNING: \`$1' is needed, and is $msg.
         You might have modified some files without having the
         proper tools for further handling them.  Check the \`README' file,
         it often tells you about the needed prerequisites for installing
         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

# 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"
bjornroche's avatar
bjornroche committed
376
# End: