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
27if test $# -eq 0; then
28  echo 1>&2 "Try '$0 --help' for more information"
29  exit 1
30fi
31
32run=:
33sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
34sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
35
36# In the cases where this matters, 'missing' is being run in the
37# srcdir already.
38if test -f configure.ac; then
39  configure_ac=configure.ac
40else
41  configure_ac=configure.in
42fi
43
44msg="missing on your system"
45
46case $1 in
47--run)
48  # Try to run requested program, and just exit if it succeeds.
49  run=
50  shift
51  "$@" && exit 0
52  # Exit code 63 means version mismatch.  This often happens
53  # when the user try to use an ancient version of a tool on
54  # a file that requires a minimum version.  In this case we
55  # we should proceed has if the program had been absent, or
56  # if --run hadn't been passed.
57  if test $? = 63; then
58    run=:
59    msg="probably too old"
60  fi
61  ;;
62
63  -h|--h|--he|--hel|--help)
64    echo "\
65$0 [OPTION]... PROGRAM [ARGUMENT]...
66
67Handle 'PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
68error status if there is no known handling for PROGRAM.
69
70Options:
71  -h, --help      display this help and exit
72  -v, --version   output version information and exit
73  --run           try to run the given command, and emulate it if it fails
74
75Supported PROGRAM values:
76  aclocal      touch file 'aclocal.m4'
77  autoconf     touch file 'configure'
78  autoheader   touch file 'config.h.in'
79  autom4te     touch the output file, or create a stub one
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  yacc         create 'y.tab.[ch]', if possible, from existing .[ch]
87
88Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and
89'g' are ignored when checking the name.
90
91Send bug reports to <bug-automake@gnu.org>."
92    exit $?
93    ;;
94
95  -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
96    echo "missing $scriptversion (GNU Automake)"
97    exit $?
98    ;;
99
100  -*)
101    echo 1>&2 "$0: Unknown '$1' option"
102    echo 1>&2 "Try '$0 --help' for more information"
103    exit 1
104    ;;
105
106esac
107
108# normalize program name to check for.
109program=`echo "$1" | sed '
110  s/^gnu-//; t
111  s/^gnu//; t
112  s/^g//; t'`
113
114# Now exit if we have it, but it failed.  Also exit now if we
115# don't have it and --version was passed (most likely to detect
116# the program).  This is about non-GNU programs, so use $1 not
117# $program.
118case $1 in
119  lex*|yacc*)
120    # Not GNU programs, they don't have --version.
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 $program 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 "$sed_output"`
196    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
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 test $# -ne 1; then
218        eval LASTARG=\${$#}
219	case $LASTARG in
220	*.y)
221	    SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
222	    if test -f "$SRCFILE"; then
223	         cp "$SRCFILE" y.tab.c
224	    fi
225	    SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
226	    if test -f "$SRCFILE"; then
227	         cp "$SRCFILE" y.tab.h
228	    fi
229	  ;;
230	esac
231    fi
232    if test ! -f y.tab.h; then
233	echo >y.tab.h
234    fi
235    if test ! -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 test $# -ne 1; then
248        eval LASTARG=\${$#}
249	case $LASTARG in
250	*.l)
251	    SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
252	    if test -f "$SRCFILE"; then
253	         cp "$SRCFILE" lex.yy.c
254	    fi
255	  ;;
256	esac
257    fi
258    if test ! -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 "$sed_output"`
271    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
272    if test -f "$file"; then
273	touch $file
274    else
275	test -z "$file" || exec >$file
276	echo ".ab help2man is required to generate this page"
277	exit $?
278    fi
279    ;;
280
281  makeinfo*)
282    echo 1>&2 "\
283WARNING: '$1' is $msg.  You should only need it if
284         you modified a '.texi' or '.texinfo' file, or any other file
285         indirectly affecting the aspect of the manual.  The spurious
286         call might also be the consequence of using a buggy 'make' (AIX,
287         DU, IRIX).  You might want to install the Texinfo package or
288         the GNU make package.  Grab either from any GNU archive site."
289    # The file to touch is that specified with -o ...
290    file=`echo "$*" | sed -n "$sed_output"`
291    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
292    if test -z "$file"; then
293      # ... or it is the one specified with @setfilename ...
294      infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
295      file=`sed -n '
296	/^@setfilename/{
297	  s/.* \([^ ]*\) *$/\1/
298	  p
299	  q
300	}' $infile`
301      # ... or it is derived from the source name (dir/f.texi becomes f.info)
302      test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
303    fi
304    # If the file does not exist, the user really needs makeinfo;
305    # let's fail without touching anything.
306    test -f $file || exit 1
307    touch $file
308    ;;
309
310  *)
311    echo 1>&2 "\
312WARNING: '$1' is needed, and is $msg.
313         You might have modified some files without having the
314         proper tools for further handling them.  Check the 'README' file,
315         it often tells you about the needed prerequisites for installing
316         this package.  You may also peek at any GNU archive site, in case
317         some other package would contain this missing '$1' program."
318    exit 1
319    ;;
320esac
321
322exit 0
323
324# Local variables:
325# eval: (add-hook 'write-file-hooks 'time-stamp)
326# time-stamp-start: "scriptversion="
327# time-stamp-format: "%:y-%02m-%02d.%02H"
328# time-stamp-time-zone: "UTC"
329# time-stamp-end: "; # UTC"
330# End:
331