1#! /bin/sh
2# Common stub for a few missing GNU programs while installing.
3
4scriptversion=2005-06-08.21
5
6# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005
7#   Free Software Foundation, Inc.
8# Originally by Fran,cois Pinard <pinard@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, write to the Free Software
22# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
23# 02110-1301, USA.
24
25# As a special exception to the GNU General Public License, if you
26# distribute this file as part of a program that contains a
27# configuration script generated by Autoconf, you may include it under
28# the same distribution terms that you use for the rest of that program.
29
30exit
31if test $# -eq 0; then
32  echo 1>&2 "Try \`$0 --help' for more information"
33  exit 1
34fi
35
36run=:
37
38# In the cases where this matters, `missing' is being run in the
39# srcdir already.
40if test -f configure.ac; then
41  configure_ac=configure.ac
42else
43  configure_ac=configure.in
44fi
45
46msg="missing on your system"
47
48case "$1" in
49--run)
50  # Try to run requested program, and just exit if it succeeds.
51  run=
52  shift
53  "$@" && exit 0
54  # Exit code 63 means version mismatch.  This often happens
55  # when the user try to use an ancient version of a tool on
56  # a file that requires a minimum version.  In this case we
57  # we should proceed has if the program had been absent, or
58  # if --run hadn't been passed.
59  if test $? = 63; then
60    run=:
61    msg="probably too old"
62  fi
63  ;;
64
65  -h|--h|--he|--hel|--help)
66    echo "\
67$0 [OPTION]... PROGRAM [ARGUMENT]...
68
69Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
70error status if there is no known handling for PROGRAM.
71
72Options:
73  -h, --help      display this help and exit
74  -v, --version   output version information and exit
75  --run           try to run the given command, and emulate it if it fails
76
77Supported PROGRAM values:
78  aclocal      touch file \`aclocal.m4'
79  autoconf     touch file \`configure'
80  autoheader   touch file \`config.h.in'
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  tar          try tar, gnutar, gtar, then tar without non-portable flags
88  yacc         create \`y.tab.[ch]', if possible, from existing .[ch]
89
90Send bug reports to <bug-automake@gnu.org>."
91    exit $?
92    ;;
93
94  -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
95    echo "missing $scriptversion (GNU Automake)"
96    exit $?
97    ;;
98
99  -*)
100    echo 1>&2 "$0: Unknown \`$1' option"
101    echo 1>&2 "Try \`$0 --help' for more information"
102    exit 1
103    ;;
104
105esac
106
107# Now exit if we have it, but it failed.  Also exit now if we
108# don't have it and --version was passed (most likely to detect
109# the program).
110case "$1" in
111  lex|yacc)
112    # Not GNU programs, they don't have --version.
113    ;;
114
115  tar)
116    if test -n "$run"; then
117       echo 1>&2 "ERROR: \`tar' requires --run"
118       exit 1
119    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
120       exit 1
121    fi
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    ;;
135esac
136
137# If it does not exist, or fails to run (possibly an outdated version),
138# try to emulate it.
139case "$1" in
140  aclocal*)
141    echo 1>&2 "\
142WARNING: \`$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 "\
151WARNING: \`$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 "\
160WARNING: \`$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 "\
179WARNING: \`$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 "\
190WARNING: \`$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 's/.*--output[ =]*\([^ ]*\).*/\1/p'`
197    test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'`
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 "\
213WARNING: \`$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 [ $# -ne 1 ]; then
219        eval LASTARG="\${$#}"
220	case "$LASTARG" in
221	*.y)
222	    SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
223	    if [ -f "$SRCFILE" ]; then
224	         cp "$SRCFILE" y.tab.c
225	    fi
226	    SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
227	    if [ -f "$SRCFILE" ]; then
228	         cp "$SRCFILE" y.tab.h
229	    fi
230	  ;;
231	esac
232    fi
233    if [ ! -f y.tab.h ]; then
234	echo >y.tab.h
235    fi
236    if [ ! -f y.tab.c ]; then
237	echo 'main() { return 0; }' >y.tab.c
238    fi
239    ;;
240
241  lex|flex)
242    echo 1>&2 "\
243WARNING: \`$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 [ $# -ne 1 ]; then
249        eval LASTARG="\${$#}"
250	case "$LASTARG" in
251	*.l)
252	    SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
253	    if [ -f "$SRCFILE" ]; then
254	         cp "$SRCFILE" lex.yy.c
255	    fi
256	  ;;
257	esac
258    fi
259    if [ ! -f lex.yy.c ]; then
260	echo 'main() { return 0; }' >lex.yy.c
261    fi
262    ;;
263
264  help2man)
265    echo 1>&2 "\
266WARNING: \`$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 's/.*-o \([^ ]*\).*/\1/p'`
272    if test -z "$file"; then
273	file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'`
274    fi
275    if [ -f "$file" ]; then
276	touch $file
277    else
278	test -z "$file" || exec >$file
279	echo ".ab help2man is required to generate this page"
280	exit 1
281    fi
282    ;;
283
284  makeinfo)
285    echo 1>&2 "\
286WARNING: \`$1' is $msg.  You should only need it if
287         you modified a \`.texi' or \`.texinfo' file, or any other file
288         indirectly affecting the aspect of the manual.  The spurious
289         call might also be the consequence of using a buggy \`make' (AIX,
290         DU, IRIX).  You might want to install the \`Texinfo' package or
291         the \`GNU make' package.  Grab either from any GNU archive site."
292    # The file to touch is that specified with -o ...
293    file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
294    if test -z "$file"; then
295      # ... or it is the one specified with @setfilename ...
296      infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
297      file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $infile`
298      # ... or it is derived from the source name (dir/f.texi becomes f.info)
299      test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
300    fi
301    # If the file does not exist, the user really needs makeinfo;
302    # let's fail without touching anything.
303    test -f $file || exit 1
304    touch $file
305    ;;
306
307  tar)
308    shift
309
310    # We have already tried tar in the generic part.
311    # Look for gnutar/gtar before invocation to avoid ugly error
312    # messages.
313    if (gnutar --version > /dev/null 2>&1); then
314       gnutar "$@" && exit 0
315    fi
316    if (gtar --version > /dev/null 2>&1); then
317       gtar "$@" && exit 0
318    fi
319    firstarg="$1"
320    if shift; then
321	case "$firstarg" in
322	*o*)
323	    firstarg=`echo "$firstarg" | sed s/o//`
324	    tar "$firstarg" "$@" && exit 0
325	    ;;
326	esac
327	case "$firstarg" in
328	*h*)
329	    firstarg=`echo "$firstarg" | sed s/h//`
330	    tar "$firstarg" "$@" && exit 0
331	    ;;
332	esac
333    fi
334
335    echo 1>&2 "\
336WARNING: I can't seem to be able to run \`tar' with the given arguments.
337         You may want to install GNU tar or Free paxutils, or check the
338         command line arguments."
339    exit 1
340    ;;
341
342  *)
343    echo 1>&2 "\
344WARNING: \`$1' is needed, and is $msg.
345         You might have modified some files without having the
346         proper tools for further handling them.  Check the \`README' file,
347         it often tells you about the needed prerequisites for installing
348         this package.  You may also peek at any GNU archive site, in case
349         some other package would contain this missing \`$1' program."
350    exit 1
351    ;;
352esac
353
354exit 0
355
356# Local variables:
357# eval: (add-hook 'write-file-hooks 'time-stamp)
358# time-stamp-start: "scriptversion="
359# time-stamp-format: "%:y-%02m-%02d.%02H"
360# time-stamp-end: "$"
361# End:
362