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