Add files from parent branch HEAD:
[pkgsrc.git] / mk / gnu-config / missing
1 #! /bin/sh
2 #
3 # $NetBSD: missing,v 1.1 2002/11/21 00:13:34 jlam Exp $
4 #
5 # Common stub for a few missing GNU programs while installing.
6
7 scriptversion=2006-05-10.23
8
9 # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006
10 #   Free Software Foundation, Inc.
11 # Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
12
13 # This program is free software; you can redistribute it and/or modify
14 # it under the terms of the GNU General Public License as published by
15 # the Free Software Foundation; either version 2, or (at your option)
16 # any later version.
17
18 # This program is distributed in the hope that it will be useful,
19 # but WITHOUT ANY WARRANTY; without even the implied warranty of
20 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21 # GNU General Public License for more details.
22
23 # You should have received a copy of the GNU General Public License
24 # along with this program; if not, write to the Free Software
25 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
26 # 02110-1301, USA.
27
28 # As a special exception to the GNU General Public License, if you
29 # distribute this file as part of a program that contains a
30 # configuration script generated by Autoconf, you may include it under
31 # the same distribution terms that you use for the rest of that program.
32
33 if test $# -eq 0; then
34   echo 1>&2 "Try \`$0 --help' for more information"
35   exit 1
36 fi
37
38 run=:
39 sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
40 sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
41
42 # In the cases where this matters, `missing' is being run in the
43 # srcdir already.
44 if test -f configure.ac; then
45   configure_ac=configure.ac
46 else
47   configure_ac=configure.in
48 fi
49
50 msg="missing on your system"
51
52 case $1 in
53 --run)
54   # Try to run requested program, and just exit if it succeeds.
55   run=
56   shift
57   "$@" && exit 0
58   # Exit code 63 means version mismatch.  This often happens
59   # when the user try to use an ancient version of a tool on
60   # a file that requires a minimum version.  In this case we
61   # we should proceed has if the program had been absent, or
62   # if --run hadn't been passed.
63   if test $? = 63; then
64     run=:
65     msg="probably too old"
66   fi
67   ;;
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   autom4te     touch the output file, or create a stub one
86   automake     touch all \`Makefile.in' files
87   bison        create \`y.tab.[ch]', if possible, from existing .[ch]
88   flex         create \`lex.yy.c', if possible, from existing .c
89   help2man     touch the output file
90   lex          create \`lex.yy.c', if possible, from existing .c
91   makeinfo     touch the output file
92   tar          try tar, gnutar, gtar, then tar without non-portable flags
93   yacc         create \`y.tab.[ch]', if possible, from existing .[ch]
94
95 Send bug reports to <bug-automake@gnu.org>."
96     exit $?
97     ;;
98
99   -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
100     echo "missing $scriptversion (GNU Automake)"
101     exit $?
102     ;;
103
104   -*)
105     echo 1>&2 "$0: Unknown \`$1' option"
106     echo 1>&2 "Try \`$0 --help' for more information"
107     exit 1
108     ;;
109
110 esac
111
112 # Now exit if we have it, but it failed.  Also exit now if we
113 # don't have it and --version was passed (most likely to detect
114 # the program).
115 case $1 in
116   lex|yacc)
117     # Not GNU programs, they don't have --version.
118     ;;
119
120   tar)
121     if test -n "$run"; then
122        echo 1>&2 "ERROR: \`tar' requires --run"
123        exit 1
124     elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
125        exit 1
126     fi
127     ;;
128
129   *)
130     if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
131        # We have it, but it failed.
132        exit 1
133     elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
134        # Could not run --version or --help.  This is probably someone
135        # running `$TOOL --version' or `$TOOL --help' to check whether
136        # $TOOL exists and not knowing $TOOL uses missing.
137        exit 1
138     fi
139     ;;
140 esac
141
142 # If it does not exist, or fails to run (possibly an outdated version),
143 # try to emulate it.
144 case $1 in
145   aclocal*)
146     echo 1>&2 "\
147 WARNING: \`$1' is $msg.  You should only need it if
148          you modified \`acinclude.m4' or \`${configure_ac}'.  You might want
149          to install the \`Automake' and \`Perl' packages.  Grab them from
150          any GNU archive site."
151     touch aclocal.m4
152     ;;
153
154   autoconf)
155     echo 1>&2 "\
156 WARNING: \`$1' is $msg.  You should only need it if
157          you modified \`${configure_ac}'.  You might want to install the
158          \`Autoconf' and \`GNU m4' packages.  Grab them from any GNU
159          archive site."
160     touch configure
161     ;;
162
163   autoheader)
164     echo 1>&2 "\
165 WARNING: \`$1' is $msg.  You should only need it if
166          you modified \`acconfig.h' or \`${configure_ac}'.  You might want
167          to install the \`Autoconf' and \`GNU m4' packages.  Grab them
168          from any GNU archive site."
169     files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
170     test -z "$files" && files="config.h"
171     touch_files=
172     for f in $files; do
173       case $f in
174       *:*) touch_files="$touch_files "`echo "$f" |
175                                        sed -e 's/^[^:]*://' -e 's/:.*//'`;;
176       *) touch_files="$touch_files $f.in";;
177       esac
178     done
179     touch $touch_files
180     ;;
181
182   automake*)
183     echo 1>&2 "\
184 WARNING: \`$1' is $msg.  You should only need it if
185          you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
186          You might want to install the \`Automake' and \`Perl' packages.
187          Grab them from any GNU archive site."
188     find . -type f -name Makefile.am -print |
189            sed 's/\.am$/.in/' |
190            while read f; do touch "$f"; done
191     ;;
192
193   autom4te)
194     echo 1>&2 "\
195 WARNING: \`$1' is needed, but is $msg.
196          You might have modified some files without having the
197          proper tools for further handling them.
198          You can get \`$1' as part of \`Autoconf' from any GNU
199          archive site."
200
201     file=`echo "$*" | sed -n "$sed_output"`
202     test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
203     if test -f "$file"; then
204         touch $file
205     else
206         test -z "$file" || exec >$file
207         echo "#! /bin/sh"
208         echo "# Created by GNU Automake missing as a replacement of"
209         echo "#  $ $@"
210         echo "exit 0"
211         chmod +x $file
212         exit 1
213     fi
214     ;;
215
216   bison|yacc)
217     echo 1>&2 "\
218 WARNING: \`$1' $msg.  You should only need it if
219          you modified a \`.y' file.  You may need the \`Bison' package
220          in order for those modifications to take effect.  You can get
221          \`Bison' from any GNU archive site."
222     rm -f y.tab.c y.tab.h
223     if test $# -ne 1; then
224         eval LASTARG="\${$#}"
225         case $LASTARG in
226         *.y)
227             SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
228             if test -f "$SRCFILE"; then
229                  cp "$SRCFILE" y.tab.c
230             fi
231             SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
232             if test -f "$SRCFILE"; then
233                  cp "$SRCFILE" y.tab.h
234             fi
235           ;;
236         esac
237     fi
238     if test ! -f y.tab.h; then
239         echo >y.tab.h
240     fi
241     if test ! -f y.tab.c; then
242         echo 'main() { return 0; }' >y.tab.c
243     fi
244     ;;
245
246   lex|flex)
247     echo 1>&2 "\
248 WARNING: \`$1' is $msg.  You should only need it if
249          you modified a \`.l' file.  You may need the \`Flex' package
250          in order for those modifications to take effect.  You can get
251          \`Flex' from any GNU archive site."
252     rm -f lex.yy.c
253     if test $# -ne 1; then
254         eval LASTARG="\${$#}"
255         case $LASTARG in
256         *.l)
257             SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
258             if test -f "$SRCFILE"; then
259                  cp "$SRCFILE" lex.yy.c
260             fi
261           ;;
262         esac
263     fi
264     if test ! -f lex.yy.c; then
265         echo 'main() { return 0; }' >lex.yy.c
266     fi
267     ;;
268
269   help2man)
270     echo 1>&2 "\
271 WARNING: \`$1' is $msg.  You should only need it if
272          you modified a dependency of a manual page.  You may need the
273          \`Help2man' package in order for those modifications to take
274          effect.  You can get \`Help2man' from any GNU archive site."
275
276     file=`echo "$*" | sed -n "$sed_output"`
277     test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
278     if test -f "$file"; then
279         touch $file
280     else
281         test -z "$file" || exec >$file
282         echo ".ab help2man is required to generate this page"
283         exit 1
284     fi
285     ;;
286
287   makeinfo)
288     echo 1>&2 "\
289 WARNING: \`$1' is $msg.  You should only need it if
290          you modified a \`.texi' or \`.texinfo' file, or any other file
291          indirectly affecting the aspect of the manual.  The spurious
292          call might also be the consequence of using a buggy \`make' (AIX,
293          DU, IRIX).  You might want to install the \`Texinfo' package or
294          the \`GNU make' package.  Grab either from any GNU archive site."
295     # The file to touch is that specified with -o ...
296     file=`echo "$*" | sed -n "$sed_output"`
297     test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
298     if test -z "$file"; then
299       # ... or it is the one specified with @setfilename ...
300       infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
301       file=`sed -n '
302         /^@setfilename/{
303           s/.* \([^ ]*\) *$/\1/
304           p
305           q
306         }' $infile`
307       # ... or it is derived from the source name (dir/f.texi becomes f.info)
308       test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
309     fi
310     # If the file does not exist, the user really needs makeinfo;
311     # let's fail without touching anything.
312     test -f $file || exit 1
313     touch $file
314     ;;
315
316   tar)
317     shift
318
319     # We have already tried tar in the generic part.
320     # Look for gnutar/gtar before invocation to avoid ugly error
321     # messages.
322     if (gnutar --version > /dev/null 2>&1); then
323        gnutar "$@" && exit 0
324     fi
325     if (gtar --version > /dev/null 2>&1); then
326        gtar "$@" && exit 0
327     fi
328     firstarg="$1"
329     if shift; then
330         case $firstarg in
331         *o*)
332             firstarg=`echo "$firstarg" | sed s/o//`
333             tar "$firstarg" "$@" && exit 0
334             ;;
335         esac
336         case $firstarg in
337         *h*)
338             firstarg=`echo "$firstarg" | sed s/h//`
339             tar "$firstarg" "$@" && exit 0
340             ;;
341         esac
342     fi
343
344     echo 1>&2 "\
345 WARNING: I can't seem to be able to run \`tar' with the given arguments.
346          You may want to install GNU tar or Free paxutils, or check the
347          command line arguments."
348     exit 1
349     ;;
350
351   *)
352     echo 1>&2 "\
353 WARNING: \`$1' is needed, and is $msg.
354          You might have modified some files without having the
355          proper tools for further handling them.  Check the \`README' file,
356          it often tells you about the needed prerequisites for installing
357          this package.  You may also peek at any GNU archive site, in case
358          some other package would contain this missing \`$1' program."
359     exit 1
360     ;;
361 esac
362
363 exit 0
364
365 # Local variables:
366 # eval: (add-hook 'write-file-hooks 'time-stamp)
367 # time-stamp-start: "scriptversion="
368 # time-stamp-format: "%:y-%02m-%02d.%02H"
369 # time-stamp-end: "$"
370 # End: