1dnl OpenLDAP Autoconf Macros 2dnl $OpenLDAP$ 3dnl This work is part of OpenLDAP Software <http://www.openldap.org/>. 4dnl 5dnl Copyright 1998-2011 The OpenLDAP Foundation. 6dnl All rights reserved. 7dnl 8dnl Redistribution and use in source and binary forms, with or without 9dnl modification, are permitted only as authorized by the OpenLDAP 10dnl Public License. 11dnl 12dnl A copy of this license is available in the file LICENSE in the 13dnl top-level directory of the distribution or, alternatively, at 14dnl <http://www.OpenLDAP.org/license.html>. 15dnl 16dnl -------------------------------------------------------------------- 17dnl Restricted form of AC_ARG_ENABLE that limits user options 18dnl 19dnl $1 = option name 20dnl $2 = help-string 21dnl $3 = default value (auto). "--" means do not set it by default 22dnl $4 = allowed values (auto yes no) 23dnl $5 = overridden default 24AC_DEFUN([OL_ARG_ENABLE], [# OpenLDAP --enable-$1 25 pushdef([ol_DefVal],ifelse($3,,auto,$3)) 26 AC_ARG_ENABLE($1,ifelse($4,,[$2],[$2] translit([$4],[ ],[|])) ifelse($3,--,,@<:@ol_DefVal@:>@),[ 27 ol_arg=invalid 28 for ol_val in ifelse($4,,[auto yes no],[$4]) ; do 29 if test "$enableval" = "$ol_val" ; then 30 ol_arg="$ol_val" 31 fi 32 done 33 if test "$ol_arg" = "invalid" ; then 34 AC_MSG_ERROR(bad value $enableval for --enable-$1) 35 fi 36 ol_enable_$1="$ol_arg" 37]ifelse($3,--,,[, 38[ ol_enable_$1=ifelse($5,,ol_DefVal,[${]$5[:-]ol_DefVal[}])]]))dnl 39dnl AC_MSG_RESULT([OpenLDAP -enable-$1 $ol_enable_$1]) 40 popdef([ol_DefVal]) 41# end --enable-$1 42])dnl 43dnl 44dnl -------------------------------------------------------------------- 45dnl Restricted form of AC_ARG_WITH that limits user options 46dnl 47dnl $1 = option name 48dnl $2 = help-string 49dnl $3 = default value (no) 50dnl $4 = allowed values (yes or no) 51AC_DEFUN([OL_ARG_WITH], [# OpenLDAP --with-$1 52 AC_ARG_WITH($1,[$2 @<:@]ifelse($3,,yes,$3)@:>@,[ 53 ol_arg=invalid 54 for ol_val in ifelse($4,,[yes no],[$4]) ; do 55 if test "$withval" = "$ol_val" ; then 56 ol_arg="$ol_val" 57 fi 58 done 59 if test "$ol_arg" = "invalid" ; then 60 AC_MSG_ERROR(bad value $withval for --with-$1) 61 fi 62 ol_with_$1="$ol_arg" 63], 64[ ol_with_$1=ifelse($3,,"no","$3")])dnl 65dnl AC_MSG_RESULT([OpenLDAP --with-$1 $ol_with_$1]) 66# end --with-$1 67])dnl 68dnl ==================================================================== 69dnl Check for dependency generation flag 70AC_DEFUN([OL_MKDEPEND], [# test for make depend flag 71OL_MKDEP= 72OL_MKDEP_FLAGS= 73if test -z "${MKDEP}"; then 74 OL_MKDEP="${CC-cc}" 75 if test -z "${MKDEP_FLAGS}"; then 76 AC_CACHE_CHECK([for ${OL_MKDEP} depend flag], ol_cv_mkdep, [ 77 ol_cv_mkdep=no 78 for flag in "-M" "-xM"; do 79 cat > conftest.c <<EOF 80 noCode; 81EOF 82 if AC_TRY_COMMAND($OL_MKDEP $flag conftest.c) \ 83 | grep '^conftest\.'"${ac_objext}" >/dev/null 2>&1 84 then 85 if test ! -f conftest."${ac_object}" ; then 86 ol_cv_mkdep=$flag 87 OL_MKDEP_FLAGS="$flag" 88 break 89 fi 90 fi 91 done 92 rm -f conftest* 93 ]) 94 test "$ol_cv_mkdep" = no && OL_MKDEP=":" 95 else 96 cc_cv_mkdep=yes 97 OL_MKDEP_FLAGS="${MKDEP_FLAGS}" 98 fi 99else 100 cc_cv_mkdep=yes 101 OL_MKDEP="${MKDEP}" 102 OL_MKDEP_FLAGS="${MKDEP_FLAGS}" 103fi 104AC_SUBST(OL_MKDEP) 105AC_SUBST(OL_MKDEP_FLAGS) 106]) 107dnl 108dnl ==================================================================== 109dnl Check if system uses EBCDIC instead of ASCII 110AC_DEFUN([OL_CPP_EBCDIC], [# test for EBCDIC 111AC_CACHE_CHECK([for EBCDIC],ol_cv_cpp_ebcdic,[ 112 AC_PREPROC_IFELSE([AC_LANG_SOURCE([[ 113#if !('M' == 0xd4) 114#include <__ASCII__/generate_error.h> 115#endif 116]])],[ol_cv_cpp_ebcdic=yes],[ol_cv_cpp_ebcdic=no])]) 117if test $ol_cv_cpp_ebcdic = yes ; then 118 AC_DEFINE(HAVE_EBCDIC,1, [define if system uses EBCDIC instead of ASCII]) 119fi 120]) 121dnl 122dnl -------------------------------------------------------------------- 123dnl Check for MSVC 124AC_DEFUN([OL_MSVC], 125[AC_REQUIRE_CPP()dnl 126AC_CACHE_CHECK([whether we are using MS Visual C++], ol_cv_msvc, 127[AC_PREPROC_IFELSE([AC_LANG_SOURCE([[ 128#ifndef _MSC_VER 129#include <__FOO__/generate_error.h> 130#endif 131]])],[ol_cv_msvc=yes],[ol_cv_msvc=no])])]) 132 133dnl -------------------------------------------------------------------- 134dnl OpenLDAP version of STDC header check w/ EBCDIC support 135AC_DEFUN([OL_HEADER_STDC], 136[AC_REQUIRE_CPP()dnl 137AC_REQUIRE([OL_CPP_EBCDIC])dnl 138AC_CACHE_CHECK([for ANSI C header files], ol_cv_header_stdc, 139[AC_PREPROC_IFELSE([AC_LANG_SOURCE([[#include <stdlib.h> 140#include <stdarg.h> 141#include <string.h> 142#include <float.h>]])],[ol_cv_header_stdc=yes],[ol_cv_header_stdc=no]) 143 144if test $ol_cv_header_stdc = yes; then 145 # SunOS 4.x string.h does not declare mem*, contrary to ANSI. 146AC_EGREP_HEADER(memchr, string.h, , ol_cv_header_stdc=no) 147fi 148 149if test $ol_cv_header_stdc = yes; then 150 # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. 151AC_EGREP_HEADER(free, stdlib.h, , ol_cv_header_stdc=no) 152fi 153 154if test $ol_cv_header_stdc = yes; then 155 # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. 156AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <ctype.h> 157#ifndef HAVE_EBCDIC 158# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') 159# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) 160#else 161# define ISLOWER(c) (('a' <= (c) && (c) <= 'i') \ 162 || ('j' <= (c) && (c) <= 'r') \ 163 || ('s' <= (c) && (c) <= 'z')) 164# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) 165#endif 166#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) 167int main () { int i; for (i = 0; i < 256; i++) 168if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); 169exit (0); } 170]])],[],[ol_cv_header_stdc=no],[:]) 171fi]) 172if test $ol_cv_header_stdc = yes; then 173 AC_DEFINE(STDC_HEADERS) 174fi 175ac_cv_header_stdc=disable 176]) 177dnl 178dnl ==================================================================== 179dnl DNS resolver macros 180AC_DEFUN([OL_RESOLVER_TRY], 181[if test $ol_cv_lib_resolver = no ; then 182 AC_CACHE_CHECK([for resolver link (]ifelse($2,,default,$2)[)],[$1], 183[ 184 ol_RESOLVER_LIB=ifelse($2,,,$2) 185 ol_LIBS=$LIBS 186 LIBS="$ol_RESOLVER_LIB $LIBS" 187 188 AC_LINK_IFELSE([AC_LANG_PROGRAM([[ 189#ifdef HAVE_SYS_TYPES_H 190# include <sys/types.h> 191#endif 192#include <netinet/in.h> 193#ifdef HAVE_ARPA_NAMESER_H 194# include <arpa/nameser.h> 195#endif 196#ifdef HAVE_RESOLV_H 197# include <resolv.h> 198#endif 199]], [[{ 200 int len, status; 201 char *request = NULL; 202 unsigned char reply[64*1024]; 203 unsigned char host[64*1024]; 204 unsigned char *p; 205 206#ifdef NS_HFIXEDSZ 207 /* Bind 8/9 interface */ 208 len = res_query(request, ns_c_in, ns_t_srv, reply, sizeof(reply)); 209#else 210 /* Bind 4 interface */ 211# ifndef T_SRV 212# define T_SRV 33 213# endif 214 len = res_query(request, C_IN, T_SRV, reply, sizeof(reply)); 215#endif 216 p = reply; 217#ifdef NS_HFIXEDSZ 218 /* Bind 8/9 interface */ 219 p += NS_HFIXEDSZ; 220#elif defined(HFIXEDSZ) 221 /* Bind 4 interface w/ HFIXEDSZ */ 222 p += HFIXEDSZ; 223#else 224 /* Bind 4 interface w/o HFIXEDSZ */ 225 p += sizeof(HEADER); 226#endif 227 status = dn_expand( reply, reply+len, p, host, sizeof(host)); 228}]])],[$1=yes],[$1=no]) 229 230 LIBS="$ol_LIBS" 231]) 232 233 if test $$1 = yes ; then 234 ol_cv_lib_resolver=ifelse($2,,yes,$2) 235 fi 236fi 237]) 238dnl -------------------------------------------------------------------- 239dnl Try to locate appropriate library 240AC_DEFUN([OL_RESOLVER_LINK], 241[ol_cv_lib_resolver=no 242OL_RESOLVER_TRY(ol_cv_resolver_none) 243OL_RESOLVER_TRY(ol_cv_resolver_resolv,[-lresolv]) 244OL_RESOLVER_TRY(ol_cv_resolver_bind,[-lbind]) 245]) 246dnl 247dnl ==================================================================== 248dnl International Components for Unicode (ICU) 249AC_DEFUN([OL_ICU], 250[ol_icu=no 251AC_CHECK_HEADERS( unicode/utypes.h ) 252if test $ac_cv_header_unicode_utypes_h = yes ; then 253 dnl OL_ICULIBS="-licui18n -licuuc -licudata" 254 OL_ICULIBS="-licuuc -licudata" 255 256 AC_CACHE_CHECK([for ICU libraries], [ol_cv_lib_icu], [ 257 ol_LIBS="$LIBS" 258 LIBS="$OL_ICULIBS $LIBS" 259 AC_LINK_IFELSE([AC_LANG_PROGRAM([[ 260#include <unicode/utypes.h> 261]], [[ 262(void) u_errorName(0); 263]])],[ol_cv_lib_icu=yes],[ol_cv_lib_icu=no]) 264 LIBS="$ol_LIBS" 265]) 266 267 if test $ol_cv_lib_icu != no ; then 268 ol_icu="$OL_ICULIBS" 269 AC_DEFINE(HAVE_ICU,1,[define if you actually have ICU]) 270 fi 271fi 272]) 273dnl 274dnl ==================================================================== 275dnl Berkeley DB macros 276dnl 277dnl -------------------------------------------------------------------- 278dnl Try to link 279AC_DEFUN([OL_BERKELEY_DB_TRY], 280[if test $ol_cv_lib_db = no ; then 281 AC_CACHE_CHECK([for Berkeley DB link (]ifelse($2,,default,$2)[)],[$1], 282[ 283 ol_DB_LIB=ifelse($2,,,$2) 284 ol_LIBS=$LIBS 285 LIBS="$ol_DB_LIB $LTHREAD_LIBS $LIBS" 286 287 AC_LINK_IFELSE([AC_LANG_PROGRAM([[ 288#ifdef HAVE_DB_185_H 289# include <db_185.h> 290#else 291# include <db.h> 292#endif 293 294#ifndef DB_VERSION_MAJOR 295# define DB_VERSION_MAJOR 1 296#endif 297 298#ifndef NULL 299#define NULL ((void*)0) 300#endif 301]], [[ 302#if DB_VERSION_MAJOR > 2 303 db_env_create( NULL, 0 ); 304#elif DB_VERSION_MAJOR > 1 305 db_appexit( NULL ); 306#else 307 (void) dbopen( NULL, 0, 0, 0, NULL); 308#endif 309]])],[$1=yes],[$1=no]) 310 311 LIBS="$ol_LIBS" 312]) 313 314 if test $$1 = yes ; then 315 ol_cv_lib_db=ifelse($2,,yes,$2) 316 fi 317fi 318]) 319dnl 320dnl -------------------------------------------------------------------- 321dnl Get major and minor version from <db.h> 322AC_DEFUN([OL_BDB_HEADER_VERSION], 323[AC_CACHE_CHECK([for Berkeley DB major version in db.h], [ol_cv_bdb_major],[ 324 AC_LANG_CONFTEST([ 325#include <db.h> 326#ifndef DB_VERSION_MAJOR 327# define DB_VERSION_MAJOR 1 328#endif 329__db_version DB_VERSION_MAJOR 330]) 331 set X `eval "$ac_cpp conftest.$ac_ext" | $EGREP __db_version` none none 332 ol_cv_bdb_major=${3} 333]) 334case $ol_cv_bdb_major in [[1-9]]*) : ;; *) 335 AC_MSG_ERROR([Unknown Berkeley DB major version in db.h]) ;; 336esac 337 338dnl Determine minor version 339AC_CACHE_CHECK([for Berkeley DB minor version in db.h], [ol_cv_bdb_minor],[ 340 AC_LANG_CONFTEST([ 341#include <db.h> 342#ifndef DB_VERSION_MINOR 343# define DB_VERSION_MINOR 0 344#endif 345__db_version DB_VERSION_MINOR 346]) 347 set X `eval "$ac_cpp conftest.$ac_ext" | $EGREP __db_version` none none 348 ol_cv_bdb_minor=${3} 349]) 350case $ol_cv_bdb_minor in [[0-9]]*) : ;; *) 351 AC_MSG_ERROR([Unknown Berkeley DB minor version in db.h]) ;; 352esac 353]) 354dnl 355dnl -------------------------------------------------------------------- 356dnl Try to locate appropriate library 357AC_DEFUN([OL_BERKELEY_DB_LINK], 358[ol_cv_lib_db=no 359 360if test $ol_cv_bdb_major = 5 ; then 361 OL_BERKELEY_DB_TRY(ol_cv_db_db_5_dot_m,[-ldb-5.$ol_cv_bdb_minor]) 362 OL_BERKELEY_DB_TRY(ol_cv_db_db5m,[-ldb5$ol_cv_bdb_minor]) 363 OL_BERKELEY_DB_TRY(ol_cv_db_db_5m,[-ldb-5$ol_cv_bdb_minor]) 364 OL_BERKELEY_DB_TRY(ol_cv_db_db_5_m,[-ldb-5-$ol_cv_bdb_minor]) 365 OL_BERKELEY_DB_TRY(ol_cv_db_db_5,[-ldb-5]) 366 OL_BERKELEY_DB_TRY(ol_cv_db_db5,[-ldb5]) 367elif test $ol_cv_bdb_major = 4 ; then 368 OL_BERKELEY_DB_TRY(ol_cv_db_db_4_dot_m,[-ldb-4.$ol_cv_bdb_minor]) 369 OL_BERKELEY_DB_TRY(ol_cv_db_db4m,[-ldb4$ol_cv_bdb_minor]) 370 OL_BERKELEY_DB_TRY(ol_cv_db_db_4m,[-ldb-4$ol_cv_bdb_minor]) 371 OL_BERKELEY_DB_TRY(ol_cv_db_db_4_m,[-ldb-4-$ol_cv_bdb_minor]) 372 OL_BERKELEY_DB_TRY(ol_cv_db_db_4,[-ldb-4]) 373 OL_BERKELEY_DB_TRY(ol_cv_db_db4,[-ldb4]) 374fi 375OL_BERKELEY_DB_TRY(ol_cv_db_db,[-ldb]) 376OL_BERKELEY_DB_TRY(ol_cv_db_none) 377]) 378dnl 379dnl -------------------------------------------------------------------- 380dnl Check if Berkeley DB version 381AC_DEFUN([OL_BERKELEY_DB_VERSION], 382[AC_CACHE_CHECK([for Berkeley DB library and header version match], [ol_cv_berkeley_db_version], [ 383 ol_LIBS="$LIBS" 384 LIBS="$LTHREAD_LIBS $LIBS" 385 if test $ol_cv_lib_db != yes ; then 386 LIBS="$ol_cv_lib_db $LIBS" 387 fi 388 389 AC_RUN_IFELSE([AC_LANG_SOURCE([[ 390#ifdef HAVE_DB_185_H 391 choke me; 392#else 393#include <db.h> 394#endif 395#ifndef DB_VERSION_MAJOR 396# define DB_VERSION_MAJOR 1 397#endif 398#ifndef NULL 399#define NULL ((void *)0) 400#endif 401main() 402{ 403#if DB_VERSION_MAJOR > 1 404 char *version; 405 int major, minor, patch; 406 407 version = db_version( &major, &minor, &patch ); 408 409 if( major != DB_VERSION_MAJOR || 410 minor != DB_VERSION_MINOR || 411 patch != DB_VERSION_PATCH ) 412 { 413 printf("Berkeley DB version mismatch\n" 414 "\theader: %s\n\tlibrary: %s\n", 415 DB_VERSION_STRING, version); 416 return 1; 417 } 418#endif 419 420 return 0; 421}]])],[ol_cv_berkeley_db_version=yes],[ol_cv_berkeley_db_version=no],[ol_cv_berkeley_db_version=cross]) 422 423 LIBS="$ol_LIBS" 424]) 425 426 if test $ol_cv_berkeley_db_version = no ; then 427 AC_MSG_ERROR([Berkeley DB version mismatch]) 428 fi 429])dnl 430dnl 431dnl -------------------------------------------------------------------- 432dnl Check if Berkeley DB supports DB_THREAD 433AC_DEFUN([OL_BERKELEY_DB_THREAD], 434[AC_CACHE_CHECK([for Berkeley DB thread support], [ol_cv_berkeley_db_thread], [ 435 ol_LIBS="$LIBS" 436 LIBS="$LTHREAD_LIBS $LIBS" 437 if test $ol_cv_lib_db != yes ; then 438 LIBS="$ol_cv_lib_db $LIBS" 439 fi 440 441 AC_RUN_IFELSE([AC_LANG_SOURCE([[ 442#ifdef HAVE_DB_185_H 443 choke me; 444#else 445#include <db.h> 446#endif 447#ifndef NULL 448#define NULL ((void *)0) 449#endif 450main() 451{ 452 int rc; 453 u_int32_t flags = DB_CREATE | 454#ifdef DB_PRIVATE 455 DB_PRIVATE | 456#endif 457 DB_THREAD; 458 459#if DB_VERSION_MAJOR > 2 460 DB_ENV *env = NULL; 461 462 rc = db_env_create( &env, 0 ); 463 464 flags |= DB_INIT_MPOOL; 465#ifdef DB_MPOOL_PRIVATE 466 flags |= DB_MPOOL_PRIVATE; 467#endif 468 469 if( rc ) { 470 printf("BerkeleyDB: %s\n", db_strerror(rc) ); 471 return rc; 472 } 473 474#if (DB_VERSION_MAJOR > 3) || (DB_VERSION_MINOR >= 1) 475 rc = (env->open)( env, NULL, flags, 0 ); 476#else 477 rc = (env->open)( env, NULL, NULL, flags, 0 ); 478#endif 479 480 if ( rc == 0 ) { 481 rc = env->close( env, 0 ); 482 } 483 484 if( rc ) { 485 printf("BerkeleyDB: %s\n", db_strerror(rc) ); 486 return rc; 487 } 488 489#else 490 DB_ENV env; 491 memset( &env, '\0', sizeof(env) ); 492 493 rc = db_appinit( NULL, NULL, &env, flags ); 494 495 if( rc == 0 ) { 496 db_appexit( &env ); 497 } 498 499 unlink("__db_mpool.share"); 500 unlink("__db_lock.share"); 501#endif 502 503 return rc; 504}]])],[ol_cv_berkeley_db_thread=yes],[ol_cv_berkeley_db_thread=no],[ol_cv_berkeley_db_thread=cross]) 505 506 LIBS="$ol_LIBS" 507]) 508 509 if test $ol_cv_berkeley_db_thread != no ; then 510 AC_DEFINE(HAVE_BERKELEY_DB_THREAD, 1, 511 [define if Berkeley DB has DB_THREAD support]) 512 fi 513])dnl 514dnl 515dnl -------------------------------------------------------------------- 516dnl Find any DB 517AC_DEFUN([OL_BERKELEY_DB], 518[ol_cv_berkeley_db=no 519AC_CHECK_HEADERS(db.h) 520if test $ac_cv_header_db_h = yes; then 521 OL_BDB_HEADER_VERSION 522 OL_BDB_COMPAT 523 524 if test $ol_cv_bdb_compat != yes ; then 525 AC_MSG_ERROR([BerkeleyDB version incompatible with BDB/HDB backends]) 526 fi 527 528 OL_BERKELEY_DB_LINK 529 if test "$ol_cv_lib_db" != no ; then 530 ol_cv_berkeley_db=yes 531 OL_BERKELEY_DB_VERSION 532 OL_BERKELEY_DB_THREAD 533 fi 534fi 535]) 536dnl -------------------------------------------------------------------- 537dnl Check for version compatility with back-bdb 538AC_DEFUN([OL_BDB_COMPAT], 539[AC_CACHE_CHECK([if Berkeley DB version supported by BDB/HDB backends], [ol_cv_bdb_compat],[ 540 AC_EGREP_CPP(__db_version_compat,[ 541#include <db.h> 542 543 /* this check could be improved */ 544#ifndef DB_VERSION_MAJOR 545# define DB_VERSION_MAJOR 1 546#endif 547#ifndef DB_VERSION_MINOR 548# define DB_VERSION_MINOR 0 549#endif 550 551#define DB_VERSION_MM ((DB_VERSION_MAJOR<<8)|DB_VERSION_MINOR) 552 553/* require 4.4 or later */ 554#if DB_VERSION_MM >= 0x0404 555 __db_version_compat 556#endif 557 ], [ol_cv_bdb_compat=yes], [ol_cv_bdb_compat=no])]) 558]) 559 560dnl 561dnl ==================================================================== 562dnl Check POSIX Thread version 563dnl 564dnl defines ol_cv_pthread_version to 4, 5, 6, 7, 8, 10, depending on the 565dnl version of the POSIX.4a Draft that is implemented. 566dnl 10 == POSIX.4a Final == POSIX.1c-1996 for our purposes. 567dnl Existence of pthread.h should be tested separately. 568dnl 569dnl tests: 570dnl pthread_detach() was dropped in Draft 8, it is present 571dnl in every other version 572dnl PTHREAD_CREATE_UNDETACHED is only in Draft 7, it was called 573dnl PTHREAD_CREATE_JOINABLE after that 574dnl pthread_attr_create was renamed to pthread_attr_init in Draft 6. 575dnl Draft 6-10 has _init, Draft 4-5 has _create. 576dnl pthread_attr_default was dropped in Draft 6, only 4 and 5 have it 577dnl PTHREAD_MUTEX_INITIALIZER was introduced in Draft 5. It's not 578dnl interesting to us because we don't try to statically 579dnl initialize mutexes. 5-10 has it. 580dnl 581dnl Draft 9 and 10 are equivalent for our purposes. 582dnl 583AC_DEFUN([OL_POSIX_THREAD_VERSION], 584[AC_CACHE_CHECK([POSIX thread version],[ol_cv_pthread_version],[ 585 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ 586# include <pthread.h> 587 ]], [[ 588 int i = PTHREAD_CREATE_JOINABLE; 589 ]])],[ 590 AC_EGREP_HEADER(pthread_detach,pthread.h, 591 ol_cv_pthread_version=10, ol_cv_pthread_version=8)],[ 592 AC_EGREP_CPP(draft7,[ 593# include <pthread.h> 594# ifdef PTHREAD_CREATE_UNDETACHED 595 draft7 596# endif 597 ], ol_cv_pthread_version=7, [ 598 AC_EGREP_HEADER(pthread_attr_init,pthread.h, 599 ol_cv_pthread_version=6, [ 600 AC_EGREP_CPP(draft5,[ 601# include <pthread.h> 602#ifdef PTHREAD_MUTEX_INITIALIZER 603 draft5 604#endif 605 ], ol_cv_pthread_version=5, ol_cv_pthread_version=4) ]) ]) ]) 606]) 607])dnl 608dnl 609dnl -------------------------------------------------------------------- 610AC_DEFUN([OL_PTHREAD_TEST_INCLUDES], [[ 611/* pthread test headers */ 612#include <pthread.h> 613#if HAVE_PTHREADS < 7 614#include <errno.h> 615#endif 616#ifndef NULL 617#define NULL (void*)0 618#endif 619 620static void *task(p) 621 void *p; 622{ 623 return (void *) (p == NULL); 624} 625]]) 626AC_DEFUN([OL_PTHREAD_TEST_FUNCTION],[[ 627 /* pthread test function */ 628#ifndef PTHREAD_CREATE_DETACHED 629#define PTHREAD_CREATE_DETACHED 1 630#endif 631 pthread_t t; 632 int status; 633 int detach = PTHREAD_CREATE_DETACHED; 634 635#if HAVE_PTHREADS > 4 636 /* Final pthreads */ 637 pthread_attr_t attr; 638 639 status = pthread_attr_init(&attr); 640 if( status ) return status; 641 642#if HAVE_PTHREADS < 7 643 status = pthread_attr_setdetachstate(&attr, &detach); 644 if( status < 0 ) status = errno; 645#else 646 status = pthread_attr_setdetachstate(&attr, detach); 647#endif 648 if( status ) return status; 649 status = pthread_create( &t, &attr, task, NULL ); 650#if HAVE_PTHREADS < 7 651 if( status < 0 ) status = errno; 652#endif 653 if( status ) return status; 654#else 655 /* Draft 4 pthreads */ 656 status = pthread_create( &t, pthread_attr_default, task, NULL ); 657 if( status ) return errno; 658 659 /* give thread a chance to complete */ 660 /* it should remain joinable and hence detachable */ 661 sleep( 1 ); 662 663 status = pthread_detach( &t ); 664 if( status ) return errno; 665#endif 666 667#ifdef HAVE_LINUX_THREADS 668 pthread_kill_other_threads_np(); 669#endif 670 671 return 0; 672]]) 673 674AC_DEFUN([OL_PTHREAD_TEST_PROGRAM], 675AC_LANG_SOURCE([OL_PTHREAD_TEST_INCLUDES 676 677int main(argc, argv) 678 int argc; 679 char **argv; 680{ 681OL_PTHREAD_TEST_FUNCTION 682} 683])) 684dnl -------------------------------------------------------------------- 685AC_DEFUN([OL_PTHREAD_TRY], [# Pthread try link: $1 ($2) 686if test "$ol_link_threads" = no ; then 687 # try $1 688 AC_CACHE_CHECK([for pthread link with $1], [$2], [ 689 # save the flags 690 ol_LIBS="$LIBS" 691 LIBS="$1 $LIBS" 692 693 AC_RUN_IFELSE([OL_PTHREAD_TEST_PROGRAM], 694 [$2=yes], 695 [$2=no], 696 [AC_LINK_IFELSE([AC_LANG_PROGRAM(OL_PTHREAD_TEST_INCLUDES, 697 OL_PTHREAD_TEST_FUNCTION)], 698 [$2=yes], [$2=no])]) 699 700 # restore the LIBS 701 LIBS="$ol_LIBS" 702 ]) 703 704 if test $$2 = yes ; then 705 ol_link_pthreads="$1" 706 ol_link_threads=posix 707 fi 708fi 709]) 710dnl 711dnl ==================================================================== 712dnl Check GNU Pth pthread Header 713dnl 714dnl defines ol_cv_header linux_threads to 'yes' or 'no' 715dnl 'no' implies pthreads.h is not LinuxThreads or pthreads.h 716dnl doesn't exists. Existance of pthread.h should separately 717dnl checked. 718dnl 719AC_DEFUN([OL_HEADER_GNU_PTH_PTHREAD_H], [ 720 AC_CACHE_CHECK([for GNU Pth pthread.h], 721 [ol_cv_header_gnu_pth_pthread_h], 722 [AC_EGREP_CPP(__gnu_pth__, 723 [#include <pthread.h> 724#ifdef _POSIX_THREAD_IS_GNU_PTH 725 __gnu_pth__; 726#endif 727], 728 [ol_cv_header_gnu_pth_pthread_h=yes], 729 [ol_cv_header_gnu_pth_pthread_h=no]) 730 ]) 731])dnl 732dnl ==================================================================== 733dnl Check for NT Threads 734AC_DEFUN([OL_NT_THREADS], [ 735 AC_CHECK_FUNC(_beginthread) 736 737 if test $ac_cv_func__beginthread = yes ; then 738 AC_DEFINE(HAVE_NT_THREADS,1,[if you have NT Threads]) 739 ol_cv_nt_threads=yes 740 fi 741]) 742dnl ==================================================================== 743dnl Check LinuxThreads Header 744dnl 745dnl defines ol_cv_header linux_threads to 'yes' or 'no' 746dnl 'no' implies pthreads.h is not LinuxThreads or pthreads.h 747dnl doesn't exists. Existance of pthread.h should separately 748dnl checked. 749dnl 750AC_DEFUN([OL_HEADER_LINUX_THREADS], [ 751 AC_CACHE_CHECK([for LinuxThreads pthread.h], 752 [ol_cv_header_linux_threads], 753 [AC_EGREP_CPP(pthread_kill_other_threads_np, 754 [#include <pthread.h>], 755 [ol_cv_header_linux_threads=yes], 756 [ol_cv_header_linux_threads=no]) 757 ]) 758 if test $ol_cv_header_linux_threads = yes; then 759 AC_DEFINE(HAVE_LINUX_THREADS,1,[if you have LinuxThreads]) 760 fi 761])dnl 762dnl -------------------------------------------------------------------- 763dnl Check LinuxThreads Implementation 764dnl 765dnl defines ol_cv_sys_linux_threads to 'yes' or 'no' 766dnl 'no' implies pthreads implementation is not LinuxThreads. 767dnl 768AC_DEFUN([OL_SYS_LINUX_THREADS], [ 769 AC_CHECK_FUNCS(pthread_kill_other_threads_np) 770 AC_CACHE_CHECK([for LinuxThreads implementation], 771 [ol_cv_sys_linux_threads], 772 [ol_cv_sys_linux_threads=$ac_cv_func_pthread_kill_other_threads_np]) 773])dnl 774dnl 775dnl -------------------------------------------------------------------- 776dnl Check LinuxThreads consistency 777AC_DEFUN([OL_LINUX_THREADS], [ 778 AC_REQUIRE([OL_HEADER_LINUX_THREADS]) 779 AC_REQUIRE([OL_SYS_LINUX_THREADS]) 780 AC_CACHE_CHECK([for LinuxThreads consistency], [ol_cv_linux_threads], [ 781 if test $ol_cv_header_linux_threads = yes && 782 test $ol_cv_sys_linux_threads = yes; then 783 ol_cv_linux_threads=yes 784 elif test $ol_cv_header_linux_threads = no && 785 test $ol_cv_sys_linux_threads = no; then 786 ol_cv_linux_threads=no 787 else 788 ol_cv_linux_threads=error 789 fi 790 ]) 791])dnl 792dnl 793dnl ==================================================================== 794dnl Check for POSIX Regex 795AC_DEFUN([OL_POSIX_REGEX], [ 796AC_CACHE_CHECK([for compatible POSIX regex],ol_cv_c_posix_regex,[ 797 AC_RUN_IFELSE([AC_LANG_SOURCE([[ 798#include <sys/types.h> 799#include <regex.h> 800static char *pattern, *string; 801main() 802{ 803 int rc; 804 regex_t re; 805 806 pattern = "^A"; 807 808 if(regcomp(&re, pattern, 0)) { 809 return -1; 810 } 811 812 string = "ALL MATCH"; 813 814 rc = regexec(&re, string, 0, (void*)0, 0); 815 816 regfree(&re); 817 818 return rc; 819}]])],[ol_cv_c_posix_regex=yes],[ol_cv_c_posix_regex=no],[ol_cv_c_posix_regex=cross])]) 820]) 821dnl 822dnl ==================================================================== 823dnl Check if toupper() requires islower() to be called first 824AC_DEFUN([OL_C_UPPER_LOWER], 825[AC_CACHE_CHECK([if toupper() requires islower()],ol_cv_c_upper_lower,[ 826 AC_RUN_IFELSE([AC_LANG_SOURCE([[ 827#include <ctype.h> 828main() 829{ 830 if ('C' == toupper('C')) 831 exit(0); 832 else 833 exit(1); 834}]])],[ol_cv_c_upper_lower=no],[ol_cv_c_upper_lower=yes],[ol_cv_c_upper_lower=safe])]) 835if test $ol_cv_c_upper_lower != no ; then 836 AC_DEFINE(C_UPPER_LOWER,1, [define if toupper() requires islower()]) 837fi 838]) 839dnl 840dnl ==================================================================== 841dnl Error string checks 842dnl 843dnl Check for declaration of sys_errlist in one of stdio.h and errno.h. 844dnl Declaration of sys_errlist on BSD4.4 interferes with our declaration. 845dnl Reported by Keith Bostic. 846AC_DEFUN([OL_SYS_ERRLIST], 847[AC_CACHE_CHECK([declaration of sys_errlist],ol_cv_dcl_sys_errlist,[ 848 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ 849#include <stdio.h> 850#include <sys/types.h> 851#include <errno.h> 852#ifdef _WIN32 853#include <stdlib.h> 854#endif ]], [[char *c = (char *) *sys_errlist]])],[ol_cv_dcl_sys_errlist=yes 855 ol_cv_have_sys_errlist=yes],[ol_cv_dcl_sys_errlist=no])]) 856# 857# It's possible (for near-UNIX clones) that sys_errlist doesn't exist 858if test $ol_cv_dcl_sys_errlist = no ; then 859 AC_DEFINE(DECL_SYS_ERRLIST,1, 860 [define if sys_errlist is not declared in stdio.h or errno.h]) 861 862 AC_CACHE_CHECK([existence of sys_errlist],ol_cv_have_sys_errlist,[ 863 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <errno.h>]], [[char *c = (char *) *sys_errlist]])],[ol_cv_have_sys_errlist=yes],[ol_cv_have_sys_errlist=no])]) 864fi 865if test $ol_cv_have_sys_errlist = yes ; then 866 AC_DEFINE(HAVE_SYS_ERRLIST,1, 867 [define if you actually have sys_errlist in your libs]) 868fi 869])dnl 870AC_DEFUN([OL_NONPOSIX_STRERROR_R], 871[AC_CACHE_CHECK([non-posix strerror_r],ol_cv_nonposix_strerror_r,[ 872 AC_EGREP_CPP(strerror_r,[#include <string.h>], 873 ol_decl_strerror_r=yes, ol_decl_strerror_r=no)dnl 874 875 if test $ol_decl_strerror_r = yes ; then 876 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <string.h>]], [[ /* from autoconf 2.59 */ 877 char buf[100]; 878 char x = *strerror_r (0, buf, sizeof buf); 879 char *p = strerror_r (0, buf, sizeof buf); 880 ]])],[ol_cv_nonposix_strerror_r=yes],[ol_cv_nonposix_strerror_r=no]) 881 else 882 AC_RUN_IFELSE([AC_LANG_SOURCE([[ 883 main() { 884 char buf[100]; 885 buf[0] = 0; 886 strerror_r( 1, buf, sizeof buf ); 887 exit( buf[0] == 0 ); 888 } 889 ]])],[ol_cv_nonposix_strerror_r=yes],[ol_cv_nonposix_strerror=no],[ol_cv_nonposix_strerror=no]) 890 fi 891 ]) 892if test $ol_cv_nonposix_strerror_r = yes ; then 893 AC_DEFINE(HAVE_NONPOSIX_STRERROR_R,1, 894 [define if strerror_r returns char* instead of int]) 895fi 896])dnl 897dnl 898AC_DEFUN([OL_STRERROR], 899[OL_SYS_ERRLIST dnl TEMPORARY 900AC_CHECK_FUNCS(strerror strerror_r) 901ol_cv_func_strerror_r=no 902if test "${ac_cv_func_strerror_r}" = yes ; then 903 OL_NONPOSIX_STRERROR_R 904elif test "${ac_cv_func_strerror}" = no ; then 905 OL_SYS_ERRLIST 906fi 907])dnl 908dnl ==================================================================== 909dnl Early MIPS compilers (used in Ultrix 4.2) don't like 910dnl "int x; int *volatile a = &x; *a = 0;" 911dnl -- borrowed from PDKSH 912AC_DEFUN([OL_C_VOLATILE], 913 [AC_CACHE_CHECK(if compiler understands volatile, ol_cv_c_volatile, 914 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[int x, y, z;]], [[volatile int a; int * volatile b = x ? &y : &z; 915 /* Older MIPS compilers (eg., in Ultrix 4.2) don't like *b = 0 */ 916 *b = 0;]])],[ol_cv_c_volatile=yes],[ol_cv_c_volatile=no])]) 917 if test $ol_cv_c_volatile = yes; then 918 : 919 else 920 AC_DEFINE(volatile,,[define as empty if volatile is not supported]) 921 fi 922 ])dnl 923dnl 924dnl ==================================================================== 925dnl Look for fetch(3) 926AC_DEFUN([OL_LIB_FETCH], 927[ol_LIBS=$LIBS 928LIBS="-lfetch -lcom_err $LIBS" 929AC_CACHE_CHECK([fetch(3) library],ol_cv_lib_fetch,[ 930 AC_LINK_IFELSE([AC_LANG_PROGRAM([[ 931#ifdef HAVE_SYS_PARAM_H 932#include <sys/param.h> 933#endif 934#include <stdio.h> 935#include <fetch.h>]], [[struct url *u = fetchParseURL("file:///"); ]])],[ol_cv_lib_fetch=yes],[ol_cv_lib_fetch=no])]) 936LIBS=$ol_LIBS 937if test $ol_cv_lib_fetch != no ; then 938 ol_link_fetch="-lfetch -lcom_err" 939 AC_DEFINE(HAVE_FETCH,1, 940 [define if you actually have FreeBSD fetch(3)]) 941fi 942])dnl 943dnl 944dnl ==================================================================== 945dnl Define inet_aton is available 946AC_DEFUN([OL_FUNC_INET_ATON], 947 [AC_CACHE_CHECK([for inet_aton()], ol_cv_func_inet_aton, 948 [AC_LINK_IFELSE([AC_LANG_PROGRAM([[ 949#ifdef HAVE_SYS_TYPES_H 950# include <sys/types.h> 951#endif 952#ifdef HAVE_SYS_SOCKET_H 953# include <sys/socket.h> 954# ifdef HAVE_SYS_SELECT_H 955# include <sys/select.h> 956# endif 957# include <netinet/in.h> 958# ifdef HAVE_ARPA_INET_H 959# include <arpa/inet.h> 960# endif 961#endif 962]], [[struct in_addr in; 963int rc = inet_aton( "255.255.255.255", &in );]])],[ol_cv_func_inet_aton=yes],[ol_cv_func_inet_aton=no])]) 964 if test $ol_cv_func_inet_aton != no; then 965 AC_DEFINE(HAVE_INET_ATON, 1, 966 [define to you inet_aton(3) is available]) 967 fi 968 ])dnl 969dnl 970dnl ==================================================================== 971dnl check no of arguments for ctime_r 972AC_DEFUN([OL_FUNC_CTIME_R_NARGS], 973 [AC_CACHE_CHECK(number of arguments of ctime_r, ol_cv_func_ctime_r_nargs, 974 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <time.h>]], [[time_t ti; char *buffer; ctime_r(&ti,buffer,32);]])],[ol_cv_func_ctime_r_nargs3=yes],[ol_cv_func_ctime_r_nargs3=no]) 975 976 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <time.h>]], [[time_t ti; char *buffer; ctime_r(&ti,buffer);]])],[ol_cv_func_ctime_r_nargs2=yes],[ol_cv_func_ctime_r_nargs2=no]) 977 978 if test $ol_cv_func_ctime_r_nargs3 = yes && 979 test $ol_cv_func_ctime_r_nargs2 = no ; then 980 981 ol_cv_func_ctime_r_nargs=3 982 983 elif test $ol_cv_func_ctime_r_nargs3 = no && 984 test $ol_cv_func_ctime_r_nargs2 = yes ; then 985 986 ol_cv_func_ctime_r_nargs=2 987 988 else 989 ol_cv_func_ctime_r_nargs=0 990 fi 991 ]) 992 993 if test $ol_cv_func_ctime_r_nargs -gt 1 ; then 994 AC_DEFINE_UNQUOTED(CTIME_R_NARGS, $ol_cv_func_ctime_r_nargs, 995 [set to the number of arguments ctime_r() expects]) 996 fi 997])dnl 998dnl 999dnl -------------------------------------------------------------------- 1000dnl check return type of ctime_r() 1001AC_DEFUN([OL_FUNC_CTIME_R_TYPE], 1002 [AC_CACHE_CHECK(return type of ctime_r, ol_cv_func_ctime_r_type, 1003 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <time.h>]], [[extern int (ctime_r)();]])],[ol_cv_func_ctime_r_type="int"],[ol_cv_func_ctime_r_type="charp"]) 1004 ]) 1005 if test $ol_cv_func_ctime_r_type = "int" ; then 1006 AC_DEFINE(CTIME_R_RETURNS_INT,1, [define if ctime_r() returns int]) 1007 fi 1008])dnl 1009dnl ==================================================================== 1010dnl check no of arguments for gethostbyname_r 1011AC_DEFUN([OL_FUNC_GETHOSTBYNAME_R_NARGS], 1012 [AC_CACHE_CHECK(number of arguments of gethostbyname_r, 1013 ol_cv_func_gethostbyname_r_nargs, 1014 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h> 1015#include <sys/socket.h> 1016#include <netinet/in.h> 1017#include <netdb.h> 1018#define BUFSIZE (sizeof(struct hostent)+10)]], [[struct hostent hent; char buffer[BUFSIZE]; 1019 int bufsize=BUFSIZE;int h_errno; 1020 (void)gethostbyname_r("segovia.cs.purdue.edu", &hent, 1021 buffer, bufsize, &h_errno);]])],[ol_cv_func_gethostbyname_r_nargs5=yes],[ol_cv_func_gethostbyname_r_nargs5=no]) 1022 1023 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h> 1024#include <sys/socket.h> 1025#include <netinet/in.h> 1026#include <netdb.h> 1027#define BUFSIZE (sizeof(struct hostent)+10)]], [[struct hostent hent;struct hostent *rhent; 1028 char buffer[BUFSIZE]; 1029 int bufsize=BUFSIZE;int h_errno; 1030 (void)gethostbyname_r("localhost", &hent, buffer, bufsize, 1031 &rhent, &h_errno);]])],[ol_cv_func_gethostbyname_r_nargs6=yes],[ol_cv_func_gethostbyname_r_nargs6=no]) 1032 1033 if test $ol_cv_func_gethostbyname_r_nargs5 = yes && 1034 test $ol_cv_func_gethostbyname_r_nargs6 = no ; then 1035 1036 ol_cv_func_gethostbyname_r_nargs=5 1037 1038 elif test $ol_cv_func_gethostbyname_r_nargs5 = no && 1039 test $ol_cv_func_gethostbyname_r_nargs6 = yes ; then 1040 1041 ol_cv_func_gethostbyname_r_nargs=6 1042 1043 else 1044 ol_cv_func_gethostbyname_r_nargs=0 1045 fi 1046 ]) 1047 if test $ol_cv_func_gethostbyname_r_nargs -gt 1 ; then 1048 AC_DEFINE_UNQUOTED(GETHOSTBYNAME_R_NARGS, 1049 $ol_cv_func_gethostbyname_r_nargs, 1050 [set to the number of arguments gethostbyname_r() expects]) 1051 fi 1052])dnl 1053dnl 1054dnl check no of arguments for gethostbyaddr_r 1055AC_DEFUN([OL_FUNC_GETHOSTBYADDR_R_NARGS], 1056 [AC_CACHE_CHECK(number of arguments of gethostbyaddr_r, 1057 [ol_cv_func_gethostbyaddr_r_nargs], 1058 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h> 1059#include <sys/socket.h> 1060#include <netinet/in.h> 1061#include <netdb.h> 1062#define BUFSIZE (sizeof(struct hostent)+10)]], [[struct hostent hent; char buffer[BUFSIZE]; 1063 struct in_addr add; 1064 size_t alen=sizeof(struct in_addr); 1065 int bufsize=BUFSIZE;int h_errno; 1066 (void)gethostbyaddr_r( (void *)&(add.s_addr), 1067 alen, AF_INET, &hent, buffer, bufsize, &h_errno);]])],[ol_cv_func_gethostbyaddr_r_nargs7=yes],[ol_cv_func_gethostbyaddr_r_nargs7=no]) 1068 1069 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h> 1070#include <sys/socket.h> 1071#include <netinet/in.h> 1072#include <netdb.h> 1073#define BUFSIZE (sizeof(struct hostent)+10)]], [[struct hostent hent; 1074 struct hostent *rhent; char buffer[BUFSIZE]; 1075 struct in_addr add; 1076 size_t alen=sizeof(struct in_addr); 1077 int bufsize=BUFSIZE;int h_errno; 1078 (void)gethostbyaddr_r( (void *)&(add.s_addr), 1079 alen, AF_INET, &hent, buffer, bufsize, 1080 &rhent, &h_errno);]])],[ol_cv_func_gethostbyaddr_r_nargs8=yes],[ol_cv_func_gethostbyaddr_r_nargs8=no]) 1081 1082 if test $ol_cv_func_gethostbyaddr_r_nargs7 = yes && 1083 test $ol_cv_func_gethostbyaddr_r_nargs8 = no ; then 1084 1085 ol_cv_func_gethostbyaddr_r_nargs=7 1086 1087 elif test $ol_cv_func_gethostbyaddr_r_nargs7 = no && 1088 test $ol_cv_func_gethostbyaddr_r_nargs8 = yes ; then 1089 1090 ol_cv_func_gethostbyaddr_r_nargs=8 1091 1092 else 1093 ol_cv_func_gethostbyaddr_r_nargs=0 1094 fi 1095 ]) 1096 if test $ol_cv_func_gethostbyaddr_r_nargs -gt 1 ; then 1097 AC_DEFINE_UNQUOTED(GETHOSTBYADDR_R_NARGS, 1098 $ol_cv_func_gethostbyaddr_r_nargs, 1099 [set to the number of arguments gethostbyaddr_r() expects]) 1100 fi 1101])dnl 1102dnl 1103dnl -------------------------------------------------------------------- 1104dnl Check for Cyrus SASL version compatility 1105AC_DEFUN([OL_SASL_COMPAT], 1106[AC_CACHE_CHECK([Cyrus SASL library version], [ol_cv_sasl_compat],[ 1107 AC_EGREP_CPP(__sasl_compat,[ 1108#ifdef HAVE_SASL_SASL_H 1109#include <sasl/sasl.h> 1110#else 1111#include <sasl.h> 1112#endif 1113 1114/* Require 2.1.15+ */ 1115#if SASL_VERSION_MAJOR == 2 && SASL_VERSION_MINOR > 1 1116 char *__sasl_compat = "2.2+ or better okay (we guess)"; 1117#elif SASL_VERSION_MAJOR == 2 && SASL_VERSION_MINOR == 1 \ 1118 && SASL_VERSION_STEP >=15 1119 char *__sasl_compat = "2.1.15+ or better okay"; 1120#endif 1121 ], [ol_cv_sasl_compat=yes], [ol_cv_sasl_compat=no])]) 1122]) 1123dnl ==================================================================== 1124dnl check for SSL compatibility 1125AC_DEFUN([OL_SSL_COMPAT], 1126[AC_CACHE_CHECK([OpenSSL library version (CRL checking capability)], 1127 [ol_cv_ssl_crl_compat],[ 1128 AC_EGREP_CPP(__ssl_compat,[ 1129#ifdef HAVE_OPENSSL_SSL_H 1130#include <openssl/ssl.h> 1131#endif 1132 1133/* Require 0.9.7d+ */ 1134#if OPENSSL_VERSION_NUMBER >= 0x0090704fL 1135 char *__ssl_compat = "0.9.7d"; 1136#endif 1137 ], [ol_cv_ssl_crl_compat=yes], [ol_cv_ssl_crl_compat=no])]) 1138]) 1139