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