1#! /bin/sh
2# Common stub for a few missing GNU programs while installing.
3
4scriptversion=2012-01-06.18; # UTC
5
6# Copyright (C) 1996-2012 Free Software Foundation, Inc.
7# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
8
9# This program is free software; you can redistribute it and/or modify
10# it under the terms of the GNU General Public License as published by
11# the Free Software Foundation; either version 2, or (at your option)
12# any later version.
13
14# This program is distributed in the hope that it will be useful,
15# but WITHOUT ANY WARRANTY; without even the implied warranty of
16# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17# GNU General Public License for more details.
18
19# You should have received a copy of the GNU General Public License
20# along with this program.  If not, see <http://www.gnu.org/licenses/>.
21
22# As a special exception to the GNU General Public License, if you
23# distribute this file as part of a program that contains a
24# configuration script generated by Autoconf, you may include it under
25# the same distribution terms that you use for the rest of that program.
26
27exit 0
28
29if test $# -eq 0; then
30  echo 1>&2 "Try '$0 --help' for more information"
31  exit 1
32fi
33
34run=:
35sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
36sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
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  autom4te     touch the output file, or create a stub one
82  automake     touch all 'Makefile.in' files
83  bison        create 'y.tab.[ch]', if possible, from existing .[ch]
84  flex         create 'lex.yy.c', if possible, from existing .c
85  help2man     touch the output file
86  lex          create 'lex.yy.c', if possible, from existing .c
87  makeinfo     touch the output file
88  yacc         create 'y.tab.[ch]', if possible, from existing .[ch]
89
90Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and
91'g' are ignored when checking the name.
92
93Send bug reports to <bug-automake@gnu.org>."
94    exit $?
95    ;;
96
97  -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
98    echo "missing $scriptversion (GNU Automake)"
99    exit $?
100    ;;
101
102  -*)
103    echo 1>&2 "$0: Unknown '$1' option"
104    echo 1>&2 "Try '$0 --help' for more information"
105    exit 1
106    ;;
107
108esac
109
110# normalize program name to check for.
111program=`echo "$1" | sed '
112  s/^gnu-//; t
113  s/^gnu//; t
114  s/^g//; t'`
115
116# Now exit if we have it, but it failed.  Also exit now if we
117# don't have it and --version was passed (most likely to detect
118# the program).  This is about non-GNU programs, so use $1 not
119# $program.
120case $1 in
121  lex*|yacc*)
122    # Not GNU programs, they don't have --version.
123    ;;
124
125  *)
126    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
127       # We have it, but it failed.
128       exit 1
129    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
130       # Could not run --version or --help.  This is probably someone
131       # running '$TOOL --version' or '$TOOL --help' to check whether
132       # $TOOL exists and not knowing $TOOL uses missing.
133       exit 1
134    fi
135    ;;
136esac
137
138# If it does not exist, or fails to run (possibly an outdated version),
139# try to emulate it.
140case $program in
141  aclocal*)
142    echo 1>&2 "\
143WARNING: '$1' is $msg.  You should only need it if
144         you modified 'acinclude.m4' or '${configure_ac}'.  You might want
145         to install the Automake and Perl packages.  Grab them from
146         any GNU archive site."
147    touch aclocal.m4
148    ;;
149
150  autoconf*)
151    echo 1>&2 "\
152WARNING: '$1' is $msg.  You should only need it if
153         you modified '${configure_ac}'.  You might want to install the
154         Autoconf and GNU m4 packages.  Grab them from any GNU
155         archive site."
156    touch configure
157    ;;
158
159  autoheader*)
160    echo 1>&2 "\
161WARNING: '$1' is $msg.  You should only need it if
162         you modified 'acconfig.h' or '${configure_ac}'.  You might want
163         to install the Autoconf and GNU m4 packages.  Grab them
164         from any GNU archive site."
165    files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
166    test -z "$files" && files="config.h"
167    touch_files=
168    for f in $files; do
169      case $f in
170      *:*) touch_files="$touch_files "`echo "$f" |
171				       sed -e 's/^[^:]*://' -e 's/:.*//'`;;
172      *) touch_files="$touch_files $f.in";;
173      esac
174    done
175    touch $touch_files
176    ;;
177
178  automake*)
179    echo 1>&2 "\
180WARNING: '$1' is $msg.  You should only need it if
181         you modified 'Makefile.am', 'acinclude.m4' or '${configure_ac}'.
182         You might want to install the Automake and Perl packages.
183         Grab them from any GNU archive site."
184    find . -type f -name Makefile.am -print |
185	   sed 's/\.am$/.in/' |
186	   while read f; do touch "$f"; done
187    ;;
188
189  autom4te*)
190    echo 1>&2 "\
191WARNING: '$1' is needed, but is $msg.
192         You might have modified some files without having the
193         proper tools for further handling them.
194         You can get '$1' as part of Autoconf from any GNU
195         archive site."
196
197    file=`echo "$*" | sed -n "$sed_output"`
198    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
199    if test -f "$file"; then
200	touch $file
201    else
202	test -z "$file" || exec >$file
203	echo "#! /bin/sh"
204	echo "# Created by GNU Automake missing as a replacement of"
205	echo "#  $ $@"
206	echo "exit 0"
207	chmod +x $file
208	exit 1
209    fi
210    ;;
211
212  bison*|yacc*)
213    echo 1>&2 "\
214WARNING: '$1' $msg.  You should only need it if
215         you modified a '.y' file.  You may need the Bison package
216         in order for those modifications to take effect.  You can get
217         Bison from any GNU archive site."
218    rm -f y.tab.c y.tab.h
219    if test $# -ne 1; then
220        eval LASTARG=\${$#}
221	case $LASTARG in
222	*.y)
223	    SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
224	    if test -f "$SRCFILE"; then
225	         cp "$SRCFILE" y.tab.c
226	    fi
227	    SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
228	    if test -f "$SRCFILE"; then
229	         cp "$SRCFILE" y.tab.h
230	    fi
231	  ;;
232	esac
233    fi
234    if test ! -f y.tab.h; then
235	echo >y.tab.h
236    fi
237    if test ! -f y.tab.c; then
238	echo 'main() { return 0; }' >y.tab.c
239    fi
240    ;;
241
242  lex*|flex*)
243    echo 1>&2 "\
244WARNING: '$1' is $msg.  You should only need it if
245         you modified a '.l' file.  You may need the Flex package
246         in order for those modifications to take effect.  You can get
247         Flex from any GNU archive site."
248    rm -f lex.yy.c
249    if test $# -ne 1; then
250        eval LASTARG=\${$#}
251	case $LASTARG in
252	*.l)
253	    SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
254	    if test -f "$SRCFILE"; then
255	         cp "$SRCFILE" lex.yy.c
256	    fi
257	  ;;
258	esac
259    fi
260    if test ! -f lex.yy.c; then
261	echo 'main() { return 0; }' >lex.yy.c
262    fi
263    ;;
264
265  help2man*)
266    echo 1>&2 "\
267WARNING: '$1' is $msg.  You should only need it if
268	 you modified a dependency of a manual page.  You may need the
269	 Help2man package in order for those modifications to take
270	 effect.  You can get Help2man from any GNU archive site."
271
272    file=`echo "$*" | sed -n "$sed_output"`
273    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
274    if test -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 $?
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    # The file to touch is that specified with -o ...
292    file=`echo "$*" | sed -n "$sed_output"`
293    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
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 '
298	/^@setfilename/{
299	  s/.* \([^ ]*\) *$/\1/
300	  p
301	  q
302	}' $infile`
303      # ... or it is derived from the source name (dir/f.texi becomes f.info)
304      test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
305    fi
306    # If the file does not exist, the user really needs makeinfo;
307    # let's fail without touching anything.
308    test -f $file || exit 1
309    touch $file
310    ;;
311
312  *)
313    echo 1>&2 "\
314WARNING: '$1' is needed, and is $msg.
315         You might have modified some files without having the
316         proper tools for further handling them.  Check the 'README' file,
317         it often tells you about the needed prerequisites for installing
318         this package.  You may also peek at any GNU archive site, in case
319         some other package would contain this missing '$1' program."
320    exit 1
321    ;;
322esac
323
324exit 0
325
326# Local variables:
327# eval: (add-hook 'write-file-hooks 'time-stamp)
328# time-stamp-start: "scriptversion="
329# time-stamp-format: "%:y-%02m-%02d.%02H"
330# time-stamp-time-zone: "UTC"
331# time-stamp-end: "; # UTC"
332# End:
333