1#! /bin/sh
2# Common stub for a few missing GNU programs while installing.
3
4scriptversion=2004-09-07.08
5
6# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004
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., 59 Temple Place - Suite 330, Boston, MA
23# 02111-1307, 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
30if test $# -eq 0; then
31  echo 1>&2 "Try \`$0 --help' for more information"
32  exit 1
33fi
34
35run=:
36
37# In the cases where this matters, `missing' is being run in the
38# srcdir already.
39if test -f configure.ac; then
40  configure_ac=configure.ac
41else
42  configure_ac=configure.in
43fi
44
45msg="missing on your system"
46
47case "$1" in
48--run)
49  # Try to run requested program, and just exit if it succeeds.
50  run=
51  shift
52  "$@" && exit 0
53  # Exit code 63 means version mismatch.  This often happens
54  # when the user try to use an ancient version of a tool on
55  # a file that requires a minimum version.  In this case we
56  # we should proceed has if the program had been absent, or
57  # if --run hadn't been passed.
58  if test $? = 63; then
59    run=:
60    msg="probably too old"
61  fi
62  ;;
63
64  -h|--h|--he|--hel|--help)
65    echo "\
66$0 [OPTION]... PROGRAM [ARGUMENT]...
67
68Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
69error status if there is no known handling for PROGRAM.
70
71Options:
72  -h, --help      display this help and exit
73  -v, --version   output version information and exit
74  --run           try to run the given command, and emulate it if it fails
75
76Supported PROGRAM values:
77  aclocal      touch file \`aclocal.m4'
78  autoconf     touch file \`configure'
79  autoheader   touch file \`config.h.in'
80  automake     touch all \`Makefile.in' files
81  bison        create \`y.tab.[ch]', if possible, from existing .[ch]
82  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
85  makeinfo     touch the output file
86  tar          try tar, gnutar, gtar, then tar without non-portable flags
87  yacc         create \`y.tab.[ch]', if possible, from existing .[ch]
88
89Send bug reports to <bug-automake@gnu.org>."
90    exit 0
91    ;;
92
93  -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
94    echo "missing $scriptversion (GNU Automake)"
95    exit 0
96    ;;
97
98  -*)
99    echo 1>&2 "$0: Unknown \`$1' option"
100    echo 1>&2 "Try \`$0 --help' for more information"
101    exit 1
102    ;;
103
104esac
105
106# Now exit if we have it, but it failed.  Also exit now if we
107# don't have it and --version was passed (most likely to detect
108# the program).
109case "$1" in
110  lex|yacc)
111    # Not GNU programs, they don't have --version.
112    ;;
113
114  tar)
115    if test -n "$run"; then
116       echo 1>&2 "ERROR: \`tar' requires --run"
117       exit 1
118    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
119       exit 1
120    fi
121    ;;
122
123  *)
124    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
125       # We have it, but it failed.
126       exit 1
127    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
128       # Could not run --version or --help.  This is probably someone
129       # running `$TOOL --version' or `$TOOL --help' to check whether
130       # $TOOL exists and not knowing $TOOL uses missing.
131       exit 1
132    fi
133    ;;
134esac
135
136# If it does not exist, or fails to run (possibly an outdated version),
137# try to emulate it.
138case "$1" in
139  aclocal*)
140    echo 1>&2 "\
141WARNING: \`$1' is $msg.  You should only need it if
142         you modified \`acinclude.m4' or \`${configure_ac}'.  You might want
143         to install the \`Automake' and \`Perl' packages.  Grab them from
144         any GNU archive site."
145    touch aclocal.m4
146    ;;
147
148  autoconf)
149    echo 1>&2 "\
150WARNING: \`$1' is $msg.  You should only need it if
151         you modified \`${configure_ac}'.  You might want to install the
152         \`Autoconf' and \`GNU m4' packages.  Grab them from any GNU
153         archive site."
154    touch configure
155    ;;
156
157  autoheader)
158    echo 1>&2 "\
159WARNING: \`$1' is $msg.  You should only need it if
160         you modified \`acconfig.h' or \`${configure_ac}'.  You might want
161         to install the \`Autoconf' and \`GNU m4' packages.  Grab them
162         from any GNU archive site."
163    files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
164    test -z "$files" && files="config.h"
165    touch_files=
166    for f in $files; do
167      case "$f" in
168      *:*) touch_files="$touch_files "`echo "$f" |
169				       sed -e 's/^[^:]*://' -e 's/:.*//'`;;
170      *) touch_files="$touch_files $f.in";;
171      esac
172    done
173    touch $touch_files
174    ;;
175
176  automake*)
177    echo 1>&2 "\
178WARNING: \`$1' is $msg.  You should only need it if
179         you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
180         You might want to install the \`Automake' and \`Perl' packages.
181         Grab them from any GNU archive site."
182    find . -type f -name Makefile.am -print |
183	   sed 's/\.am$/.in/' |
184	   while read f; do touch "$f"; done
185    ;;
186
187  autom4te)
188    echo 1>&2 "\
189WARNING: \`$1' is needed, but is $msg.
190         You might have modified some files without having the
191         proper tools for further handling them.
192         You can get \`$1' as part of \`Autoconf' from any GNU
193         archive site."
194
195    file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'`
196    test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'`
197    if test -f "$file"; then
198	touch $file
199    else
200	test -z "$file" || exec >$file
201	echo "#! /bin/sh"
202	echo "# Created by GNU Automake missing as a replacement of"
203	echo "#  $ $@"
204	echo "exit 0"
205	chmod +x $file
206	exit 1
207    fi
208    ;;
209
210  bison|yacc)
211    echo 1>&2 "\
212WARNING: \`$1' $msg.  You should only need it if
213         you modified a \`.y' file.  You may need the \`Bison' package
214         in order for those modifications to take effect.  You can get
215         \`Bison' from any GNU archive site."
216    rm -f y.tab.c y.tab.h
217    if [ $# -ne 1 ]; then
218        eval LASTARG="\${$#}"
219	case "$LASTARG" in
220	*.y)
221	    SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
222	    if [ -f "$SRCFILE" ]; then
223	         cp "$SRCFILE" y.tab.c
224	    fi
225	    SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
226	    if [ -f "$SRCFILE" ]; then
227	         cp "$SRCFILE" y.tab.h
228	    fi
229	  ;;
230	esac
231    fi
232    if [ ! -f y.tab.h ]; then
233	echo >y.tab.h
234    fi
235    if [ ! -f y.tab.c ]; then
236	echo 'main() { return 0; }' >y.tab.c
237    fi
238    ;;
239
240  lex|flex)
241    echo 1>&2 "\
242WARNING: \`$1' is $msg.  You should only need it if
243         you modified a \`.l' file.  You may need the \`Flex' package
244         in order for those modifications to take effect.  You can get
245         \`Flex' from any GNU archive site."
246    rm -f lex.yy.c
247    if [ $# -ne 1 ]; then
248        eval LASTARG="\${$#}"
249	case "$LASTARG" in
250	*.l)
251	    SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
252	    if [ -f "$SRCFILE" ]; then
253	         cp "$SRCFILE" lex.yy.c
254	    fi
255	  ;;
256	esac
257    fi
258    if [ ! -f lex.yy.c ]; then
259	echo 'main() { return 0; }' >lex.yy.c
260    fi
261    ;;
262
263  help2man)
264    echo 1>&2 "\
265WARNING: \`$1' is $msg.  You should only need it if
266	 you modified a dependency of a manual page.  You may need the
267	 \`Help2man' package in order for those modifications to take
268	 effect.  You can get \`Help2man' from any GNU archive site."
269
270    file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
271    if test -z "$file"; then
272	file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'`
273    fi
274    if [ -f "$file" ]; then
275	touch $file
276    else
277	test -z "$file" || exec >$file
278	echo ".ab help2man is required to generate this page"
279	exit 1
280    fi
281    ;;
282
283  makeinfo)
284    echo 1>&2 "\
285WARNING: \`$1' is $msg.  You should only need it if
286         you modified a \`.texi' or \`.texinfo' file, or any other file
287         indirectly affecting the aspect of the manual.  The spurious
288         call might also be the consequence of using a buggy \`make' (AIX,
289         DU, IRIX).  You might want to install the \`Texinfo' package or
290         the \`GNU make' package.  Grab either from any GNU archive site."
291    file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
292    if test -z "$file"; then
293      file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
294      file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file`
295    fi
296    touch $file
297    ;;
298
299  tar)
300    shift
301
302    # We have already tried tar in the generic part.
303    # Look for gnutar/gtar before invocation to avoid ugly error
304    # messages.
305    if (gnutar --version > /dev/null 2>&1); then
306       gnutar "$@" && exit 0
307    fi
308    if (gtar --version > /dev/null 2>&1); then
309       gtar "$@" && exit 0
310    fi
311    firstarg="$1"
312    if shift; then
313	case "$firstarg" in
314	*o*)
315	    firstarg=`echo "$firstarg" | sed s/o//`
316	    tar "$firstarg" "$@" && exit 0
317	    ;;
318	esac
319	case "$firstarg" in
320	*h*)
321	    firstarg=`echo "$firstarg" | sed s/h//`
322	    tar "$firstarg" "$@" && exit 0
323	    ;;
324	esac
325    fi
326
327    echo 1>&2 "\
328WARNING: I can't seem to be able to run \`tar' with the given arguments.
329         You may want to install GNU tar or Free paxutils, or check the
330         command line arguments."
331    exit 1
332    ;;
333
334  *)
335    echo 1>&2 "\
336WARNING: \`$1' is needed, and is $msg.
337         You might have modified some files without having the
338         proper tools for further handling them.  Check the \`README' file,
339         it often tells you about the needed prerequisites for installing
340         this package.  You may also peek at any GNU archive site, in case
341         some other package would contain this missing \`$1' program."
342    exit 1
343    ;;
344esac
345
346exit 0
347
348# Local variables:
349# eval: (add-hook 'write-file-hooks 'time-stamp)
350# time-stamp-start: "scriptversion="
351# time-stamp-format: "%:y-%02m-%02d.%02H"
352# time-stamp-end: "$"
353# End:
354