2004-05-01 Andrew Cagney <cagney@redhat.com>
[platform/upstream/binutils.git] / missing
1 #! /bin/sh
2 # Common stub for a few missing GNU programs while installing.
3 # Copyright (C) 1996, 1997, 1999, 2000, 2002 Free Software Foundation, Inc.
4 # Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
5
6 # This program is free software; you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License as published by
8 # the Free Software Foundation; either version 2, or (at your option)
9 # any later version.
10
11 # This program is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 # GNU General Public License for more details.
15
16 # You should have received a copy of the GNU General Public License
17 # along with this program; if not, write to the Free Software
18 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
19 # 02111-1307, USA.
20
21 # As a special exception to the GNU General Public License, if you
22 # distribute this file as part of a program that contains a
23 # configuration script generated by Autoconf, you may include it under
24 # the same distribution terms that you use for the rest of that program.
25
26 if test $# -eq 0; then
27   echo 1>&2 "Try \`$0 --help' for more information"
28   exit 1
29 fi
30
31 run=:
32
33 # In the cases where this matters, `missing' is being run in the
34 # srcdir already.
35 if test -f configure.ac; then
36   configure_ac=configure.ac
37 else
38   configure_ac=configure.in
39 fi
40
41 case "$1" in
42 --run)
43   # Try to run requested program, and just exit if it succeeds.
44   run=
45   shift
46   "$@" && exit 0
47   ;;
48 esac
49
50 # If it does not exist, or fails to run (possibly an outdated version),
51 # try to emulate it.
52 case "$1" in
53
54   -h|--h|--he|--hel|--help)
55     echo "\
56 $0 [OPTION]... PROGRAM [ARGUMENT]...
57
58 Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
59 error status if there is no known handling for PROGRAM.
60
61 Options:
62   -h, --help      display this help and exit
63   -v, --version   output version information and exit
64   --run           try to run the given command, and emulate it if it fails
65
66 Supported PROGRAM values:
67   aclocal      touch file \`aclocal.m4'
68   autoconf     touch file \`configure'
69   autoheader   touch file \`config.h.in'
70   automake     touch all \`Makefile.in' files
71   bison        create \`y.tab.[ch]', if possible, from existing .[ch]
72   flex         create \`lex.yy.c', if possible, from existing .c
73   help2man     touch the output file
74   lex          create \`lex.yy.c', if possible, from existing .c
75   makeinfo     touch the output file
76   tar          try tar, gnutar, gtar, then tar without non-portable flags
77   yacc         create \`y.tab.[ch]', if possible, from existing .[ch]"
78     ;;
79
80   -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
81     echo "missing 0.4 - GNU automake"
82     ;;
83
84   -*)
85     echo 1>&2 "$0: Unknown \`$1' option"
86     echo 1>&2 "Try \`$0 --help' for more information"
87     exit 1
88     ;;
89
90   aclocal*)
91     if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
92        # We have it, but it failed.
93        exit 1
94     fi
95
96     echo 1>&2 "\
97 WARNING: \`$1' is missing on your system.  You should only need it if
98          you modified \`acinclude.m4' or \`${configure_ac}'.  You might want
99          to install the \`Automake' and \`Perl' packages.  Grab them from
100          any GNU archive site."
101     touch aclocal.m4
102     ;;
103
104   autoconf)
105     if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
106        # We have it, but it failed.
107        exit 1
108     fi
109
110     echo 1>&2 "\
111 WARNING: \`$1' is missing on your system.  You should only need it if
112          you modified \`${configure_ac}'.  You might want to install the
113          \`Autoconf' and \`GNU m4' packages.  Grab them from any GNU
114          archive site."
115     touch configure
116     ;;
117
118   autoheader)
119     if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
120        # We have it, but it failed.
121        exit 1
122     fi
123
124     echo 1>&2 "\
125 WARNING: \`$1' is missing on your system.  You should only need it if
126          you modified \`acconfig.h' or \`${configure_ac}'.  You might want
127          to install the \`Autoconf' and \`GNU m4' packages.  Grab them
128          from any GNU archive site."
129     files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
130     test -z "$files" && files="config.h"
131     touch_files=
132     for f in $files; do
133       case "$f" in
134       *:*) touch_files="$touch_files "`echo "$f" |
135                                        sed -e 's/^[^:]*://' -e 's/:.*//'`;;
136       *) touch_files="$touch_files $f.in";;
137       esac
138     done
139     touch $touch_files
140     ;;
141
142   automake*)
143     if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
144        # We have it, but it failed.
145        exit 1
146     fi
147
148     echo 1>&2 "\
149 WARNING: \`$1' is missing on your system.  You should only need it if
150          you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
151          You might want to install the \`Automake' and \`Perl' packages.
152          Grab them from any GNU archive site."
153     find . -type f -name Makefile.am -print |
154            sed 's/\.am$/.in/' |
155            while read f; do touch "$f"; done
156     ;;
157
158   autom4te)
159     if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
160        # We have it, but it failed.
161        exit 1
162     fi
163
164     echo 1>&2 "\
165 WARNING: \`$1' is needed, and you do not seem to have it handy on your
166          system.  You might have modified some files without having the
167          proper tools for further handling them.
168          You can get \`$1' as part of \`Autoconf' from any GNU
169          archive site."
170
171     file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'`
172     test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'`
173     if test -f "$file"; then
174         touch $file
175     else
176         test -z "$file" || exec >$file
177         echo "#! /bin/sh"
178         echo "# Created by GNU Automake missing as a replacement of"
179         echo "#  $ $@"
180         echo "exit 0"
181         chmod +x $file
182         exit 1
183     fi
184     ;;
185
186   bison|yacc)
187     echo 1>&2 "\
188 WARNING: \`$1' is missing on your system.  You should only need it if
189          you modified a \`.y' file.  You may need the \`Bison' package
190          in order for those modifications to take effect.  You can get
191          \`Bison' from any GNU archive site."
192     rm -f y.tab.c y.tab.h
193     if [ $# -ne 1 ]; then
194         eval LASTARG="\${$#}"
195         case "$LASTARG" in
196         *.y)
197             SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
198             if [ -f "$SRCFILE" ]; then
199                  cp "$SRCFILE" y.tab.c
200             fi
201             SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
202             if [ -f "$SRCFILE" ]; then
203                  cp "$SRCFILE" y.tab.h
204             fi
205           ;;
206         esac
207     fi
208     if [ ! -f y.tab.h ]; then
209         echo >y.tab.h
210     fi
211     if [ ! -f y.tab.c ]; then
212         echo 'main() { return 0; }' >y.tab.c
213     fi
214     ;;
215
216   lex|flex)
217     echo 1>&2 "\
218 WARNING: \`$1' is missing on your system.  You should only need it if
219          you modified a \`.l' file.  You may need the \`Flex' package
220          in order for those modifications to take effect.  You can get
221          \`Flex' from any GNU archive site."
222     rm -f lex.yy.c
223     if [ $# -ne 1 ]; then
224         eval LASTARG="\${$#}"
225         case "$LASTARG" in
226         *.l)
227             SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
228             if [ -f "$SRCFILE" ]; then
229                  cp "$SRCFILE" lex.yy.c
230             fi
231           ;;
232         esac
233     fi
234     if [ ! -f lex.yy.c ]; then
235         echo 'main() { return 0; }' >lex.yy.c
236     fi
237     ;;
238
239   help2man)
240     if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
241        # We have it, but it failed.
242        exit 1
243     fi
244
245     echo 1>&2 "\
246 WARNING: \`$1' is missing on your system.  You should only need it if
247          you modified a dependency of a manual page.  You may need the
248          \`Help2man' package in order for those modifications to take
249          effect.  You can get \`Help2man' from any GNU archive site."
250
251     file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
252     if test -z "$file"; then
253         file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'`
254     fi
255     if [ -f "$file" ]; then
256         touch $file
257     else
258         test -z "$file" || exec >$file
259         echo ".ab help2man is required to generate this page"
260         exit 1
261     fi
262     ;;
263
264   makeinfo)
265     if test -z "$run" && (makeinfo --version) > /dev/null 2>&1; then
266        # We have makeinfo, but it failed.
267        exit 1
268     fi
269
270     echo 1>&2 "\
271 WARNING: \`$1' is missing on your system.  You should only need it if
272          you modified a \`.texi' or \`.texinfo' file, or any other file
273          indirectly affecting the aspect of the manual.  The spurious
274          call might also be the consequence of using a buggy \`make' (AIX,
275          DU, IRIX).  You might want to install the \`Texinfo' package or
276          the \`GNU make' package.  Grab either from any GNU archive site."
277     file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
278     if test -z "$file"; then
279       file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
280       file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file`
281     fi
282     touch $file
283     ;;
284
285   tar)
286     shift
287     if test -n "$run"; then
288       echo 1>&2 "ERROR: \`tar' requires --run"
289       exit 1
290     fi
291
292     # We have already tried tar in the generic part.
293     # Look for gnutar/gtar before invocation to avoid ugly error
294     # messages.
295     if (gnutar --version > /dev/null 2>&1); then
296        gnutar "$@" && exit 0
297     fi
298     if (gtar --version > /dev/null 2>&1); then
299        gtar "$@" && exit 0
300     fi
301     firstarg="$1"
302     if shift; then
303         case "$firstarg" in
304         *o*)
305             firstarg=`echo "$firstarg" | sed s/o//`
306             tar "$firstarg" "$@" && exit 0
307             ;;
308         esac
309         case "$firstarg" in
310         *h*)
311             firstarg=`echo "$firstarg" | sed s/h//`
312             tar "$firstarg" "$@" && exit 0
313             ;;
314         esac
315     fi
316
317     echo 1>&2 "\
318 WARNING: I can't seem to be able to run \`tar' with the given arguments.
319          You may want to install GNU tar or Free paxutils, or check the
320          command line arguments."
321     exit 1
322     ;;
323
324   *)
325     echo 1>&2 "\
326 WARNING: \`$1' is needed, and you do not seem to have it handy on your
327          system.  You might have modified some files without having the
328          proper tools for further handling them.  Check the \`README' file,
329          it often tells you about the needed prerequirements for installing
330          this package.  You may also peek at any GNU archive site, in case
331          some other package would contain this missing \`$1' program."
332     exit 1
333     ;;
334 esac
335
336 exit 0