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