update some autotools pieces in dmapi tests
[xfstests-dev.git] / dmapi / missing
1 #! /bin/sh
2 # Common stub for a few missing GNU programs while installing.
3
4 scriptversion=2003-09-02.23
5
6 # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003 
7 #   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., 59 Temple Place - Suite 330, Boston, MA
23 # 02111-1307, 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
30 if test $# -eq 0; then
31   echo 1>&2 "Try \`$0 --help' for more information"
32   exit 1
33 fi
34
35 run=:
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 esac
64
65 # If it does not exist, or fails to run (possibly an outdated version),
66 # try to emulate it.
67 case "$1" in
68
69   -h|--h|--he|--hel|--help)
70     echo "\
71 $0 [OPTION]... PROGRAM [ARGUMENT]...
72
73 Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
74 error status if there is no known handling for PROGRAM.
75
76 Options:
77   -h, --help      display this help and exit
78   -v, --version   output version information and exit
79   --run           try to run the given command, and emulate it if it fails
80
81 Supported PROGRAM values:
82   aclocal      touch file \`aclocal.m4'
83   autoconf     touch file \`configure'
84   autoheader   touch file \`config.h.in'
85   automake     touch all \`Makefile.in' files
86   bison        create \`y.tab.[ch]', if possible, from existing .[ch]
87   flex         create \`lex.yy.c', if possible, from existing .c
88   help2man     touch the output file
89   lex          create \`lex.yy.c', if possible, from existing .c
90   makeinfo     touch the output file
91   tar          try tar, gnutar, gtar, then tar without non-portable flags
92   yacc         create \`y.tab.[ch]', if possible, from existing .[ch]
93
94 Send bug reports to <bug-automake@gnu.org>."
95     ;;
96
97   -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
98     echo "missing $scriptversion (GNU Automake)"
99     ;;
100
101   -*)
102     echo 1>&2 "$0: Unknown \`$1' option"
103     echo 1>&2 "Try \`$0 --help' for more information"
104     exit 1
105     ;;
106
107   aclocal*)
108     if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
109        # We have it, but it failed.
110        exit 1
111     fi
112
113     echo 1>&2 "\
114 WARNING: \`$1' is $msg.  You should only need it if
115          you modified \`acinclude.m4' or \`${configure_ac}'.  You might want
116          to install the \`Automake' and \`Perl' packages.  Grab them from
117          any GNU archive site."
118     touch aclocal.m4
119     ;;
120
121   autoconf)
122     if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
123        # We have it, but it failed.
124        exit 1
125     fi
126
127     echo 1>&2 "\
128 WARNING: \`$1' is $msg.  You should only need it if
129          you modified \`${configure_ac}'.  You might want to install the
130          \`Autoconf' and \`GNU m4' packages.  Grab them from any GNU
131          archive site."
132     touch configure
133     ;;
134
135   autoheader)
136     if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
137        # We have it, but it failed.
138        exit 1
139     fi
140
141     echo 1>&2 "\
142 WARNING: \`$1' is $msg.  You should only need it if
143          you modified \`acconfig.h' or \`${configure_ac}'.  You might want
144          to install the \`Autoconf' and \`GNU m4' packages.  Grab them
145          from any GNU archive site."
146     files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
147     test -z "$files" && files="config.h"
148     touch_files=
149     for f in $files; do
150       case "$f" in
151       *:*) touch_files="$touch_files "`echo "$f" |
152                                        sed -e 's/^[^:]*://' -e 's/:.*//'`;;
153       *) touch_files="$touch_files $f.in";;
154       esac
155     done
156     touch $touch_files
157     ;;
158
159   automake*)
160     if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
161        # We have it, but it failed.
162        exit 1
163     fi
164
165     echo 1>&2 "\
166 WARNING: \`$1' is $msg.  You should only need it if
167          you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
168          You might want to install the \`Automake' and \`Perl' packages.
169          Grab them from any GNU archive site."
170     find . -type f -name Makefile.am -print |
171            sed 's/\.am$/.in/' |
172            while read f; do touch "$f"; done
173     ;;
174
175   autom4te)
176     if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
177        # We have it, but it failed.
178        exit 1
179     fi
180
181     echo 1>&2 "\
182 WARNING: \`$1' is needed, but is $msg.
183          You might have modified some files without having the
184          proper tools for further handling them.
185          You can get \`$1' as part of \`Autoconf' from any GNU
186          archive site."
187
188     file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'`
189     test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'`
190     if test -f "$file"; then
191         touch $file
192     else
193         test -z "$file" || exec >$file
194         echo "#! /bin/sh"
195         echo "# Created by GNU Automake missing as a replacement of"
196         echo "#  $ $@"
197         echo "exit 0"
198         chmod +x $file
199         exit 1
200     fi
201     ;;
202
203   bison|yacc)
204     echo 1>&2 "\
205 WARNING: \`$1' $msg.  You should only need it if
206          you modified a \`.y' file.  You may need the \`Bison' package
207          in order for those modifications to take effect.  You can get
208          \`Bison' from any GNU archive site."
209     rm -f y.tab.c y.tab.h
210     if [ $# -ne 1 ]; then
211         eval LASTARG="\${$#}"
212         case "$LASTARG" in
213         *.y)
214             SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
215             if [ -f "$SRCFILE" ]; then
216                  cp "$SRCFILE" y.tab.c
217             fi
218             SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
219             if [ -f "$SRCFILE" ]; then
220                  cp "$SRCFILE" y.tab.h
221             fi
222           ;;
223         esac
224     fi
225     if [ ! -f y.tab.h ]; then
226         echo >y.tab.h
227     fi
228     if [ ! -f y.tab.c ]; then
229         echo 'main() { return 0; }' >y.tab.c
230     fi
231     ;;
232
233   lex|flex)
234     echo 1>&2 "\
235 WARNING: \`$1' is $msg.  You should only need it if
236          you modified a \`.l' file.  You may need the \`Flex' package
237          in order for those modifications to take effect.  You can get
238          \`Flex' from any GNU archive site."
239     rm -f lex.yy.c
240     if [ $# -ne 1 ]; then
241         eval LASTARG="\${$#}"
242         case "$LASTARG" in
243         *.l)
244             SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
245             if [ -f "$SRCFILE" ]; then
246                  cp "$SRCFILE" lex.yy.c
247             fi
248           ;;
249         esac
250     fi
251     if [ ! -f lex.yy.c ]; then
252         echo 'main() { return 0; }' >lex.yy.c
253     fi
254     ;;
255
256   help2man)
257     if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
258        # We have it, but it failed.
259        exit 1
260     fi
261
262     echo 1>&2 "\
263 WARNING: \`$1' is $msg.  You should only need it if
264          you modified a dependency of a manual page.  You may need the
265          \`Help2man' package in order for those modifications to take
266          effect.  You can get \`Help2man' from any GNU archive site."
267
268     file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
269     if test -z "$file"; then
270         file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'`
271     fi
272     if [ -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 1
278     fi
279     ;;
280
281   makeinfo)
282     if test -z "$run" && (makeinfo --version) > /dev/null 2>&1; then
283        # We have makeinfo, but it failed.
284        exit 1
285     fi
286
287     echo 1>&2 "\
288 WARNING: \`$1' is $msg.  You should only need it if
289          you modified a \`.texi' or \`.texinfo' file, or any other file
290          indirectly affecting the aspect of the manual.  The spurious
291          call might also be the consequence of using a buggy \`make' (AIX,
292          DU, IRIX).  You might want to install the \`Texinfo' package or
293          the \`GNU make' package.  Grab either from any GNU archive site."
294     file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
295     if test -z "$file"; then
296       file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
297       file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file`
298     fi
299     touch $file
300     ;;
301
302   tar)
303     shift
304     if test -n "$run"; then
305       echo 1>&2 "ERROR: \`tar' requires --run"
306       exit 1
307     fi
308
309     # We have already tried tar in the generic part.
310     # Look for gnutar/gtar before invocation to avoid ugly error
311     # messages.
312     if (gnutar --version > /dev/null 2>&1); then
313        gnutar "$@" && exit 0
314     fi
315     if (gtar --version > /dev/null 2>&1); then
316        gtar "$@" && exit 0
317     fi
318     firstarg="$1"
319     if shift; then
320         case "$firstarg" in
321         *o*)
322             firstarg=`echo "$firstarg" | sed s/o//`
323             tar "$firstarg" "$@" && exit 0
324             ;;
325         esac
326         case "$firstarg" in
327         *h*)
328             firstarg=`echo "$firstarg" | sed s/h//`
329             tar "$firstarg" "$@" && exit 0
330             ;;
331         esac
332     fi
333
334     echo 1>&2 "\
335 WARNING: I can't seem to be able to run \`tar' with the given arguments.
336          You may want to install GNU tar or Free paxutils, or check the
337          command line arguments."
338     exit 1
339     ;;
340
341   *)
342     echo 1>&2 "\
343 WARNING: \`$1' is needed, and is $msg.
344          You might have modified some files without having the
345          proper tools for further handling them.  Check the \`README' file,
346          it often tells you about the needed prerequisites for installing
347          this package.  You may also peek at any GNU archive site, in case
348          some other package would contain this missing \`$1' program."
349     exit 1
350     ;;
351 esac
352
353 exit 0
354
355 # Local variables:
356 # eval: (add-hook 'write-file-hooks 'time-stamp)
357 # time-stamp-start: "scriptversion="
358 # time-stamp-format: "%:y-%02m-%02d.%02H"
359 # time-stamp-end: "$"
360 # End: