]> arthur.barton.de Git - bup.git/blob - config/configure.inc
Depend on the kernel headers, not the ext2 headers, for Linux attr support.
[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     rm -f $__config_files
589     __cwd=`pwd`
590     exec 5>&1 1>$__cwd/config.log 2>&1
591     AC_CONFIGURE_FOR=__AC_`echo $1 | sed -e 's/\..$//' | tr 'a-z' 'A-Z' | tr ' ' '_'`_D
592
593     # check to see whether to use echo -n or echo ...\c
594     #
595     echo -n hello > $$
596     echo world >> $$
597     if grep "helloworld" $$ >/dev/null; then
598         ac_echo="echo -n"
599         echo "[echo -n] works"
600     else
601         ac_echo="echo"
602         echo 'hello\c' > $$
603         echo 'world' >> $$
604         if grep "helloworld" $$ >/dev/null; then
605             ac_echo_nonl='\c'
606             echo "[echo ...\\c] works"
607         fi
608     fi
609     rm -f $$
610
611     LOG "Configuring for [$1]"
612
613     cat > $__cwd/config.h << EOF
614 /*
615  * configuration for $1${2:+" ($2)"}, generated `date`
616  * by ${LOGNAME:-`whoami`}@`hostname`
617  */
618 #ifndef $AC_CONFIGURE_FOR
619 #define $AC_CONFIGURE_FOR 1
620
621
622 EOF
623
624     unset __share
625     if [ -d $AC_PREFIX/share/man ]; then
626         for t in 1 2 3 4 5 6 7 8 9; do
627             if [ -d $AC_PREFIX/share/man/man$t ]; then
628                 __share=/share
629             elif [ -d $AC_PREFIX/share/man/cat$t ]; then
630                 __share=/share
631             fi
632         done
633     else
634         __share=
635     fi
636
637     if [ -d $AC_PREFIX/libexec ]; then
638         __libexec=libexec
639     else
640         __libexec=lib
641     fi
642
643
644     AC_PREFIX=${AC_PREFIX:-/usr/local}
645     AC_EXECDIR=${AC_EXECDIR:-$AC_PREFIX/bin}
646     AC_SBINDIR=${AC_SBINDIR:-$AC_PREFIX/sbin}
647     AC_LIBDIR=${AC_LIBDIR:-$AC_PREFIX/lib}
648     AC_MANDIR=${AC_MANDIR:-$AC_PREFIX$__share/man}
649     AC_LIBEXEC=${AC_LIBEXEC:-$AC_PREFIX/$__libexec}
650     AC_CONFDIR=${AC_CONFDIR:-/etc}
651
652     AC_PATH=${WITH_PATH:-$PATH}
653     AC_PROG_CPP
654     AC_PROG_INSTALL
655
656     ac_os=`uname -s | sed 's/[-_].*//'`
657     _os=`echo $ac_os | tr '[a-z]' '[A-Z]'`
658     AC_DEFINE OS_$_os   1
659     eval OS_${_os}=1
660     unset _os
661 }
662
663
664 #
665 # AC_LIBRARY checks to see if a given library exists and contains the
666 # given function.
667 # usage: AC_LIBRARY function library [alternate ...]
668 #
669 AC_LIBRARY() {
670     SRC=$1
671     shift
672
673     __acllibs=
674     __aclhdrs=
675
676     for x in "$@"; do
677         case X"$x" in
678         X-l*) __acllibs="$__acllibs $x" ;;
679         *)    __aclhdrs="$__aclhdrs $x" ;;
680         esac
681     done
682
683     # first see if the function can be found in any of the
684     # current libraries
685     AC_QUIET AC_CHECK_FUNCS $SRC $__aclhdrs && return 0
686
687     # then search through the list of libraries
688     __libs="$LIBS"
689     for x in $__acllibs; do
690         LIBS="$__libs $x"
691         if AC_QUIET AC_CHECK_FUNCS $SRC $__aclhdrs; then
692             AC_LIBS="$AC_LIBS $x"
693             return 0
694         fi
695     done
696     return 1
697 }
698
699
700 #
701 # AC_PROG_LEX checks to see if LEX exists, and if it's lex or flex.
702 #
703 AC_PROG_LEX() {
704     TLOGN "looking for lex "
705
706     DEST=`acLookFor lex`
707     if [ "$DEST" ]; then
708         AC_MAK LEX
709         AC_DEFINE PATH_LEX \"$DEST\"
710         AC_SUB 'LEX' "$DEST"
711         echo "lex is $DEST"
712     else
713         DEST=`acLookFor flex`
714         if [ "$DEST" ]; then
715             AC_MAK FLEX
716             AC_DEFINE 'LEX' \"$DEST\"
717             AC_SUB 'LEX', "$DEST"
718             echo "lex is $DEST"
719         else
720             AC_SUB LEX ''
721             echo "neither lex or flex found"
722             TLOG " (not found)"
723             return 1
724         fi
725     fi
726
727     if AC_LIBRARY yywrap -ll -lfl; then
728         TLOG "($DEST)"
729         return 0
730     fi
731     TLOG "(no lex library found)"
732     return 1
733 }
734
735
736 #
737 # AC_PROG_YACC checks to see if YACC exists, and if it's bison or
738 # not.
739 #
740 AC_PROG_YACC () {
741
742     TLOGN "looking for yacc "
743
744     DEST=`acLookFor yacc`
745     if [ "$DEST" ]; then
746         AC_MAK YACC
747         AC_DEFINE PATH_YACC \"$DEST\"
748         AC_SUB 'YACC' "$DEST"
749         TLOG "($DEST)"
750         echo "yacc is $DEST"
751     else
752         DEST=`acLookFor bison`
753         if [ "$DEST" ]; then
754             AC_MAK BISON
755             AC_DEFINE 'YACC' \"$DEST\"
756             AC_SUB 'YACC' "$DEST -y"
757             echo "yacc is $DEST -y"
758             TLOG "($DEST -y)"
759         else
760             AC_SUB 'YACC' ''
761             echo "neither yacc or bison found"
762             TLOG " (not found)"
763             return 1
764         fi
765     fi
766     return 0
767 }
768
769
770 #
771 # AC_PROG_LN_S checks to see if ln exists, and, if so, if ln -s works
772 #
773 AC_PROG_LN_S () {
774     test "$AC_FIND_PROG" || AC_PROG_FIND
775
776     test "$AC_FIND_PROG" || return 1
777     
778     TLOGN "looking for \"ln -s\""
779     DEST=`acLookFor ln`
780
781     if [ "$DEST" ]; then
782         rm -f /tmp/b$$
783         $DEST -s /tmp/a$$ /tmp/b$$
784         if [ "`$AC_FIND_PROG /tmp/b$$ -type l -print`" ]; then
785             TLOG " ($DEST)"
786             echo "$DEST exists, and ln -s works"
787             AC_SUB 'LN_S' "$DEST -s"
788             rm -f /tmp/b$$
789         else
790             AC_SUB 'LN_S' ''
791             TLOG " ($DEST exists, but -s does not seem to work)"
792             echo "$DEST exists, but ln -s doesn't seem to work"
793             rm -f /tmp/b$$
794             return 1
795         fi
796     else
797         AC_SUB 'LN_S' ''
798         echo "ln not found"
799         TLOG " (not found)"
800         return 1
801     fi
802 }
803
804
805 #
806 # AC_PROG_FIND looks for the find program and sets the FIND environment
807 # variable
808 #
809 AC_PROG_FIND () {
810     if test -z "$AC_FIND_PROG"; then
811         MF_PATH_INCLUDE FIND find
812         rc=$?
813         AC_FIND_PROG=$DEST
814         return $rc
815     fi
816     return 0
817 }
818
819
820 #
821 # AC_PROG_AWK looks for the awk program and sets the AWK environment
822 # variable
823 #
824 AC_PROG_AWK () {
825     if test -z "$AC_AWK_PROG"; then
826         MF_PATH_INCLUDE AWK awk
827         rc=$?
828         AC_AWK_PROG=$DEST
829         return $rc
830     fi
831     return 0
832 }
833
834
835 #
836 # AC_PROG_SED looks for the sed program and sets the SED environment
837 # variable
838 #
839 AC_PROG_SED () {
840     if test -z "$AC_SED_PROG"; then
841         MF_PATH_INCLUDE SED sed
842         rc=$?
843         AC_SED_PROG=$DEST
844         return $rc
845     fi
846     return 0
847 }
848
849
850 #
851 # AC_HEADER_SYS_WAIT looks for sys/wait.h
852 #
853 AC_HEADER_SYS_WAIT () {
854     AC_CHECK_HEADERS sys/wait.h || return 1
855 }
856
857 #
858 # AC_TYPE_PID_T checks to see if the pid_t type exists
859 #
860 AC_TYPE_PID_T () {
861     cat > /tmp/pd$$.c << EOF
862 #include <sys/types.h>
863 main() { pid_t me; }
864 EOF
865
866     LOGN "checking for pid_t"
867
868     if $AC_CC -c /tmp/pd$$.c -o /tmp/pd$$.o; then
869         TLOG " (found)"
870         rc=0
871     else
872         echo "typedef int pid_t;" >> $__cwd/config.h
873         TLOG " (not found)"
874         rc=1
875     fi
876     rm -f /tmp/pd$$.o /tmp/pd$$.c
877     return $rc
878 }
879
880
881 #
882 # AC_C_CONST checks to see if the compiler supports the const keyword
883 #
884 AC_C_CONST () {
885     cat > /tmp/pd$$.c << EOF
886 const char me=1;
887 EOF
888     LOGN "checking for \"const\" keyword"
889
890     if $AC_CC -c /tmp/pd$$.c -o /tmp/pd$$.o; then
891         TLOG " (yes)"
892         rc=0
893     else
894         AC_DEFINE 'const' '/**/'
895         TLOG " (no)"
896         rc=1
897     fi
898     rm -f /tmp/pd$$.o /tmp/pd$$.c
899     return $rc
900 }
901
902
903 #
904 # AC_SCALAR_TYPES checks to see if the compiler can generate 2 and 4 byte ints.
905 #
906 AC_SCALAR_TYPES () {
907     cat > /tmp/pd$$.c << EOF
908 #include <stdio.h>
909 main()
910 {
911     unsigned long v_long;
912     unsigned int v_int;
913     unsigned short v_short;
914
915     if (sizeof v_long == 4)
916         puts("#define DWORD     unsigned long");
917     else if (sizeof v_int == 4)
918         puts("#define DWORD     unsigned int");
919     else
920         exit(1);
921
922     if (sizeof v_int == 2)
923         puts("#define WORD      unsigned int");
924     else if (sizeof v_short == 2)
925         puts("#define WORD      unsigned short");
926     else
927         exit(2);
928     puts("#define BYTE  unsigned char");
929     exit(0);
930 }
931 EOF
932     rc=1
933     LOGN "defining WORD & DWORD scalar types"
934     if $AC_CC /tmp/pd$$.c -o /tmp/pd$$; then
935         if /tmp/pd$$  >> $__cwd/config.h; then
936             rc=0
937         fi
938     fi
939     case "$rc" in
940     0) TLOG "" ;;
941     *) TLOG " ** FAILED **" ;;
942     esac
943     rm -f /tmp/pd$$ /tmp/pd$$.c
944 }
945
946
947 #
948 # AC_OUTPUT generates makefiles from makefile.in's
949 #
950 AC_OUTPUT () {
951     cd $__cwd
952     AC_SUB 'LIBS'    "$AC_LIBS"
953     AC_SUB 'CONFIGURE_FILES' "$__config_files"
954     AC_SUB 'GENERATED_FILES' "$*"
955     AC_SUB 'CFLAGS'  "$AC_CFLAGS"
956     AC_SUB 'FCFLAGS' "$AC_FCFLAGS"
957     AC_SUB 'CXXFLAGS' "$AC_CXXFLAGS"
958     AC_SUB 'LDFLAGS' "$AC_LDFLAGS"
959     AC_SUB 'srcdir'  "$AC_SRCDIR"
960     AC_SUB 'prefix'  "$AC_PREFIX"
961     AC_SUB 'exedir'  "$AC_EXECDIR"
962     AC_SUB 'sbindir' "$AC_SBINDIR"
963     AC_SUB 'libdir'  "$AC_LIBDIR"
964     AC_SUB 'libexec' "$AC_LIBEXEC"
965     AC_SUB 'confdir' "$AC_CONFDIR"
966     AC_SUB 'mandir'  "$AC_MANDIR"
967
968     if [ -r config.sub ]; then
969         test "$AC_SED_PROG" || AC_PROG_SED
970         test "$AC_SED_PROG" || return 1
971
972         echo                                   >> config.h
973         echo "#endif/* ${AC_CONFIGURE_FOR} */" >> config.h
974
975         rm -f config.cmd
976         Q=\'
977         cat - > config.cmd << EOF
978 #! /bin/sh
979 ${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
980 EOF
981         chmod +x config.cmd
982
983         __d=$AC_SRCDIR
984         for makefile in $*;do
985             if test -r $__d/${makefile}.in; then
986                 LOG "generating $makefile"
987                 ./config.md `__ac_dirname ./$makefile` 2>/dev/null
988                 $AC_SED_PROG -f config.sub < $__d/${makefile}.in > $makefile
989                 __config_files="$__config_files $makefile"
990             else
991                 LOG "WARNING: ${makefile}.in does not exist!"
992             fi
993         done
994         unset __d
995
996     else
997         echo 
998     fi
999 }
1000
1001 #
1002 # AC_CHECK_FLOCK checks to see if flock() exists and if the LOCK_NB argument
1003 # works properly.
1004 #
1005 AC_CHECK_FLOCK() {
1006
1007     AC_CHECK_HEADERS sys/types.h sys/file.h fcntl.h
1008
1009     cat << EOF > $$.c
1010 #include <stdio.h>
1011 #include <sys/file.h>
1012 #include <sys/types.h>
1013 #include <fcntl.h>
1014
1015 main()
1016 {
1017     int x = open("$$.c", O_RDWR, 0666);
1018     int y = open("$$.c", O_RDWR, 0666);
1019
1020     if (flock(x, LOCK_EX) != 0)
1021         exit(1);
1022     if (flock(y, LOCK_EX|LOCK_NB) == 0)
1023         exit(1);
1024     exit(0);
1025 }
1026 EOF
1027
1028     LOGN "checking for flock()"
1029     HAS_FLOCK=0
1030     if $AC_CC -o flock $$.c ; then
1031         if ./flock ; then
1032             LOG " (found)"
1033             HAS_FLOCK=1
1034             AC_DEFINE HAS_FLOCK
1035         else
1036             LOG " (bad)"
1037         fi
1038     else
1039         LOG " (no)"
1040     fi
1041
1042     rm -f flock $$.c
1043
1044     case "$HAS_FLOCK" in
1045     0) return 1 ;;
1046     *) return 0 ;;
1047     esac
1048 }
1049
1050
1051 #
1052 # AC_CHECK_RESOLVER finds out whether the berkeley resolver is
1053 # present on this system.
1054 #
1055 AC_CHECK_RESOLVER () {
1056     AC_PROG_CC
1057
1058     TLOGN "checking for the Berkeley resolver library"
1059
1060     cat > /tmp/ngc$$.c << EOF
1061 #include <sys/types.h>
1062 #include <netinet/in.h>
1063 #include <arpa/nameser.h>
1064 #include <resolv.h>
1065
1066 main()
1067 {
1068     char bfr[256];
1069
1070     res_init();
1071     res_query("hello", C_IN, T_A, bfr, sizeof bfr);
1072 }
1073 EOF
1074
1075     # first see if res_init() and res_query() actually exist...
1076
1077     if $AC_CC -o /tmp/ngc$$ /tmp/ngc$$.c; then
1078         __extralib=
1079     elif $AC_CC -o /tmp/ngc$$ /tmp/ngc$$.c -lresolv; then
1080         __extralib=-lresolv
1081         AC_LIBS="$AC_LIBS -lresolv"
1082     else
1083         TLOG " (not found)"
1084         rm -f /tmp/ngc$$.c
1085         return 1
1086     fi
1087
1088     # if res_init() and res_query() actually exist, check to
1089     # see if the HEADER structure is defined ...
1090
1091     cat > /tmp/ngc$$.c << EOF
1092 #include <sys/types.h>
1093 #include <netinet/in.h>
1094 #include <arpa/nameser.h>
1095 #include <resolv.h>
1096
1097 main()
1098 {
1099     HEADER hhh;
1100     res_init();
1101 }
1102 EOF
1103
1104     if $AC_CC -o /tmp/ngc$$ /tmp/ngc$$.c $__extralib; then
1105         TLOG " (found)"
1106     elif $AC_CC -DBIND_8_COMPAT -o /tmp/ngc$$ /tmp/ngc$$.c $__extralib; then
1107         TLOG " (bind9 with BIND_8_COMPAT)"
1108         AC_DEFINE BIND_8_COMPAT 1
1109     else
1110         TLOG " (broken)"
1111         rm -f /tmp/ngc$$.c
1112         return 1
1113     fi
1114     rm -f /tmp/ngc$$.c
1115     return 0
1116 }
1117
1118
1119 #
1120 # AC_PROG_INSTALL finds the install program and guesses whether it's a 
1121 # Berkeley or GNU install program
1122 #
1123 AC_PROG_INSTALL () {
1124
1125     DEST=`acLookFor install`
1126
1127     LOGN "checking for install"
1128     unset IS_BSD
1129     if [ "$DEST" ]; then
1130         # BSD install or GNU install?  Let's find out...
1131         touch /tmp/a$$
1132
1133         $DEST /tmp/a$$ /tmp/b$$
1134
1135         if test -r /tmp/a$$; then
1136             LOG " ($DEST)"
1137         else
1138             IS_BSD=1
1139             LOG " ($DEST) bsd install"
1140         fi
1141         rm -f /tmp/a$$ /tmp/b$$
1142     else
1143         DEST=`acLookFor ginstall`
1144         if [ "$DEST" ]; then
1145             LOG " ($DEST)"
1146         else
1147             DEST="false"
1148             LOG " (not found)"
1149         fi
1150     fi
1151
1152     if [ "$IS_BSD" ]; then
1153         PROG_INSTALL="$DEST -c"
1154     else
1155         PROG_INSTALL="$DEST"
1156     fi
1157
1158     AC_SUB 'INSTALL' "$PROG_INSTALL"
1159     AC_SUB 'INSTALL_PROGRAM' "$PROG_INSTALL -s -m 755"
1160     AC_SUB 'INSTALL_DATA' "$PROG_INSTALL -m 444"
1161
1162     # finally build a little directory installer
1163     # if mkdir -p works, use that, otherwise use install -d,
1164     # otherwise build a script to do it by hand.
1165     # in every case, test to see if the directory exists before
1166     # making it.
1167
1168     if mkdir -p $$a/b; then
1169         # I like this method best.
1170         __mkdir="mkdir -p"
1171         rmdir $$a/b
1172         rmdir $$a
1173     elif $PROG_INSTALL -d $$a/b; then
1174         __mkdir="$PROG_INSTALL -d"
1175         rmdir $$a/b
1176         rmdir $$a
1177     fi
1178
1179     __config_files="$__config_files config.md"
1180     AC_SUB 'INSTALL_DIR' "$__cwd/config.md"
1181     echo "#! /bin/sh"                                   > $__cwd/config.md
1182     echo "# script generated" `date` "by configure.sh" >> $__cwd/config.md
1183     echo                                               >> $__cwd/config.md
1184     if [ "$__mkdir" ]; then
1185         echo "test -d \"\$1\" || $__mkdir \"\$1\""     >> $__cwd/config.md
1186         echo "exit $?"                                 >> $__cwd/config.md
1187     else
1188         cat - >> $__cwd/config.md << \EOD
1189 pieces=`IFS=/; for x in $1; do echo $x; done`
1190 dir=
1191 for x in $pieces; do
1192     dir="$dir$x"
1193     mkdir $dir || exit 1
1194     dir="$dir/"
1195 done
1196 exit 0
1197 EOD
1198     fi
1199     chmod +x $__cwd/config.md
1200 }
1201
1202 #
1203 # acCheckCPP is a local that runs a C preprocessor with a given set of
1204 # compiler options
1205 #
1206 acCheckCPP () {
1207         cat > /tmp/ngc$$.c << EOF
1208 #define FOO BAR
1209
1210 FOO
1211 EOF
1212
1213     if $1 $2 /tmp/ngc$$.c > /tmp/ngc$$.o; then
1214         if grep -v '#define' /tmp/ngc$$.o | grep -s BAR >/dev/null; then
1215             echo "CPP=[$1], CPPFLAGS=[$2]"
1216             AC_SUB 'CPP' "$1"
1217             AC_SUB 'CPPFLAGS' "$2"
1218             rm /tmp/ngc$$.c /tmp/ngc$$.o
1219             return 0
1220         fi
1221     fi
1222     rm /tmp/ngc$$.c /tmp/ngc$$.o
1223     return 1
1224 }
1225
1226
1227 #
1228 # AC_PROG_CPP checks for cpp, then checks to see which CPPFLAGS are needed
1229 # to run it as a filter.
1230 #
1231 AC_PROG_CPP () {
1232     if [ "$AC_CPP_PROG" ]; then
1233         DEST=$AC_CPP_PROG
1234     else
1235         __ac_path="$AC_PATH"
1236         AC_PATH="/lib:/usr/lib:${__ac_path:-$ac_default_path}"
1237         DEST=`acLookFor cpp`
1238         AC_PATH="$__ac_path"
1239     fi
1240
1241     unset fail
1242     LOGN "Looking for cpp"
1243     if [ "$DEST" ]; then
1244         TLOGN " ($DEST)"
1245         acCheckCPP $DEST "$CPPFLAGS" || \
1246                  acCheckCPP $DEST -traditional-cpp -E || \
1247                  acCheckCPP $DEST -E || \
1248                  acCheckCPP $DEST -traditional-cpp -pipe || \
1249                  acCheckCPP $DEST -pipe || fail=1
1250
1251         if [ "$fail" ]; then
1252             AC_FAIL " (can't run cpp as a pipeline)"
1253         else
1254             TLOG " ok"
1255             return 0
1256         fi
1257     fi
1258     AC_FAIL " (not found)"
1259 }
1260
1261 #
1262 # AC_FAIL spits out an error message, then __fail's 
1263 AC_FAIL() {
1264     LOG "$*" 
1265     $__fail 1
1266 }
1267
1268 #
1269 # AC_SUB writes a substitution into config.sub
1270 AC_SUB() {
1271     (   echononl "s;@$1@;"
1272         _subst=`echo $2 | sed -e 's/;/\\;/g'`
1273         echononl "$_subst"
1274         echo ';g' ) >> $__cwd/config.sub
1275 }
1276
1277 #
1278 # AC_MAK writes a define into config.mak
1279 AC_MAK() {
1280     echo "HAVE_$1 = 1" >> $__cwd/config.mak
1281 }
1282
1283 #
1284 # AC_DEFINE adds a #define to config.h
1285 AC_DEFINE() {
1286     echo "#define $1 ${2:-1}" >> $__cwd/config.h
1287 }
1288
1289 #
1290 # AC_INCLUDE adds a #include to config.h
1291 AC_INCLUDE() {
1292     echo "#include \"$1\"" >> $__cwd/config.h
1293 }
1294
1295 #
1296 # AC_CONFIG adds a configuration setting to all the config files
1297 AC_CONFIG() {
1298     AC_DEFINE "PATH_$1" \""$2"\"
1299     AC_MAK "$1"
1300     AC_SUB "$1" "$2"
1301 }
1302
1303 #
1304 # AC_QUIET does something quietly
1305 AC_QUIET() {
1306     eval $* 5>/dev/null
1307 }