]> arthur.barton.de Git - bup.git/blob - config/configure.inc
Fix ./configure handling of OS_* for GNU/kFreeBSD.
[bup.git] / config / configure.inc
1 # -*-shell-script-*-
2
3 #   @(#) configure.inc 1.40@(#)
4 #   Copyright (c) 1999-2007 David Parsons. All rights reserved.
5 #   
6 #   Redistribution and use in source and binary forms, with or without
7 #   modification, are permitted provided that the following conditions
8 #   are met:
9 #  1. Redistributions of source code must retain the above copyright
10 #     notice, this list of conditions and the following disclaimer.
11 #  2. Redistributions in binary form must reproduce the above copyright
12 #     notice, this list of conditions and the following disclaimer in
13 #     the documentation and/or other materials provided with the
14 #     distribution.
15 #  3. My name may not be used to endorse or promote products derived
16 #     from this software without specific prior written permission.
17 #     
18 #  THIS SOFTWARE IS PROVIDED BY DAVID PARSONS ``AS IS'' AND ANY
19 #  EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
20 #  THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
21 #  PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL DAVID
22 #  PARSONS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23 #  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
24 #  TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 #  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
26 #  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27 #  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
28 #  IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
29 #  THE POSSIBILITY OF SUCH DAMAGE.
30 #
31
32
33 #
34 # this preamble code is executed when this file is sourced and it picks
35 # interesting things off the command line.
36 #
37 ac_default_path="/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin"
38
39 ac_standard="--src=DIR          where the source lives (.)
40 --prefix=DIR            where to install the final product (/usr/local)
41 --execdir=DIR           where to put executables (prefix/bin)
42 --sbindir=DIR           where to put static executables (prefix/sbin)
43 --confdir=DIR           where to put configuration information (/etc)
44 --libdir=DIR            where to put libraries (prefix/lib)
45 --libexecdir=DIR        where to put private executables
46 --mandir=DIR            where to put manpages"
47
48 __fail=exit
49
50 if dirname B/A 2>/dev/null >/dev/null; then
51 __ac_dirname() {
52     dirname "$1"
53 }
54 else
55 __ac_dirname() {
56     echo "$1" | sed -e 's:/[^/]*$::'
57 }
58 fi
59
60 ac_progname=$0
61 ac_configure_command=
62 Q=\'
63 for x in "$@"; do
64     ac_configure_command="$ac_configure_command $Q$x$Q"
65 done
66 # ac_configure_command="$*"
67
68 __d=`__ac_dirname "$ac_progname"`
69 if [ "$__d" = "$ac_progname" ]; then
70     AC_SRCDIR=`pwd`
71 else
72     AC_SRCDIR=`cd $__d;pwd`
73 fi
74
75 __ac_dir() {
76     if test -d "$1"; then
77         (cd "$1";pwd)
78     else
79         echo "$1";
80     fi
81 }
82
83 while [ $# -gt 0 ]; do
84     unset matched
85
86     case X"$1" in
87     X--src|X--srcdir)
88         AC_SRCDIR=`__ac_dir "$2"`
89         _set_srcdir=1
90         shift 2;;
91
92     X--src=*|X--srcdir=*)
93         __d=`echo "$1" | sed -e 's/^[^=]*=//'`
94         AC_SRCDIR=`__ac_dir "$__d"`
95         _set_srcdir=1
96         shift 1 ;;
97
98     X--prefix)
99         AC_PREFIX=`__ac_dir "$2"`
100         _set_prefix=1
101         shift 2;;
102
103     X--prefix=*)
104         __d=`echo "$1"| sed -e 's/^[^=]*=//'`
105         AC_PREFIX=`__ac_dir "$__d"`
106         _set_prefix=1
107         shift 1;;
108
109     X--confdir)
110         AC_CONFDIR=`__ac_dir "$2"`
111         _set_confdir=1
112         shift 2;;
113
114     X--confdir=*)
115         __d=`echo "$1" | sed -e 's/^[^=]*=//'`
116         AC_CONFDIR=`__ac_dir "$__d"`
117         _set_confdir=1
118         shift 1;;
119
120     X--libexec|X--libexecdir)
121         AC_LIBEXEC=`__ac_dir "$2"`
122         _set_libexec=1
123         shift 2;;
124
125     X--libexec=*|X--libexecdir=*)
126         __d=`echo "$1" | sed -e 's/^[^=]*=//'`
127         AC_LIBEXEC=`__ac_dir "$__d"`
128         _set_libexec=1
129         shift 1;;
130
131     X--lib|X--libdir)
132         AC_LIBDIR=`__ac_dir "$2"`
133         _set_libdir=1
134         shift 2;;
135
136     X--lib=*|X--libdir=*)
137         __d=`echo "$1" | sed -e 's/^[^=]*=//'`
138         AC_LIBDIR=`__ac_dir "$__d"`
139         _set_libdir=1
140         shift 1;;
141
142     X--exec|X--execdir)
143         AC_EXECDIR=`__ac_dir "$2"`
144         _set_execdir=1
145         shift 2;;
146
147     X--exec=*|X--execdir=*)
148         __d=`echo "$1" | sed -e 's/^[^=]*=//'`
149         AC_EXECDIR=`__ac_dir "$__d"`
150         _set_execdir=1
151         shift 1;;
152
153     X--sbin|X--sbindir)
154         AC_SBINDIR=`__ac_dir "$2"`
155         _set_sbindir=1
156         shift 2;;
157
158     X--sbin=*|X--sbindir=*)
159         __d=`echo "$1" | sed -e 's/^[^=]*=//'`
160         AC_SBINDIR=`__ac_dir "$__d"`
161         _set_sbindir=1
162         shift 1;;
163
164     X--man|X--mandir)
165         AC_MANDIR=`__ac_dir "$2"`
166         _set_mandir=1
167         shift 2;;
168
169     X--man=*|X--mandir=*)
170         __d=`echo "$1" | sed -e 's/^[^=]*=//'`
171         AC_MANDIR=`__ac_dir "$__d"`
172         _set_mandir=1
173         shift 1;;
174
175     X--use-*=*)
176         _var=`echo "$1"| sed -n 's/^--use-\([A-Za-z][-A-Za-z0-9_]*\)=.*$/\1/p'`
177         if [ "$_var" ]; then
178             _val=`echo "$1" | sed -e 's/^--use-[^=]*=\(.*\)$/\1/'`
179             _v=`echo $_var | tr '[a-z]' '[A-Z]' | tr '-' '_'`
180             case X"$_val" in
181             X[Yy][Ee][Ss]|X[Tt][Rr][Uu][Ee]) eval USE_${_v}=T ;;
182             X[Nn][Oo]|X[Ff][Aa][Ll][Ss][Ee]) eval unset USE_${_v} ;;
183             *) echo "Bad value for --use-$_var ; must be yes or no"
184                exit 1 ;;
185             esac
186         else
187             echo "Bad option $1.   Use --help to show options" 1>&2
188             exit 1
189         fi
190         shift 1 ;;
191
192     X--use-*)
193         _var=`echo "$1"|sed -n 's/^--use-\([A-Za-z][-A-Za-z0-9_]*\)$/\1/p'`
194         _v=`echo $_var | tr '[a-z]' '[A-Z]' | tr '-' '_'`
195         eval USE_${_v}=T
196         shift 1;;
197
198     X--with-*=*)
199         _var=`echo "$1"| sed -n 's/^--with-\([A-Za-z][-A-Za-z0-9_]*\)=.*$/\1/p'`
200         if [ "$_var" ]; then
201             _val=`echo "$1" | sed -e 's/^--with-[^=]*=\(.*\)$/\1/'`
202             _v=`echo $_var | tr '[a-z]' '[A-Z]' | tr '-' '_'`
203             eval WITH_${_v}=\"$_val\"
204         else
205             echo "Bad option $1.   Use --help to show options" 1>&2
206             exit 1
207         fi
208         shift 1 ;;
209
210     X--with-*)
211         _var=`echo "$1" | sed -n 's/^--with-\([A-Za-z][A-Za-z0-9_-]*\)$/\1/p'`
212         if [ "$_var" ]; then
213             _v=`echo $_var | tr '[a-z]' '[A-Z]' | tr '-' '_'`
214             eval WITH_${_v}=1
215         else
216             echo "Bad option $1.   Use --help to show options" 1>&2
217             exit 1
218         fi
219         shift 1 ;;
220
221     X--help)
222         echo "$ac_standard"
223         test "$ac_help" && echo "$ac_help"
224         exit 0;;
225
226     *)  if [ "$LOCAL_AC_OPTIONS" ]; then
227             eval "$LOCAL_AC_OPTIONS"
228         else
229             ac_error=T
230         fi
231         if [ "$ac_error" ]; then
232             echo "Bad option $1.   Use --help to show options" 1>&2
233             exit 1
234         fi ;;
235     esac
236 done
237
238
239 #
240 # echo w/o newline
241 #
242 echononl()
243 {
244     ${ac_echo:-echo} "${@}$ac_echo_nonl"
245 }
246
247 #
248 # log something to the terminal and to a logfile.
249 #
250 LOG () {
251     echo "$@"
252     echo "$@" 1>&5
253 }
254
255 #
256 # log something to the terminal without a newline, and to a logfile with
257 # a newline
258 #
259 LOGN () {
260     echononl "$@" 1>&5
261     echo "$@"
262 }
263
264 #
265 # log something to the terminal
266 #
267 TLOG () {
268     echo "$@" 1>&5
269 }
270
271 #
272 # log something to the terminal, no newline
273 #
274 TLOGN () {
275     echononl "$@" 1>&5
276 }
277
278
279 #
280 # AC_CONTINUE tells configure not to bomb if something fails, but to
281 # continue blithely along
282 #
283 AC_CONTINUE () {
284     __fail="return"
285 }
286
287 #
288 # Emulate gnu autoconf's AC_CHECK_HEADERS() function
289 #
290 AC_CHECK_HEADERS () {
291     AC_PROG_CC
292
293     echo "/* AC_CHECK_HEADERS */" > /tmp/ngc$$.c
294     for hdr in $*; do
295         echo "#include <$hdr>" >> /tmp/ngc$$.c
296     done
297     echo "main() { }" >> /tmp/ngc$$.c
298
299     LOGN "checking for header $hdr"
300
301     if $AC_CC -o /tmp/ngc$$ /tmp/ngc$$.c; then
302         AC_DEFINE 'HAVE_'`echo $hdr | tr 'a-z' 'A-Z' | tr './' '_'` 1
303         TLOG " (found)"
304         rc=0
305     else
306         TLOG " (not found)"
307         rc=1
308     fi
309     rm -f /tmp/ngc$$.c /tmp/ngc$$
310     return $rc
311 }
312
313
314 #
315 # emulate GNU autoconf's AC_CHECK_FUNCS function
316 #
317 AC_CHECK_FUNCS () {
318     AC_PROG_CC
319
320 F=$1
321 shift
322 rm -f /tmp/ngc$$.c
323
324 while [ "$1" ]; do
325     echo "#include <$1>" >> /tmp/ngc$$.c
326     shift
327 done
328
329     cat >> /tmp/ngc$$.c << EOF
330 main()
331 {
332
333     $F();
334 }
335 EOF
336
337     LOGN "checking for the $F function"
338
339     if $AC_CC -o /tmp/ngc$$ /tmp/ngc$$.c $LIBS; then
340         AC_DEFINE `echo ${2:-HAVE_$F} | tr 'a-z' 'A-Z'` 1
341         TLOG " (found)"
342         rc=0
343     else
344         echo "offending command was:"
345         cat /tmp/ngc$$.c
346         echo "$AC_CC -o /tmp/ngc$$ /tmp/ngc$$.c $LIBS"
347         TLOG " (not found)"
348         rc=1
349     fi
350     rm -f /tmp/ngc$$.c /tmp/ngc$$
351     return $rc
352 }
353
354
355 #
356 # check to see if some structure exists
357 #
358 # usage: AC_CHECK_STRUCT structure {include ...}
359 #
360 AC_CHECK_STRUCT () {
361     AC_PROG_CC
362     struct=$1
363     shift
364
365     rm -f /tmp/ngc$$.c
366
367     for include in $*; do
368         echo "#include <$include>" >> /tmp/ngc$$.c
369     done
370
371     cat >> /tmp/ngc$$.c << EOF
372 main()
373 {
374     struct $struct foo;
375 }
376 EOF
377
378     LOGN "checking for struct $struct"
379
380     if $AC_CC -o /tmp/ngc$$ /tmp/ngc$$.c $AC_LIBS 2>>config.log; then
381         AC_DEFINE HAVE_STRUCT_`echo ${struct} | tr 'a-z' 'A-Z'`
382         TLOG " (found)"
383         rc=0
384     else
385         TLOG " (not found)"
386         rc=1
387     fi
388     rm -f /tmp/ngc$$.c /tmp/ngc$$
389     return $rc
390 }
391
392
393 #
394 # check to see if some structure contains a field
395 #
396 # usage: AC_CHECK_FIELD structure field {include ...}
397 #
398 AC_CHECK_FIELD () {
399     AC_PROG_CC
400
401     struct=$1
402     field=$2
403     shift 2
404
405     rm -f /tmp/ngc$$.c
406
407     for include in $*;do
408         echo "#include <$include>" >> /tmp/ngc$$.c
409     done
410
411     cat >> /tmp/ngc$$.c << EOF
412 main()
413 {
414     struct $struct foo;
415
416     foo.$field;
417 }
418 EOF
419
420     LOGN "checking that struct $struct has a $field field"
421
422     if $AC_CC -o /tmp/ngc$$ /tmp/ngc$$.c $AC_LIBS 2>>config.log; then
423         AC_DEFINE HAVE_`echo ${struct}_$field | tr 'a-z' 'A-Z'`
424         TLOG " (yes)"
425         rc=0
426     else
427         TLOG " (no)"
428         rc=1
429     fi
430     rm -f /tmp/ngc$$.c /tmp/ngc$$
431     return $rc
432 }
433
434
435 #
436 # check that the C compiler works
437 #
438 AC_PROG_CC () {
439     test "$AC_CC" && return 0
440
441     cat > /tmp/ngc$$.c << \EOF
442 #include <stdio.h>
443 main()
444 {
445     puts("hello, sailor");
446 }
447 EOF
448
449     TLOGN "checking the C compiler"
450
451     unset AC_CFLAGS AC_LDFLAGS
452
453     if [ "$CC" ] ; then
454         AC_CC="$CC"
455     elif [ "$WITH_PATH" ]; then
456         AC_CC=`acLookFor cc`
457     elif [ "`acLookFor cc`" ]; then
458         # don't specify the full path if the user is looking in their $PATH
459         # for a C compiler.
460         AC_CC=cc
461     fi
462
463     # finally check for POSIX c89
464     test "$AC_CC" || AC_CC=`acLookFor c89`
465
466     if [ ! "$AC_CC" ]; then
467         TLOG " (no C compiler found)"
468         $__fail 1
469     fi
470     echo "checking out the C compiler"
471
472     $AC_CC -o /tmp/ngc$$ /tmp/ngc$$.c
473     status=$?
474
475     TLOGN " ($AC_CC)"
476     if [ $status -eq 0 ]; then
477         TLOG " ok"
478
479         # check that the CFLAGS and LDFLAGS aren't bogus
480
481         unset AC_CFLAGS AC_LDFLAGS
482
483         if [ "$CFLAGS" ]; then
484             test "$CFLAGS" && echo "validating CFLAGS=${CFLAGS}"
485             if $AC_CC $CFLAGS -o /tmp/ngc$$.o /tmp/ngc$$.c ; then
486                 AC_CFLAGS=${CFLAGS:-"-g"}
487                 test "$CFLAGS" && echo "CFLAGS=\"${CFLAGS}\" are okay"
488             elif [ "$CFLAGS" ]; then
489                 echo "ignoring bogus CFLAGS=\"${CFLAGS}\""
490             fi
491         else
492             AC_CFLAGS=-g
493         fi
494         if [ "$LDFLAGS" ]; then
495             test "$LDFLAGS" && echo "validating LDFLAGS=${LDFLAGS}"
496             if $AC_CC $LDFLAGS -o /tmp/ngc$$ /tmp/ngc$$.o; then
497                 AC_LDFLAGS=${LDFLAGS:-"-g"}
498                 test "$LDFLAGS" && TLOG "LDFLAGS=\"${LDFLAGS}\" are okay"
499             elif [ "$LDFLAGS" ]; then
500                 TLOG "ignoring bogus LDFLAGS=\"${LDFLAGS}\""
501             fi
502         else
503             AC_LDFLAGS=${CFLAGS:-"-g"}
504         fi
505     else
506         AC_FAIL " does not compile code properly"
507     fi
508
509     AC_SUB 'CC' "$AC_CC"
510
511     rm -f /tmp/ngc$$ /tmp/ngc$$.c /tmp/ngc$$.o
512
513     return $status
514 }
515
516
517 #
518 # acLookFor actually looks for a program, without setting anything.
519 #
520 acLookFor () {
521     path=${AC_PATH:-$ac_default_path}
522     case "X$1" in
523     X-[rx]) __mode=$1
524             shift
525             ;;
526     *)      __mode=-x
527             ;;
528     esac
529     oldifs="$IFS"
530     for program in $*; do
531         IFS=":"
532         for x in $path; do
533             if [ $__mode $x/$program -a -f $x/$program ]; then
534                 echo $x/$program
535                 break 2
536             fi
537         done
538     done
539     IFS="$oldifs"
540     unset __mode
541 }
542
543
544 #
545 # check that a program exists and set its path
546 #
547 MF_PATH_INCLUDE () {
548     SYM=$1; shift
549
550     case X$1 in
551     X-[rx]) __mode=$1
552             shift
553             ;;
554     *)      unset __mode
555             ;;
556     esac
557
558     TLOGN "looking for $1"
559
560     DEST=`acLookFor $__mode $*`
561
562     __sym=`echo "$SYM" | tr '[a-z]' '[A-Z]'`
563     if [ "$DEST" ]; then
564         TLOG " ($DEST)"
565         echo "$1 is $DEST"
566         AC_MAK $SYM
567         AC_DEFINE PATH_$__sym \""$DEST"\"
568         AC_SUB $__sym "$DEST"
569         eval CF_$SYM=$DEST
570         return 0
571     else
572         #AC_SUB $__sym ''
573         echo "$1 is not found"
574         TLOG " (not found)"
575         return 1
576     fi
577 }
578
579
580 #
581 # AC_INIT starts the ball rolling
582 #
583 # After AC_INIT, fd's 1 and 2 point to config.log
584 # and fd 5 points to what used to be fd 1
585 #
586 AC_INIT () {
587     __config_files="config.cmd config.sub config.h config.mak config.log"
588     __config_detritus="config.h.tmp"
589     rm -f $__config_files $__config_detritus
590     __cwd=`pwd`
591     exec 5>&1 1>$__cwd/config.log 2>&1
592     AC_CONFIGURE_FOR=__AC_`echo $1 | sed -e 's/\..$//' | tr 'a-z' 'A-Z' | tr ' ' '_'`_D
593
594     # check to see whether to use echo -n or echo ...\c
595     #
596     echo -n hello > $$
597     echo world >> $$
598     if grep "helloworld" $$ >/dev/null; then
599         ac_echo="echo -n"
600         echo "[echo -n] works"
601     else
602         ac_echo="echo"
603         echo 'hello\c' > $$
604         echo 'world' >> $$
605         if grep "helloworld" $$ >/dev/null; then
606             ac_echo_nonl='\c'
607             echo "[echo ...\\c] works"
608         fi
609     fi
610     rm -f $$
611
612     LOG "Configuring for [$1]"
613
614     rm -f $__cwd/config.h
615     cat > $__cwd/config.h.tmp << EOF
616 /*
617  * configuration for $1${2:+" ($2)"}, generated `date`
618  * by ${LOGNAME:-`whoami`}@`hostname`
619  */
620 #ifndef $AC_CONFIGURE_FOR
621 #define $AC_CONFIGURE_FOR 1
622
623
624 EOF
625
626     unset __share
627     if [ -d $AC_PREFIX/share/man ]; then
628         for t in 1 2 3 4 5 6 7 8 9; do
629             if [ -d $AC_PREFIX/share/man/man$t ]; then
630                 __share=/share
631             elif [ -d $AC_PREFIX/share/man/cat$t ]; then
632                 __share=/share
633             fi
634         done
635     else
636         __share=
637     fi
638
639     if [ -d $AC_PREFIX/libexec ]; then
640         __libexec=libexec
641     else
642         __libexec=lib
643     fi
644
645
646     AC_PREFIX=${AC_PREFIX:-/usr/local}
647     AC_EXECDIR=${AC_EXECDIR:-$AC_PREFIX/bin}
648     AC_SBINDIR=${AC_SBINDIR:-$AC_PREFIX/sbin}
649     AC_LIBDIR=${AC_LIBDIR:-$AC_PREFIX/lib}
650     AC_MANDIR=${AC_MANDIR:-$AC_PREFIX$__share/man}
651     AC_LIBEXEC=${AC_LIBEXEC:-$AC_PREFIX/$__libexec}
652     AC_CONFDIR=${AC_CONFDIR:-/etc}
653
654     AC_PATH=${WITH_PATH:-$PATH}
655     AC_PROG_CPP
656     AC_PROG_INSTALL
657
658     ac_os=`uname -s | sed 's/[-_].*//; s/[^a-zA-Z0-9]/_/g'`
659     _os=`echo $ac_os | tr '[a-z]' '[A-Z]'`
660     AC_DEFINE OS_$_os   1
661     eval OS_${_os}=1
662     unset _os
663 }
664
665
666 #
667 # AC_LIBRARY checks to see if a given library exists and contains the
668 # given function.
669 # usage: AC_LIBRARY function library [alternate ...]
670 #
671 AC_LIBRARY() {
672     SRC=$1
673     shift
674
675     __acllibs=
676     __aclhdrs=
677
678     for x in "$@"; do
679         case X"$x" in
680         X-l*) __acllibs="$__acllibs $x" ;;
681         *)    __aclhdrs="$__aclhdrs $x" ;;
682         esac
683     done
684
685     # first see if the function can be found in any of the
686     # current libraries
687     AC_QUIET AC_CHECK_FUNCS $SRC $__aclhdrs && return 0
688
689     # then search through the list of libraries
690     __libs="$LIBS"
691     for x in $__acllibs; do
692         LIBS="$__libs $x"
693         if AC_QUIET AC_CHECK_FUNCS $SRC $__aclhdrs; then
694             AC_LIBS="$AC_LIBS $x"
695             return 0
696         fi
697     done
698     return 1
699 }
700
701
702 #
703 # AC_PROG_LEX checks to see if LEX exists, and if it's lex or flex.
704 #
705 AC_PROG_LEX() {
706     TLOGN "looking for lex "
707
708     DEST=`acLookFor lex`
709     if [ "$DEST" ]; then
710         AC_MAK LEX
711         AC_DEFINE PATH_LEX \"$DEST\"
712         AC_SUB 'LEX' "$DEST"
713         echo "lex is $DEST"
714     else
715         DEST=`acLookFor flex`
716         if [ "$DEST" ]; then
717             AC_MAK FLEX
718             AC_DEFINE 'LEX' \"$DEST\"
719             AC_SUB 'LEX', "$DEST"
720             echo "lex is $DEST"
721         else
722             AC_SUB LEX ''
723             echo "neither lex or flex found"
724             TLOG " (not found)"
725             return 1
726         fi
727     fi
728
729     if AC_LIBRARY yywrap -ll -lfl; then
730         TLOG "($DEST)"
731         return 0
732     fi
733     TLOG "(no lex library found)"
734     return 1
735 }
736
737
738 #
739 # AC_PROG_YACC checks to see if YACC exists, and if it's bison or
740 # not.
741 #
742 AC_PROG_YACC () {
743
744     TLOGN "looking for yacc "
745
746     DEST=`acLookFor yacc`
747     if [ "$DEST" ]; then
748         AC_MAK YACC
749         AC_DEFINE PATH_YACC \"$DEST\"
750         AC_SUB 'YACC' "$DEST"
751         TLOG "($DEST)"
752         echo "yacc is $DEST"
753     else
754         DEST=`acLookFor bison`
755         if [ "$DEST" ]; then
756             AC_MAK BISON
757             AC_DEFINE 'YACC' \"$DEST\"
758             AC_SUB 'YACC' "$DEST -y"
759             echo "yacc is $DEST -y"
760             TLOG "($DEST -y)"
761         else
762             AC_SUB 'YACC' ''
763             echo "neither yacc or bison found"
764             TLOG " (not found)"
765             return 1
766         fi
767     fi
768     return 0
769 }
770
771
772 #
773 # AC_PROG_LN_S checks to see if ln exists, and, if so, if ln -s works
774 #
775 AC_PROG_LN_S () {
776     test "$AC_FIND_PROG" || AC_PROG_FIND
777
778     test "$AC_FIND_PROG" || return 1
779     
780     TLOGN "looking for \"ln -s\""
781     DEST=`acLookFor ln`
782
783     if [ "$DEST" ]; then
784         rm -f /tmp/b$$
785         $DEST -s /tmp/a$$ /tmp/b$$
786         if [ "`$AC_FIND_PROG /tmp/b$$ -type l -print`" ]; then
787             TLOG " ($DEST)"
788             echo "$DEST exists, and ln -s works"
789             AC_SUB 'LN_S' "$DEST -s"
790             rm -f /tmp/b$$
791         else
792             AC_SUB 'LN_S' ''
793             TLOG " ($DEST exists, but -s does not seem to work)"
794             echo "$DEST exists, but ln -s doesn't seem to work"
795             rm -f /tmp/b$$
796             return 1
797         fi
798     else
799         AC_SUB 'LN_S' ''
800         echo "ln not found"
801         TLOG " (not found)"
802         return 1
803     fi
804 }
805
806
807 #
808 # AC_PROG_FIND looks for the find program and sets the FIND environment
809 # variable
810 #
811 AC_PROG_FIND () {
812     if test -z "$AC_FIND_PROG"; then
813         MF_PATH_INCLUDE FIND find
814         rc=$?
815         AC_FIND_PROG=$DEST
816         return $rc
817     fi
818     return 0
819 }
820
821
822 #
823 # AC_PROG_AWK looks for the awk program and sets the AWK environment
824 # variable
825 #
826 AC_PROG_AWK () {
827     if test -z "$AC_AWK_PROG"; then
828         MF_PATH_INCLUDE AWK awk
829         rc=$?
830         AC_AWK_PROG=$DEST
831         return $rc
832     fi
833     return 0
834 }
835
836
837 #
838 # AC_PROG_SED looks for the sed program and sets the SED environment
839 # variable
840 #
841 AC_PROG_SED () {
842     if test -z "$AC_SED_PROG"; then
843         MF_PATH_INCLUDE SED sed
844         rc=$?
845         AC_SED_PROG=$DEST
846         return $rc
847     fi
848     return 0
849 }
850
851
852 #
853 # AC_HEADER_SYS_WAIT looks for sys/wait.h
854 #
855 AC_HEADER_SYS_WAIT () {
856     AC_CHECK_HEADERS sys/wait.h || return 1
857 }
858
859 #
860 # AC_TYPE_PID_T checks to see if the pid_t type exists
861 #
862 AC_TYPE_PID_T () {
863     cat > /tmp/pd$$.c << EOF
864 #include <sys/types.h>
865 main() { pid_t me; }
866 EOF
867
868     LOGN "checking for pid_t"
869
870     if $AC_CC -c /tmp/pd$$.c -o /tmp/pd$$.o; then
871         TLOG " (found)"
872         rc=0
873     else
874         echo "typedef int pid_t;" >> $__cwd/config.h.tmp
875         TLOG " (not found)"
876         rc=1
877     fi
878     rm -f /tmp/pd$$.o /tmp/pd$$.c
879     return $rc
880 }
881
882
883 #
884 # AC_C_CONST checks to see if the compiler supports the const keyword
885 #
886 AC_C_CONST () {
887     cat > /tmp/pd$$.c << EOF
888 const char me=1;
889 EOF
890     LOGN "checking for \"const\" keyword"
891
892     if $AC_CC -c /tmp/pd$$.c -o /tmp/pd$$.o; then
893         TLOG " (yes)"
894         rc=0
895     else
896         AC_DEFINE 'const' '/**/'
897         TLOG " (no)"
898         rc=1
899     fi
900     rm -f /tmp/pd$$.o /tmp/pd$$.c
901     return $rc
902 }
903
904
905 #
906 # AC_SCALAR_TYPES checks to see if the compiler can generate 2 and 4 byte ints.
907 #
908 AC_SCALAR_TYPES () {
909     cat > /tmp/pd$$.c << EOF
910 #include <stdio.h>
911 main()
912 {
913     unsigned long v_long;
914     unsigned int v_int;
915     unsigned short v_short;
916
917     if (sizeof v_long == 4)
918         puts("#define DWORD     unsigned long");
919     else if (sizeof v_int == 4)
920         puts("#define DWORD     unsigned int");
921     else
922         exit(1);
923
924     if (sizeof v_int == 2)
925         puts("#define WORD      unsigned int");
926     else if (sizeof v_short == 2)
927         puts("#define WORD      unsigned short");
928     else
929         exit(2);
930     puts("#define BYTE  unsigned char");
931     exit(0);
932 }
933 EOF
934     rc=1
935     LOGN "defining WORD & DWORD scalar types"
936     if $AC_CC /tmp/pd$$.c -o /tmp/pd$$; then
937         if /tmp/pd$$  >> $__cwd/config.h.tmp; then
938             rc=0
939         fi
940     fi
941     case "$rc" in
942     0) TLOG "" ;;
943     *) TLOG " ** FAILED **" ;;
944     esac
945     rm -f /tmp/pd$$ /tmp/pd$$.c
946 }
947
948
949 #
950 # AC_OUTPUT generates makefiles from makefile.in's
951 #
952 AC_OUTPUT () {
953     cd $__cwd
954     AC_SUB 'LIBS'    "$AC_LIBS"
955     AC_SUB 'CONFIGURE_FILES' "$__config_files"
956     AC_SUB 'CONFIGURE_DETRITUS' "$__config_detritus"
957     AC_SUB 'GENERATED_FILES' "$*"
958     AC_SUB 'CFLAGS'  "$AC_CFLAGS"
959     AC_SUB 'FCFLAGS' "$AC_FCFLAGS"
960     AC_SUB 'CXXFLAGS' "$AC_CXXFLAGS"
961     AC_SUB 'LDFLAGS' "$AC_LDFLAGS"
962     AC_SUB 'srcdir'  "$AC_SRCDIR"
963     AC_SUB 'prefix'  "$AC_PREFIX"
964     AC_SUB 'exedir'  "$AC_EXECDIR"
965     AC_SUB 'sbindir' "$AC_SBINDIR"
966     AC_SUB 'libdir'  "$AC_LIBDIR"
967     AC_SUB 'libexec' "$AC_LIBEXEC"
968     AC_SUB 'confdir' "$AC_CONFDIR"
969     AC_SUB 'mandir'  "$AC_MANDIR"
970
971     if [ -r config.sub ]; then
972         test "$AC_SED_PROG" || AC_PROG_SED
973         test "$AC_SED_PROG" || return 1
974
975         echo                                   >> config.h.tmp
976         echo "#endif/* ${AC_CONFIGURE_FOR} */" >> config.h.tmp
977
978         rm -f config.cmd
979         Q=\'
980         cat - > config.cmd << EOF
981 #! /bin/sh
982 ${CXX:+CXX=${Q}${CXX}${Q}} ${CXXFLAGS:+CXXFLAGS=${Q}${CXXFLAGS}${Q}} ${FC:+FC=${Q}${FC}${Q}} ${FCFLAGS:+FCFLAGS=${Q}${FCFLAGS}${Q}} ${CC:+CC=${Q}${CC}${Q}} ${CFLAGS:+CFLAGS=${Q}${CFLAGS}${Q}} $ac_progname $ac_configure_command
983 EOF
984         chmod +x config.cmd
985
986         __d=$AC_SRCDIR
987         for makefile in $*;do
988             if test -r $__d/${makefile}.in; then
989                 LOG "generating $makefile"
990                 ./config.md `__ac_dirname ./$makefile` 2>/dev/null
991                 $AC_SED_PROG -f config.sub < $__d/${makefile}.in > $makefile
992                 __config_files="$__config_files $makefile"
993             else
994                 LOG "WARNING: ${makefile}.in does not exist!"
995             fi
996         done
997         unset __d
998
999     else
1000         echo 
1001     fi
1002     cp $__cwd/config.h.tmp $__cwd/config.h
1003 }
1004
1005 #
1006 # AC_CHECK_FLOCK checks to see if flock() exists and if the LOCK_NB argument
1007 # works properly.
1008 #
1009 AC_CHECK_FLOCK() {
1010
1011     AC_CHECK_HEADERS sys/types.h sys/file.h fcntl.h
1012
1013     cat << EOF > $$.c
1014 #include <stdio.h>
1015 #include <sys/file.h>
1016 #include <sys/types.h>
1017 #include <fcntl.h>
1018
1019 main()
1020 {
1021     int x = open("$$.c", O_RDWR, 0666);
1022     int y = open("$$.c", O_RDWR, 0666);
1023
1024     if (flock(x, LOCK_EX) != 0)
1025         exit(1);
1026     if (flock(y, LOCK_EX|LOCK_NB) == 0)
1027         exit(1);
1028     exit(0);
1029 }
1030 EOF
1031
1032     LOGN "checking for flock()"
1033     HAS_FLOCK=0
1034     if $AC_CC -o flock $$.c ; then
1035         if ./flock ; then
1036             LOG " (found)"
1037             HAS_FLOCK=1
1038             AC_DEFINE HAS_FLOCK
1039         else
1040             LOG " (bad)"
1041         fi
1042     else
1043         LOG " (no)"
1044     fi
1045
1046     rm -f flock $$.c
1047
1048     case "$HAS_FLOCK" in
1049     0) return 1 ;;
1050     *) return 0 ;;
1051     esac
1052 }
1053
1054
1055 #
1056 # AC_CHECK_RESOLVER finds out whether the berkeley resolver is
1057 # present on this system.
1058 #
1059 AC_CHECK_RESOLVER () {
1060     AC_PROG_CC
1061
1062     TLOGN "checking for the Berkeley resolver library"
1063
1064     cat > /tmp/ngc$$.c << EOF
1065 #include <sys/types.h>
1066 #include <netinet/in.h>
1067 #include <arpa/nameser.h>
1068 #include <resolv.h>
1069
1070 main()
1071 {
1072     char bfr[256];
1073
1074     res_init();
1075     res_query("hello", C_IN, T_A, bfr, sizeof bfr);
1076 }
1077 EOF
1078
1079     # first see if res_init() and res_query() actually exist...
1080
1081     if $AC_CC -o /tmp/ngc$$ /tmp/ngc$$.c; then
1082         __extralib=
1083     elif $AC_CC -o /tmp/ngc$$ /tmp/ngc$$.c -lresolv; then
1084         __extralib=-lresolv
1085         AC_LIBS="$AC_LIBS -lresolv"
1086     else
1087         TLOG " (not found)"
1088         rm -f /tmp/ngc$$.c
1089         return 1
1090     fi
1091
1092     # if res_init() and res_query() actually exist, check to
1093     # see if the HEADER structure is defined ...
1094
1095     cat > /tmp/ngc$$.c << EOF
1096 #include <sys/types.h>
1097 #include <netinet/in.h>
1098 #include <arpa/nameser.h>
1099 #include <resolv.h>
1100
1101 main()
1102 {
1103     HEADER hhh;
1104     res_init();
1105 }
1106 EOF
1107
1108     if $AC_CC -o /tmp/ngc$$ /tmp/ngc$$.c $__extralib; then
1109         TLOG " (found)"
1110     elif $AC_CC -DBIND_8_COMPAT -o /tmp/ngc$$ /tmp/ngc$$.c $__extralib; then
1111         TLOG " (bind9 with BIND_8_COMPAT)"
1112         AC_DEFINE BIND_8_COMPAT 1
1113     else
1114         TLOG " (broken)"
1115         rm -f /tmp/ngc$$.c
1116         return 1
1117     fi
1118     rm -f /tmp/ngc$$.c
1119     return 0
1120 }
1121
1122
1123 #
1124 # AC_PROG_INSTALL finds the install program and guesses whether it's a 
1125 # Berkeley or GNU install program
1126 #
1127 AC_PROG_INSTALL () {
1128
1129     DEST=`acLookFor install`
1130
1131     LOGN "checking for install"
1132     unset IS_BSD
1133     if [ "$DEST" ]; then
1134         # BSD install or GNU install?  Let's find out...
1135         touch /tmp/a$$
1136
1137         $DEST /tmp/a$$ /tmp/b$$
1138
1139         if test -r /tmp/a$$; then
1140             LOG " ($DEST)"
1141         else
1142             IS_BSD=1
1143             LOG " ($DEST) bsd install"
1144         fi
1145         rm -f /tmp/a$$ /tmp/b$$
1146     else
1147         DEST=`acLookFor ginstall`
1148         if [ "$DEST" ]; then
1149             LOG " ($DEST)"
1150         else
1151             DEST="false"
1152             LOG " (not found)"
1153         fi
1154     fi
1155
1156     if [ "$IS_BSD" ]; then
1157         PROG_INSTALL="$DEST -c"
1158     else
1159         PROG_INSTALL="$DEST"
1160     fi
1161
1162     AC_SUB 'INSTALL' "$PROG_INSTALL"
1163     AC_SUB 'INSTALL_PROGRAM' "$PROG_INSTALL -s -m 755"
1164     AC_SUB 'INSTALL_DATA' "$PROG_INSTALL -m 444"
1165
1166     # finally build a little directory installer
1167     # if mkdir -p works, use that, otherwise use install -d,
1168     # otherwise build a script to do it by hand.
1169     # in every case, test to see if the directory exists before
1170     # making it.
1171
1172     if mkdir -p $$a/b; then
1173         # I like this method best.
1174         __mkdir="mkdir -p"
1175         rmdir $$a/b
1176         rmdir $$a
1177     elif $PROG_INSTALL -d $$a/b; then
1178         __mkdir="$PROG_INSTALL -d"
1179         rmdir $$a/b
1180         rmdir $$a
1181     fi
1182
1183     __config_files="$__config_files config.md"
1184     AC_SUB 'INSTALL_DIR' "$__cwd/config.md"
1185     echo "#! /bin/sh"                                   > $__cwd/config.md
1186     echo "# script generated" `date` "by configure.sh" >> $__cwd/config.md
1187     echo                                               >> $__cwd/config.md
1188     if [ "$__mkdir" ]; then
1189         echo "test -d \"\$1\" || $__mkdir \"\$1\""     >> $__cwd/config.md
1190         echo "exit $?"                                 >> $__cwd/config.md
1191     else
1192         cat - >> $__cwd/config.md << \EOD
1193 pieces=`IFS=/; for x in $1; do echo $x; done`
1194 dir=
1195 for x in $pieces; do
1196     dir="$dir$x"
1197     mkdir $dir || exit 1
1198     dir="$dir/"
1199 done
1200 exit 0
1201 EOD
1202     fi
1203     chmod +x $__cwd/config.md
1204 }
1205
1206 #
1207 # acCheckCPP is a local that runs a C preprocessor with a given set of
1208 # compiler options
1209 #
1210 acCheckCPP () {
1211         cat > /tmp/ngc$$.c << EOF
1212 #define FOO BAR
1213
1214 FOO
1215 EOF
1216
1217     if $1 $2 /tmp/ngc$$.c > /tmp/ngc$$.o; then
1218         if grep -v '#define' /tmp/ngc$$.o | grep -s BAR >/dev/null; then
1219             echo "CPP=[$1], CPPFLAGS=[$2]"
1220             AC_SUB 'CPP' "$1"
1221             AC_SUB 'CPPFLAGS' "$2"
1222             rm /tmp/ngc$$.c /tmp/ngc$$.o
1223             return 0
1224         fi
1225     fi
1226     rm /tmp/ngc$$.c /tmp/ngc$$.o
1227     return 1
1228 }
1229
1230
1231 #
1232 # AC_PROG_CPP checks for cpp, then checks to see which CPPFLAGS are needed
1233 # to run it as a filter.
1234 #
1235 AC_PROG_CPP () {
1236     if [ "$AC_CPP_PROG" ]; then
1237         DEST=$AC_CPP_PROG
1238     else
1239         __ac_path="$AC_PATH"
1240         AC_PATH="/lib:/usr/lib:${__ac_path:-$ac_default_path}"
1241         DEST=`acLookFor cpp`
1242         AC_PATH="$__ac_path"
1243     fi
1244
1245     unset fail
1246     LOGN "Looking for cpp"
1247     if [ "$DEST" ]; then
1248         TLOGN " ($DEST)"
1249         acCheckCPP $DEST "$CPPFLAGS" || \
1250                  acCheckCPP $DEST -traditional-cpp -E || \
1251                  acCheckCPP $DEST -E || \
1252                  acCheckCPP $DEST -traditional-cpp -pipe || \
1253                  acCheckCPP $DEST -pipe || fail=1
1254
1255         if [ "$fail" ]; then
1256             AC_FAIL " (can't run cpp as a pipeline)"
1257         else
1258             TLOG " ok"
1259             return 0
1260         fi
1261     fi
1262     AC_FAIL " (not found)"
1263 }
1264
1265 #
1266 # AC_FAIL spits out an error message, then __fail's 
1267 AC_FAIL() {
1268     LOG "$*" 
1269     $__fail 1
1270 }
1271
1272 #
1273 # AC_SUB writes a substitution into config.sub
1274 AC_SUB() {
1275     (   echononl "s;@$1@;"
1276         _subst=`echo $2 | sed -e 's/;/\\;/g'`
1277         echononl "$_subst"
1278         echo ';g' ) >> $__cwd/config.sub
1279 }
1280
1281 #
1282 # AC_MAK writes a define into config.mak
1283 AC_MAK() {
1284     echo "HAVE_$1 = 1" >> $__cwd/config.mak
1285 }
1286
1287 #
1288 # AC_DEFINE adds a #define to config.h
1289 AC_DEFINE() {
1290     echo "#define $1 ${2:-1}" >> $__cwd/config.h.tmp
1291 }
1292
1293 #
1294 # AC_INCLUDE adds a #include to config.h
1295 AC_INCLUDE() {
1296     echo "#include \"$1\"" >> $__cwd/config.h.tmp
1297 }
1298
1299 #
1300 # AC_CONFIG adds a configuration setting to all the config files
1301 AC_CONFIG() {
1302     AC_DEFINE "PATH_$1" \""$2"\"
1303     AC_MAK "$1"
1304     AC_SUB "$1" "$2"
1305 }
1306
1307 #
1308 # AC_QUIET does something quietly
1309 AC_QUIET() {
1310     eval $* 5>/dev/null
1311 }