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