]> git.sur5r.net Git - openldap/blob - build/openldap.m4
a676e1b4feb60992e497a2ab08668073bb6a1895
[openldap] / build / openldap.m4
1 dnl Copyright 1998-1999 The OpenLDAP Foundation,  All Rights Reserved.
2 dnl COPYING RESTRICTIONS APPLY, See COPYRIGHT file
3 dnl
4 dnl OpenLDAP Autoconf Macros
5 dnl
6 dnl --------------------------------------------------------------------
7 dnl Restricted form of AC_ARG_ENABLE that limits user options
8 dnl
9 dnl $1 = option name
10 dnl $2 = help-string
11 dnl $3 = default value  (auto)
12 dnl $4 = allowed values (auto yes no)
13 AC_DEFUN([OL_ARG_ENABLE], [# OpenLDAP --enable-$1
14         AC_ARG_ENABLE($1,[$2 (]ifelse($3,,auto,$3)[)],[
15         ol_arg=invalid
16         for ol_val in ifelse($4,,[auto yes no],[$4]) ; do
17                 if test "$enableval" = "$ol_val" ; then
18                         ol_arg="$ol_val"
19                 fi
20         done
21         if test "$ol_arg" = "invalid" ; then
22                 AC_MSG_ERROR(bad value $enableval for --enable-$1)
23         fi
24         ol_enable_$1="$ol_arg"
25 ],
26 [       ol_enable_$1=ifelse($3,,"auto","$3")])dnl
27 dnl AC_VERBOSE(OpenLDAP -enable-$1 $ol_enable_$1)
28 # end --enable-$1
29 ])dnl
30 dnl
31 dnl --------------------------------------------------------------------
32 dnl Restricted form of AC_ARG_WITH that limits user options
33 dnl
34 dnl $1 = option name
35 dnl $2 = help-string
36 dnl $3 = default value (no)
37 dnl $4 = allowed values (yes or no)
38 AC_DEFUN([OL_ARG_WITH], [# OpenLDAP --with-$1
39         AC_ARG_WITH($1,[$2 (]ifelse($3,,yes,$3)[)],[
40         ol_arg=invalid
41         for ol_val in ifelse($4,,[yes no],[$4]) ; do
42                 if test "$withval" = "$ol_val" ; then
43                         ol_arg="$ol_val"
44                 fi
45         done
46         if test "$ol_arg" = "invalid" ; then
47                 AC_MSG_ERROR(bad value $withval for --with-$1)
48         fi
49         ol_with_$1="$ol_arg"
50 ],
51 [       ol_with_$1=ifelse($3,,"no","$3")])dnl
52 dnl AC_VERBOSE(OpenLDAP --with-$1 $ol_with_$1)
53 # end --with-$1
54 ])dnl
55 dnl
56 dnl ====================================================================
57 dnl check if hard links are supported.
58 dnl
59 AC_DEFUN([OL_PROG_LN_H], [# test for ln hardlink support
60 AC_MSG_CHECKING(whether ln works)
61 AC_CACHE_VAL(ol_cv_prog_LN_H,
62 [rm -f conftest.src conftest.dst
63 echo "conftest" > conftest.src
64 if ln conftest.src conftest.dst 2>/dev/null
65 then
66   ol_cv_prog_LN_H="ln"
67 else
68   ol_cv_prog_LN_H="cp"
69 fi
70 rm -f conftest.src conftest.dst
71 ])dnl
72 LN_H="$ol_cv_prog_LN_H"
73 if test "$ol_cv_prog_LN_H" = "ln"; then
74         AC_MSG_RESULT(yes)
75 else
76         AC_MSG_RESULT(no)
77 fi
78 AC_SUBST(LN_H)dnl
79 ])dnl
80 dnl
81 dnl ====================================================================
82 dnl Check for dependency generation flag
83 AC_DEFUN([OL_MKDEPEND], [# test for make depend flag
84 OL_MKDEP=
85 OL_MKDEP_FLAGS=
86 if test -z "${MKDEP}"; then
87         OL_MKDEP="${CC-cc}"
88         if test -z "${MKDEP_FLAGS}"; then
89                 AC_CACHE_CHECK([for ${OL_MKDEP} depend flag], ol_cv_mkdep, [
90                         ol_cv_mkdep=no
91                         for flag in "-M" "-xM"; do
92                                 cat > conftest.c <<EOF
93  noCode;
94 EOF
95                                 if AC_TRY_COMMAND($OL_MKDEP $flag conftest.c) \
96                                         | egrep '^conftest\.'"${ac_objext}" >/dev/null 2>&1
97                                 then
98                                         if test ! -f conftest."${ac_object}" ; then
99                                                 ol_cv_mkdep=$flag
100                                                 OL_MKDEP_FLAGS="$flag"
101                                                 break
102                                         fi
103                                 fi
104                         done
105                         rm -f conftest*
106                 ])
107         else
108                 cc_cv_mkdep=yes
109                 OL_MKDEP_FLAGS="${MKDEP_FLAGS}"
110         fi
111 else
112         cc_cv_mkdep=yes
113         OL_MKDEP="${MKDEP}"
114         OL_MKDEP_FLAGS="${MKDEP_FLAGS}"
115 fi
116 AC_SUBST(OL_MKDEP)
117 AC_SUBST(OL_MKDEP_FLAGS)
118 ])
119 dnl
120 dnl ====================================================================
121 dnl Check if system uses EBCDIC instead of ASCII
122 AC_DEFUN([OL_CPP_EBCDIC], [# test for EBCDIC
123 AC_CACHE_CHECK([for EBCDIC],ol_cv_cpp_ebcdic,[
124         AC_TRY_CPP([
125 #if !('M' == 0xd4)
126 #include <__ASCII__/generate_error.h>
127 #endif
128 ],
129         [ol_cv_cpp_ebcdic=yes],
130         [ol_cv_cpp_ebcdic=no])])
131 if test $ol_cv_cpp_ebcdic = yes ; then
132         AC_DEFINE(HAVE_EBCDIC,1, [define if system uses EBCDIC instead of ASCII])
133 fi
134 ])
135 dnl
136 dnl --------------------------------------------------------------------
137 dnl OpenLDAP version of STDC header check w/ EBCDIC support
138 AC_DEFUN(OL_HEADER_STDC,
139 [AC_REQUIRE_CPP()dnl
140 AC_REQUIRE([OL_CPP_EBCDIC])dnl
141 AC_CACHE_CHECK([for ANSI C header files], ol_cv_header_stdc,
142 [AC_TRY_CPP([#include <stdlib.h>
143 #include <stdarg.h>
144 #include <string.h>
145 #include <float.h>], ol_cv_header_stdc=yes, ol_cv_header_stdc=no)
146
147 if test $ol_cv_header_stdc = yes; then
148   # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
149 AC_EGREP_HEADER(memchr, string.h, , ol_cv_header_stdc=no)
150 fi
151
152 if test $ol_cv_header_stdc = yes; then
153   # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
154 AC_EGREP_HEADER(free, stdlib.h, , ol_cv_header_stdc=no)
155 fi
156
157 if test $ol_cv_header_stdc = yes; then
158   # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
159 AC_TRY_RUN([#include <ctype.h>
160 #ifndef HAVE_EBCDIC
161 #       define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
162 #       define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
163 #else
164 #       define ISLOWER(c) (('a' <= (c) && (c) <= 'i') \
165                 || ('j' <= (c) && (c) <= 'r') \
166                 || ('s' <= (c) && (c) <= 'z'))
167 #       define TOUPPER(c)       (ISLOWER(c) ? ((c) | 0x40) : (c))
168 #endif
169 #define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
170 int main () { int i; for (i = 0; i < 256; i++)
171 if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
172 exit (0); }
173 ], , ol_cv_header_stdc=no, :)
174 fi])
175 if test $ol_cv_header_stdc = yes; then
176   AC_DEFINE(STDC_HEADERS)
177 fi
178 ac_cv_header_stdc=disable
179 ])
180 dnl
181 dnl ====================================================================
182 dnl Check if struct passwd has pw_gecos
183 AC_DEFUN([OL_STRUCT_PASSWD_PW_GECOS], [# test for pw_gecos in struct passwd
184 AC_CACHE_CHECK([struct passwd for pw_gecos],ol_cv_struct_passwd_pw_gecos,[
185         AC_TRY_COMPILE([#include <pwd.h>],[
186         struct passwd pwd;
187         pwd.pw_gecos = pwd.pw_name;
188 ],
189         [ol_cv_struct_passwd_pw_gecos=yes],
190         [ol_cv_struct_passwd_pw_gecos=no])])
191 if test $ol_cv_struct_passwd_pw_gecos = yes ; then
192         AC_DEFINE(HAVE_PW_GECOS,1, [define if struct passwd has pw_gecos])
193 fi
194 ])
195 dnl
196 dnl --------------------------------------------------------------------
197 dnl Check if struct passwd has pw_passwd
198 AC_DEFUN([OL_STRUCT_PASSWD_PW_PASSWD], [# test for pw_passwd in struct passwd
199 AC_CACHE_CHECK([struct passwd for pw_passwd],ol_cv_struct_passwd_pw_passwd,[
200         AC_TRY_COMPILE([#include <pwd.h>],[
201         struct passwd pwd;
202         pwd.pw_passwd = pwd.pw_name;
203 ],
204         [ol_cv_struct_passwd_pw_passwd=yes],
205         [ol_cv_struct_passwd_pw_passwd=no])])
206 if test $ol_cv_struct_passwd_pw_passwd = yes ; then
207         AC_DEFINE(HAVE_PW_PASSWD,1, [define if struct passwd has pw_passwd])
208 fi
209 ])
210 dnl
211 dnl ====================================================================
212 dnl Check if db.h is Berkeley DB2
213 dnl
214 dnl defines ol_cv_header_db2 to 'yes' or 'no'
215 dnl
216 dnl uses:
217 dnl             AC_CHECK_HEADERS(db.h)
218 dnl
219 AC_DEFUN([OL_HEADER_BERKELEY_DB2],
220 [AC_CHECK_HEADERS(db.h)
221 if test $ac_cv_header_db_h = yes ; then
222         AC_CACHE_CHECK([if db.h is DB2], [ol_cv_header_db2],[
223                 AC_EGREP_CPP(__db_version_2,[
224 #                       include <db.h>
225                         /* this check could be improved */
226 #                       ifdef DB_VERSION_MAJOR
227 #                               if DB_VERSION_MAJOR == 2
228                                         __db_version_2
229 #                               endif
230 #                       endif
231                 ], ol_cv_header_db2=yes, ol_cv_header_db2=no)])
232 else
233         ol_cv_header_db2=no
234 fi
235 ])dnl
236 dnl --------------------------------------------------------------------
237 dnl Check if Berkeley DB2 library exists
238 dnl Check for dbopen in standard libraries or -ldb
239 dnl
240 dnl defines ol_cv_lib_db2 to '-ldb' or 'no'
241 dnl
242 dnl uses:
243 dnl             AC_CHECK_LIB(db,db_open)
244 dnl
245 AC_DEFUN([OL_LIB_BERKELEY_DB2],
246 [AC_CACHE_CHECK([for DB2 library], [ol_cv_lib_db2],
247 [       ol_LIBS="$LIBS"
248         AC_CHECK_LIB(db,db_open,[ol_cv_lib_db2=-ldb],[ol_cv_lib_db2=no])
249         LIBS="$ol_LIBS"
250 ])
251 ])dnl
252 dnl
253 dnl --------------------------------------------------------------------
254 dnl Check if Berkeley db2 exists
255 dnl
256 dnl defines ol_cv_berkeley_db2 to 'yes' or 'no'
257 dnl 
258 dnl uses:
259 dnl             OL_LIB_BERKELEY_DB2
260 dnl             OL_HEADER_BERKELEY_DB2
261 dnl
262 AC_DEFUN([OL_BERKELEY_DB2],
263 [AC_REQUIRE([OL_LIB_BERKELEY_DB2])
264  AC_REQUIRE([OL_HEADER_BERKELEY_DB2])
265  AC_CACHE_CHECK([for Berkeley DB2], [ol_cv_berkeley_db2], [
266         if test "$ol_cv_lib_db2" = no -o "$ol_cv_header_db2" = no ; then
267                 ol_cv_berkeley_db2=no
268         else
269                 ol_cv_berkeley_db2=yes
270         fi
271 ])
272  if test $ol_cv_berkeley_db2 = yes ; then
273         AC_DEFINE(HAVE_BERKELEY_DB2,1, [define if Berkeley DBv2 is available])
274  fi
275 ])dnl
276 dnl
277 dnl ====================================================================
278 dnl Check for db.h/db_185.h is Berkeley DB
279 dnl
280 dnl defines ol_cv_header_db to 'yes' or 'no'
281 dnl
282 dnl uses:
283 dnl             OL_HEADER_BERKELEY_DB2
284 dnl             AC_CHECK_HEADERS(db_185.h)
285 dnl
286 AC_DEFUN([OL_HEADER_BERKELEY_DB],
287 [AC_REQUIRE([OL_HEADER_BERKELEY_DB2])
288 AC_CHECK_HEADERS(db_185.h)
289 if test "$ol_cv_header_db2" = yes ; then
290         dnl db.h is db2! 
291
292         ol_cv_header_db=$ac_cv_header_db_185_h
293 else
294         ol_cv_header_db=$ac_cv_header_db_h
295 fi
296 ])dnl
297 dnl
298 dnl --------------------------------------------------------------------
299 dnl Check if Berkeley DB library exists
300 dnl Check for dbopen in standard libraries or -ldb
301 dnl
302 dnl defines ol_cv_lib_db to 'yes' or '-ldb' or 'no'
303 dnl             'yes' implies dbopen is in $LIBS
304 dnl
305 dnl uses:
306 dnl             AC_CHECK_FUNC(dbopen)
307 dnl             AC_CHECK_LIB(db,dbopen)
308 dnl
309 AC_DEFUN([OL_LIB_BERKELEY_DB],
310 [AC_CACHE_CHECK([for Berkeley DB library], [ol_cv_lib_db],
311 [
312         AC_CHECK_HEADERS(db1/db.h)
313         ol_LIBS="$LIBS"
314         AC_CHECK_FUNC(dbopen,[ol_cv_lib_db=yes], [
315                 AC_CHECK_LIB(db1,dbopen,[ol_cv_lib_db=-ldb1],[
316                         AC_CHECK_LIB(db,dbopen,[ol_cv_lib_db=-ldb],
317                         [ol_cv_lib_db=no])
318                 ])
319         ])
320         LIBS="$ol_LIBS"
321 ])
322 ])dnl
323 dnl
324 dnl --------------------------------------------------------------------
325 dnl Check if Berkeley DB exists
326 dnl
327 dnl defines ol_cv_berkeley_db to 'yes' or 'no'
328 dnl 
329 dnl uses:
330 dnl             OL_LIB_BERKELEY_DB
331 dnl             OL_HEADER_BERKELEY_DB
332 dnl
333 AC_DEFUN([OL_BERKELEY_DB],
334 [AC_REQUIRE([OL_LIB_BERKELEY_DB])
335  AC_REQUIRE([OL_HEADER_BERKELEY_DB])
336  AC_CACHE_CHECK([for Berkeley DB], [ol_cv_berkeley_db], [
337         if test "$ol_cv_lib_db" = no -o "$ol_cv_header_db" = no ; then
338                 ol_cv_berkeley_db=no
339         else
340                 ol_cv_berkeley_db=yes
341         fi
342 ])
343  if test $ol_cv_berkeley_db = yes ; then
344         AC_DEFINE(HAVE_BERKELEY_DB,1, [define if Berkeley DB is available])
345  fi
346 ])dnl
347 dnl
348 dnl ====================================================================
349 dnl Check if GDBM library exists
350 dnl Check for gdbm_open in standard libraries or -lgdbm
351 dnl
352 dnl defines ol_cv_lib_gdbm to 'yes' or '-lgdbm' or 'no'
353 dnl             'yes' implies gdbm_open is in $LIBS
354 dnl
355 dnl uses:
356 dnl             AC_CHECK_FUNC(gdbm_open)
357 dnl             AC_CHECK_LIB(gdbm,gdbm_open)
358 dnl
359 AC_DEFUN([OL_LIB_GDBM],
360 [AC_CACHE_CHECK(for GDBM library, [ol_cv_lib_gdbm],
361 [       ol_LIBS="$LIBS"
362         AC_CHECK_FUNC(gdbm_open,[ol_cv_lib_gdbm=yes], [
363                 AC_CHECK_LIB(gdbm,gdbm_open,[ol_cv_lib_gdbm=-lgdbm],[ol_cv_lib_gdbm=no])
364         ])
365         LIBS="$ol_LIBS"
366 ])
367 ])dnl
368 dnl
369 dnl --------------------------------------------------------------------
370 dnl Check if GDBM exists
371 dnl
372 dnl defines ol_cv_gdbm to 'yes' or 'no'
373 dnl 
374 dnl uses:
375 dnl             OL_LIB_GDBM
376 dnl             AC_CHECK_HEADERS(gdbm.h)
377 dnl
378 AC_DEFUN([OL_GDBM],
379 [AC_REQUIRE([OL_LIB_GDBM])
380  AC_CHECK_HEADERS(gdbm.h)
381  AC_CACHE_CHECK(for db, [ol_cv_gdbm], [
382         if test $ol_cv_lib_gdbm = no -o $ac_cv_header_gdbm_h = no ; then
383                 ol_cv_gdbm=no
384         else
385                 ol_cv_gdbm=yes
386         fi
387 ])
388  if test $ol_cv_gdbm = yes ; then
389         AC_DEFINE(HAVE_GDBM,1, [define if GNU DBM is available])
390  fi
391 ])dnl
392 dnl
393 dnl ====================================================================
394 dnl Check if MDBM library exists
395 dnl Check for mdbm_open in standard libraries or -lmdbm
396 dnl
397 dnl defines ol_cv_lib_mdbm to 'yes' or '-lmdbm' or 'no'
398 dnl             'yes' implies mdbm_open is in $LIBS
399 dnl
400 dnl uses:
401 dnl             AC_CHECK_FUNC(mdbm_set_chain)
402 dnl             AC_CHECK_LIB(mdbm,mdbm_set_chain)
403 dnl
404 AC_DEFUN([OL_LIB_MDBM],
405 [AC_CACHE_CHECK(for MDBM library, [ol_cv_lib_mdbm],
406 [       ol_LIBS="$LIBS"
407         AC_CHECK_FUNC(mdbm_set_chain,[ol_cv_lib_mdbm=yes], [
408                 AC_CHECK_LIB(mdbm,mdbm_set_chain,[ol_cv_lib_mdbm=-lmdbm],[ol_cv_lib_mdbm=no])
409         ])
410         LIBS="$ol_LIBS"
411 ])
412 ])dnl
413 dnl
414 dnl --------------------------------------------------------------------
415 dnl Check if MDBM exists
416 dnl
417 dnl defines ol_cv_mdbm to 'yes' or 'no'
418 dnl 
419 dnl uses:
420 dnl             OL_LIB_MDBM
421 dnl             AC_CHECK_HEADERS(mdbm.h)
422 dnl
423 AC_DEFUN([OL_MDBM],
424 [AC_REQUIRE([OL_LIB_MDBM])
425  AC_CHECK_HEADERS(mdbm.h)
426  AC_CACHE_CHECK(for db, [ol_cv_mdbm], [
427         if test $ol_cv_lib_mdbm = no -o $ac_cv_header_mdbm_h = no ; then
428                 ol_cv_mdbm=no
429         else
430                 ol_cv_mdbm=yes
431         fi
432 ])
433  if test $ol_cv_mdbm = yes ; then
434         AC_DEFINE(HAVE_MDBM,1, [define if MDBM is available])
435  fi
436 ])dnl
437 dnl
438 dnl ====================================================================
439 dnl Check if NDBM library exists
440 dnl Check for dbm_open in standard libraries or -lndbm or -ldbm
441 dnl
442 dnl defines ol_cv_lib_ndbm to 'yes' or '-lndbm' or -ldbm or 'no'
443 dnl             'yes' implies ndbm_open is in $LIBS
444 dnl
445 dnl uses:
446 dnl             AC_CHECK_FUNC(dbm_open)
447 dnl             AC_CHECK_LIB(ndbm,dbm_open)
448 dnl             AC_CHECK_LIB(dbm,dbm_open)
449 dnl
450 dnl restrictions:
451 dnl             should also check SVR4 case: dbm_open() in -lucb but that
452 dnl             would requiring dealing with -L/usr/ucblib
453 dnl
454 AC_DEFUN([OL_LIB_NDBM],
455 [AC_CACHE_CHECK(for NDBM library, [ol_cv_lib_ndbm],
456 [       ol_LIBS="$LIBS"
457         AC_CHECK_FUNC(dbm_open,[ol_cv_lib_ndbm=yes], [
458                 AC_CHECK_LIB(ndbm,dbm_open,[ol_cv_lib_ndbm=-lndbm], [
459                         AC_CHECK_LIB(dbm,dbm_open,[ol_cv_lib_ndbm=-ldbm],
460                                 [ol_cv_lib_ndbm=no])dnl
461                 ])
462         ])
463         LIBS="$ol_LIBS"
464 ])
465 ])dnl
466 dnl
467 dnl --------------------------------------------------------------------
468 dnl Check if NDBM exists
469 dnl
470 dnl defines ol_cv_ndbm to 'yes' or 'no'
471 dnl 
472 dnl uses:
473 dnl             OL_LIB_NDBM
474 dnl             AC_CHECK_HEADERS(ndbm.h)
475 dnl
476 dnl restrictions:
477 dnl             Doesn't handle SVR4 case (see above)
478 dnl
479 AC_DEFUN([OL_NDBM],
480 [AC_REQUIRE([OL_LIB_NDBM])
481  AC_CHECK_HEADERS(ndbm.h)
482  AC_CACHE_CHECK(for db, [ol_cv_ndbm], [
483         if test $ol_cv_lib_ndbm = no -o $ac_cv_header_ndbm_h = no ; then
484                 ol_cv_ndbm=no
485         else
486                 ol_cv_ndbm=yes
487         fi
488 ])
489  if test $ol_cv_ndbm = yes ; then
490         AC_DEFINE(HAVE_NDBM,1, [define if NDBM is available])
491  fi
492 ])dnl
493 dnl
494 dnl ====================================================================
495 dnl Check POSIX Thread version 
496 dnl
497 dnl defines ol_cv_posix_version to 'final' or 'draft' or 'unknown'
498 dnl     'unknown' implies that the version could not be detected
499 dnl             or that pthreads.h does exist.  Existance of pthreads.h
500 dnl             should be tested separately.
501 dnl
502 AC_DEFUN([OL_POSIX_THREAD_VERSION],
503 [AC_CACHE_CHECK([POSIX thread version],[ol_cv_pthread_version],[
504         AC_EGREP_CPP(pthread_version_final,[
505 #               include <pthread.h>
506                 /* this check could be improved */
507 #               ifdef PTHREAD_ONCE_INIT
508                         pthread_version_final
509 #               endif
510         ], ol_pthread_final=yes, ol_pthread_final=no)
511
512         AC_EGREP_CPP(pthread_version_draft4,[
513 #               include <pthread.h>
514                 /* this check could be improved */
515 #               ifdef pthread_once_init
516                         pthread_version_draft4
517 #               endif
518         ], ol_pthread_draft4=yes, ol_pthread_draft4=no)
519
520         if test $ol_pthread_final = yes -a $ol_pthread_draft4 = no; then
521                 ol_cv_pthread_version=final
522         elif test $ol_pthread_final = no -a $ol_pthread_draft4 = yes; then
523                 ol_cv_pthread_version=draft4
524         else
525                 ol_cv_pthread_version=unknown
526         fi
527 ])
528 ])dnl
529 dnl
530 dnl --------------------------------------------------------------------
531 AC_DEFUN([OL_PTHREAD_TRY_LINK], [# Pthread try link: $1 ($2)
532         if test "$ol_link_threads" = no ; then
533                 # try $1
534                 AC_CACHE_CHECK([for pthread link with $1], [$2], [
535                         # save the flags
536                         ol_LIBS="$LIBS"
537                         LIBS="$1 $LIBS"
538
539                         AC_TRY_LINK([
540 #include <pthread.h>
541 #ifndef NULL
542 #define NULL (void*)0
543 #endif
544 ],[
545         pthread_t t;
546
547 #if HAVE_PTHREADS_D4
548         pthread_create(&t, pthread_attr_default, NULL, NULL);
549         pthread_detach( &t );
550 #else
551         pthread_create(&t, NULL, NULL, NULL);
552         pthread_detach( t );
553 #endif
554 #ifdef HAVE_LINUX_THREADS
555         pthread_kill_other_threads_np();
556 #endif
557 ], [$2=yes], [$2=no])
558
559                 # restore the LIBS
560                 LIBS="$ol_LIBS"
561                 ])
562
563                 if test $$2 = yes ; then
564                         ol_link_pthreads="$1"
565                         ol_link_threads=posix
566                 fi
567         fi
568 ])
569 dnl
570 dnl ====================================================================
571 dnl Check LinuxThreads Header
572 dnl
573 dnl defines ol_cv_header linux_threads to 'yes' or 'no'
574 dnl             'no' implies pthreads.h is not LinuxThreads or pthreads.h
575 dnl             doesn't exists.  Existance of pthread.h should separately
576 dnl             checked.
577 dnl 
578 AC_DEFUN([OL_HEADER_LINUX_THREADS], [
579         AC_CACHE_CHECK([for LinuxThreads pthread.h],
580                 [ol_cv_header_linux_threads],
581                 [AC_EGREP_CPP(pthread_kill_other_threads_np,
582                         [#include <pthread.h>],
583                         [ol_cv_header_linux_threads=yes],
584                         [ol_cv_header_linux_threads=no])
585                 ])
586         if test $ol_cv_header_linux_threads = yes; then
587                 AC_DEFINE(HAVE_LINUX_THREADS,1,[if you have LinuxThreads])
588         fi
589 ])dnl
590 dnl --------------------------------------------------------------------
591 dnl     Check LinuxThreads Implementation
592 dnl
593 dnl     defines ol_cv_sys_linux_threads to 'yes' or 'no'
594 dnl     'no' implies pthreads implementation is not LinuxThreads.
595 dnl 
596 AC_DEFUN([OL_SYS_LINUX_THREADS], [
597         AC_CHECK_FUNC(pthread_kill_other_threads_np)
598         AC_CACHE_CHECK([for LinuxThreads implementation],
599                 [ol_cv_sys_linux_threads],
600                 [ol_cv_sys_linux_threads=$ac_cv_func_pthread_kill_other_threads_np])
601 ])dnl
602 dnl
603 dnl --------------------------------------------------------------------
604 dnl Check LinuxThreads consistency
605 AC_DEFUN([OL_LINUX_THREADS], [
606         AC_REQUIRE([OL_HEADER_LINUX_THREADS])
607         AC_REQUIRE([OL_SYS_LINUX_THREADS])
608         AC_CACHE_CHECK([for LinuxThreads consistency], [ol_cv_linux_threads], [
609                 if test $ol_cv_header_linux_threads = yes -a \
610                         $ol_cv_sys_linux_threads = yes; then
611                         ol_cv_linux_threads=yes
612                 elif test $ol_cv_header_linux_threads = no -a \
613                         $ol_cv_sys_linux_threads = no; then
614                         ol_cv_linux_threads=no
615                 else
616                         ol_cv_linux_threads=error
617                 fi
618         ])
619 ])dnl
620 dnl
621 dnl ====================================================================
622 dnl Check for POSIX Regex
623 AC_DEFUN([OL_POSIX_REGEX], [
624 AC_CACHE_CHECK([for compatible POSIX regex],ol_cv_c_posix_regex,[
625         AC_TRY_RUN([
626 #include <sys/types.h>
627 #include <regex.h>
628 static char *pattern, *string;
629 main()
630 {
631         int rc;
632         regex_t re;
633
634         pattern = "^A";
635
636         if(regcomp(&re, pattern, 0)) {
637                 return -1;
638         }
639         
640         string = "ALL MATCH";
641         
642         rc = regexec(&re, string, 0, (void*)0, 0);
643
644         regfree(&re);
645
646         return rc;
647 }],
648         [ol_cv_c_posix_regex=yes],
649         [ol_cv_c_posix_regex=no],
650         [ol_cv_c_posix_regex=cross])])
651 ])
652 dnl
653 dnl ====================================================================
654 dnl Check if toupper() requires islower() to be called first
655 AC_DEFUN([OL_C_UPPER_LOWER],
656 [AC_CACHE_CHECK([if toupper() requires islower()],ol_cv_c_upper_lower,[
657         AC_TRY_RUN([
658 #include <ctype.h>
659 main()
660 {
661         if ('C' == toupper('C'))
662                 exit(0);
663         else
664                 exit(1);
665 }],
666         [ol_cv_c_upper_lower=no],
667         [ol_cv_c_upper_lower=yes],
668         [ol_cv_c_upper_lower=safe])])
669 if test $ol_cv_c_upper_lower != no ; then
670         AC_DEFINE(C_UPPER_LOWER,1, [define if toupper() requires islower()])
671 fi
672 ])
673 dnl
674 dnl ====================================================================
675 dnl Check for declaration of sys_errlist in one of stdio.h and errno.h.
676 dnl Declaration of sys_errlist on BSD4.4 interferes with our declaration.
677 dnl Reported by Keith Bostic.
678 AC_DEFUN([OL_SYS_ERRLIST],
679 [AC_CACHE_CHECK([declaration of sys_errlist],ol_cv_dcl_sys_errlist,[
680         AC_TRY_COMPILE([
681 #include <stdio.h>
682 #include <sys/types.h>
683 #include <errno.h> ],
684         [char *c = (char *) *sys_errlist],
685         [ol_cv_dcl_sys_errlist=yes
686         ol_cv_have_sys_errlist=yes],
687         [ol_cv_dcl_sys_errlist=no])])
688 #
689 # It's possible (for near-UNIX clones) that sys_errlist doesn't exist
690 if test $ol_cv_dcl_sys_errlist = no ; then
691         AC_DEFINE(DECL_SYS_ERRLIST,1,
692                 [define if sys_errlist is not declared in stdio.h or errno.h])
693
694         AC_CACHE_CHECK([existence of sys_errlist],ol_cv_have_sys_errlist,[
695                 AC_TRY_LINK([#include <errno.h>],
696                         [char *c = (char *) *sys_errlist],
697                         [ol_cv_have_sys_errlist=yes],
698                         [ol_cv_have_sys_errlist=no])])
699 fi
700 if test $ol_cv_have_sys_errlist = yes ; then
701         AC_DEFINE(HAVE_SYS_ERRLIST,1,
702                 [define if you actually have sys_errlist in your libs])
703 fi
704 ])dnl
705 dnl
706 dnl ====================================================================
707 dnl Early MIPS compilers (used in Ultrix 4.2) don't like
708 dnl "int x; int *volatile a = &x; *a = 0;"
709 dnl     -- borrowed from PDKSH
710 AC_DEFUN(OL_C_VOLATILE,
711  [AC_CACHE_CHECK(if compiler understands volatile, ol_cv_c_volatile,
712     [AC_TRY_COMPILE([int x, y, z;],
713       [volatile int a; int * volatile b = x ? &y : &z;
714       /* Older MIPS compilers (eg., in Ultrix 4.2) don't like *b = 0 */
715       *b = 0;], ol_cv_c_volatile=yes, ol_cv_c_volatile=no)])
716   if test $ol_cv_c_volatile = yes; then
717     : 
718   else
719     AC_DEFINE(volatile,,[define as empty if volatile is not supported])
720   fi
721  ])dnl
722 dnl
723 dnl ====================================================================
724 dnl Look for fetch(3)
725 AC_DEFUN([OL_LIB_FETCH],
726 [ol=$LIBS
727 LIBS="-lfetch -lcom_err $LIBS"
728 AC_CACHE_CHECK([fetch(3) library],ol_cv_lib_fetch,[
729         AC_TRY_LINK([
730 #include <sys/param.h>
731 #include <stdio.h>
732 #include <fetch.h>],
733         [struct url *u = fetchParseURL("file:///"); ],
734         [ol_cv_lib_fetch=yes],
735         [ol_cv_lib_fetch=no])])
736 LIBS=$ol_LIBS
737 if test $ol_cv_lib_fetch != no ; then
738         ol_link_fetch="-lfetch -lcom_err"
739         AC_DEFINE(HAVE_FETCH,1,
740                 [define if you actually have FreeBSD fetch(3)])
741 fi
742 ])dnl
743 dnl
744 dnl ====================================================================
745 dnl Define sig_atomic_t if not defined in signal.h
746 AC_DEFUN(OL_TYPE_SIG_ATOMIC_T,
747  [AC_CACHE_CHECK(for sig_atomic_t, ol_cv_type_sig_atomic_t,
748     [AC_TRY_COMPILE([#include <signal.h>], [sig_atomic_t atomic;],
749                 ol_cv_type_sig_atomic_t=yes, ol_cv_type_sig_atomic_t=no)])
750   if test $ol_cv_type_sig_atomic_t = no; then
751     AC_DEFINE(sig_atomic_t,int,
752                 [define to atomic type if sig_atomic_t is not available])
753   fi
754  ])dnl
755 dnl
756 dnl ====================================================================
757 dnl Define socklen_t if not defined in sys/types.h or sys/socket.h
758 AC_DEFUN(OL_TYPE_SOCKLEN_T,
759  [AC_CACHE_CHECK(for socklen_t, ol_cv_type_socklen_t,
760     [AC_TRY_COMPILE([
761 #ifdef HAVE_SYS_TYPES_H
762 #include <sys/types.h>
763 #endif
764 #ifdef HAVE_SYS_SOCKET_H
765 #include <sys/socket.h>
766 #endif
767 ], [socklen_t len;],
768                 ol_cv_type_socklen_t=yes, ol_cv_type_socklen_t=no)])
769   if test $ol_cv_type_socklen_t = no; then
770     AC_DEFINE(socklen_t, int,
771                 [define to int if socklen_t is not available])
772   fi
773  ])dnl
774 dnl
775 dnl ====================================================================
776 dnl Define inet_aton is available
777 AC_DEFUN(OL_FUNC_INET_ATON,
778  [AC_CACHE_CHECK([for inet_aton()], ol_cv_func_inet_aton,
779     [AC_TRY_COMPILE([
780 #ifdef HAVE_SYS_TYPES_H
781 #       include <sys/types.h>
782 #endif
783 #ifdef HAVE_SYS_SOCKET_H
784 #       include <sys/socket.h>
785 #       ifdef HAVE_SYS_SELECT_H
786 #               include <sys/select.h>
787 #       endif
788 #       include <netinet/in.h>
789 #       ifdef HAVE_ARPA_INET_H
790 #               include <arpa/inet.h>
791 #       endif
792 #endif
793 ], [struct in_addr in;
794 int rc = inet_aton( "255.255.255.255", &in );],
795                 ol_cv_func_inet_aton=yes, ol_cv_func_inet_aton=no)])
796   if test $ol_cv_func_inet_aton != no; then
797     AC_DEFINE(HAVE_INET_ATON, 1,
798                 [define to you inet_aton(3) is available])
799   fi
800  ])dnl
801 dnl
802 dnl ====================================================================
803 dnl check no of arguments for ctime_r
804 AC_DEFUN(OL_FUNC_CTIME_R_NARGS,
805  [AC_CACHE_CHECK(number of arguments of ctime_r, ol_cv_func_ctime_r_nargs,
806    [AC_TRY_COMPILE([#include <time.h>],
807                 [time_t ti; char *buffer; ctime_r(&ti,buffer,32);],
808                         ol_cv_func_ctime_r_nargs=3,
809                         [AC_TRY_COMPILE([#include <time.h>],
810                                 [time_t ti; char *buffer; ctime_r(&ti,buffer);],
811                                         ol_cv_func_ctime_r_nargs=2,
812                                         ol_cv_func_ctime_r_nargs=0)])])
813   if test $ol_cv_func_ctime_r_nargs -gt 1 ; then
814     AC_DEFINE_UNQUOTED(CTIME_R_NARGS, $ol_cv_func_ctime_r_nargs,
815                 [set to the number of arguments ctime_r() expects])
816   fi
817 ])dnl
818 dnl
819 dnl --------------------------------------------------------------------
820 dnl check return type of ctime_r()
821 AC_DEFUN(OL_FUNC_CTIME_R_TYPE,
822  [AC_CACHE_CHECK(return type of ctime_r, ol_cv_func_ctime_r_type,
823    [AC_TRY_COMPILE([#include <time.h>],
824                 [extern int (ctime_r)();],
825                         ol_cv_func_ctime_r_type="int", ol_cv_func_ctime_r_type="charp")
826         ])
827   if test $ol_cv_func_ctime_r_type = "int" ; then
828         AC_DEFINE(CTIME_R_RETURNS_INT,1, [define if ctime_r() returns int])
829   fi
830 ])dnl
831 dnl ====================================================================
832 dnl check no of arguments for gethostbyname_r
833 AC_DEFUN(OL_FUNC_GETHOSTBYNAME_R_NARGS,
834  [AC_CACHE_CHECK(number of arguments of gethostbyname_r,
835         ol_cv_func_gethostbyname_r_nargs,
836         [AC_TRY_COMPILE([#include <sys/types.h>
837 #include <sys/socket.h>
838 #include <netinet/in.h>
839 #include <netdb.h>
840 #define BUFSIZE (sizeof(struct hostent)+10)],
841                 [struct hostent hent; char buffer[BUFSIZE];
842                 int bufsize=BUFSIZE;int h_errno;
843                 (void)gethostbyname_r("segovia.cs.purdue.edu", &hent,
844                         buffer, bufsize, &h_errno);],
845                 ol_cv_func_gethostbyname_r_nargs=5, 
846                 [AC_TRY_COMPILE([#include <sys/types.h>
847 #include <sys/socket.h>
848 #include <netinet/in.h>
849 #include <netdb.h>
850 #define BUFSIZE (sizeof(struct hostent)+10)],
851                         [struct hostent hent;struct hostent *rhent;
852                         char buffer[BUFSIZE];
853                         int bufsize=BUFSIZE;int h_errno;
854                         (void)gethostbyname_r("localhost", &hent, buffer, bufsize,
855                                 &rhent, &h_errno);],
856                         ol_cv_func_gethostbyname_r_nargs=6,
857                         ol_cv_func_gethostbyname_r_nargs=0)])])
858   if test $ol_cv_func_gethostbyname_r_nargs -gt 1 ; then
859         AC_DEFINE_UNQUOTED(GETHOSTBYNAME_R_NARGS,
860                 $ol_cv_func_gethostbyname_r_nargs,
861                 [set to the number of arguments gethostbyname_r() expects])
862   fi
863 ])dnl
864 dnl
865 dnl check no of arguments for gethostbyaddr_r
866 AC_DEFUN(OL_FUNC_GETHOSTBYADDR_R_NARGS,
867  [AC_CACHE_CHECK(number of arguments of gethostbyaddr_r,
868         [ol_cv_func_gethostbyaddr_r_nargs],
869         [AC_TRY_COMPILE([#include <sys/types.h>
870 #include <sys/socket.h>
871 #include <netinet/in.h>
872 #include <netdb.h>
873 #define BUFSIZE (sizeof(struct hostent)+10)],
874            [struct hostent hent; char buffer[BUFSIZE]; 
875             struct in_addr add;
876             size_t alen=sizeof(struct in_addr);
877             int bufsize=BUFSIZE;int h_errno;
878                 (void)gethostbyaddr_r( (void *)&(add.s_addr),
879                         alen, AF_INET, &hent, buffer, bufsize, &h_errno);],
880                 ol_cv_func_gethostbyaddr_r_nargs=7,
881                 [AC_TRY_COMPILE([#include <sys/types.h>
882 #include <sys/socket.h>
883 #include <netinet/in.h>
884 #include <netdb.h>
885 #define BUFSIZE (sizeof(struct hostent)+10)],
886                         [struct hostent hent;
887                         struct hostent *rhent; char buffer[BUFSIZE]; 
888                         struct in_addr add;
889                         size_t alen=sizeof(struct in_addr);
890                         int bufsize=BUFSIZE;int h_errno;
891                         (void)gethostbyaddr_r( (void *)&(add.s_addr),
892                                 alen, AF_INET, &hent, buffer, bufsize, 
893                                 &rhent, &h_errno);],
894                         ol_cv_func_gethostbyaddr_r_nargs=8,
895                         ol_cv_func_gethostbyaddr_r_nargs=0)])])
896   if test $ol_cv_func_gethostbyaddr_r_nargs -gt 1 ; then
897     AC_DEFINE_UNQUOTED(GETHOSTBYADDR_R_NARGS,
898                 $ol_cv_func_gethostbyaddr_r_nargs,
899                 [set to the number of arguments gethostbyaddr_r() expects])
900   fi
901 ])dnl
902 dnl