1251875Speterdnl 2251875Speterdnl Autoconf configuration file for APR 3251875Speterdnl 4251875Speterdnl Process this file with autoconf to produce a configure script. 5251875Speterdnl Use ./buildconf to prepare build files and run autoconf for APR. 6251875Speter 7251875SpeterAC_PREREQ(2.59) 8251875Speter 9251875SpeterAC_INIT(build/apr_common.m4) 10251875SpeterAC_CONFIG_HEADER(include/arch/unix/apr_private.h) 11251875SpeterAC_CONFIG_AUX_DIR(build) 12251875SpeterAC_CONFIG_MACRO_DIR(build) 13251875Speter 14251875Speterdnl 15251875Speterdnl Include our own M4 macros along with those for libtool 16251875Speterdnl 17251875Spetersinclude(build/apr_common.m4) 18251875Spetersinclude(build/apr_network.m4) 19251875Spetersinclude(build/apr_threads.m4) 20251875Spetersinclude(build/apr_win32.m4) 21251875Spetersinclude(build/apr_hints.m4) 22251875Spetersinclude(build/libtool.m4) 23251875Spetersinclude(build/ltsugar.m4) 24251875Spetersinclude(build/argz.m4) 25251875Spetersinclude(build/ltoptions.m4) 26251875Spetersinclude(build/ltversion.m4) 27251875Spetersinclude(build/lt~obsolete.m4) 28251875Speter 29251875Speterdnl Hard-coded top of apr_private.h: 30251875SpeterAH_TOP([ 31251875Speter#ifndef APR_PRIVATE_H 32251875Speter#define APR_PRIVATE_H 33251875Speter]) 34251875Speter 35251875Speterdnl Hard-coded inclusion at the tail end of apr_private.h: 36251875SpeterAH_BOTTOM([ 37251875Speter/* switch this on if we have a BeOS version below BONE */ 38251875Speter#if BEOS && !HAVE_BONE_VERSION 39251875Speter#define BEOS_R5 1 40251875Speter#else 41251875Speter#define BEOS_BONE 1 42251875Speter#endif 43251875Speter 44251875Speter/* 45251875Speter * Darwin 10's default compiler (gcc42) builds for both 64 and 46251875Speter * 32 bit architectures unless specifically told not to. 47251875Speter * In those cases, we need to override types depending on how 48251875Speter * we're being built at compile time. 49251875Speter * NOTE: This is an ugly work-around for Darwin's 50251875Speter * concept of universal binaries, a single package 51251875Speter * (executable, lib, etc...) which contains both 32 52251875Speter * and 64 bit versions. The issue is that if APR is 53251875Speter * built universally, if something else is compiled 54251875Speter * against it, some bit sizes will depend on whether 55251875Speter * it is 32 or 64 bit. This is determined by the __LP64__ 56251875Speter * flag. Since we need to support both, we have to 57251875Speter * handle OS X unqiuely. 58251875Speter */ 59251875Speter#ifdef DARWIN_10 60251875Speter 61251875Speter#undef APR_OFF_T_STRFN 62251875Speter#undef APR_INT64_STRFN 63251875Speter#undef SIZEOF_LONG 64251875Speter#undef SIZEOF_SIZE_T 65251875Speter#undef SIZEOF_SSIZE_T 66251875Speter#undef SIZEOF_VOIDP 67251875Speter#undef SIZEOF_STRUCT_IOVEC 68251875Speter 69251875Speter#ifdef __LP64__ 70251875Speter #define APR_INT64_STRFN strtol 71251875Speter #define SIZEOF_LONG 8 72251875Speter #define SIZEOF_SIZE_T 8 73251875Speter #define SIZEOF_SSIZE_T 8 74251875Speter #define SIZEOF_VOIDP 8 75251875Speter #define SIZEOF_STRUCT_IOVEC 16 76251875Speter#else 77251875Speter #define APR_INT64_STRFN strtoll 78251875Speter #define SIZEOF_LONG 4 79251875Speter #define SIZEOF_SIZE_T 4 80251875Speter #define SIZEOF_SSIZE_T 4 81251875Speter #define SIZEOF_VOIDP 4 82251875Speter #define SIZEOF_STRUCT_IOVEC 8 83251875Speter#endif 84251875Speter 85251875Speter#undef APR_OFF_T_STRFN 86251875Speter#define APR_OFF_T_STRFN APR_INT64_STRFN 87251875Speter 88251875Speter 89251875Speter#undef SETPGRP_VOID 90251875Speter#ifdef __DARWIN_UNIX03 91251875Speter #define SETPGRP_VOID 1 92251875Speter#else 93251875Speter/* #undef SETPGRP_VOID */ 94251875Speter#endif 95251875Speter 96251875Speter#endif /* DARWIN_10 */ 97251875Speter 98251875Speter/* 99251875Speter * Include common private declarations. 100251875Speter */ 101251875Speter#include "../apr_private_common.h" 102251875Speter#endif /* APR_PRIVATE_H */ 103251875Speter]) 104251875Speter 105251875Speterdnl Save user-defined environment settings for later restoration 106251875Speterdnl 107251875SpeterAPR_SAVE_THE_ENVIRONMENT(CPPFLAGS) 108251875SpeterAPR_SAVE_THE_ENVIRONMENT(CFLAGS) 109251875SpeterAPR_SAVE_THE_ENVIRONMENT(LDFLAGS) 110251875SpeterAPR_SAVE_THE_ENVIRONMENT(LIBS) 111251875SpeterAPR_SAVE_THE_ENVIRONMENT(INCLUDES) 112251875Speter 113251875Speterdnl Generate ./config.nice for reproducing runs of configure 114251875Speterdnl 115251875SpeterAPR_CONFIG_NICE(config.nice) 116251875Speter 117251875SpeterAC_CANONICAL_SYSTEM 118251875Speterecho "Configuring APR library" 119251875Speterecho "Platform: $host" 120251875Speter 121251875Speterdnl Some initial steps for configuration. We setup the default directory 122251875Speterdnl and which files are to be configured. 123251875Speter 124251875Speterdnl Setup the directory macros now 125251875Speter 126251875Speter# Absolute source/build directory 127251875Speterapr_srcdir=`(cd $srcdir && pwd)` 128251875Speterapr_builddir=`pwd` 129251875SpeterAC_SUBST(apr_srcdir) 130251875SpeterAC_SUBST(apr_builddir) 131251875Speter 132251875Speterif test "$apr_builddir" != "$apr_srcdir"; then 133251875Speter USE_VPATH=1 134251875Speter APR_CONFIG_LOCATION=build 135251875Speterelse 136251875Speter APR_CONFIG_LOCATION=source 137251875Speterfi 138251875Speter 139251875SpeterAC_SUBST(APR_CONFIG_LOCATION) 140251875Speter 141251875Speter# Libtool might need this symbol -- it must point to the location of 142251875Speter# the generated libtool script (not necessarily the "top" build dir). 143251875Speter# 144251875Spetertop_builddir="$apr_builddir" 145251875SpeterAC_SUBST(top_builddir) 146251875Speter 147251875Speter# Directory containing apr build macros, helpers, and make rules 148251875Speter# NOTE: make rules (apr_rules.mk) will be in the builddir for vpath 149251875Speter# 150251875Speterapr_buildout=$apr_builddir/build 151251875Speterapr_builders=$apr_srcdir/build 152251875SpeterAC_SUBST(apr_builders) 153251875Speter 154251875SpeterMKDIR=$apr_builders/mkdir.sh 155251875Speter 156251875Speterdnl Initialize mkdir -p functionality. 157251875SpeterAPR_MKDIR_P_CHECK($apr_builders/mkdir.sh) 158251875Speter 159251875Speter# get our version information 160251875Speterget_version="$apr_builders/get-version.sh" 161251875Speterversion_hdr="$apr_srcdir/include/apr_version.h" 162251875SpeterAPR_MAJOR_VERSION="`$get_version major $version_hdr APR`" 163251875SpeterAPR_DOTTED_VERSION="`$get_version all $version_hdr APR`" 164251875Speter 165251875SpeterAC_SUBST(APR_DOTTED_VERSION) 166251875SpeterAC_SUBST(APR_MAJOR_VERSION) 167251875Speter 168251875Speterecho "APR Version: ${APR_DOTTED_VERSION}" 169251875Speter 170251875Speterdnl Enable the layout handling code, then reparse the prefix-style 171251875Speterdnl arguments due to autoconf being a PITA. 172251875SpeterAPR_ENABLE_LAYOUT(apr) 173251875SpeterAPR_PARSE_ARGUMENTS 174251875Speter 175251875Speterdnl Set optional CC hints here in case autoconf makes an inappropriate choice. 176251875Speterdnl This allows us to suggest what the compiler should be, but still 177251875Speterdnl allows the user to override CC externally. 178251875SpeterAPR_CC_HINTS 179251875Speter 180251875Speterdnl Do the various CC checks *before* preloading values. The preload code 181251875Speterdnl may need to use compiler characteristics to make decisions. This macro 182251875Speterdnl can only be used once within a configure script, so this prevents a 183251875Speterdnl preload section from invoking the macro to get compiler info. 184251875SpeterAC_PROG_CC 185251875Speter 186251875Speterdnl AC_PROG_SED is only avaliable in recent autoconf versions. 187251875Speterdnl Use AC_CHECK_PROG instead if AC_PROG_SED is not present. 188251875Speterifdef([AC_PROG_SED], 189251875Speter [AC_PROG_SED], 190251875Speter [AC_CHECK_PROG(SED, sed, sed)]) 191251875Speter 192251875Speterdnl Preload 193251875SpeterAPR_PRELOAD 194251875Speter 195251875Speterdnl These added to allow default directories to be used... 196251875SpeterDEFAULT_OSDIR="unix" 197251875Speterecho "(Default will be ${DEFAULT_OSDIR})" 198251875Speter 199251875Speterapr_modules="file_io network_io threadproc misc locks time mmap shmem user memory atomic poll support random" 200251875Speter 201251875Speterdnl Checks for programs. 202251875SpeterAC_PROG_MAKE_SET 203251875SpeterAC_PROG_CPP 204251875SpeterAC_PROG_AWK 205251875SpeterAC_PROG_LN_S 206251875SpeterAC_PROG_RANLIB 207251875SpeterAC_PROG_INSTALL 208251875SpeterAC_CHECK_PROG(RM, rm, rm) 209251875SpeterAC_CHECK_PROG(AS, as, as) 210251875SpeterAC_CHECK_PROG(ASCPP, cpp, cpp) 211251875SpeterAC_CHECK_TOOL(AR, ar, ar) 212251875Speter 213251875Speterdnl Various OS checks that apparently set required flags 214251875Speterifdef([AC_USE_SYSTEM_EXTENSIONS], [ 215251875SpeterAC_USE_SYSTEM_EXTENSIONS 216251875Speter], [ 217251875SpeterAC_AIX 218251875SpeterAC_MINIX 219251875Speter]) 220251875Speter 221251875SpeterAC_ISC_POSIX 222251875SpeterAPR_EBCDIC 223251875Speter 224251875Speterdnl this is our library name 225251875SpeterAPR_LIBNAME="apr${libsuffix}" 226251875SpeterAC_SUBST(APR_LIBNAME) 227251875Speter 228251875Speterdnl prep libtool 229251875Speterdnl 230251875Speterecho "performing libtool configuration..." 231251875Speter 232251875SpeterAC_ARG_ENABLE(experimental-libtool,[ --enable-experimental-libtool Use experimental custom libtool], 233251875Speter [experimental_libtool=$enableval],[experimental_libtool=no]) 234251875Speter 235251875Speterdnl Workarounds for busted Libtool 2.x when we don't call AC_PROG_LIBTOOL 236251875Speterif test "x$Xsed" = "x"; then 237251875Speter Xsed="$SED -e 1s/^X//" 238251875Speterfi 239251875Speter 240251875Spetercase $host in 241251875Speter*-os2*) 242251875Speter # Use a custom-made libtool replacement 243251875Speter echo "using aplibtool" 244251875Speter LIBTOOL="$srcdir/build/aplibtool" 245251875Speter gcc $CFLAGS $CPPFLAGS -o $LIBTOOL.exe $LIBTOOL.c 246251875Speter ;; 247251875Speter*) 248251875Speter if test "x$LTFLAGS" = "x"; then 249251875Speter LTFLAGS='--silent' 250251875Speter fi 251251875Speter if test "$experimental_libtool" = "yes"; then 252251875Speter # Use a custom-made libtool replacement 253251875Speter echo "using jlibtool" 254251875Speter LIBTOOL="$apr_builddir/libtool" 255251875Speter LIBTOOL_SRC="$apr_srcdir/build/jlibtool.c" 256251875Speter $CC $CFLAGS $CPPFLAGS -o $LIBTOOL $LIBTOOL_SRC 257251875Speter eval `$apr_builddir/libtool --config | grep "^shlibpath_var=[[A-Z_]]*$"` 258251875Speter if test "x$shlibpath_var" = "x"; then 259251875Speter shlibpath_var=REPLACE_WITH_YOUR_SHLIBPATH_VAR 260251875Speter fi 261251875Speter else 262251875Speter dnl libtoolize requires that the following not be indented 263251875Speter dnl should become LT_INIT(win32-dll) 264251875SpeterAC_LIBTOOL_WIN32_DLL 265251875SpeterAC_PROG_LIBTOOL 266251875Speter # get libtool's setting of shlibpath_var 267251875Speter eval `grep "^shlibpath_var=[[A-Z_]]*$" $apr_builddir/libtool` 268251875Speter if test "x$shlibpath_var" = "x"; then 269251875Speter shlibpath_var=REPLACE_WITH_YOUR_SHLIBPATH_VAR 270251875Speter fi 271251875Speter fi 272251875Speter ;; 273251875Speteresac 274251875Speter 275251875SpeterAC_ARG_WITH(installbuilddir, [ --with-installbuilddir=DIR location to store APR build files (defaults to '${datadir}/build')], 276251875Speter [ installbuilddir=$withval ], [ installbuilddir="${datadir}/build-${APR_MAJOR_VERSION}" ] ) 277251875SpeterAC_SUBST(installbuilddir) 278251875Speter 279251875SpeterAC_ARG_WITH(libtool, [ --without-libtool avoid using libtool to link the library], 280251875Speter [ use_libtool=$withval ], [ use_libtool="yes" ] ) 281251875Speter 282251875Speterif test "x$use_libtool" = "xyes"; then 283251875Speter lt_compile='$(LIBTOOL) $(LTFLAGS) --mode=compile $(COMPILE) -o $@ -c $< && touch $@' 284251875Speter LT_VERSION="-version-info `$get_version libtool $version_hdr APR`" 285251875Speter link="\$(LIBTOOL) \$(LTFLAGS) --mode=link \$(LT_LDFLAGS) \$(COMPILE) \$(LT_VERSION) \$(ALL_LDFLAGS) -o \$@" 286251875Speter so_ext='lo' 287251875Speter lib_target='-rpath $(libdir) $(OBJECTS)' 288251875Speter export_lib_target='-rpath \$(libdir) \$(OBJECTS)' 289251875Speterelse 290251875Speter lt_compile='$(COMPILE) -o $@ -c $<' 291251875Speter link='$(AR) cr $(TARGET_LIB) $(OBJECTS); $(RANLIB) $(TARGET_LIB)' 292251875Speter so_ext='o' 293251875Speter lib_target='' 294251875Speter export_lib_target='' 295251875Speterfi 296251875Speter 297251875Spetercase $host in 298251875Speter *-solaris2*) 299251875Speter apr_platform_runtime_link_flag="-R" 300251875Speter ;; 301251875Speter *) 302251875Speter ;; 303251875Speteresac 304251875Speter 305251875SpeterAC_SUBST(lt_compile) 306251875SpeterAC_SUBST(link) 307251875SpeterAC_SUBST(so_ext) 308251875SpeterAC_SUBST(lib_target) 309251875SpeterAC_SUBST(export_lib_target) 310251875SpeterAC_SUBST(shlibpath_var) 311251875SpeterAC_SUBST(LTFLAGS) 312251875SpeterAC_SUBST(LT_LDFLAGS) 313251875SpeterAC_SUBST(LT_VERSION) 314251875Speter 315251875Speterdnl ----------------------------- Checks for compiler flags 316251875Speternl=' 317251875Speter' 318251875Speterecho "${nl}Check for compiler flags..." 319251875Speter 320251875Speterdnl AC_PROG_CC sets -g in CFLAGS (and -O2 for gcc) by default. 321251875Speterdnl On OS/390 this causes the compiler to insert extra debugger 322251875Speterdnl hook instructions. That's fine for debug/maintainer builds, not fine 323251875Speterdnl otherwise. 324251875Speter 325251875Spetercase $host in 326251875Speter *os390) 327251875Speter if test "$ac_test_CFLAGS" != set; then 328251875Speter APR_REMOVEFROM(CFLAGS,-g) 329251875Speter fi 330251875Speter ;; 331251875Speteresac 332251875Speter 333251875SpeterAC_ARG_ENABLE(debug,[ --enable-debug Turn on debugging and compile time warnings], 334251875Speter [APR_ADDTO(CFLAGS,-g) 335251875Speter if test "$GCC" = "yes"; then 336251875Speter APR_ADDTO(CFLAGS,-Wall) 337251875Speter elif test "$AIX_XLC" = "yes"; then 338251875Speter APR_ADDTO(CFLAGS,-qfullpath) 339251875Speter fi 340251875Speter])dnl 341251875Speter 342251875SpeterAC_ARG_ENABLE(maintainer-mode,[ --enable-maintainer-mode Turn on debugging and compile time warnings], 343251875Speter [APR_ADDTO(CFLAGS,-g) 344251875Speter if test "$GCC" = "yes"; then 345251875Speter APR_ADDTO(CFLAGS,[-Wall -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations]) 346251875Speter elif test "$AIX_XLC" = "yes"; then 347251875Speter APR_ADDTO(CFLAGS,-qfullpath -qinitauto=FE -qcheck=all -qinfo=pro) 348251875Speter fi 349251875Speter])dnl 350251875Speter 351251875SpeterAC_ARG_ENABLE(profile,[ --enable-profile Turn on profiling for the build (GCC)], 352251875Speter if test "$GCC" = "yes"; then 353251875Speter APR_ADDTO(CFLAGS, -pg) 354251875Speter APR_REMOVEFROM(CFLAGS, -g) 355251875Speter if test "$host" = "i586-pc-beos"; then 356251875Speter APR_REMOVEFROM(CFLAGS, -O2) 357251875Speter APR_ADDTO(CFLAGS, -O1) 358251875Speter APR_ADDTO(LDFLAGS, -p) 359251875Speter fi 360251875Speter fi 361251875Speter)dnl 362251875Speter 363251875SpeterAC_ARG_ENABLE(pool-debug, 364251875Speter [ --enable-pool-debug[[=yes|no|verbose|verbose-alloc|lifetime|owner|all]] Turn on pools debugging], 365251875Speter [ if test -z "$enableval"; then 366251875Speter APR_ADDTO(CPPFLAGS, -DAPR_POOL_DEBUG=1) 367251875Speter elif test ! "$enableval" = "no"; then 368251875Speter apr_pool_debug=1 369251875Speter 370251875Speter for i in $enableval 371251875Speter do 372251875Speter flag=0 373251875Speter 374251875Speter case $i in 375251875Speter yes) 376251875Speter flag=1 377251875Speter ;; 378251875Speter verbose) 379251875Speter flag=2 380251875Speter ;; 381251875Speter lifetime) 382251875Speter flag=4 383251875Speter ;; 384251875Speter owner) 385251875Speter flag=8 386251875Speter ;; 387251875Speter verbose-alloc) 388251875Speter flag=16 389251875Speter ;; 390251875Speter all) 391251875Speter apr_pool_debug=31 392251875Speter ;; 393251875Speter *) 394251875Speter ;; 395251875Speter esac 396251875Speter 397251875Speter if test $flag -gt 0; then 398251875Speter apr_pool_debug=`expr '(' $apr_pool_debug - $apr_pool_debug % \ 399251875Speter '(' $flag '*' 2 ')' ')' + $flag + $apr_pool_debug % $flag` 400251875Speter fi 401251875Speter done 402251875Speter 403251875Speter APR_ADDTO(CPPFLAGS, -DAPR_POOL_DEBUG=$apr_pool_debug) 404251875Speter fi 405251875Speter ]) 406251875Speter 407251875Speterif test "$host" = "i586-pc-beos"; then 408251875Speter AC_ARG_ENABLE(malloc-debug,[ --enable-malloc-debug Switch on malloc_debug for BeOS], 409251875Speter APR_REMOVEFROM(CFLAGS, -O2) 410251875Speter APR_ADDTO(CPPFLAGS, -fcheck-memory-usage -D_KERNEL_MODE) 411251875Speter ) dnl 412251875Speterfi 413251875Speter 414251875Speter# this is the place to put specific options for platform/compiler 415251875Speter# combinations 416251875Spetercase "$host:$CC" in 417251875Speter *-hp-hpux*:cc ) 418251875Speter APR_ADDTO(CFLAGS,[-Ae +Z]) 419251875Speter case $host in 420251875Speter ia64-* ) 421251875Speter ;; 422251875Speter * ) 423251875Speter if echo "$CFLAGS " | grep '+DA' >/dev/null; then : 424251875Speter else 425251875Speter APR_ADDTO(CFLAGS,[+DAportable]) 426251875Speter fi 427251875Speter ;; 428251875Speter esac 429251875Speter ;; 430251875Speter powerpc-*-beos:mwcc* ) 431251875Speter APR_SETVAR(CPP,[mwcc -E]) 432251875Speter APR_SETVAR(CC,mwcc) 433251875Speter APR_SETVAR(AR,ar) 434251875Speter ;; 435251875Speteresac 436251875Speter 437251875SpeterAC_CACHE_CHECK([whether the compiler provides atomic builtins], [ap_cv_atomic_builtins], 438251875Speter[AC_TRY_RUN([ 439251875Speterint main() 440251875Speter{ 441251875Speter unsigned long val = 1010, tmp, *mem = &val; 442251875Speter 443251875Speter if (__sync_fetch_and_add(&val, 1010) != 1010 || val != 2020) 444251875Speter return 1; 445251875Speter 446251875Speter tmp = val; 447251875Speter 448251875Speter if (__sync_fetch_and_sub(mem, 1010) != tmp || val != 1010) 449251875Speter return 1; 450251875Speter 451251875Speter if (__sync_sub_and_fetch(&val, 1010) != 0 || val != 0) 452251875Speter return 1; 453251875Speter 454251875Speter tmp = 3030; 455251875Speter 456251875Speter if (__sync_val_compare_and_swap(mem, 0, tmp) != 0 || val != tmp) 457251875Speter return 1; 458251875Speter 459251875Speter if (__sync_lock_test_and_set(&val, 4040) != 3030) 460251875Speter return 1; 461251875Speter 462251875Speter mem = &tmp; 463251875Speter 464251875Speter if (__sync_val_compare_and_swap(&mem, &tmp, &val) != &tmp) 465251875Speter return 1; 466251875Speter 467251875Speter __sync_synchronize(); 468251875Speter 469251875Speter if (mem != &val) 470251875Speter return 1; 471251875Speter 472251875Speter return 0; 473251875Speter}], [ap_cv_atomic_builtins=yes], [ap_cv_atomic_builtins=no], [ap_cv_atomic_builtins=no])]) 474251875Speter 475251875Speterif test "$ap_cv_atomic_builtins" = "yes"; then 476251875Speter AC_DEFINE(HAVE_ATOMIC_BUILTINS, 1, [Define if compiler provides atomic builtins]) 477251875Speterfi 478251875Speter 479251875Spetercase $host in 480251875Speter powerpc-405-*) 481251875Speter # The IBM ppc405cr processor has a bugged stwcx instruction. 482251875Speter AC_DEFINE(PPC405_ERRATA, 1, [Define on PowerPC 405 where errata 77 applies]) 483251875Speter ;; 484251875Speter *) 485251875Speter ;; 486251875Speteresac 487251875Speter 488251875Speterdnl Check the depend program we can use 489251875SpeterAPR_CHECK_DEPEND 490251875Speter 491251875Speterproc_mutex_is_global=0 492251875Speter 493251875Speterconfig_subdirs="none" 494251875SpeterINSTALL_SUBDIRS="none" 495251875SpeterOBJECTS_PLATFORM='$(OBJECTS_unix)' 496251875Speter 497251875Spetercase $host in 498251875Speter i386-ibm-aix* | *-ibm-aix[[1-2]].* | *-ibm-aix3.* | *-ibm-aix4.1 | *-ibm-aix4.1.* | *-ibm-aix4.2 | *-ibm-aix4.2.*) 499251875Speter OSDIR="aix" 500251875Speter APR_ADDTO(LDFLAGS,-lld) 501251875Speter eolstr="\\n" 502251875Speter OBJECTS_PLATFORM='$(OBJECTS_aix)' 503251875Speter ;; 504251875Speter *-os2*) 505251875Speter APR_ADDTO(CPPFLAGS,-DOS2) 506251875Speter APR_ADDTO(CFLAGS,-Zmt) 507251875Speter AC_CHECK_LIB(bsd, random) 508251875Speter OSDIR="os2" 509251875Speter enable_threads="system_threads" 510251875Speter eolstr="\\r\\n" 511251875Speter file_as_socket="0" 512251875Speter proc_mutex_is_global=1 513251875Speter OBJECTS_PLATFORM='$(OBJECTS_os2)' 514251875Speter ;; 515251875Speter *beos*) 516251875Speter OSDIR="beos" 517251875Speter APR_ADDTO(CPPFLAGS,-DBEOS) 518251875Speter enable_threads="system_threads" 519251875Speter native_mmap_emul="1" 520251875Speter APR_CHECK_DEFINE(BONE_VERSION, sys/socket.h) 521251875Speter eolstr="\\n" 522251875Speter osver=`uname -r` 523251875Speter proc_mutex_is_global=1 524251875Speter OBJECTS_PLATFORM='$(OBJECTS_beos)' 525251875Speter case $osver in 526251875Speter 5.0.4) 527251875Speter file_as_socket="1" 528251875Speter ;; 529251875Speter *) 530251875Speter file_as_socket="0" 531251875Speter ;; 532251875Speter esac 533251875Speter ;; 534251875Speter *os390) 535251875Speter OSDIR="os390" 536251875Speter OBJECTS_PLATFORM='$(OBJECTS_os390)' 537251875Speter eolstr="\\n" 538251875Speter ;; 539251875Speter *os400) 540251875Speter OSDIR="as400" 541251875Speter eolstr="\\n" 542251875Speter ;; 543251875Speter *mingw*) 544251875Speter OSDIR="win32" 545251875Speter enable_threads="system_threads" 546251875Speter eolstr="\\r\\n" 547251875Speter file_as_socket=0 548251875Speter proc_mutex_is_global=1 549251875Speter OBJECTS_PLATFORM='$(OBJECTS_win32)' 550251875Speter ;; 551251875Speter *cygwin*) 552251875Speter OSDIR="unix" 553251875Speter enable_threads="no" 554251875Speter eolstr="\\n" 555251875Speter ;; 556251875Speter *hpux10* ) 557251875Speter enable_threads="no" 558251875Speter OSDIR="unix" 559251875Speter eolstr="\\n" 560251875Speter ;; 561251875Speter *) 562251875Speter OSDIR="unix" 563251875Speter eolstr="\\n" 564251875Speter ;; 565251875Speteresac 566251875Speter 567251875SpeterAC_SUBST(OBJECTS_PLATFORM) 568251875Speter 569251875Speter# Check whether LFS has explicitly been disabled 570251875SpeterAC_ARG_ENABLE(lfs,[ --disable-lfs Disable large file support on 32-bit platforms], 571251875Speter[apr_lfs_choice=$enableval], [apr_lfs_choice=yes]) 572251875Speter 573251875Speterif test "$apr_lfs_choice" = "yes"; then 574251875Speter # Check whether the transitional LFS API is sufficient 575251875Speter AC_CACHE_CHECK([whether to enable -D_LARGEFILE64_SOURCE], [apr_cv_use_lfs64], [ 576251875Speter apr_save_CPPFLAGS=$CPPFLAGS 577251875Speter CPPFLAGS="$CPPFLAGS -D_LARGEFILE64_SOURCE" 578251875Speter AC_TRY_RUN([ 579251875Speter#include <sys/types.h> 580251875Speter#include <sys/stat.h> 581251875Speter#include <fcntl.h> 582251875Speter#include <stdlib.h> 583251875Speter#include <stdio.h> 584251875Speter#include <unistd.h> 585251875Speter 586251875Spetervoid main(void) 587251875Speter{ 588251875Speter int fd, ret = 0; 589251875Speter struct stat64 st; 590251875Speter off64_t off = 4242; 591251875Speter 592251875Speter if (sizeof(off64_t) != 8 || sizeof(off_t) != 4) 593251875Speter exit(1); 594251875Speter if ((fd = open("conftest.lfs", O_LARGEFILE|O_CREAT|O_WRONLY, 0644)) < 0) 595251875Speter exit(2); 596251875Speter if (ftruncate64(fd, off) != 0) 597251875Speter ret = 3; 598251875Speter else if (fstat64(fd, &st) != 0 || st.st_size != off) 599251875Speter ret = 4; 600251875Speter else if (lseek64(fd, off, SEEK_SET) != off) 601251875Speter ret = 5; 602251875Speter else if (close(fd) != 0) 603251875Speter ret = 6; 604251875Speter else if (lstat64("conftest.lfs", &st) != 0 || st.st_size != off) 605251875Speter ret = 7; 606251875Speter else if (stat64("conftest.lfs", &st) != 0 || st.st_size != off) 607251875Speter ret = 8; 608251875Speter unlink("conftest.lfs"); 609251875Speter 610251875Speter exit(ret); 611251875Speter}], [apr_cv_use_lfs64=yes], [apr_cv_use_lfs64=no], [apr_cv_use_lfs64=no]) 612251875Speter CPPFLAGS=$apr_save_CPPFLAGS]) 613251875Speter if test "$apr_cv_use_lfs64" = "yes"; then 614251875Speter APR_ADDTO(CPPFLAGS, [-D_LARGEFILE64_SOURCE]) 615251875Speter fi 616251875Speterfi 617251875Speter 618251875SpeterAC_ARG_ENABLE(nonportable-atomics, 619251875Speter[ --enable-nonportable-atomics Use optimized atomic code which may produce nonportable binaries], 620251875Speter[if test $enableval = yes; then 621251875Speter force_generic_atomics=no 622251875Speter else 623251875Speter force_generic_atomics=yes 624251875Speter fi 625251875Speter], 626251875Speter[case $host_cpu in 627251875Speter i[[456]]86) force_generic_atomics=yes ;; 628251875Speter *) force_generic_atomics=no ;; 629251875Speteresac 630251875Speter]) 631251875Speter 632251875Speterif test $force_generic_atomics = yes; then 633251875Speter AC_DEFINE([USE_ATOMICS_GENERIC], 1, 634251875Speter [Define if use of generic atomics is requested]) 635251875Speterfi 636251875Speter 637251875SpeterAC_SUBST(proc_mutex_is_global) 638251875SpeterAC_SUBST(eolstr) 639251875SpeterAC_SUBST(INSTALL_SUBDIRS) 640251875Speter 641251875Speter# For some platforms we need a version string which allows easy numeric 642251875Speter# comparisons. 643251875Spetercase $host in 644251875Speter *freebsd*) 645251875Speter if test -x /sbin/sysctl; then 646251875Speter os_version=`/sbin/sysctl -n kern.osreldate` 647251875Speter else 648251875Speter os_version=000000 649251875Speter fi 650251875Speter ;; 651251875Speter *linux*) 652251875Speter os_version=`uname -r | sed -e 's/\(.\)\.\(.\)\.\(.\).*/\1\2\3/'` 653251875Speter ;; 654251875Speter *os390) 655251875Speter os_version=`uname -r | sed -e 's/\.//g'` 656251875Speter ;; 657251875Speter *) 658251875Speter os_version=OS_VERSION_IS_NOT_SET 659251875Speter ;; 660251875Speteresac 661251875Speter 662251875Speterecho "${nl}Checking for libraries..." 663251875Speter 664251875Speterdnl ----------------------------- Checks for Any required Libraries 665251875Speterdnl Note: Autoconf will always append LIBS with an extra " " in AC_CHECK_LIB. 666251875Speterdnl It should check for LIBS being empty and set LIBS equal to the new value 667251875Speterdnl without the extra " " in that case, but they didn't do that. So, we 668251875Speterdnl end up LIBS="-lm -lcrypt -lnsl -ldl" which is an annoyance. 669251875Spetercase $host in 670251875Speter *mingw*) 671251875Speter APR_ADDTO(LIBS,[-lshell32 -ladvapi32 -lws2_32 -lrpcrt4 -lmswsock]) 672251875Speter ac_cv_func_CreateFileMapping=yes 673251875Speter ;; 674251875Speter *) 675251875Speter AC_SEARCH_LIBS(gethostbyname, nsl) 676251875Speter AC_SEARCH_LIBS(gethostname, nsl) 677251875Speter AC_SEARCH_LIBS(socket, socket) 678251875Speter AC_SEARCH_LIBS(crypt, crypt ufc) 679251875Speter AC_CHECK_LIB(truerand, main) 680251875Speter AC_SEARCH_LIBS(modf, m) 681251875Speter ;; 682251875Speteresac 683251875Speter 684251875Speterdnl ----------------------------- Checking for Threads 685251875Speterecho "${nl}Checking for Threads..." 686251875Speter 687251875Speterif test -z "$enable_threads"; then 688251875Speter AC_ARG_ENABLE(threads, 689251875Speter [ --enable-threads Enable threading support in APR.], 690251875Speter [ enable_threads=$enableval] , 691251875Speter [ APR_CHECK_PTHREADS_H([ enable_threads="pthread" ] , 692251875Speter [ enable_threads="no" ] ) ] ) 693251875Speterfi 694251875Speter 695251875Speterif test "$enable_threads" = "no"; then 696251875Speter threads="0" 697251875Speter pthreadh="0" 698251875Speter pthreadser="0" 699251875Speterelse 700251875Speter if test "$enable_threads" = "pthread"; then 701251875Speter# We have specified pthreads for our threading library, just make sure 702251875Speter# that we have everything we need 703251875Speter APR_PTHREADS_CHECK_SAVE 704251875Speter APR_PTHREADS_CHECK 705251875Speter APR_CHECK_PTHREADS_H([ 706251875Speter threads="1" 707251875Speter pthreadh="1" 708251875Speter pthreadser="1" ], [ 709251875Speter threads="0" 710251875Speter pthreadh="0" 711251875Speter pthreadser="0" 712251875Speter APR_PTHREADS_CHECK_RESTORE ] ) 713251875Speter elif test "$enable_threads" = "system_threads"; then 714251875Speter threads="1" 715251875Speter pthreadh="0" 716251875Speter pthreadser="0" 717251875Speter else 718251875Speter# We basically specified that we wanted threads, but not how to implement 719251875Speter# them. In this case, just look for pthreads. In the future, we can check 720251875Speter# for other threading libraries as well. 721251875Speter APR_PTHREADS_CHECK_SAVE 722251875Speter APR_PTHREADS_CHECK 723251875Speter APR_CHECK_PTHREADS_H([ 724251875Speter threads="1" 725251875Speter pthreadh="1" 726251875Speter pthreadser="1" ], [ 727251875Speter threads="0" 728251875Speter pthreadser="0" 729251875Speter pthreadh="0" 730251875Speter APR_PTHREADS_CHECK_RESTORE ] ) 731251875Speter fi 732251875Speter if test "$pthreadh" = "1"; then 733251875Speter APR_CHECK_PTHREAD_GETSPECIFIC_TWO_ARGS 734251875Speter APR_CHECK_PTHREAD_ATTR_GETDETACHSTATE_ONE_ARG 735251875Speter APR_CHECK_PTHREAD_RECURSIVE_MUTEX 736251875Speter AC_CHECK_FUNCS([pthread_key_delete pthread_rwlock_init \ 737251875Speter pthread_attr_setguardsize pthread_yield]) 738251875Speter 739251875Speter if test "$ac_cv_func_pthread_rwlock_init" = "yes"; then 740251875Speter dnl ----------------------------- Checking for pthread_rwlock_t 741251875Speter AC_CACHE_CHECK([for pthread_rwlock_t], [apr_cv_type_rwlock_t], 742251875Speter AC_TRY_COMPILE([#include <sys/types.h> 743251875Speter#include <pthread.h>], [pthread_rwlock_t *rwlock;], 744251875Speter [apr_cv_type_rwlock_t=yes], [apr_cv_type_rwlock_t=no], 745251875Speter [apr_cv_type_rwlock_t=no])) 746251875Speter if test "$apr_cv_type_rwlock_t" = "yes"; then 747251875Speter AC_DEFINE(HAVE_PTHREAD_RWLOCKS, 1, [Define if pthread rwlocks are available]) 748251875Speter fi 749251875Speter fi 750251875Speter 751251875Speter if test "$ac_cv_func_pthread_yield" = "no"; then 752251875Speter dnl ----------------------------- Checking for sched_yield 753251875Speter AC_CHECK_HEADERS([sched.h]) 754251875Speter AC_CHECK_FUNCS([sched_yield]) 755251875Speter fi 756251875Speter fi 757251875Speterfi 758251875Speter 759251875Speterac_cv_define_READDIR_IS_THREAD_SAFE=no 760251875Speterac_cv_define_GETHOSTBYNAME_IS_THREAD_SAFE=no 761251875Speterac_cv_define_GETHOSTBYADDR_IS_THREAD_SAFE=no 762251875Speterac_cv_define_GETSERVBYNAME_IS_THREAD_SAFE=no 763251875Speterif test "$threads" = "1"; then 764251875Speter echo "APR will use threads" 765251875Speter AC_CHECK_LIB(c_r, readdir, 766251875Speter AC_DEFINE(READDIR_IS_THREAD_SAFE, 1, 767251875Speter [Define if readdir is thread safe])) 768251875Speter if test "x$apr_gethostbyname_is_thread_safe" = "x"; then 769251875Speter AC_CHECK_LIB(c_r, gethostbyname, apr_gethostbyname_is_thread_safe=yes) 770251875Speter fi 771251875Speter if test "$apr_gethostbyname_is_thread_safe" = "yes"; then 772251875Speter AC_DEFINE(GETHOSTBYNAME_IS_THREAD_SAFE, 1, 773251875Speter [Define if gethostbyname is thread safe]) 774251875Speter fi 775251875Speter if test "x$apr_gethostbyaddr_is_thread_safe" = "x"; then 776251875Speter AC_CHECK_LIB(c_r, gethostbyaddr, apr_gethostbyaddr_is_thread_safe=yes) 777251875Speter fi 778251875Speter if test "$apr_gethostbyaddr_is_thread_safe" = "yes"; then 779251875Speter AC_DEFINE(GETHOSTBYADDR_IS_THREAD_SAFE, 1, 780251875Speter [Define if gethostbyaddr is thread safe]) 781251875Speter fi 782251875Speter if test "x$apr_getservbyname_is_thread_safe" = "x"; then 783251875Speter AC_CHECK_LIB(c_r, getservbyname, apr_getservbyname_is_thread_safe=yes) 784251875Speter fi 785251875Speter if test "$apr_getservbyname_is_thread_safe" = "yes"; then 786251875Speter AC_DEFINE(GETSERVBYNAME_IS_THREAD_SAFE, 1, 787251875Speter [Define if getservbyname is thread safe]) 788251875Speter fi 789251875Speter AC_CHECK_FUNCS(gethostbyname_r gethostbyaddr_r getservbyname_r) 790251875Speterelse 791251875Speter echo "APR will be non-threaded" 792251875Speterfi 793251875Speter 794251875Speterdnl Electric Fence malloc checker. 795251875Speterdnl --with-efence specifies the path to Electric Fence. 796251875Speterdnl This test should remain after the threads checks since libefence 797251875Speterdnl may depend on libpthread. 798251875SpeterAC_ARG_WITH(efence, 799251875Speter [ --with-efence[[=DIR]] path to Electric Fence installation], 800251875Speter [ apr_efence_dir="$withval" 801251875Speter if test "$apr_efence_dir" != "yes"; then 802251875Speter APR_ADDTO(LDFLAGS,[-L$apr_efence_dir/lib]) 803251875Speter if test "x$apr_platform_runtime_link_flag" != "x"; then 804251875Speter APR_ADDTO(LDFLAGS, 805251875Speter [$apr_platform_runtime_link_flag$apr_efence_dir/lib]) 806251875Speter fi 807251875Speter fi 808251875Speter AC_CHECK_LIB(efence, malloc, 809251875Speter [ APR_ADDTO(LIBS,-lefence) ], 810251875Speter [ AC_MSG_ERROR(Electric Fence requested but not detected) ]) 811251875Speter ]) 812251875Speter 813251875SpeterAC_CHECK_FUNCS(sigsuspend, [ have_sigsuspend="1" ], [ have_sigsuspend="0" ]) 814251875SpeterAC_CHECK_FUNCS(sigwait, [ have_sigwait="1" ], [ have_sigwait="0" ]) 815251875Speterdnl AC_CHECK_FUNCS doesn't work for this on Tru64 since the function 816251875Speterdnl is renamed in signal.h. Todo: Autodetect 817251875Spetercase $host in 818251875Speter *alpha*-dec-osf* ) 819251875Speter have_sigwait="1" 820251875Speter ;; 821251875Speteresac 822251875Speter 823251875SpeterAC_SUBST(threads) 824251875SpeterAC_SUBST(have_sigsuspend) 825251875SpeterAC_SUBST(have_sigwait) 826251875Speter 827251875SpeterAC_CHECK_FUNCS(poll kqueue port_create) 828251875Speter 829251875Speter# Check for the Linux epoll interface; epoll* may be available in libc 830251875Speter# but return ENOSYS on a pre-2.6 kernel, so do a run-time check. 831251875SpeterAC_CACHE_CHECK([for epoll support], [apr_cv_epoll], 832251875Speter[AC_TRY_RUN([ 833251875Speter#include <sys/epoll.h> 834251875Speter#include <unistd.h> 835251875Speter 836251875Speterint main() 837251875Speter{ 838251875Speter return epoll_create(5) == -1; 839251875Speter}], [apr_cv_epoll=yes], [apr_cv_epoll=no], [apr_cv_epoll=no])]) 840251875Speter 841251875Speterif test "$apr_cv_epoll" = "yes"; then 842251875Speter AC_DEFINE([HAVE_EPOLL], 1, [Define if the epoll interface is supported]) 843251875Speterfi 844251875Speter 845251875Speterdnl ----------------------------- Checking for extended file descriptor handling 846251875Speter# test for epoll_create1 847251875SpeterAC_CACHE_CHECK([for epoll_create1 support], [apr_cv_epoll_create1], 848251875Speter[AC_TRY_RUN([ 849251875Speter#include <sys/epoll.h> 850251875Speter#include <unistd.h> 851251875Speter 852251875Speterint main() 853251875Speter{ 854251875Speter return epoll_create1(0) == -1; 855251875Speter}], [apr_cv_epoll_create1=yes], [apr_cv_epoll_create1=no], [apr_cv_epoll_create1=no])]) 856251875Speter 857251875Speterif test "$apr_cv_epoll_create1" = "yes"; then 858251875Speter AC_DEFINE([HAVE_EPOLL_CREATE1], 1, [Define if epoll_create1 function is supported]) 859251875Speterfi 860251875Speter 861251875Speter# test for dup3 862251875SpeterAC_CACHE_CHECK([for dup3 support], [apr_cv_dup3], 863251875Speter[AC_TRY_RUN([ 864251875Speter#include <unistd.h> 865251875Speter 866251875Speterint main() 867251875Speter{ 868251875Speter return dup3(STDOUT_FILENO, STDERR_FILENO, 0) == -1; 869251875Speter}], [apr_cv_dup3=yes], [apr_cv_dup3=no], [apr_cv_dup3=no])]) 870251875Speter 871251875Speterif test "$apr_cv_dup3" = "yes"; then 872251875Speter AC_DEFINE([HAVE_DUP3], 1, [Define if dup3 function is supported]) 873251875Speterfi 874251875Speter 875251875Speter# test for accept4 876251875SpeterAC_CACHE_CHECK([for accept4 support], [apr_cv_accept4], 877251875Speter[AC_TRY_RUN([ 878251875Speter#include <unistd.h> 879251875Speter#include <sys/types.h> 880251875Speter#include <sys/socket.h> 881251875Speter#include <sys/un.h> 882251875Speter#include <sys/wait.h> 883251875Speter#include <signal.h> 884251875Speter#include <errno.h> 885251875Speter 886251875Speter#define A4_SOCK "./apr_accept4_test_socket" 887251875Speter 888251875Speterint main() 889251875Speter{ 890251875Speter pid_t pid; 891251875Speter int fd; 892251875Speter struct sockaddr_un loc, rem; 893251875Speter socklen_t rem_sz; 894251875Speter 895251875Speter if ((pid = fork())) { 896251875Speter int status; 897251875Speter 898251875Speter unlink(A4_SOCK); 899251875Speter 900251875Speter if ((fd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) 901251875Speter goto cleanup_failure2; 902251875Speter 903251875Speter loc.sun_family = AF_UNIX; 904251875Speter strncpy(loc.sun_path, A4_SOCK, sizeof(loc.sun_path) - 1); 905251875Speter 906251875Speter if (bind(fd, (struct sockaddr *) &loc, 907251875Speter sizeof(struct sockaddr_un)) == -1) 908251875Speter goto cleanup_failure; 909251875Speter 910251875Speter if (listen(fd, 5) == -1) 911251875Speter goto cleanup_failure; 912251875Speter 913251875Speter rem_sz = sizeof(struct sockaddr_un); 914251875Speter if (accept4(fd, (struct sockaddr *) &rem, &rem_sz, 0) == -1) { 915251875Speter goto cleanup_failure; 916251875Speter } 917251875Speter else { 918251875Speter close(fd); 919251875Speter waitpid(pid, &status, 0); 920251875Speter unlink(A4_SOCK); 921251875Speter return 0; 922251875Speter } 923251875Speter 924251875Spetercleanup_failure: 925251875Speter close(fd); 926251875Spetercleanup_failure2: 927251875Speter kill(pid, SIGKILL); 928251875Speter waitpid(pid, &status, 0); 929251875Speter unlink(A4_SOCK); 930251875Speter return 1; 931251875Speter } 932251875Speter else { 933251875Speter if ((fd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) 934251875Speter return 1; /* this will be bad: we'll hang */ 935251875Speter 936251875Speter loc.sun_family = AF_UNIX; 937251875Speter strncpy(loc.sun_path, A4_SOCK, sizeof(loc.sun_path) - 1); 938251875Speter 939251875Speter while(connect(fd, (struct sockaddr *) &loc, 940251875Speter sizeof(struct sockaddr_un)) == -1 && 941251875Speter (errno==ENOENT || errno==ECONNREFUSED)) 942251875Speter ; 943251875Speter 944251875Speter close(fd); 945251875Speter return 0; 946251875Speter } 947251875Speter}], [apr_cv_accept4=yes], [apr_cv_accept4=no], [apr_cv_accept4=no])]) 948251875Speter 949251875Speterif test "$apr_cv_accept4" = "yes"; then 950251875Speter AC_DEFINE([HAVE_ACCEPT4], 1, [Define if accept4 function is supported]) 951251875Speterfi 952251875Speter 953251875SpeterAC_CACHE_CHECK([for SOCK_CLOEXEC support], [apr_cv_sock_cloexec], 954251875Speter[AC_TRY_RUN([ 955251875Speter#include <sys/types.h> 956251875Speter#include <sys/socket.h> 957251875Speter 958251875Speterint main() 959251875Speter{ 960251875Speter return socket(AF_INET, SOCK_STREAM|SOCK_CLOEXEC, 0) == -1; 961251875Speter}], [apr_cv_sock_cloexec=yes], [apr_cv_sock_cloexec=no], [apr_cv_sock_cloexec=no])]) 962251875Speter 963251875Speterif test "$apr_cv_sock_cloexec" = "yes"; then 964251875Speter AC_DEFINE([HAVE_SOCK_CLOEXEC], 1, [Define if the SOCK_CLOEXEC flag is supported]) 965251875Speterfi 966251875Speter 967251875Speterdnl ----------------------------- Checking for fdatasync: OS X doesn't have it 968251875SpeterAC_CHECK_FUNCS(fdatasync) 969251875Speter 970251875Speterdnl ----------------------------- Checking for extended file descriptor handling 971251875Speter# test for epoll_create1 972251875SpeterAC_CACHE_CHECK([for epoll_create1 support], [apr_cv_epoll_create1], 973251875Speter[AC_TRY_RUN([ 974251875Speter#include <sys/epoll.h> 975251875Speter#include <unistd.h> 976251875Speter 977251875Speterint main() 978251875Speter{ 979251875Speter return epoll_create1(0) == -1; 980251875Speter}], [apr_cv_epoll_create1=yes], [apr_cv_epoll_create1=no], [apr_cv_epoll_create1=no])]) 981251875Speter 982251875Speterif test "$apr_cv_epoll_create1" = "yes"; then 983251875Speter AC_DEFINE([HAVE_EPOLL_CREATE1], 1, [Define if epoll_create1 function is supported]) 984251875Speterfi 985251875Speter 986251875Speter# test for dup3 987251875SpeterAC_CACHE_CHECK([for dup3 support], [apr_cv_dup3], 988251875Speter[AC_TRY_RUN([ 989251875Speter#include <unistd.h> 990251875Speter 991251875Speterint main() 992251875Speter{ 993251875Speter return dup3(STDOUT_FILENO, STDERR_FILENO, 0) == -1; 994251875Speter}], [apr_cv_dup3=yes], [apr_cv_dup3=no], [apr_cv_dup3=no])]) 995251875Speter 996251875Speterif test "$apr_cv_dup3" = "yes"; then 997251875Speter AC_DEFINE([HAVE_DUP3], 1, [Define if dup3 function is supported]) 998251875Speterfi 999251875Speter 1000251875Speter# test for accept4 1001251875SpeterAC_CACHE_CHECK([for accept4 support], [apr_cv_accept4], 1002251875Speter[AC_TRY_RUN([ 1003251875Speter#include <unistd.h> 1004251875Speter#include <sys/types.h> 1005251875Speter#include <sys/socket.h> 1006251875Speter#include <sys/un.h> 1007251875Speter#include <sys/wait.h> 1008251875Speter#include <signal.h> 1009251875Speter#include <errno.h> 1010251875Speter 1011251875Speter#define A4_SOCK "./apr_accept4_test_socket" 1012251875Speter 1013251875Speterint main() 1014251875Speter{ 1015251875Speter pid_t pid; 1016251875Speter int fd; 1017251875Speter struct sockaddr_un loc, rem; 1018251875Speter socklen_t rem_sz; 1019251875Speter 1020251875Speter if ((pid = fork())) { 1021251875Speter int status; 1022251875Speter 1023251875Speter unlink(A4_SOCK); 1024251875Speter 1025251875Speter if ((fd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) 1026251875Speter goto cleanup_failure2; 1027251875Speter 1028251875Speter loc.sun_family = AF_UNIX; 1029251875Speter strncpy(loc.sun_path, A4_SOCK, sizeof(loc.sun_path) - 1); 1030251875Speter 1031251875Speter if (bind(fd, (struct sockaddr *) &loc, 1032251875Speter sizeof(struct sockaddr_un)) == -1) 1033251875Speter goto cleanup_failure; 1034251875Speter 1035251875Speter if (listen(fd, 5) == -1) 1036251875Speter goto cleanup_failure; 1037251875Speter 1038251875Speter rem_sz = sizeof(struct sockaddr_un); 1039251875Speter if (accept4(fd, (struct sockaddr *) &rem, &rem_sz, 0) == -1) { 1040251875Speter goto cleanup_failure; 1041251875Speter } 1042251875Speter else { 1043251875Speter close(fd); 1044251875Speter waitpid(pid, &status, 0); 1045251875Speter unlink(A4_SOCK); 1046251875Speter return 0; 1047251875Speter } 1048251875Speter 1049251875Spetercleanup_failure: 1050251875Speter close(fd); 1051251875Spetercleanup_failure2: 1052251875Speter kill(pid, SIGKILL); 1053251875Speter waitpid(pid, &status, 0); 1054251875Speter unlink(A4_SOCK); 1055251875Speter return 1; 1056251875Speter } 1057251875Speter else { 1058251875Speter if ((fd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) 1059251875Speter return 1; /* this will be bad: we'll hang */ 1060251875Speter 1061251875Speter loc.sun_family = AF_UNIX; 1062251875Speter strncpy(loc.sun_path, A4_SOCK, sizeof(loc.sun_path) - 1); 1063251875Speter 1064251875Speter while(connect(fd, (struct sockaddr *) &loc, 1065251875Speter sizeof(struct sockaddr_un)) == -1 && 1066251875Speter (errno==ENOENT || errno==ECONNREFUSED)) 1067251875Speter ; 1068251875Speter 1069251875Speter close(fd); 1070251875Speter return 0; 1071251875Speter } 1072251875Speter}], [apr_cv_accept4=yes], [apr_cv_accept4=no], [apr_cv_accept4=no])]) 1073251875Speter 1074251875Speterif test "$apr_cv_accept4" = "yes"; then 1075251875Speter AC_DEFINE([HAVE_ACCEPT4], 1, [Define if accept4 function is supported]) 1076251875Speterfi 1077251875Speter 1078251875SpeterAC_CACHE_CHECK([for SOCK_CLOEXEC support], [apr_cv_sock_cloexec], 1079251875Speter[AC_TRY_RUN([ 1080251875Speter#include <sys/types.h> 1081251875Speter#include <sys/socket.h> 1082251875Speter 1083251875Speterint main() 1084251875Speter{ 1085251875Speter return socket(AF_INET, SOCK_STREAM|SOCK_CLOEXEC, 0) == -1; 1086251875Speter}], [apr_cv_sock_cloexec=yes], [apr_cv_sock_cloexec=no], [apr_cv_sock_cloexec=no])]) 1087251875Speter 1088251875Speterif test "$apr_cv_sock_cloexec" = "yes"; then 1089251875Speter AC_DEFINE([HAVE_SOCK_CLOEXEC], 1, [Define if the SOCK_CLOEXEC flag is supported]) 1090251875Speterfi 1091251875Speter 1092251875Speterdnl ----------------------------- Checking for missing POSIX thread functions 1093251875SpeterAC_CHECK_FUNCS([getpwnam_r getpwuid_r getgrnam_r getgrgid_r]) 1094251875Speter 1095251875Speterdnl ----------------------------- Checking for Shared Memory Support 1096251875Speterecho "${nl}Checking for Shared Memory Support..." 1097251875Speter 1098251875Speter# The real-time POSIX extensions (e.g. shm_*, sem_*) may only 1099251875Speter# be available if linking against librt. 1100251875SpeterAC_SEARCH_LIBS(shm_open, rt) 1101251875Speter 1102251875Spetercase $host in 1103251875Speter *-sysv*) 1104251875Speter ac_includes_default="$ac_includes_default 1105251875Speter#if HAVE_SYS_MUTEX_H /* needed to define lock_t for sys/shm.h */ 1106251875Speter# include <sys/mutex.h> 1107251875Speter#endif";; 1108251875Speteresac 1109251875Speter 1110251875SpeterAC_CHECK_HEADERS([sys/types.h sys/mman.h sys/ipc.h sys/mutex.h sys/shm.h sys/file.h kernel/OS.h os2.h windows.h]) 1111251875SpeterAC_CHECK_FUNCS([mmap munmap shm_open shm_unlink shmget shmat shmdt shmctl \ 1112251875Speter create_area]) 1113251875Speter 1114251875SpeterAPR_CHECK_DEFINE(MAP_ANON, sys/mman.h) 1115251875SpeterAC_CHECK_FILE(/dev/zero) 1116251875Speter 1117251875Speter# Not all systems can mmap /dev/zero (such as HP-UX). Check for that. 1118251875Speterif test "$ac_cv_func_mmap" = "yes" && 1119251875Speter test "$ac_cv_file__dev_zero" = "yes"; then 1120251875Speter AC_MSG_CHECKING(for mmap that can map /dev/zero) 1121251875Speter AC_TRY_RUN([ 1122251875Speter#include <sys/types.h> 1123251875Speter#include <sys/stat.h> 1124251875Speter#include <fcntl.h> 1125251875Speter#ifdef HAVE_SYS_MMAN_H 1126251875Speter#include <sys/mman.h> 1127251875Speter#endif 1128251875Speter int main() 1129251875Speter { 1130251875Speter int fd; 1131251875Speter void *m; 1132251875Speter fd = open("/dev/zero", O_RDWR); 1133251875Speter if (fd < 0) { 1134251875Speter return 1; 1135251875Speter } 1136251875Speter m = mmap(0, sizeof(void*), PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0); 1137251875Speter if (m == (void *)-1) { /* aka MAP_FAILED */ 1138251875Speter return 2; 1139251875Speter } 1140251875Speter if (munmap(m, sizeof(void*)) < 0) { 1141251875Speter return 3; 1142251875Speter } 1143251875Speter return 0; 1144251875Speter }], [], [ac_cv_file__dev_zero=no], [ac_cv_file__dev_zero=no]) 1145251875Speter 1146251875Speter AC_MSG_RESULT($ac_cv_file__dev_zero) 1147251875Speterfi 1148251875Speter 1149251875Speter# Now we determine which one is our anonymous shmem preference. 1150251875Speterhaveshmgetanon="0" 1151251875Speterhavemmapzero="0" 1152251875Speterhavemmapanon="0" 1153251875SpeterAPR_BEGIN_DECISION([anonymous shared memory allocation method]) 1154251875SpeterAPR_IFALLYES(header:sys/ipc.h header:sys/shm.h header:sys/file.h dnl 1155251875Speter func:shmget func:shmat func:shmdt func:shmctl, 1156251875Speter [haveshmgetanon="1" 1157251875Speter APR_DECIDE(USE_SHMEM_SHMGET_ANON, [SysV IPC shmget()])]) 1158251875SpeterAPR_IFALLYES(header:sys/mman.h func:mmap func:munmap file:/dev/zero, 1159251875Speter [havemmapzero="1" 1160251875Speter APR_DECIDE(USE_SHMEM_MMAP_ZERO, 1161251875Speter [SVR4-style mmap() on /dev/zero])]) 1162251875SpeterAPR_IFALLYES(header:sys/mman.h func:mmap func:munmap define:MAP_ANON, 1163251875Speter [havemmapanon="1" 1164251875Speter APR_DECIDE(USE_SHMEM_MMAP_ANON, 1165251875Speter [4.4BSD-style mmap() via MAP_ANON])]) 1166251875SpeterAPR_IFALLYES(header:os2.h, 1167251875Speter [haveos2shm="1" 1168251875Speter APR_DECIDE(USE_SHMEM_OS2_ANON, [OS/2 DosAllocSharedMem()])]) 1169251875SpeterAPR_IFALLYES(header:kernel/OS.h func:create_area, 1170251875Speter [havebeosshm="1" 1171251875Speter APR_DECIDE(USE_SHMEM_BEOS_ANON, 1172251875Speter [BeOS areas])]) 1173251875SpeterAPR_IFALLYES(header:windows.h func:CreateFileMapping, 1174251875Speter [havewin32shm="1" 1175251875Speter APR_DECIDE(USE_SHMEM_WIN32_ANON, 1176251875Speter [Windows CreateFileMapping()])]) 1177251875Spetercase $host in 1178251875Speter *linux* ) 1179251875Speter # Linux has problems with MM_SHMT_MMANON even though it reports 1180251875Speter # that it has it. 1181251875Speter # FIXME - find exact 2.3 version that MMANON was fixed in. It is 1182251875Speter # confirmed fixed in 2.4 series. 1183251875Speter if test $os_version -le "240"; then 1184251875Speter APR_DECISION_OVERRIDE(USE_SHMEM_MMAP_ZERO USE_SHMEM_SHMGET_ANON) 1185251875Speter fi 1186251875Speter ;; 1187251875Speter *hpux11* ) 1188251875Speter APR_DECISION_OVERRIDE(USE_SHMEM_SHMGET_ANON) 1189251875Speter ;; 1190251875Speteresac 1191251875SpeterAPR_END_DECISION 1192251875SpeterAC_DEFINE_UNQUOTED($ac_decision) 1193251875Speter 1194251875Speteruseshmgetanon="0" 1195251875Speterusemmapzero="0" 1196251875Speterusemmapanon="0" 1197251875Speter 1198251875Spetercase $ac_decision in 1199251875Speter USE_SHMEM_SHMGET_ANON ) 1200251875Speter useshmgetanon="1" 1201251875Speter ;; 1202251875Speter USE_SHMEM_MMAP_ZERO ) 1203251875Speter usemmapzero="1" 1204251875Speter ;; 1205251875Speter USE_SHMEM_MMAP_ANON ) 1206251875Speter usemmapanon="1" 1207251875Speter ;; 1208251875Speteresac 1209251875Speter 1210251875SpeterAC_SUBST(useshmgetanon) 1211251875SpeterAC_SUBST(usemmapzero) 1212251875SpeterAC_SUBST(usemmapanon) 1213251875SpeterAC_SUBST(haveshmgetanon) 1214251875SpeterAC_SUBST(havemmapzero) 1215251875SpeterAC_SUBST(havemmapanon) 1216251875Speter 1217251875Speter# Now we determine which one is our name-based shmem preference. 1218251875Speterhavemmaptmp="0" 1219251875Speterhavemmapshm="0" 1220251875Speterhaveshmget="0" 1221251875Speterhavebeosarea="0" 1222251875Speterhaveos2shm="0" 1223251875Speterhavewin32shm="0" 1224251875SpeterAPR_BEGIN_DECISION([namebased memory allocation method]) 1225251875SpeterAPR_IFALLYES(header:sys/mman.h func:mmap func:munmap, 1226251875Speter [havemmaptmp="1" 1227251875Speter APR_DECIDE(USE_SHMEM_MMAP_TMP, 1228251875Speter [Classical mmap() on temporary file])]) 1229251875SpeterAPR_IFALLYES(header:sys/mman.h func:mmap func:munmap func:shm_open dnl 1230251875Speter func:shm_unlink, 1231251875Speter [havemmapshm="1" 1232251875Speter APR_DECIDE(USE_SHMEM_MMAP_SHM, 1233251875Speter [mmap() via POSIX.1 shm_open() on temporary file])]) 1234251875SpeterAPR_IFALLYES(header:sys/ipc.h header:sys/shm.h header:sys/file.h dnl 1235251875Speter func:shmget func:shmat func:shmdt func:shmctl, 1236251875Speter [haveshmget="1" 1237251875Speter APR_DECIDE(USE_SHMEM_SHMGET, [SysV IPC shmget()])]) 1238251875SpeterAPR_IFALLYES(header:kernel/OS.h func:create_area, 1239251875Speter [havebeosshm="1" 1240251875Speter APR_DECIDE(USE_SHMEM_BEOS, [BeOS areas])]) 1241251875SpeterAPR_IFALLYES(header:os2.h, 1242251875Speter [haveos2shm="1" 1243251875Speter APR_DECIDE(USE_SHMEM_OS2, [OS/2 DosAllocSharedMem()])]) 1244251875SpeterAPR_IFALLYES(header:windows.h, 1245251875Speter [havewin32shm="1" 1246251875Speter APR_DECIDE(USE_SHMEM_WIN32, [Windows shared memory])]) 1247251875Spetercase $host in 1248251875Speter *linux* ) 1249251875Speter # Linux has problems with MM_SHMT_MMANON even though it reports 1250251875Speter # that it has it. 1251251875Speter # FIXME - find exact 2.3 version that MMANON was fixed in. It is 1252251875Speter # confirmed fixed in 2.4 series. 1253251875Speter if test $os_version -le "240"; then 1254251875Speter APR_DECISION_OVERRIDE(USE_SHMEM_MMAP_TMP USE_SHMEM_MMAP_SHM dnl 1255251875Speter USE_SHMEM_SHMGET) 1256251875Speter fi 1257251875Speter ;; 1258251875Speteresac 1259251875SpeterAPR_END_DECISION 1260251875SpeterAC_DEFINE_UNQUOTED($ac_decision) 1261251875Speter 1262251875Speterusemmaptmp="0" 1263251875Speterusemmapshm="0" 1264251875Speteruseshmget="0" 1265251875Speterusebeosarea="0" 1266251875Speteruseos2shm="0" 1267251875Speterusewin32shm="0" 1268251875Speter 1269251875Spetercase $ac_decision in 1270251875Speter USE_SHMEM_MMAP_TMP ) 1271251875Speter usemmaptmp="1" 1272251875Speter ;; 1273251875Speter USE_SHMEM_MMAP_SHM ) 1274251875Speter usemmapshm="1" 1275251875Speter ;; 1276251875Speter USE_SHMEM_SHMGET ) 1277251875Speter useshmget="1" 1278251875Speter ;; 1279251875Speter USE_SHMEM_BEOS ) 1280251875Speter usebeosarea="1" 1281251875Speter ;; 1282251875Speter USE_SHMEM_OS2 ) 1283251875Speter useos2shm="1" 1284251875Speter ;; 1285251875Speter USE_SHMEM_WIN32 ) 1286251875Speter usewin32shm="1" 1287251875Speter ;; 1288251875Speteresac 1289251875Speter 1290251875Speter# Do we have any shared memory support? 1291251875Speterif test "$usemmaptmp$usemmapshm$usemmapzero$useshmget$usemmapanon$usebeosarea$useos2shm$usewin32shm" = "00000000"; then 1292251875Speter sharedmem="0" 1293251875Speterelse 1294251875Speter sharedmem="1" 1295251875Speterfi 1296251875Speter 1297251875SpeterAC_SUBST(usemmaptmp) 1298251875SpeterAC_SUBST(usemmapshm) 1299251875SpeterAC_SUBST(useshmget) 1300251875SpeterAC_SUBST(usebeosarea) 1301251875SpeterAC_SUBST(useos2shm) 1302251875SpeterAC_SUBST(usewin32shm) 1303251875SpeterAC_SUBST(havemmaptmp) 1304251875SpeterAC_SUBST(havemmapshm) 1305251875SpeterAC_SUBST(haveshmget) 1306251875SpeterAC_SUBST(havebeosarea) 1307251875SpeterAC_SUBST(haveos2shm) 1308251875SpeterAC_SUBST(havewin32shm) 1309251875SpeterAC_SUBST(sharedmem) 1310251875Speter 1311251875Speterdnl ----------------------------- Checks for Any required Functions 1312251875Speterdnl Checks for library functions. (N.B. poll is further down) 1313251875Speter 1314251875SpeterAC_FUNC_ALLOCA 1315251875Speter 1316251875SpeterAC_CHECK_FUNCS([calloc setsid isinf isnan \ 1317251875Speter getenv putenv setenv unsetenv \ 1318251875Speter writev getifaddrs utime utimes]) 1319251875SpeterAC_CHECK_FUNCS(setrlimit, [ have_setrlimit="1" ], [ have_setrlimit="0" ]) 1320251875SpeterAC_CHECK_FUNCS(getrlimit, [ have_getrlimit="1" ], [ have_getrlimit="0" ]) 1321251875Spetersendfile="0" 1322251875SpeterAC_CHECK_LIB(sendfile, sendfilev) 1323251875SpeterAC_CHECK_FUNCS(sendfile send_file sendfilev, [ sendfile="1" ]) 1324251875Speter 1325251875Speterdnl THIS MUST COME AFTER THE THREAD TESTS - FreeBSD doesn't always have a 1326251875Speterdnl threaded poll() and we don't want to use sendfile on early FreeBSD 1327251875Speterdnl systems if we are also using threads. 1328251875Speter 1329251875SpeterAC_ARG_WITH(sendfile, [ --with-sendfile Override decision to use sendfile], 1330251875Speter [ if test "$withval" = "yes"; then 1331251875Speter sendfile="1" 1332251875Speter else 1333251875Speter sendfile="0" 1334251875Speter fi ], [ 1335251875Speter orig_sendfile=$sendfile 1336251875Speter case $host in 1337251875Speter *freebsd*) 1338251875Speter # FreeBSD < 4.2 has issues with threads+sendfile 1339251875Speter if test $os_version -le "401999"; then 1340251875Speter if test "$threads" = "1"; then 1341251875Speter sendfile="0" 1342251875Speter fi 1343251875Speter fi 1344251875Speter ;; 1345251875Speter *alpha*-dec-osf* ) 1346251875Speter sendfile="0" 1347251875Speter ;; 1348251875Speter s390-*-linux-gnu) 1349251875Speter # disable sendfile support for 2.2 on S/390 1350251875Speter if test $os_version -lt 240; then 1351251875Speter sendfile="0" 1352251875Speter fi 1353251875Speter ;; 1354251875Speter *aix*) 1355251875Speter # compiler-independent check for 64-bit build 1356251875Speter AC_CHECK_SIZEOF(void*, 4) 1357251875Speter if test "x$ac_cv_sizeof_voidp" = "x8"; then 1358251875Speter # sendfile not working for 64-bit build 1359251875Speter sendfile="0" 1360251875Speter fi 1361251875Speter ;; 1362251875Speter esac 1363251875Speter if test "$orig_sendfile" != "$sendfile"; then 1364251875Speter echo "sendfile support disabled to avoid system problem" 1365251875Speter fi ] ) 1366251875SpeterAC_SUBST(sendfile) 1367251875Speter 1368251875SpeterAC_CHECK_FUNCS(sigaction, [ have_sigaction="1" ], [ have_sigaction="0" ]) 1369251875SpeterAC_DECL_SYS_SIGLIST 1370251875Speter 1371251875SpeterAC_CHECK_FUNCS(fork, [ fork="1" ], [ fork="0" ]) 1372251875SpeterAPR_CHECK_INET_ADDR 1373251875SpeterAPR_CHECK_INET_NETWORK 1374251875SpeterAC_SUBST(apr_inaddr_none) 1375251875SpeterAC_CHECK_FUNC(_getch) 1376251875SpeterAC_CHECK_FUNCS(strerror_r, [ strerror_r="1" ], [ strerror_r="0" ]) 1377251875Speterif test "$strerror_r" = "1"; then 1378251875Speter APR_CHECK_STRERROR_R_RC 1379251875Speterfi 1380251875SpeterAC_CHECK_FUNCS(mmap, [ mmap="1" ], [ mmap="0" ]) 1381251875Speterif test "$native_mmap_emul" = "1"; then 1382251875Speter mmap="1" 1383251875Speterfi 1384251875SpeterAC_CHECK_FUNCS(memmove, [ have_memmove="1" ], [have_memmove="0" ]) 1385251875SpeterAC_CHECK_FUNCS([getpass getpassphrase gmtime_r localtime_r mkstemp]) 1386251875Speter 1387251875SpeterAC_SUBST(fork) 1388251875SpeterAC_SUBST(have_inet_addr) 1389251875SpeterAC_SUBST(tcp_nodelay_inherited) 1390251875SpeterAC_SUBST(o_nonblock_inherited) 1391251875SpeterAC_SUBST(have_inet_network) 1392251875SpeterAC_SUBST(have_sigaction) 1393251875SpeterAC_SUBST(have_setrlimit) 1394251875SpeterAC_SUBST(have_getrlimit) 1395251875SpeterAC_SUBST(mmap) 1396251875SpeterAC_SUBST(have_memmove) 1397251875Speter 1398251875SpeterAPR_CHECK_SIGWAIT_ONE_ARG 1399251875Speter 1400251875Speterdnl ----------------------------- Checks for Any required Headers 1401251875SpeterAC_HEADER_STDC 1402251875Speter 1403251875SpeterAPR_FLAG_HEADERS( 1404251875Speter ByteOrder.h \ 1405251875Speter conio.h \ 1406251875Speter crypt.h \ 1407251875Speter ctype.h \ 1408251875Speter dir.h \ 1409251875Speter dirent.h \ 1410251875Speter dl.h \ 1411251875Speter dlfcn.h \ 1412251875Speter errno.h \ 1413251875Speter fcntl.h \ 1414251875Speter grp.h \ 1415251875Speter io.h \ 1416251875Speter limits.h \ 1417251875Speter mach-o/dyld.h \ 1418251875Speter malloc.h \ 1419251875Speter memory.h \ 1420251875Speter netdb.h \ 1421251875Speter osreldate.h \ 1422251875Speter poll.h \ 1423251875Speter process.h \ 1424251875Speter pwd.h \ 1425251875Speter semaphore.h \ 1426251875Speter signal.h \ 1427251875Speter stdarg.h \ 1428251875Speter stddef.h \ 1429251875Speter stdio.h \ 1430251875Speter stdlib.h \ 1431251875Speter string.h \ 1432251875Speter strings.h \ 1433251875Speter sysapi.h \ 1434251875Speter sysgtime.h \ 1435251875Speter termios.h \ 1436251875Speter time.h \ 1437251875Speter tpfeq.h \ 1438251875Speter tpfio.h \ 1439251875Speter unistd.h \ 1440251875Speter unix.h \ 1441251875Speter windows.h \ 1442251875Speter winsock2.h \ 1443251875Speter arpa/inet.h \ 1444251875Speter kernel/OS.h \ 1445251875Speter net/errno.h \ 1446251875Speter netinet/in.h \ 1447251875Speter netinet/sctp.h \ 1448251875Speter netinet/sctp_uio.h \ 1449251875Speter sys/file.h \ 1450251875Speter sys/ioctl.h \ 1451251875Speter sys/mman.h \ 1452251875Speter sys/param.h \ 1453251875Speter sys/poll.h \ 1454251875Speter sys/resource.h \ 1455251875Speter sys/select.h \ 1456251875Speter sys/sem.h \ 1457251875Speter sys/sendfile.h \ 1458251875Speter sys/signal.h \ 1459251875Speter sys/socket.h \ 1460251875Speter sys/sockio.h \ 1461251875Speter sys/stat.h \ 1462251875Speter sys/sysctl.h \ 1463251875Speter sys/syslimits.h \ 1464251875Speter sys/time.h \ 1465251875Speter sys/types.h \ 1466251875Speter sys/uio.h \ 1467251875Speter sys/un.h \ 1468251875Speter sys/wait.h) 1469251875Speter 1470251875Speter# IRIX 6.5 has a problem in <netinet/tcp.h> which prevents it from 1471251875Speter# being included by itself. Check for <netinet/tcp.h> manually, 1472251875Speter# including another header file first. 1473251875SpeterAC_CACHE_CHECK([for netinet/tcp.h], [apr_cv_hdr_netinet_tcp_h], 1474251875Speter[AC_TRY_CPP( 1475251875Speter[#ifdef HAVE_NETINET_IN_H 1476251875Speter#include <netinet/in.h> 1477251875Speter#endif 1478251875Speter#include <netinet/tcp.h> 1479251875Speter], [apr_cv_hdr_netinet_tcp_h=yes], [apr_cv_hdr_netinet_tcp_h=no])]) 1480251875Speterif test "$apr_cv_hdr_netinet_tcp_h" = "yes"; then 1481251875Speter netinet_tcph=1 1482251875Speter AC_DEFINE([HAVE_NETINET_TCP_H], 1, [Defined if netinet/tcp.h is present]) 1483251875Speterelse 1484251875Speter netinet_tcph=0 1485251875Speterfi 1486251875Speter 1487251875SpeterAC_SUBST(arpa_ineth) 1488251875SpeterAC_SUBST(conioh) 1489251875SpeterAC_SUBST(ctypeh) 1490251875SpeterAC_SUBST(crypth) 1491251875SpeterAC_SUBST(errnoh) 1492251875SpeterAC_SUBST(direnth) 1493251875SpeterAC_SUBST(fcntlh) 1494251875SpeterAC_SUBST(ioh) 1495251875SpeterAC_SUBST(limitsh) 1496251875SpeterAC_SUBST(netdbh) 1497251875SpeterAC_SUBST(sys_syslimitsh) 1498251875SpeterAC_SUBST(netinet_inh) 1499251875SpeterAC_SUBST(netinet_sctph) 1500251875SpeterAC_SUBST(netinet_sctp_uioh) 1501251875SpeterAC_SUBST(netinet_tcph) 1502251875SpeterAC_SUBST(stdargh) 1503251875SpeterAC_SUBST(stdioh) 1504251875SpeterAC_SUBST(stdlibh) 1505251875SpeterAC_SUBST(stringh) 1506251875SpeterAC_SUBST(stringsh) 1507251875SpeterAC_SUBST(sys_ioctlh) 1508251875SpeterAC_SUBST(sys_sendfileh) 1509251875SpeterAC_SUBST(sys_signalh) 1510251875SpeterAC_SUBST(sys_socketh) 1511251875SpeterAC_SUBST(sys_sockioh) 1512251875SpeterAC_SUBST(sys_typesh) 1513251875SpeterAC_SUBST(sys_timeh) 1514251875SpeterAC_SUBST(sys_uioh) 1515251875SpeterAC_SUBST(sys_unh) 1516251875SpeterAC_SUBST(timeh) 1517251875SpeterAC_SUBST(unistdh) 1518251875SpeterAC_SUBST(signalh) 1519251875SpeterAC_SUBST(sys_waith) 1520251875SpeterAC_SUBST(processh) 1521251875SpeterAC_SUBST(pthreadh) 1522251875SpeterAC_SUBST(semaphoreh) 1523251875SpeterAC_SUBST(windowsh) 1524251875SpeterAC_SUBST(winsock2h) 1525251875Speter 1526251875Speter# Checking for h_errno in <netdb.h> 1527251875Speterif test "$netdbh" = "1"; then 1528251875Speter APR_CHECK_H_ERRNO_FLAG 1529251875Speter if test "$ac_cv_h_errno_cflags" = "no"; then 1530251875Speter AC_MSG_ERROR([can not find h_errno in netdb.h]) 1531251875Speter fi 1532251875Speterfi 1533251875Speter 1534251875SpeterAC_ARG_ENABLE(allocator-uses-mmap, 1535251875Speter [ --enable-allocator-uses-mmap Use mmap in apr_allocator instead of malloc (experimental)], 1536251875Speter [ if test "$enableval" = "yes"; then 1537251875Speter APR_IFALLYES(header:sys/mman.h func:mmap func:munmap define:MAP_ANON, 1538251875Speter [AC_DEFINE(APR_ALLOCATOR_USES_MMAP, 1, 1539251875Speter [Define if apr_allocator should use mmap]) ], 1540251875Speter [AC_MSG_ERROR([mmap()/MAP_ANON not supported]) ] 1541251875Speter ) 1542251875Speter fi ] 1543251875Speter) 1544251875Speter 1545251875Speterdnl ----------------------------- Checks for standard typedefs 1546251875SpeterAC_TYPE_OFF_T 1547251875SpeterAC_TYPE_PID_T 1548251875SpeterAC_TYPE_SIZE_T 1549251875SpeterAC_TYPE_UID_T 1550251875SpeterAC_CHECK_TYPE(ssize_t, int) 1551251875SpeterAC_C_INLINE 1552251875SpeterAC_C_CONST 1553251875SpeterAC_FUNC_SETPGRP 1554251875Speter 1555251875SpeterAPR_CHECK_SOCKLEN_T 1556251875Speter 1557251875Speterdnl Checks for pointer size 1558251875SpeterAC_CHECK_SIZEOF(void*, 4) 1559251875Speter 1560251875Speterif test "x$ac_cv_sizeof_voidp" != "x"; then 1561251875Speter voidp_size=$ac_cv_sizeof_voidp 1562251875Speterelse 1563251875Speter AC_ERROR([Cannot determine size of void*]) 1564251875Speterfi 1565251875Speter 1566251875Speterdnl Checks for integer size 1567251875SpeterAC_CHECK_SIZEOF(char, 1) 1568251875SpeterAC_CHECK_SIZEOF(int, 4) 1569251875SpeterAC_CHECK_SIZEOF(long, 4) 1570251875SpeterAC_CHECK_SIZEOF(short, 2) 1571251875SpeterAC_CHECK_SIZEOF(long long, 8) 1572251875Speter 1573251875Speterif test "$ac_cv_sizeof_short" = "2"; then 1574251875Speter short_value=short 1575251875Speterfi 1576251875Speterif test "$ac_cv_sizeof_int" = "4"; then 1577251875Speter int_value=int 1578251875Speterfi 1579251875Speter# Now we need to find what apr_int64_t (sizeof == 8) will be. 1580251875Speter# The first match is our preference. 1581251875Speterif test "$ac_cv_sizeof_int" = "8"; then 1582251875Speter int64_literal='#define APR_INT64_C(val) (val)' 1583251875Speter uint64_literal='#define APR_UINT64_C(val) (val##U)' 1584251875Speter int64_t_fmt='#define APR_INT64_T_FMT "d"' 1585251875Speter uint64_t_fmt='#define APR_UINT64_T_FMT "u"' 1586251875Speter uint64_t_hex_fmt='#define APR_UINT64_T_HEX_FMT "x"' 1587251875Speter int64_value="int" 1588251875Speter long_value=int 1589251875Speter int64_strfn="strtoi" 1590251875Speterelif test "$ac_cv_sizeof_long" = "8"; then 1591251875Speter int64_literal='#define APR_INT64_C(val) (val##L)' 1592251875Speter uint64_literal='#define APR_UINT64_C(val) (val##UL)' 1593251875Speter int64_t_fmt='#define APR_INT64_T_FMT "ld"' 1594251875Speter uint64_t_fmt='#define APR_UINT64_T_FMT "lu"' 1595251875Speter uint64_t_hex_fmt='#define APR_UINT64_T_HEX_FMT "lx"' 1596251875Speter int64_value="long" 1597251875Speter long_value=long 1598251875Speter int64_strfn="strtol" 1599251875Speterelif test "$ac_cv_sizeof_long_long" = "8"; then 1600251875Speter int64_literal='#define APR_INT64_C(val) (val##LL)' 1601251875Speter uint64_literal='#define APR_UINT64_C(val) (val##ULL)' 1602251875Speter # Linux, Solaris, FreeBSD all support ll with printf. 1603251875Speter # BSD 4.4 originated 'q'. Solaris is more popular and 1604251875Speter # doesn't support 'q'. Solaris wins. Exceptions can 1605251875Speter # go to the OS-dependent section. 1606251875Speter int64_t_fmt='#define APR_INT64_T_FMT "lld"' 1607251875Speter uint64_t_fmt='#define APR_UINT64_T_FMT "llu"' 1608251875Speter uint64_t_hex_fmt='#define APR_UINT64_T_HEX_FMT "llx"' 1609251875Speter int64_value="long long" 1610251875Speter long_value="long long" 1611251875Speter int64_strfn="strtoll" 1612251875Speterelif test "$ac_cv_sizeof_longlong" = "8"; then 1613251875Speter int64_literal='#define APR_INT64_C(val) (val##LL)' 1614251875Speter uint64_literal='#define APR_UINT64_C(val) (val##ULL)' 1615251875Speter int64_t_fmt='#define APR_INT64_T_FMT "qd"' 1616251875Speter uint64_t_fmt='#define APR_UINT64_T_FMT "qu"' 1617251875Speter uint64_t_hex_fmt='#define APR_UINT64_T_HEX_FMT "qx"' 1618251875Speter int64_value="__int64" 1619251875Speter long_value="__int64" 1620251875Speter int64_strfn="strtoll" 1621251875Speterelse 1622251875Speter # int64_literal may be overriden if your compiler thinks you have 1623251875Speter # a 64-bit value but APR does not agree. 1624251875Speter AC_ERROR([could not detect a 64-bit integer type]) 1625251875Speterfi 1626251875Speter 1627251875Speter# If present, allow the C99 macro INT64_C to override our conversion. 1628251875Speter# 1629251875Speter# HP-UX's ANSI C compiler provides this without any includes, so we 1630251875Speter# will first look for INT64_C without adding stdint.h 1631251875SpeterAC_CACHE_CHECK([for INT64_C], [apr_cv_define_INT64_C], [ 1632251875SpeterAC_EGREP_CPP(YES_IS_DEFINED, 1633251875Speter[#ifdef INT64_C 1634251875SpeterYES_IS_DEFINED 1635251875Speter#endif], [apr_cv_define_INT64_C=yes], [ 1636251875Speter # Now check for INT64_C in stdint.h 1637251875Speter AC_EGREP_CPP(YES_IS_DEFINED, [#include <stdint.h> 1638251875Speter#ifdef INT64_C 1639251875SpeterYES_IS_DEFINED 1640251875Speter#endif], [apr_cv_define_INT64_C=yes], [apr_cv_define_INT64_C=no])])]) 1641251875Speter 1642251875Speterif test "$apr_cv_define_INT64_C" = "yes"; then 1643251875Speter int64_literal='#define APR_INT64_C(val) INT64_C(val)' 1644251875Speter uint64_literal='#define APR_UINT64_C(val) UINT64_C(val)' 1645251875Speter stdint=1 1646251875Speterelse 1647251875Speter stdint=0 1648251875Speterfi 1649251875Speter 1650251875Speterif test "$ac_cv_type_size_t" = "yes"; then 1651251875Speter size_t_value="size_t" 1652251875Speterelse 1653251875Speter size_t_value="apr_int32_t" 1654251875Speterfi 1655251875Speterif test "$ac_cv_type_ssize_t" = "yes"; then 1656251875Speter ssize_t_value="ssize_t" 1657251875Speterelse 1658251875Speter ssize_t_value="apr_int32_t" 1659251875Speterfi 1660251875Speterif test "$ac_cv_socklen_t" = "yes"; then 1661251875Speter socklen_t_value="socklen_t" 1662251875Speter case $host in 1663251875Speter *-hp-hpux*) 1664251875Speter if test "$ac_cv_sizeof_long" = "8"; then 1665251875Speter # 64-bit HP-UX requires 32-bit socklens in 1666251875Speter # kernel, but user-space declarations say 1667251875Speter # 64-bit (socklen_t == size_t == long). 1668251875Speter # This will result in many compile warnings, 1669251875Speter # but we're functionally busted otherwise. 1670251875Speter socklen_t_value="int" 1671251875Speter fi 1672251875Speter ;; 1673251875Speter esac 1674251875Speterelse 1675251875Speter socklen_t_value="int" 1676251875Speterfi 1677251875Speter 1678251875SpeterAPR_CHECK_SIZEOF_EXTENDED([#include <sys/types.h>], pid_t, 8) 1679251875Speter 1680251875Speterif test "$ac_cv_sizeof_pid_t" = "$ac_cv_sizeof_short"; then 1681251875Speter pid_t_fmt='#define APR_PID_T_FMT "hd"' 1682251875Speterelif test "$ac_cv_sizeof_pid_t" = "$ac_cv_sizeof_int"; then 1683251875Speter pid_t_fmt='#define APR_PID_T_FMT "d"' 1684251875Speterelif test "$ac_cv_sizeof_pid_t" = "$ac_cv_sizeof_long"; then 1685251875Speter pid_t_fmt='#define APR_PID_T_FMT "ld"' 1686251875Speterelif test "$ac_cv_sizeof_pid_t" = "$ac_cv_sizeof_long_long"; then 1687251875Speter pid_t_fmt='#define APR_PID_T_FMT APR_INT64_T_FMT' 1688251875Speterelse 1689251875Speter pid_t_fmt='#error Can not determine the proper size for pid_t' 1690251875Speterfi 1691251875Speter 1692251875Speter# Basically, we have tried to figure out the correct format strings 1693251875Speter# for APR types which vary between platforms, but we don't always get 1694251875Speter# it right. 1695251875Spetercase $host in 1696251875Speter s390*linux*) 1697251875Speter # uniquely, the 31-bit Linux/s390 uses "unsigned long int" 1698251875Speter # for size_t rather than "unsigned int": 1699251875Speter size_t_fmt="lu" 1700251875Speter ssize_t_fmt="ld" 1701251875Speter ;; 1702251875Speter *-os2*) 1703251875Speter size_t_fmt="lu" 1704251875Speter ;; 1705251875Speter *-solaris*) 1706251875Speter if test "$ac_cv_sizeof_long" = "8"; then 1707251875Speter pid_t_fmt='#define APR_PID_T_FMT "d"' 1708251875Speter else 1709251875Speter pid_t_fmt='#define APR_PID_T_FMT "ld"' 1710251875Speter fi 1711251875Speter ;; 1712251875Speter *aix4*|*aix5*) 1713251875Speter ssize_t_fmt="ld" 1714251875Speter size_t_fmt="lu" 1715251875Speter ;; 1716251875Speter *beos*) 1717251875Speter ssize_t_fmt="ld" 1718251875Speter size_t_fmt="ld" 1719251875Speter ;; 1720251875Speter *apple-darwin*) 1721251875Speter osver=`uname -r` 1722251875Speter case $osver in 1723251875Speter [[0-7]].*) 1724251875Speter ssize_t_fmt="d" 1725251875Speter ;; 1726251875Speter *) 1727251875Speter ssize_t_fmt="ld" 1728251875Speter ;; 1729251875Speter esac 1730251875Speter size_t_fmt="lu" 1731251875Speter ;; 1732251875Speter *-mingw*) 1733251875Speter int64_t_fmt='#define APR_INT64_T_FMT "I64d"' 1734251875Speter uint64_t_fmt='#define APR_UINT64_T_FMT "I64u"' 1735251875Speter uint64_t_hex_fmt='#define APR_UINT64_T_HEX_FMT "I64x"' 1736251875Speter int64_value="__int64" 1737251875Speter long_value="__int64" 1738251875Speter int64_strfn="_strtoi64" 1739251875Speter ;; 1740251875Speteresac 1741251875Speter 1742251875SpeterAPR_CHECK_TYPES_COMPATIBLE(ssize_t, int, [ssize_t_fmt="d"]) 1743251875SpeterAPR_CHECK_TYPES_COMPATIBLE(ssize_t, long, [ssize_t_fmt="ld"]) 1744251875SpeterAPR_CHECK_TYPES_COMPATIBLE(size_t, unsigned int, [size_t_fmt="u"]) 1745251875SpeterAPR_CHECK_TYPES_COMPATIBLE(size_t, unsigned long, [size_t_fmt="lu"]) 1746251875Speter 1747251875SpeterAPR_CHECK_SIZEOF_EXTENDED([#include <sys/types.h>], ssize_t, 8) 1748251875Speter 1749251875SpeterAC_MSG_CHECKING([which format to use for apr_ssize_t]) 1750251875Speterif test -n "$ssize_t_fmt"; then 1751251875Speter AC_MSG_RESULT(%$ssize_t_fmt) 1752251875Speterelif test "$ac_cv_sizeof_ssize_t" = "$ac_cv_sizeof_int"; then 1753251875Speter ssize_t_fmt="d" 1754251875Speter AC_MSG_RESULT(%d) 1755251875Speterelif test "$ac_cv_sizeof_ssize_t" = "$ac_cv_sizeof_long"; then 1756251875Speter ssize_t_fmt="ld" 1757251875Speter AC_MSG_RESULT(%ld) 1758251875Speterelse 1759251875Speter AC_ERROR([could not determine the proper format for apr_ssize_t]) 1760251875Speterfi 1761251875Speter 1762251875Speterssize_t_fmt="#define APR_SSIZE_T_FMT \"$ssize_t_fmt\"" 1763251875Speter 1764251875SpeterAPR_CHECK_SIZEOF_EXTENDED([#include <stddef.h>], size_t, 8) 1765251875Speter 1766251875SpeterAC_MSG_CHECKING([which format to use for apr_size_t]) 1767251875Speterif test -n "$size_t_fmt"; then 1768251875Speter AC_MSG_RESULT(%$size_t_fmt) 1769251875Speterelif test "$ac_cv_sizeof_size_t" = "$ac_cv_sizeof_int"; then 1770251875Speter size_t_fmt="d" 1771251875Speter AC_MSG_RESULT(%d) 1772251875Speterelif test "$ac_cv_sizeof_size_t" = "$ac_cv_sizeof_long"; then 1773251875Speter size_t_fmt="ld" 1774251875Speter AC_MSG_RESULT(%ld) 1775251875Speterelse 1776251875Speter AC_ERROR([could not determine the proper format for apr_size_t]) 1777251875Speterfi 1778251875Speter 1779251875Spetersize_t_fmt="#define APR_SIZE_T_FMT \"$size_t_fmt\"" 1780251875Speter 1781251875SpeterAPR_CHECK_SIZEOF_EXTENDED([#include <sys/types.h>], off_t, 8) 1782251875Speter 1783251875Speterif test "${ac_cv_sizeof_off_t}${apr_cv_use_lfs64}" = "4yes"; then 1784251875Speter # Enable LFS 1785251875Speter aprlfs=1 1786251875Speter AC_CHECK_FUNCS([mmap64 sendfile64 sendfilev64 mkstemp64 readdir64_r]) 1787251875Speterelif test "${ac_cv_sizeof_off_t}" != "${ac_cv_sizeof_size_t}"; then 1788251875Speter # unsure of using -gt above is as portable, can can't forsee where 1789251875Speter # off_t can legitimately be smaller than size_t 1790251875Speter aprlfs=1 1791251875Speterelse 1792251875Speter aprlfs=0 1793251875Speterfi 1794251875Speter 1795251875SpeterAC_MSG_CHECKING([which type to use for apr_off_t]) 1796251875Speterif test "${ac_cv_sizeof_off_t}${apr_cv_use_lfs64}" = "4yes"; then 1797251875Speter # LFS is go! 1798251875Speter off_t_fmt='#define APR_OFF_T_FMT APR_INT64_T_FMT' 1799251875Speter off_t_value='off64_t' 1800251875Speter off_t_strfn='apr_strtoi64' 1801251875Speterelif test "${ac_cv_sizeof_off_t}x${ac_cv_sizeof_long}" = "4x4"; then 1802251875Speter # Special case: off_t may change size with _FILE_OFFSET_BITS 1803251875Speter # on 32-bit systems with LFS support. To avoid compatibility 1804251875Speter # issues when other packages do define _FILE_OFFSET_BITS, 1805251875Speter # hard-code apr_off_t to long. 1806251875Speter off_t_value=long 1807251875Speter off_t_fmt='#define APR_OFF_T_FMT "ld"' 1808251875Speter off_t_strfn='strtol' 1809251875Speterelif test "$ac_cv_type_off_t" = "yes"; then 1810251875Speter off_t_value=off_t 1811251875Speter # off_t is more commonly a long than an int; prefer that case 1812251875Speter # where int and long are the same size. 1813251875Speter if test "$ac_cv_sizeof_off_t" = "$ac_cv_sizeof_long"; then 1814251875Speter off_t_fmt='#define APR_OFF_T_FMT "ld"' 1815251875Speter off_t_strfn='strtol' 1816251875Speter elif test "$ac_cv_sizeof_off_t" = "$ac_cv_sizeof_int"; then 1817251875Speter off_t_fmt='#define APR_OFF_T_FMT "d"' 1818251875Speter off_t_strfn='strtoi' 1819251875Speter elif test "$ac_cv_sizeof_off_t" = "$ac_cv_sizeof_long_long"; then 1820251875Speter off_t_fmt='#define APR_OFF_T_FMT APR_INT64_T_FMT' 1821251875Speter off_t_strfn='apr_strtoi64' 1822251875Speter else 1823251875Speter AC_ERROR([could not determine the size of off_t]) 1824251875Speter fi 1825251875Speter # Per OS tuning... 1826251875Speter case $host in 1827251875Speter *-mingw*) 1828251875Speter off_t_value=apr_int64_t 1829251875Speter off_t_fmt='#define APR_OFF_T_FMT "I64d"' 1830251875Speter off_t_strfn='_strtoi64' 1831251875Speter ;; 1832251875Speter esac 1833251875Speterelse 1834251875Speter # Fallback on int 1835251875Speter off_t_value=apr_int32_t 1836251875Speter off_t_fmt=d 1837251875Speter off_t_strfn='strtoi' 1838251875Speterfi 1839251875SpeterAC_MSG_RESULT($off_t_value) 1840251875Speter 1841251875Speter# Regardless of whether _LARGEFILE64_SOURCE is used, on some 1842251875Speter# platforms _FILE_OFFSET_BITS will affect the size of ino_t and hence 1843251875Speter# the build-time ABI may be different from the apparent ABI when using 1844251875Speter# APR with another package which *does* define _FILE_OFFSET_BITS. 1845251875Speter# (Exactly as per the case above with off_t where LFS is *not* used) 1846251875Speter# 1847251875Speter# To be safe, hard-code apr_ino_t as 'unsigned long' or 'unsigned int' 1848251875Speter# iff that is exactly the size of ino_t here; otherwise use ino_t as existing 1849251875Speter# releases did. To be correct, apr_ino_t should have been made an 1850251875Speter# ino64_t as apr_off_t is off64_t, but this can't be done now without 1851251875Speter# breaking ABI. 1852251875Speter 1853251875Speter# Per OS tuning... 1854251875Spetercase $host in 1855251875Speter*mingw*) 1856251875Speter ino_t_value=apr_int64_t 1857251875Speter ;; 1858251875Speter*) 1859251875Speter ino_t_value=ino_t 1860251875Speter APR_CHECK_SIZEOF_EXTENDED(AC_INCLUDES_DEFAULT, ino_t, $ac_cv_sizeof_long) 1861251875Speter if test $ac_cv_sizeof_ino_t = 4; then 1862251875Speter if test $ac_cv_sizeof_long = 4; then 1863251875Speter ino_t_value="unsigned long" 1864251875Speter else 1865251875Speter ino_t_value="unsigned int" 1866251875Speter fi 1867251875Speter fi 1868251875Speter ;; 1869251875Speteresac 1870251875SpeterAC_MSG_NOTICE([using $ino_t_value for ino_t]) 1871251875Speter 1872251875Speter# Checks for endianness 1873251875SpeterAC_C_BIGENDIAN 1874251875Speterif test $ac_cv_c_bigendian = yes; then 1875251875Speter bigendian=1 1876251875Speterelse 1877251875Speter bigendian=0 1878251875Speterfi 1879251875Speter 1880251875SpeterAPR_CHECK_SIZEOF_EXTENDED([#include <sys/types.h> 1881251875Speter#include <sys/uio.h>],struct iovec,0) 1882251875Speterif test "$ac_cv_sizeof_struct_iovec" = "0"; then 1883251875Speter have_iovec=0 1884251875Speterelse 1885251875Speter have_iovec=1 1886251875Speterfi 1887251875Speter 1888251875SpeterAC_SUBST(voidp_size) 1889251875SpeterAC_SUBST(short_value) 1890251875SpeterAC_SUBST(int_value) 1891251875SpeterAC_SUBST(long_value) 1892251875SpeterAC_SUBST(int64_value) 1893251875SpeterAC_SUBST(off_t_value) 1894251875SpeterAC_SUBST(size_t_value) 1895251875SpeterAC_SUBST(ssize_t_value) 1896251875SpeterAC_SUBST(socklen_t_value) 1897251875SpeterAC_SUBST(int64_t_fmt) 1898251875SpeterAC_SUBST(uint64_t_fmt) 1899251875SpeterAC_SUBST(uint64_t_hex_fmt) 1900251875SpeterAC_SUBST(ssize_t_fmt) 1901251875SpeterAC_SUBST(size_t_fmt) 1902251875SpeterAC_SUBST(off_t_fmt) 1903251875SpeterAC_SUBST(pid_t_fmt) 1904251875SpeterAC_SUBST(int64_literal) 1905251875SpeterAC_SUBST(uint64_literal) 1906251875SpeterAC_SUBST(stdint) 1907251875SpeterAC_SUBST(bigendian) 1908251875SpeterAC_SUBST(aprlfs) 1909251875SpeterAC_SUBST(have_iovec) 1910251875SpeterAC_SUBST(ino_t_value) 1911251875Speter 1912251875Speterdnl ----------------------------- Checking for string functions 1913251875SpeterAC_CHECK_FUNCS(strnicmp, have_strnicmp="1", have_strnicmp="0") 1914251875SpeterAC_CHECK_FUNCS(strncasecmp, have_strncasecmp="1", have_strncasecmp="0") 1915251875SpeterAC_CHECK_FUNCS(stricmp, have_stricmp="1", have_stricmp="0") 1916251875SpeterAC_CHECK_FUNCS(strcasecmp, have_strcasecmp="1", have_strcasecmp="0") 1917251875SpeterAC_CHECK_FUNCS(strdup, have_strdup="1", have_strdup="0") 1918251875SpeterAC_CHECK_FUNCS(strstr, have_strstr="1", have_strstr="0") 1919251875SpeterAC_CHECK_FUNCS(memchr, have_memchr="1", have_memchr="0") 1920251875SpeterAC_CHECK_FUNC($int64_strfn, have_int64_strfn="1", have_int64_strfn="0") 1921251875Speter 1922251875Speterdnl ----------------------------- We have a fallback position 1923251875Speterif test "$have_int64_strfn" = "0" && test "$int64_strfn" = "strtoll"; then 1924251875Speter int64_strfn="strtoq" 1925251875Speter AC_CHECK_FUNC(strtoq, [have_int64_strfn=1], [have_int64_strfn=0]) 1926251875Speterfi 1927251875Speter 1928251875Speterif test "$have_int64_strfn" = "1"; then 1929251875Speter AC_DEFINE_UNQUOTED(APR_INT64_STRFN, [$int64_strfn], 1930251875Speter [Define as function which can be used for conversion of strings to apr_int64_t]) 1931251875Speterfi 1932251875Speter 1933251875SpeterAC_SUBST(have_strnicmp) 1934251875SpeterAC_SUBST(have_strncasecmp) 1935251875SpeterAC_SUBST(have_stricmp) 1936251875SpeterAC_SUBST(have_strcasecmp) 1937251875SpeterAC_SUBST(have_strdup) 1938251875SpeterAC_SUBST(have_strstr) 1939251875SpeterAC_SUBST(have_memchr) 1940251875Speter 1941251875Speterif test "$off_t_strfn" = "apr_strtoi64" && test "$have_int64_strfn" = "1"; then 1942251875Speter off_t_strfn=$int64_strfn 1943251875Speterfi 1944251875SpeterAC_DEFINE_UNQUOTED(APR_OFF_T_STRFN, [$off_t_strfn], 1945251875Speter [Define as function used for conversion of strings to apr_off_t]) 1946251875Speter 1947251875Speterdnl ----------------------------- Checking for DSO support 1948251875Speterecho "${nl}Checking for DSO..." 1949251875SpeterAC_ARG_ENABLE(dso, 1950251875Speter [ --disable-dso Disable DSO support ], 1951251875Speter [if test "x$enableval" = "xyes"; then 1952251875Speter dsotype=any 1953251875Speter else 1954251875Speter dsotype=$enableval 1955251875Speter fi 1956251875Speter ], [dsotype=any]) 1957251875Speter 1958251875Speterif test "$dsotype" = "any"; then 1959251875Speter if test "$dsotype" = "any"; then 1960251875Speter case $host in 1961251875Speter *darwin[[0-8]]\.*) 1962251875Speter # Original Darwin, not for 9.0!: 1963251875Speter AC_CHECK_FUNC(NSLinkModule, [dsotype=dyld]);; 1964251875Speter hppa*-hpux[[1-9]]\.*|hppa*-hpux1[[01]]*) 1965251875Speter # shl is specific to parisc hpux SOM binaries, not used for 64 bit 1966251875Speter AC_CHECK_LIB(dld, shl_load, [have_shl=1]) 1967251875Speter if test "$ac_cv_sizeof_voidp$have_shl" = "41"; then 1968251875Speter dsotype=shl; APR_ADDTO(LIBS,-ldld) 1969251875Speter fi;; 1970251875Speter *mingw*|*-os2*) 1971251875Speter # several 'other's below probably belong up here. If they always 1972251875Speter # use a platform implementation and shouldn't test the dlopen/dlfcn 1973251875Speter # features, then bring them up here. 1974251875Speter # But if they -should- optionally use dlfcn, and/or need the config 1975251875Speter # detection of dlopen/dlsym, do not move them up. 1976251875Speter dsotype=other ;; 1977251875Speter esac 1978251875Speter fi 1979251875Speter # Normal POSIX: 1980251875Speter if test "$dsotype" = "any"; then 1981251875Speter AC_CHECK_FUNC(dlopen, [dsotype=dlfcn]) 1982251875Speter fi 1983251875Speter if test "$dsotype" = "any"; then 1984251875Speter AC_CHECK_LIB(dl, dlopen, [dsotype=dlfcn; APR_ADDTO(LIBS,-ldl)]) 1985251875Speter fi 1986251875Speter if test "$dsotype" = "dlfcn"; then 1987251875Speter # ReliantUnix has dlopen() in libc but dlsym() in libdl :( 1988251875Speter AC_CHECK_FUNC(dlsym, [], 1989251875Speter [AC_CHECK_LIB(dl, dlsym, 1990251875Speter [APR_ADDTO(LIBS, -ldl)], 1991251875Speter [dsotype=any 1992251875Speter echo "Weird: dlopen() was found but dlsym() was not found!"])]) 1993251875Speter fi 1994251875Speter if test "$dsotype" = "any"; then 1995251875Speter # BeOS: 1996251875Speter AC_CHECK_LIB(root, load_image, [dsotype=other]) 1997251875Speter fi 1998251875Speter # Everything else: 1999251875Speter if test "$dsotype" = "any"; then 2000251875Speter case $host in 2001251875Speter *os390|*os400|*-aix*) 2002251875Speter # Some -aix5 will use dl, no hassles. Keep that pattern here. 2003251875Speter dsotype=other ;; 2004251875Speter *-hpux*) 2005251875Speter if test "$have_shl" = "1"; then 2006251875Speter dsotype=shl; APR_ADDTO(LIBS,-ldld) 2007251875Speter fi;; 2008251875Speter esac 2009251875Speter fi 2010251875Speterfi 2011251875Speter 2012251875Speterif test "$dsotype" = "any"; then 2013251875Speter AC_MSG_ERROR([Could not detect suitable DSO implementation]) 2014251875Speterelif test "$dsotype" = "no"; then 2015251875Speter aprdso="0" 2016251875Speterelse 2017251875Speter case "$dsotype" in 2018251875Speter dlfcn) AC_DEFINE(DSO_USE_DLFCN, 1, [Define if DSO support uses dlfcn.h]);; 2019251875Speter shl) AC_DEFINE(DSO_USE_SHL, 1, [Define if DSO support uses shl_load]);; 2020251875Speter dyld) AC_DEFINE(DSO_USE_DYLD, 1, [Define if DSO support uses dyld.h]);; 2021251875Speter other) ;; # Use whatever is in dso/OSDIR 2022251875Speter *) AC_MSG_ERROR([Unknown DSO implementation "$dsotype"]);; 2023251875Speter esac 2024251875Speter aprdso="1" 2025251875Speter apr_modules="$apr_modules dso" 2026251875Speterfi 2027251875Speter 2028251875SpeterAC_SUBST(aprdso) 2029251875Speter 2030251875Speterdnl ----------------------------- Checking for Processes 2031251875Speterecho "${nl}Checking for Processes..." 2032251875Speter 2033251875SpeterAC_CHECK_FUNCS(waitpid) 2034251875Speter 2035251875SpeterAC_ARG_ENABLE(other-child, 2036251875Speter [ --enable-other-child Enable reliable child processes ], 2037251875Speter [ if test "$enableval" = "yes"; then 2038251875Speter oc="1" 2039251875Speter else 2040251875Speter oc="0" 2041251875Speter fi ], 2042251875Speter [ oc=1 ] ) 2043251875Speter 2044251875SpeterAC_SUBST(oc) 2045251875Speter 2046251875Speterif test -z "$have_proc_invoked"; then 2047251875Speter have_proc_invoked="0" 2048251875Speterfi 2049251875Speter 2050251875SpeterAC_SUBST(have_proc_invoked) 2051251875Speter 2052251875SpeterAC_MSG_CHECKING(for Variable Length Arrays) 2053251875SpeterAPR_TRY_COMPILE_NO_WARNING([], 2054251875Speter[ 2055251875Speter int foo[argc]; 2056251875Speter foo[0] = 0; 2057251875Speter], vla_msg=yes, vla_msg=no ) 2058251875SpeterAC_MSG_RESULT([$vla_msg]) 2059251875Speterif test "$vla_msg" = "yes"; then 2060251875Speter AC_DEFINE(HAVE_VLA, 1, [Define if C compiler supports VLA]) 2061251875Speterfi 2062251875Speter 2063251875SpeterAC_CACHE_CHECK(struct rlimit,ac_cv_struct_rlimit,[ 2064251875SpeterAC_TRY_RUN([ 2065251875Speter#include <sys/types.h> 2066251875Speter#include <sys/time.h> 2067251875Speter#include <sys/resource.h> 2068251875Spetermain() 2069251875Speter{ 2070251875Speter struct rlimit limit; 2071251875Speter limit.rlim_cur = 0; 2072251875Speter limit.rlim_max = 0; 2073251875Speter exit(0); 2074251875Speter}], [ 2075251875Speter ac_cv_struct_rlimit=yes ], [ 2076251875Speter ac_cv_struct_rlimit=no ], [ 2077251875Speter ac_cv_struct_rlimit=no ] ) ] ) 2078251875Speterstruct_rlimit=0 2079251875Spetertest "x$ac_cv_struct_rlimit" = xyes && struct_rlimit=1 2080251875SpeterAC_SUBST(struct_rlimit) 2081251875Speter 2082251875Speterdnl ----------------------------- Checking for Locking Characteristics 2083251875Speterecho "${nl}Checking for Locking..." 2084251875Speter 2085251875SpeterAC_CHECK_FUNCS(semget semctl flock) 2086251875SpeterAC_CHECK_HEADERS(semaphore.h OS.h) 2087251875SpeterAC_SEARCH_LIBS(sem_open, rt) 2088251875SpeterAC_CHECK_FUNCS(sem_close sem_unlink sem_post sem_wait create_sem) 2089251875Speter 2090251875Speter# Some systems return ENOSYS from sem_open. 2091251875SpeterAC_CACHE_CHECK(for working sem_open,ac_cv_func_sem_open,[ 2092251875SpeterAC_TRY_RUN([ 2093251875Speter#include <errno.h> 2094251875Speter#include <stdlib.h> 2095251875Speter#include <fcntl.h> 2096251875Speter#include <semaphore.h> 2097251875Speter#ifndef SEM_FAILED 2098251875Speter#define SEM_FAILED (-1) 2099251875Speter#endif 2100251875Spetermain() 2101251875Speter{ 2102251875Speter sem_t *psem; 2103251875Speter const char *sem_name = "/apr_autoconf"; 2104251875Speter 2105251875Speter psem = sem_open(sem_name, O_CREAT, 0644, 1); 2106251875Speter if (psem == (sem_t *)SEM_FAILED) { 2107251875Speter exit(1); 2108251875Speter } 2109251875Speter sem_close(psem); 2110251875Speter psem = sem_open(sem_name, O_CREAT | O_EXCL, 0644, 1); 2111251875Speter if (psem != (sem_t *)SEM_FAILED) { 2112251875Speter sem_close(psem); 2113251875Speter exit(1); 2114251875Speter } 2115251875Speter sem_unlink(sem_name); 2116251875Speter exit(0); 2117251875Speter}], [ac_cv_func_sem_open=yes], [ac_cv_func_sem_open=no], 2118251875Speter[ac_cv_func_sem_open=no])]) 2119251875Speter 2120251875Speter# It's stupid, but not all platforms have union semun, even those that need it. 2121251875SpeterAC_MSG_CHECKING(for union semun in sys/sem.h) 2122251875SpeterAC_TRY_COMPILE([ 2123251875Speter#include <sys/types.h> 2124251875Speter#include <sys/ipc.h> 2125251875Speter#include <sys/sem.h> 2126251875Speter],[ 2127251875Speterunion semun arg; 2128251875Spetersemctl(0, 0, 0, arg); 2129251875Speter], [have_union_semun="1" union_semun=yes ] 2130251875Spetermsg=yes, [ 2131251875Speterhave_union_semun="0" 2132251875Spetermsg=no ] ) 2133251875SpeterAC_MSG_RESULT([$msg]) 2134251875SpeterAC_SUBST(have_union_semun) 2135251875Speter 2136251875Speterdnl Checks for libraries. 2137251875SpeterAPR_CHECK_DEFINE(LOCK_EX, sys/file.h) 2138251875SpeterAPR_CHECK_DEFINE(F_SETLK, fcntl.h) 2139251875SpeterAPR_CHECK_DEFINE(SEM_UNDO, sys/sem.h) 2140251875Speter 2141251875Speter# We are assuming that if the platform doesn't have POLLIN, it doesn't have 2142251875Speter# any POLL definitions. 2143251875SpeterAPR_CHECK_DEFINE_FILES(POLLIN, poll.h sys/poll.h) 2144251875Speter 2145251875Speterif test "$threads" = "1"; then 2146251875Speter APR_CHECK_DEFINE(PTHREAD_PROCESS_SHARED, pthread.h) 2147251875Speter AC_CHECK_FUNCS(pthread_mutexattr_setpshared) 2148251875Speter # Some systems have setpshared and define PROCESS_SHARED, but don't 2149251875Speter # really support PROCESS_SHARED locks. So, we must validate that we 2150251875Speter # can go through the steps without receiving some sort of system error. 2151251875Speter # Linux and older versions of AIX have this problem. 2152251875Speter APR_IFALLYES(header:pthread.h define:PTHREAD_PROCESS_SHARED func:pthread_mutexattr_setpshared, [ 2153251875Speter AC_CACHE_CHECK([for working PROCESS_SHARED locks], apr_cv_process_shared_works, [ 2154251875Speter AC_TRY_RUN([ 2155251875Speter#include <sys/types.h> 2156251875Speter#include <pthread.h> 2157251875Speter int main() 2158251875Speter { 2159251875Speter pthread_mutex_t mutex; 2160251875Speter pthread_mutexattr_t attr; 2161251875Speter if (pthread_mutexattr_init(&attr)) 2162251875Speter exit(1); 2163251875Speter if (pthread_mutexattr_setpshared(&attr, PTHREAD_PROCESS_SHARED)) 2164251875Speter exit(2); 2165251875Speter if (pthread_mutex_init(&mutex, &attr)) 2166251875Speter exit(3); 2167251875Speter if (pthread_mutexattr_destroy(&attr)) 2168251875Speter exit(4); 2169251875Speter if (pthread_mutex_destroy(&mutex)) 2170251875Speter exit(5); 2171251875Speter exit(0); 2172251875Speter }], [apr_cv_process_shared_works=yes], [apr_cv_process_shared_works=no])]) 2173251875Speter # Override detection of pthread_mutexattr_setpshared 2174251875Speter ac_cv_func_pthread_mutexattr_setpshared=$apr_cv_process_shared_works]) 2175251875Speter 2176251875Speter if test "$ac_cv_func_pthread_mutexattr_setpshared" = "yes"; then 2177251875Speter APR_CHECK_PTHREAD_ROBUST_SHARED_MUTEX 2178251875Speter fi 2179251875Speterfi 2180251875Speter 2181251875Speter# See which lock mechanisms we can support on this system. 2182251875SpeterAPR_IFALLYES(header:semaphore.h func:sem_open func:sem_close dnl 2183251875Speter func:sem_unlink func:sem_post func:sem_wait, 2184251875Speter hasposixser="1", hasposixser="0") 2185251875SpeterAPR_IFALLYES(func:semget func:semctl define:SEM_UNDO, hassysvser="1", 2186251875Speter hassysvser="0") 2187251875SpeterAPR_IFALLYES(func:flock define:LOCK_EX, hasflockser="1", hasflockser="0") 2188251875SpeterAPR_IFALLYES(header:fcntl.h define:F_SETLK, hasfcntlser="1", hasfcntlser="0") 2189251875Speter# note: the current APR use of shared mutex requires /dev/zero 2190251875SpeterAPR_IFALLYES(header:pthread.h define:PTHREAD_PROCESS_SHARED dnl 2191251875Speter func:pthread_mutexattr_setpshared dnl 2192251875Speter file:/dev/zero, 2193251875Speter hasprocpthreadser="1", hasprocpthreadser="0") 2194251875SpeterAPR_IFALLYES(header:OS.h func:create_sem, hasbeossem="1", hasbeossem="0") 2195251875Speter 2196251875Speter# See which lock mechanism we'll select by default on this system. 2197251875Speter# The last APR_DECIDE to execute sets the default. 2198251875Speter# At this stage, we match the ordering in Apache 1.3 2199251875Speter# which is (highest to lowest): sysvsem -> fcntl -> flock. 2200251875Speter# POSIX semaphores and cross-process pthread mutexes are not 2201251875Speter# used by default since they have less desirable behaviour when 2202251875Speter# e.g. a process holding the mutex segfaults. 2203251875Speter# The BEOSSEM decision doesn't require any substitutions but is 2204251875Speter# included here to prevent the fcntl() branch being selected 2205251875Speter# from the decision making. 2206251875SpeterAPR_BEGIN_DECISION([apr_lock implementation method]) 2207251875SpeterAPR_IFALLYES(func:flock define:LOCK_EX, 2208251875Speter APR_DECIDE(USE_FLOCK_SERIALIZE, [4.2BSD-style flock()])) 2209251875SpeterAPR_IFALLYES(header:fcntl.h define:F_SETLK, 2210251875Speter APR_DECIDE(USE_FCNTL_SERIALIZE, [SVR4-style fcntl()])) 2211251875SpeterAPR_IFALLYES(func:semget func:semctl define:SEM_UNDO, 2212251875Speter APR_DECIDE(USE_SYSVSEM_SERIALIZE, [SysV IPC semget()])) 2213251875SpeterAPR_IFALLYES(header:OS.h func:create_sem, 2214251875Speter APR_DECIDE(USE_BEOSSEM, [BeOS Semaphores])) 2215251875Speterif test "x$apr_lock_method" != "x"; then 2216251875Speter APR_DECISION_FORCE($apr_lock_method) 2217251875Speterfi 2218251875SpeterAPR_END_DECISION 2219251875SpeterAC_DEFINE_UNQUOTED($ac_decision) 2220251875Speter 2221251875Speterflockser="0" 2222251875Spetersysvser="0" 2223251875Speterposixser="0" 2224251875Speterprocpthreadser="0" 2225251875Speterfcntlser="0" 2226251875Spetercase $ac_decision in 2227251875Speter USE_FLOCK_SERIALIZE ) 2228251875Speter flockser="1" 2229251875Speter ;; 2230251875Speter USE_FCNTL_SERIALIZE ) 2231251875Speter fcntlser="1" 2232251875Speter ;; 2233251875Speter USE_SYSVSEM_SERIALIZE ) 2234251875Speter sysvser="1" 2235251875Speter ;; 2236251875Speter USE_POSIXSEM_SERIALIZE ) 2237251875Speter posixser="1" 2238251875Speter ;; 2239251875Speter USE_PROC_PTHREAD_SERIALIZE ) 2240251875Speter procpthreadser="1" 2241251875Speter ;; 2242251875Speter USE_BEOSSEM ) 2243251875Speter beossem="1" 2244251875Speter ;; 2245251875Speteresac 2246251875Speter 2247251875Speterif test $hasfcntlser = "1"; then 2248251875SpeterAC_MSG_CHECKING(if fcntl returns EACCES when F_SETLK is already held) 2249251875SpeterAC_TRY_RUN([ 2250251875Speter#ifdef HAVE_STDLIB_H 2251251875Speter#include <stdlib.h> 2252251875Speter#endif 2253251875Speter#ifdef HAVE_SYS_TYPES_H 2254251875Speter#include <sys/types.h> 2255251875Speter#endif 2256251875Speter#ifdef HAVE_SYS_STAT_H 2257251875Speter#include <sys/stat.h> 2258251875Speter#endif 2259251875Speter#ifdef HAVE_SYS_WAIT_H 2260251875Speter#include <sys/wait.h> 2261251875Speter#endif 2262251875Speter#if defined(HAVE_UNISTD_H) 2263251875Speter#include <unistd.h> 2264251875Speter#endif 2265251875Speter#include <fcntl.h> 2266251875Speter#include <errno.h> 2267251875Speter 2268251875Speterint fd; 2269251875Speterstruct flock proc_mutex_lock_it = {0}; 2270251875Speterconst char *fname = "conftest.fcntl"; 2271251875Speter 2272251875Speterint main() 2273251875Speter{ 2274251875Speter int rc, status;; 2275251875Speter proc_mutex_lock_it.l_whence = SEEK_SET; /* from current point */ 2276251875Speter proc_mutex_lock_it.l_type = F_WRLCK; /* set exclusive/write lock */ 2277251875Speter 2278251875Speter fd = creat(fname, S_IRWXU); 2279251875Speter unlink(fname); 2280251875Speter 2281251875Speter if (rc = lockit()) { 2282251875Speter exit(-1); 2283251875Speter } 2284251875Speter 2285251875Speter if (fork()) { 2286251875Speter wait(&status); 2287251875Speter } 2288251875Speter else { 2289251875Speter return(lockit()); 2290251875Speter } 2291251875Speter 2292251875Speter close(fd); 2293251875Speter exit(WEXITSTATUS(status) != EACCES); 2294251875Speter} 2295251875Speter 2296251875Speterint lockit() { 2297251875Speter int rc; 2298251875Speter do { 2299251875Speter rc = fcntl(fd, F_SETLK, &proc_mutex_lock_it); 2300251875Speter } while ( rc < 0 && errno == EINTR); 2301251875Speter 2302251875Speter return (rc < 0) ? errno : 0; 2303251875Speter}], [apr_fcntl_tryacquire_eacces=1], [apr_fcntl_tryacquire_eacces=0], [apr_fcntl_tryacquire_eacces=0]) 2304251875Speterfi 2305251875Speter 2306251875Speterif test "$apr_fcntl_tryacquire_eacces" = "1"; then 2307251875Speter AC_DEFINE(FCNTL_TRYACQUIRE_EACCES, 1, [Define if fcntl returns EACCES when F_SETLK is already held]) 2308251875Speter AC_MSG_RESULT(yes) 2309251875Speterelse 2310251875Speter AC_MSG_RESULT(no) 2311251875Speterfi 2312251875Speter 2313251875Speter 2314251875SpeterAC_SUBST(hasflockser) 2315251875SpeterAC_SUBST(hassysvser) 2316251875SpeterAC_SUBST(hasposixser) 2317251875SpeterAC_SUBST(hasfcntlser) 2318251875SpeterAC_SUBST(hasprocpthreadser) 2319251875SpeterAC_SUBST(flockser) 2320251875SpeterAC_SUBST(sysvser) 2321251875SpeterAC_SUBST(posixser) 2322251875SpeterAC_SUBST(fcntlser) 2323251875SpeterAC_SUBST(procpthreadser) 2324251875SpeterAC_SUBST(pthreadser) 2325251875Speter 2326251875SpeterAC_MSG_CHECKING(if all interprocess locks affect threads) 2327251875Speterif test "x$apr_process_lock_is_global" = "xyes"; then 2328251875Speter proclockglobal="1" 2329251875Speter AC_MSG_RESULT(yes) 2330251875Speterelse 2331251875Speter proclockglobal="0" 2332251875Speter AC_MSG_RESULT(no) 2333251875Speterfi 2334251875Speter 2335251875SpeterAC_SUBST(proclockglobal) 2336251875Speter 2337251875SpeterAC_MSG_CHECKING(if POSIX sems affect threads in the same process) 2338251875Speterif test "x$apr_posixsem_is_global" = "xyes"; then 2339251875Speter AC_DEFINE(POSIXSEM_IS_GLOBAL, 1, 2340251875Speter [Define if POSIX semaphores affect threads within the process]) 2341251875Speter AC_MSG_RESULT(yes) 2342251875Speterelse 2343251875Speter AC_MSG_RESULT(no) 2344251875Speterfi 2345251875Speter 2346251875SpeterAC_MSG_CHECKING(if SysV sems affect threads in the same process) 2347251875Speterif test "x$apr_sysvsem_is_global" = "xyes"; then 2348251875Speter AC_DEFINE(SYSVSEM_IS_GLOBAL, 1, 2349251875Speter [Define if SysV semaphores affect threads within the process]) 2350251875Speter AC_MSG_RESULT(yes) 2351251875Speterelse 2352251875Speter AC_MSG_RESULT(no) 2353251875Speterfi 2354251875Speter 2355251875SpeterAC_MSG_CHECKING(if fcntl locks affect threads in the same process) 2356251875Speterif test "x$apr_fcntl_is_global" = "xyes"; then 2357251875Speter AC_DEFINE(FCNTL_IS_GLOBAL, 1, 2358251875Speter [Define if fcntl locks affect threads within the process]) 2359251875Speter AC_MSG_RESULT(yes) 2360251875Speterelse 2361251875Speter AC_MSG_RESULT(no) 2362251875Speterfi 2363251875Speter 2364251875SpeterAC_MSG_CHECKING(if flock locks affect threads in the same process) 2365251875Speterif test "x$apr_flock_is_global" = "xyes"; then 2366251875Speter AC_DEFINE(FLOCK_IS_GLOBAL, 1, 2367251875Speter [Define if flock locks affect threads within the process]) 2368251875Speter AC_MSG_RESULT(yes) 2369251875Speterelse 2370251875Speter AC_MSG_RESULT(no) 2371251875Speterfi 2372251875Speter 2373251875Speterdnl ----------------------------- Checking for /dev/random 2374251875SpeterAC_MSG_CHECKING(for entropy source) 2375251875Speter 2376251875Speterwhy_no_rand="" 2377251875Speter 2378251875SpeterAC_ARG_WITH(egd, 2379251875Speter [ --with-egd[[=DIR]] use EGD-compatible socket], 2380251875Speter [ AC_DEFINE(HAVE_EGD, 1, [Define if EGD is supported]) 2381251875Speter if test "$withval" = "yes"; then 2382251875Speter AC_DEFINE_UNQUOTED(EGD_DEFAULT_SOCKET, ["/var/run/egd-pool","/dev/egd-pool","/etc/egd-pool","/etc/entropy"], 2383251875Speter [Define to list of paths to EGD sockets]) 2384251875Speter else 2385251875Speter AC_DEFINE_UNQUOTED(EGD_DEFAULT_SOCKET, ["$withval"]) 2386251875Speter fi 2387251875Speter AC_MSG_RESULT(EGD-compatible daemon) 2388251875Speter rand="1" 2389251875Speter ]) 2390251875Speter 2391251875Speterif test "$rand" != "1"; then 2392251875Speter AC_ARG_WITH(devrandom, 2393251875Speter [ --with-devrandom[[=DEV]] use /dev/random or compatible [[searches by default]]], 2394251875Speter [ apr_devrandom="$withval" ], [ apr_devrandom="yes" ]) 2395251875Speter 2396251875Speter if test "$apr_devrandom" = "yes"; then 2397251875Speter # /dev/random on OpenBSD doesn't provide random data, so 2398251875Speter # prefer /dev/arandom, which does; see random(4). 2399251875Speter for f in /dev/arandom /dev/urandom /dev/random; do 2400251875Speter if test -r $f; then 2401251875Speter apr_devrandom=$f 2402251875Speter rand=1 2403251875Speter break 2404251875Speter fi 2405251875Speter done 2406251875Speter elif test "$apr_devrandom" != "no"; then 2407251875Speter if test -r "$apr_devrandom"; then 2408251875Speter rand="1" 2409251875Speter else 2410251875Speter AC_ERROR([$apr_devrandom not found or unreadable.]) 2411251875Speter fi 2412251875Speter fi 2413251875Speter 2414251875Speter if test "$rand" = "1"; then 2415251875Speter case $host in 2416251875Speter *os390) 2417251875Speter if test $os_version -lt 1700; then 2418251875Speter rand="0" 2419251875Speter why_no_rand=" ($apr_devrandom unusable on z/OS before V1R7)" 2420251875Speter fi 2421251875Speter ;; 2422251875Speter esac 2423251875Speter fi 2424251875Speter 2425251875Speter if test "$rand" = "1"; then 2426251875Speter AC_DEFINE_UNQUOTED(DEV_RANDOM, ["$apr_devrandom"], [Define to path of random device]) 2427251875Speter AC_MSG_RESULT([$apr_devrandom]) 2428251875Speter fi 2429251875Speterfi 2430251875Speter 2431251875Speterif test "$rand" != "1"; then 2432251875Speter case $host in 2433251875Speter # we have built in support for OS/2 2434251875Speter *-os2*) 2435251875Speter AC_MSG_RESULT([Using OS/2 builtin random]) 2436251875Speter rand="1" 2437251875Speter ;; 2438251875Speter *) 2439251875Speter if test "$rand" != "1"; then 2440251875Speter if test "$ac_cv_lib_truerand_main" = "yes"; then 2441251875Speter AC_DEFINE(HAVE_TRUERAND, 1, [Define if truerand is supported]) 2442251875Speter AC_MSG_RESULT(truerand) 2443251875Speter rand="1" 2444251875Speter else 2445251875Speter AC_MSG_RESULT(not found$why_no_rand) 2446251875Speter rand="0" 2447251875Speter fi 2448251875Speter fi 2449251875Speter ;; 2450251875Speter esac 2451251875Speterfi 2452251875Speter 2453251875SpeterAC_SUBST(rand) 2454251875Speter 2455251875Speterdnl ----------------------------- Checking for File Info Support 2456251875Speterecho "${nl}Checking for File Info Support..." 2457251875SpeterAC_CHECK_MEMBERS([struct stat.st_blocks, struct stat.st_atimensec, 2458251875Speterstruct stat.st_ctimensec, struct stat.st_mtimensec, struct stat.st_atim.tv_nsec, 2459251875Speterstruct stat.st_ctim.tv_nsec, struct stat.st_mtim.tv_nsec, 2460251875Speterstruct stat.st_atime_n, struct stat.st_ctime_n, struct stat.st_mtime_n],,,[ 2461251875Speter#ifdef HAVE_SYS_TYPES_H 2462251875Speter#include <sys/types.h> 2463251875Speter#endif 2464251875Speter#ifdef HAVE_SYS_STAT_H 2465251875Speter#include <sys/stat.h> 2466251875Speter#endif 2467251875Speter#ifdef HAVE_UNISTD_H 2468251875Speter#include <unistd.h> 2469251875Speter#endif]) 2470251875Speter 2471251875SpeterAPR_CHECK_DIRENT_INODE 2472251875SpeterAPR_CHECK_DIRENT_TYPE 2473251875Speter 2474251875Speterdnl ----------------------------- Checking for UUID Support 2475251875Speterecho "${nl}Checking for OS UUID Support..." 2476251875Speter 2477251875SpeterAC_CHECK_HEADERS(uuid.h uuid/uuid.h sys/uuid.h, break) 2478251875Speter 2479251875Speterapr_revert_save_LIBS=$LIBS 2480251875Speter 2481251875Speter# Prefer the flavor(s) that live in libc; 2482251875SpeterAC_SEARCH_LIBS(uuid_create, uuid) 2483251875SpeterAC_SEARCH_LIBS(uuid_generate, uuid) 2484251875Speterif test "$ac_cv_search_uuid_create" = "none required" -o \ 2485251875Speter "$ac_cv_search_uuid_generate" = "none required"; then 2486251875Speter LIBS=$apr_revert_save_LIBS 2487251875Speterfi 2488251875Speter 2489251875SpeterAC_CHECK_FUNCS(uuid_create uuid_generate) 2490251875Speter 2491251875SpeterAC_CACHE_CHECK([for os uuid usability], [apr_cv_osuuid], [ 2492251875Speter# Ensure this test closely mirrors misc/unix/rand.c! 2493251875Speteruuid_includes=" 2494251875Speter#if defined(HAVE_SYS_TYPES_H) 2495251875Speter#include <sys/types.h> 2496251875Speter#endif 2497251875Speter#if defined(HAVE_UNISTD_H) 2498251875Speter#include <unistd.h> 2499251875Speter#endif 2500251875Speter#if defined(HAVE_UUID_H) 2501251875Speter#include <uuid.h> 2502251875Speter#elif defined(HAVE_UUID_UUID_H) 2503251875Speter#include <uuid/uuid.h> 2504251875Speter#elif defined(HAVE_SYS_UUID_H) 2505251875Speter#include <sys/uuid.h> 2506251875Speter#endif 2507251875Speter" 2508251875Speter apr_cv_osuuid=no 2509251875Speter if test $ac_cv_func_uuid_create = yes; then 2510251875Speter AC_TRY_LINK([$uuid_includes], [ 2511251875Speter uuid_t g; 2512251875Speter uint32_t s; 2513251875Speter uuid_create(&g, &s); 2514251875Speter if (s == uuid_s_ok) s = 0; 2515251875Speter ], [apr_cv_osuuid=yes], [apr_cv_func_uuid_create=no]) 2516251875Speter fi 2517251875Speter if test $ac_cv_func_uuid_generate = yes; then 2518251875Speter AC_TRY_LINK([$uuid_includes], [ 2519251875Speter uuid_t g; 2520251875Speter uuid_generate(g); 2521251875Speter ], [apr_cv_osuuid=yes], [apr_cv_func_uuid_generate=no]) 2522251875Speter fi 2523251875Speter]) 2524251875Speter 2525251875Speterif test $apr_cv_osuuid = yes; then 2526251875Speter osuuid="1" 2527251875Speterelse 2528251875Speter osuuid="0" 2529251875Speter LIBS=$apr_revert_save_LIBS 2530251875Speterfi 2531251875SpeterAC_SUBST(osuuid) 2532251875Speter 2533251875Speter 2534251875Speterdnl ----------------------------- Checking for Time Support 2535251875Speterecho "${nl}Checking for Time Support..." 2536251875Speter 2537251875SpeterAC_CHECK_MEMBERS([struct tm.tm_gmtoff, struct tm.__tm_gmtoff],,,[ 2538251875Speter#include <sys/types.h> 2539251875Speter#include <time.h>]) 2540251875Speter 2541251875Speterdnl ----------------------------- Checking for Networking Support 2542251875Speterecho "${nl}Checking for Networking support..." 2543251875SpeterAPR_TYPE_IN_ADDR 2544251875Speterif test "$ac_cv_type_in_addr" = "yes"; then 2545251875Speter have_in_addr="1" 2546251875Speterelse 2547251875Speter have_in_addr="0" 2548251875Speterfi 2549251875Speter 2550251875SpeterAC_MSG_CHECKING([if fd == socket on this platform]) 2551251875Speterif test "x$file_as_socket" != "x0" ; then 2552251875Speter file_as_socket="1"; 2553251875Speter echo "yes" 2554251875Speterelse 2555251875Speter echo "no" 2556251875Speterfi 2557251875Speter 2558251875SpeterAC_SUBST(have_in_addr) 2559251875SpeterAC_SUBST(file_as_socket) 2560251875Speter 2561251875Speterif test "$ac_cv_func_poll $file_as_socket" = "yes 1"; then 2562251875Speter AC_DEFINE(WAITIO_USES_POLL, 1, 2563251875Speter [Define if apr_wait_for_io_or_timeout() uses poll(2)]) 2564251875Speterfi 2565251875Speter 2566251875Speter# Check the types only if we have gethostbyname_r 2567251875Speterif test "$ac_cv_func_gethostbyname_r" = "yes"; then 2568251875Speter APR_CHECK_GETHOSTBYNAME_R_STYLE 2569251875Speterfi 2570251875Speter 2571251875Speter# Check the types only if we have getservbyname_r 2572251875Speterif test "$ac_cv_func_getservbyname_r" = "yes"; then 2573251875Speter APR_CHECK_GETSERVBYNAME_R_STYLE 2574251875Speterfi 2575251875Speter 2576251875SpeterAPR_CHECK_TCP_NODELAY_INHERITED 2577251875SpeterAPR_CHECK_O_NONBLOCK_INHERITED 2578251875SpeterAPR_CHECK_TCP_NODELAY_WITH_CORK 2579251875Speter 2580251875Speter# Look for a way of corking TCP... 2581251875SpeterAPR_CHECK_DEFINE(TCP_CORK, netinet/tcp.h) 2582251875SpeterAPR_CHECK_DEFINE(TCP_NOPUSH, netinet/tcp.h) 2583251875Speterapr_tcp_nopush_flag="0" 2584251875Speterhave_corkable_tcp="0" 2585251875Speterif test "x$ac_cv_define_TCP_CORK" = "xyes"; then 2586251875Speter apr_tcp_nopush_flag="TCP_CORK" 2587251875Speter have_corkable_tcp="1" 2588251875Speterelse 2589251875Speter case $host in 2590251875Speter *linux*) 2591251875Speter AC_EGREP_CPP(yes,[ 2592251875Speter#include <linux/socket.h> 2593251875Speter#ifdef TCP_CORK 2594251875Speteryes 2595251875Speter#endif 2596251875Speter ],[ 2597251875Speter apr_tcp_nopush_flag="3" 2598251875Speter have_corkable_tcp="1" 2599251875Speter ]) 2600251875Speter ;; 2601251875Speter *) 2602251875Speter ;; 2603251875Speter esac 2604251875Speterfi 2605251875Speterif test "x$ac_cv_define_TCP_NOPUSH" = "xyes"; then 2606251875Speter apr_tcp_nopush_flag="TCP_NOPUSH" 2607251875Speter have_corkable_tcp="1" 2608251875Speterfi 2609251875Speter 2610251875SpeterAPR_CHECK_DEFINE(SO_ACCEPTFILTER, sys/socket.h) 2611251875Speterif test "x$ac_cv_define_SO_ACCEPTFILTER" = "xyes"; then 2612251875Speter acceptfilter="1" 2613251875Speterelse 2614251875Speter acceptfilter="0" 2615251875Speterfi 2616251875Speter 2617251875SpeterAPR_CHECK_SCTP 2618251875SpeterAPR_CHECK_MCAST 2619251875Speter 2620251875SpeterAC_SUBST(apr_tcp_nopush_flag) 2621251875SpeterAC_SUBST(have_corkable_tcp) 2622251875SpeterAC_SUBST(acceptfilter) 2623251875SpeterAC_SUBST(have_sctp) 2624251875Speter 2625251875SpeterAC_CHECK_FUNCS(set_h_errno) 2626251875Speter 2627251875Speterecho "${nl}Checking for IPv6 Networking support..." 2628251875Speterdnl Start of checking for IPv6 support... 2629251875Speter 2630251875SpeterAC_ARG_ENABLE(ipv6, 2631251875Speter [ --disable-ipv6 Disable IPv6 support in APR.], 2632251875Speter [ if test "$enableval" = "no"; then 2633251875Speter user_disabled_ipv6=1 2634251875Speter fi ], 2635251875Speter [ user_disabled_ipv6=0 ] ) 2636251875Speter 2637251875Spetercase $host in 2638251875Speter *) 2639251875Speter broken_ipv6=0 2640251875Speteresac 2641251875Speter 2642251875SpeterAC_SEARCH_LIBS(getaddrinfo, socket inet6) 2643251875SpeterAC_SEARCH_LIBS(gai_strerror, socket inet6) 2644251875SpeterAC_SEARCH_LIBS(getnameinfo, socket inet6) 2645251875SpeterAC_CHECK_FUNCS(gai_strerror) 2646251875SpeterAPR_CHECK_WORKING_GETADDRINFO 2647251875SpeterAPR_CHECK_NEGATIVE_EAI 2648251875SpeterAPR_CHECK_WORKING_GETNAMEINFO 2649251875SpeterAPR_CHECK_SOCKADDR_IN6 2650251875SpeterAPR_CHECK_SOCKADDR_STORAGE 2651251875Speter 2652251875Speterhave_ipv6="0" 2653251875Speterif test "$user_disabled_ipv6" = 1; then 2654251875Speter ipv6_result="no -- disabled by user" 2655251875Speterelse 2656251875Speter if test "x$broken_ipv6" = "x0"; then 2657251875Speter if test "x$have_sockaddr_in6" = "x1"; then 2658251875Speter if test "x$ac_cv_working_getaddrinfo" = "xyes"; then 2659251875Speter if test "x$ac_cv_working_getnameinfo" = "xyes"; then 2660251875Speter APR_CHECK_GETADDRINFO_ADDRCONFIG 2661251875Speter have_ipv6="1" 2662251875Speter ipv6_result="yes" 2663251875Speter else 2664251875Speter ipv6_result="no -- no getnameinfo" 2665251875Speter fi 2666251875Speter else 2667251875Speter ipv6_result="no -- no working getaddrinfo" 2668251875Speter fi 2669251875Speter else 2670251875Speter ipv6_result="no -- no sockaddr_in6" 2671251875Speter fi 2672251875Speter else 2673251875Speter ipv6_result="no -- the platform has known problems supporting IPv6" 2674251875Speter fi 2675251875Speterfi 2676251875Speter 2677251875SpeterAC_MSG_CHECKING(if APR supports IPv6) 2678251875SpeterAC_MSG_RESULT($ipv6_result) 2679251875Speter 2680251875SpeterAC_SUBST(have_ipv6) 2681251875Speter 2682251875Speter# hstrerror is only needed if IPv6 is not enabled, 2683251875Speter# so getaddrinfo/gai_strerror are not used. 2684251875Speterif test $have_ipv6 = 0; then 2685251875Speter AC_SEARCH_LIBS(hstrerror, resolv, 2686251875Speter [AC_DEFINE(HAVE_HSTRERROR, 1, [Define if hstrerror is present])]) 2687251875Speterfi 2688251875Speter 2689251875Speterdnl Check for langinfo support 2690251875Speter 2691251875SpeterAC_CHECK_HEADERS(langinfo.h) 2692251875SpeterAC_CHECK_FUNCS(nl_langinfo) 2693251875Speter 2694251875Speterdnl ------------------------------ Defaults for some platform nuances 2695251875Speter 2696251875Speterdnl Do we have a Win32-centric Unicode FS? 2697251875SpeterAPR_SETIFNULL(have_unicode_fs, [0]) 2698251875SpeterAC_SUBST(have_unicode_fs) 2699251875Speter 2700251875SpeterAPR_SETIFNULL(apr_has_xthread_files, [0]) 2701251875SpeterAC_SUBST(apr_has_xthread_files) 2702251875Speter 2703251875SpeterAPR_SETIFNULL(apr_procattr_user_set_requires_password, [0]) 2704251875SpeterAC_SUBST(apr_procattr_user_set_requires_password) 2705251875Speter 2706251875SpeterAPR_SETIFNULL(apr_thread_func, []) 2707251875SpeterAC_SUBST(apr_thread_func) 2708251875Speter 2709251875SpeterAPR_SETIFNULL(apr_has_user, [1]) 2710251875SpeterAC_SUBST(apr_has_user) 2711251875Speter 2712251875Speterdnl ----------------------------- Finalize the variables 2713251875Speter 2714251875Speterecho "${nl}Restore user-defined environment settings..." 2715251875Speter 2716251875SpeterAPR_RESTORE_THE_ENVIRONMENT(CPPFLAGS, EXTRA_) 2717251875SpeterAPR_RESTORE_THE_ENVIRONMENT(CFLAGS, EXTRA_) 2718251875SpeterAPR_RESTORE_THE_ENVIRONMENT(LDFLAGS, EXTRA_) 2719251875SpeterAPR_RESTORE_THE_ENVIRONMENT(LIBS, EXTRA_) 2720251875SpeterAPR_RESTORE_THE_ENVIRONMENT(INCLUDES, EXTRA_) 2721251875SpeterAC_SUBST(NOTEST_CPPFLAGS) 2722251875SpeterAC_SUBST(NOTEST_CFLAGS) 2723251875SpeterAC_SUBST(NOTEST_LDFLAGS) 2724251875SpeterAC_SUBST(NOTEST_LIBS) 2725251875SpeterAC_SUBST(NOTEST_INCLUDES) 2726251875Speter 2727251875Speterdnl ----------------------------- Construct the files 2728251875Speter 2729251875SpeterAC_SUBST(LDLIBS) 2730251875SpeterAC_SUBST(INCLUDES) 2731251875SpeterAC_SUBST(AR) 2732251875SpeterAC_SUBST(RM) 2733251875SpeterAC_SUBST(OSDIR) 2734251875SpeterAC_SUBST(DEFAULT_OSDIR) 2735251875SpeterAC_SUBST(EXEEXT) 2736251875SpeterAC_SUBST(LIBTOOL_LIBS) 2737251875Speter 2738251875Speter# Use -no-install to link the test programs on all platforms 2739251875Speter# but Darwin, where it would cause the programs to be linked 2740251875Speter# against installed versions of libapr instead of those just 2741251875Speter# built. 2742251875Spetercase $host in 2743251875Speter*-apple-darwin*) LT_NO_INSTALL="" ;; 2744251875Speter*) LT_NO_INSTALL="-no-install" ;; 2745251875Speteresac 2746251875SpeterAC_SUBST(LT_NO_INSTALL) 2747251875Speter 2748251875Speter# 2749251875Speter# BSD/OS (BSDi) needs to use a different include syntax in the Makefiles 2750251875Speter# 2751251875Spetercase $host in 2752251875Speter*bsdi*) 2753251875Speter # Check whether they've installed GNU make 2754251875Speter if make --version > /dev/null 2>&1; then 2755251875Speter INCLUDE_RULES="include $apr_buildout/apr_rules.mk" 2756251875Speter INCLUDE_OUTPUTS="include $apr_srcdir/build-outputs.mk" 2757251875Speter else 2758251875Speter # BSDi make 2759251875Speter INCLUDE_RULES=".include \"$apr_buildout/apr_rules.mk\"" 2760251875Speter INCLUDE_OUTPUTS=".include \"$apr_srcdir/build-outputs.mk\"" 2761251875Speter fi 2762251875Speter ;; 2763251875Speter*) 2764251875Speter INCLUDE_RULES="include $apr_buildout/apr_rules.mk" 2765251875Speter INCLUDE_OUTPUTS="include $apr_srcdir/build-outputs.mk" 2766251875Speter ;; 2767251875Speteresac 2768251875SpeterAC_SUBST(INCLUDE_RULES) 2769251875SpeterAC_SUBST(INCLUDE_OUTPUTS) 2770251875Speter 2771251875SpeterAC_CONFIG_FILES([Makefile 2772251875Speter include/apr.h 2773251875Speter build/apr_rules.mk 2774251875Speter build/pkg/pkginfo 2775251875Speter apr-$APR_MAJOR_VERSION-config:apr-config.in 2776251875Speter apr.pc]) 2777251875Speter 2778251875Speterif test -d $srcdir/test; then 2779251875Speter AC_CONFIG_FILES([test/Makefile test/internal/Makefile]) 2780251875Speterfi 2781251875Speter 2782251875Speterdir=include/arch/unix 2783251875Spetertest -d $dir || $MKDIR $dir 2784251875Speter 2785251875SpeterAC_CONFIG_COMMANDS([default], [ 2786251875Speter# Commands run at the end of config.status: 2787251875Speterfor i in $APR_SAVE_HEADERS; do 2788251875Speter if cmp -s $i $i.save 2>/dev/null; then 2789251875Speter mv $i.save $i 2790251875Speter AC_MSG_NOTICE([$i is unchanged]) 2791251875Speter fi 2792251875Speter rm -f $i.save 2793251875Speterdone 2794251875Speterchmod +x apr-$APR_MAJOR_VERSION-config 2795251875Speter],[ 2796251875Speterdnl This section is expanded by configure UNQUOTED so variable 2797251875Speterdnl references must be backslash-escaped as necessary. 2798251875Speter 2799251875Speter# Commands run at the beginning of config.status: 2800251875SpeterAPR_SAVE_HEADERS="include/apr.h include/arch/unix/apr_private.h" 2801251875SpeterAPR_MAJOR_VERSION=$APR_MAJOR_VERSION 2802251875SpeterAPR_PLATFORM=$host 2803251875Speter 2804251875Speterfor apri in \${APR_SAVE_HEADERS}; do 2805251875Speter test -r \${apri} && mv \${apri} \${apri}.save 2806251875Speterdone 2807251875Speter]) 2808251875Speter 2809251875SpeterAC_OUTPUT 2810