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