2 dnl Autoconf configuration file for APR
4 dnl Process this file with autoconf to produce a configure script.
5 dnl Use ./buildconf to prepare build files and run autoconf for APR.
9 AC_INIT(build/apr_common.m4)
10 AC_CONFIG_HEADER(include/arch/unix/apr_private.h)
11 AC_CONFIG_AUX_DIR(build)
12 AC_CONFIG_MACRO_DIR(build)
15 dnl Include our own M4 macros along with those for libtool
17 sinclude(build/apr_common.m4)
18 sinclude(build/apr_network.m4)
19 sinclude(build/apr_threads.m4)
20 sinclude(build/apr_win32.m4)
21 sinclude(build/apr_hints.m4)
22 sinclude(build/libtool.m4)
23 sinclude(build/ltsugar.m4)
24 sinclude(build/argz.m4)
25 sinclude(build/ltoptions.m4)
26 sinclude(build/ltversion.m4)
27 sinclude(build/lt~obsolete.m4)
29 dnl Hard-coded top of apr_private.h:
35 dnl Hard-coded inclusion at the tail end of apr_private.h:
37 /* switch this on if we have a BeOS version below BONE */
38 #if defined(BEOS) && !defined(HAVE_BONE_VERSION)
45 * Darwin 10's default compiler (gcc42) builds for both 64 and
46 * 32 bit architectures unless specifically told not to.
47 * In those cases, we need to override types depending on how
48 * we're being built at compile time.
49 * NOTE: This is an ugly work-around for Darwin's
50 * concept of universal binaries, a single package
51 * (executable, lib, etc...) which contains both 32
52 * and 64 bit versions. The issue is that if APR is
53 * built universally, if something else is compiled
54 * against it, some bit sizes will depend on whether
55 * it is 32 or 64 bit. This is determined by the __LP64__
56 * flag. Since we need to support both, we have to
57 * handle OS X unqiuely.
61 #undef APR_OFF_T_STRFN
62 #undef APR_INT64_STRFN
67 #undef SIZEOF_STRUCT_IOVEC
70 #define APR_INT64_STRFN strtol
72 #define SIZEOF_SIZE_T 8
73 #define SIZEOF_SSIZE_T 8
74 #define SIZEOF_VOIDP 8
75 #define SIZEOF_STRUCT_IOVEC 16
77 #define APR_INT64_STRFN strtoll
79 #define SIZEOF_SIZE_T 4
80 #define SIZEOF_SSIZE_T 4
81 #define SIZEOF_VOIDP 4
82 #define SIZEOF_STRUCT_IOVEC 8
85 #undef APR_OFF_T_STRFN
86 #define APR_OFF_T_STRFN APR_INT64_STRFN
90 #ifdef __DARWIN_UNIX03
91 #define SETPGRP_VOID 1
93 /* #undef SETPGRP_VOID */
96 #endif /* DARWIN_10 */
99 * Include common private declarations.
101 #include "../apr_private_common.h"
102 #endif /* APR_PRIVATE_H */
105 dnl Save user-defined environment settings for later restoration
107 APR_SAVE_THE_ENVIRONMENT(CPPFLAGS)
108 APR_SAVE_THE_ENVIRONMENT(CFLAGS)
109 APR_SAVE_THE_ENVIRONMENT(LDFLAGS)
110 APR_SAVE_THE_ENVIRONMENT(LIBS)
111 APR_SAVE_THE_ENVIRONMENT(INCLUDES)
113 dnl Generate ./config.nice for reproducing runs of configure
115 APR_CONFIG_NICE(config.nice)
118 echo "Configuring APR library"
119 echo "Platform: $host"
121 dnl Some initial steps for configuration. We setup the default directory
122 dnl and which files are to be configured.
124 dnl Setup the directory macros now
126 # Absolute source/build directory
127 apr_srcdir=`(cd $srcdir && pwd)`
130 AC_SUBST(apr_builddir)
132 if test "$apr_builddir" != "$apr_srcdir"; then
134 APR_CONFIG_LOCATION=build
136 APR_CONFIG_LOCATION=source
139 AC_SUBST(APR_CONFIG_LOCATION)
141 # Libtool might need this symbol -- it must point to the location of
142 # the generated libtool script (not necessarily the "top" build dir).
144 top_builddir="$apr_builddir"
145 AC_SUBST(top_builddir)
147 # Directory containing apr build macros, helpers, and make rules
148 # NOTE: make rules (apr_rules.mk) will be in the builddir for vpath
150 apr_buildout=$apr_builddir/build
151 apr_builders=$apr_srcdir/build
152 AC_SUBST(apr_builders)
154 MKDIR=$apr_builders/mkdir.sh
156 dnl Initialize mkdir -p functionality.
157 APR_MKDIR_P_CHECK($apr_builders/mkdir.sh)
159 # get our version information
160 get_version="$apr_builders/get-version.sh"
161 version_hdr="$apr_srcdir/include/apr_version.h"
162 APR_MAJOR_VERSION="`$get_version major $version_hdr APR`"
163 APR_DOTTED_VERSION="`$get_version all $version_hdr APR`"
165 AC_SUBST(APR_DOTTED_VERSION)
166 AC_SUBST(APR_MAJOR_VERSION)
168 echo "APR Version: ${APR_DOTTED_VERSION}"
170 dnl Enable the layout handling code, then reparse the prefix-style
171 dnl arguments due to autoconf being a PITA.
172 APR_ENABLE_LAYOUT(apr)
175 dnl Set optional CC hints here in case autoconf makes an inappropriate choice.
176 dnl This allows us to suggest what the compiler should be, but still
177 dnl allows the user to override CC externally.
180 dnl Do the various CC checks *before* preloading values. The preload code
181 dnl may need to use compiler characteristics to make decisions. This macro
182 dnl can only be used once within a configure script, so this prevents a
183 dnl preload section from invoking the macro to get compiler info.
186 dnl AC_PROG_SED is only avaliable in recent autoconf versions.
187 dnl Use AC_CHECK_PROG instead if AC_PROG_SED is not present.
190 [AC_CHECK_PROG(SED, sed, sed)])
195 dnl These added to allow default directories to be used...
197 echo "(Default will be ${DEFAULT_OSDIR})"
199 apr_modules="file_io network_io threadproc misc locks time mmap shmem user memory atomic poll support random"
201 dnl Checks for programs.
208 AC_CHECK_PROG(RM, rm, rm)
209 AC_CHECK_PROG(AS, as, as)
210 AC_CHECK_PROG(ASCPP, cpp, cpp)
211 AC_CHECK_TOOL(AR, ar, ar)
213 dnl Various OS checks that apparently set required flags
214 ifdef([AC_USE_SYSTEM_EXTENSIONS], [
215 AC_USE_SYSTEM_EXTENSIONS
224 dnl this is our library name
225 APR_LIBNAME="apr${libsuffix}"
226 AC_SUBST(APR_LIBNAME)
230 echo "performing libtool configuration..."
232 AC_ARG_ENABLE(experimental-libtool,[ --enable-experimental-libtool Use experimental custom libtool],
233 [experimental_libtool=$enableval],[experimental_libtool=no])
235 dnl Workarounds for busted Libtool 2.x when we don't call AC_PROG_LIBTOOL
236 if test "x$Xsed" = "x"; then
237 Xsed="$SED -e 1s/^X//"
242 # Use a custom-made libtool replacement
243 echo "using aplibtool"
244 LIBTOOL="$srcdir/build/aplibtool"
245 gcc $CFLAGS $CPPFLAGS -o $LIBTOOL.exe $LIBTOOL.c
248 if test "x$LTFLAGS" = "x"; then
251 if test "$experimental_libtool" = "yes"; then
252 # Use a custom-made libtool replacement
253 echo "using jlibtool"
254 LIBTOOL="$apr_builddir/libtool"
255 LIBTOOL_SRC="$apr_srcdir/build/jlibtool.c"
256 $CC $CFLAGS $CPPFLAGS -o $LIBTOOL $LIBTOOL_SRC
257 eval `$apr_builddir/libtool --config | grep "^shlibpath_var=[[A-Z_]]*$"`
258 if test "x$shlibpath_var" = "x"; then
259 shlibpath_var=REPLACE_WITH_YOUR_SHLIBPATH_VAR
262 dnl libtoolize requires that the following not be indented
263 dnl should become LT_INIT(win32-dll)
266 # get libtool's setting of shlibpath_var
267 eval `grep "^shlibpath_var=[[A-Z_]]*$" $apr_builddir/libtool`
268 if test "x$shlibpath_var" = "x"; then
269 shlibpath_var=REPLACE_WITH_YOUR_SHLIBPATH_VAR
275 AC_ARG_WITH(installbuilddir, [ --with-installbuilddir=DIR location to store APR build files (defaults to '${datadir}/build')],
276 [ installbuilddir=$withval ], [ installbuilddir="${datadir}/build-${APR_MAJOR_VERSION}" ] )
277 AC_SUBST(installbuilddir)
279 AC_ARG_WITH(libtool, [ --without-libtool avoid using libtool to link the library],
280 [ use_libtool=$withval ], [ use_libtool="yes" ] )
282 if test "x$use_libtool" = "xyes"; then
283 lt_compile='$(LIBTOOL) $(LTFLAGS) --mode=compile $(COMPILE) -o $@ -c $< && touch $@'
284 LT_VERSION="-version-info `$get_version libtool $version_hdr APR`"
285 link="\$(LIBTOOL) \$(LTFLAGS) --mode=link \$(COMPILE) \$(LT_LDFLAGS) \$(LT_VERSION) \$(ALL_LDFLAGS) -o \$@"
287 lib_target='-rpath $(libdir) $(OBJECTS)'
288 export_lib_target='-rpath \$(libdir) \$(OBJECTS)'
290 lt_compile='$(COMPILE) -o $@ -c $<'
291 link='$(AR) cr $(TARGET_LIB) $(OBJECTS); $(RANLIB) $(TARGET_LIB)'
299 apr_platform_runtime_link_flag="-R"
301 *-mingw* | *-cygwin*)
302 LT_LDFLAGS="$LT_LDFLAGS -no-undefined"
312 AC_SUBST(export_lib_target)
313 AC_SUBST(shlibpath_var)
318 dnl ----------------------------- Checks for compiler flags
321 echo "${nl}Check for compiler flags..."
323 dnl AC_PROG_CC sets -g in CFLAGS (and -O2 for gcc) by default.
324 dnl On OS/390 this causes the compiler to insert extra debugger
325 dnl hook instructions. That's fine for debug/maintainer builds, not fine
330 if test "$ac_test_CFLAGS" != set; then
331 APR_REMOVEFROM(CFLAGS,-g)
336 AC_ARG_ENABLE(debug,[ --enable-debug Turn on debugging and compile time warnings],
337 [APR_ADDTO(CFLAGS,-g)
338 if test "$GCC" = "yes"; then
339 APR_ADDTO(CFLAGS,-Wall)
340 elif test "$AIX_XLC" = "yes"; then
341 APR_ADDTO(CFLAGS,-qfullpath)
345 AC_ARG_ENABLE(maintainer-mode,[ --enable-maintainer-mode Turn on debugging and compile time warnings],
346 [APR_ADDTO(CFLAGS,-g)
347 if test "$GCC" = "yes"; then
348 APR_ADDTO(CFLAGS,[-Wall -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations])
349 elif test "$AIX_XLC" = "yes"; then
350 APR_ADDTO(CFLAGS,-qfullpath -qinitauto=FE -qcheck=all -qinfo=pro)
354 AC_ARG_ENABLE(profile,[ --enable-profile Turn on profiling for the build (GCC)],
355 if test "$GCC" = "yes"; then
356 APR_ADDTO(CFLAGS, -pg)
357 APR_REMOVEFROM(CFLAGS, -g)
358 if test "$host" = "i586-pc-beos"; then
359 APR_REMOVEFROM(CFLAGS, -O2)
360 APR_ADDTO(CFLAGS, -O1)
361 APR_ADDTO(LDFLAGS, -p)
366 AC_ARG_ENABLE(pool-debug,
367 [ --enable-pool-debug[[=yes|no|verbose|verbose-alloc|lifetime|owner|all]] Turn on pools debugging],
368 [ if test -z "$enableval"; then
369 APR_ADDTO(CPPFLAGS, -DAPR_POOL_DEBUG=1)
370 elif test ! "$enableval" = "no"; then
400 if test $flag -gt 0; then
401 apr_pool_debug=`expr '(' $apr_pool_debug - $apr_pool_debug % \
402 '(' $flag '*' 2 ')' ')' + $flag + $apr_pool_debug % $flag`
406 APR_ADDTO(CPPFLAGS, -DAPR_POOL_DEBUG=$apr_pool_debug)
410 if test "$host" = "i586-pc-beos"; then
411 AC_ARG_ENABLE(malloc-debug,[ --enable-malloc-debug Switch on malloc_debug for BeOS],
412 APR_REMOVEFROM(CFLAGS, -O2)
413 APR_ADDTO(CPPFLAGS, -fcheck-memory-usage -D_KERNEL_MODE)
417 # this is the place to put specific options for platform/compiler
421 APR_ADDTO(CFLAGS,[-Ae +Z])
426 if echo "$CFLAGS " | grep '+DA' >/dev/null; then :
428 APR_ADDTO(CFLAGS,[+DAportable])
433 powerpc-*-beos:mwcc* )
434 APR_SETVAR(CPP,[mwcc -E])
438 dnl If building static APR, both the APR build and the app build
439 dnl need -DAPR_DECLARE_STATIC to generate the right linkage from
440 dnl APR_DECLARE et al.
441 dnl If building dynamic APR, the APR build needs APR_DECLARE_EXPORT
442 dnl and the app build should have neither define.
443 *-mingw* | *-cygwin*)
444 if test "$enable_shared" = "yes"; then
445 APR_ADDTO(INTERNAL_CPPFLAGS, -DAPR_DECLARE_EXPORT)
447 APR_ADDTO(CPPFLAGS, -DAPR_DECLARE_STATIC)
452 AC_CACHE_CHECK([whether the compiler provides atomic builtins], [ap_cv_atomic_builtins],
456 unsigned long val = 1010, tmp, *mem = &val;
458 if (__sync_fetch_and_add(&val, 1010) != 1010 || val != 2020)
463 if (__sync_fetch_and_sub(mem, 1010) != tmp || val != 1010)
466 if (__sync_sub_and_fetch(&val, 1010) != 0 || val != 0)
471 if (__sync_val_compare_and_swap(mem, 0, tmp) != 0 || val != tmp)
474 if (__sync_lock_test_and_set(&val, 4040) != 3030)
479 if (__sync_val_compare_and_swap(&mem, &tmp, &val) != &tmp)
482 __sync_synchronize();
488 }], [ap_cv_atomic_builtins=yes], [ap_cv_atomic_builtins=no], [ap_cv_atomic_builtins=no])])
490 if test "$ap_cv_atomic_builtins" = "yes"; then
491 AC_DEFINE(HAVE_ATOMIC_BUILTINS, 1, [Define if compiler provides atomic builtins])
496 # The IBM ppc405cr processor has a bugged stwcx instruction.
497 AC_DEFINE(PPC405_ERRATA, 1, [Define on PowerPC 405 where errata 77 applies])
503 dnl Check the depend program we can use
506 proc_mutex_is_global=0
508 config_subdirs="none"
509 INSTALL_SUBDIRS="none"
510 OBJECTS_PLATFORM='$(OBJECTS_unix)'
513 i386-ibm-aix* | *-ibm-aix[[1-2]].* | *-ibm-aix3.* | *-ibm-aix4.1 | *-ibm-aix4.1.* | *-ibm-aix4.2 | *-ibm-aix4.2.*)
515 APR_ADDTO(LDFLAGS,-lld)
517 OBJECTS_PLATFORM='$(OBJECTS_aix)'
520 APR_ADDTO(CPPFLAGS,-DOS2)
521 APR_ADDTO(CFLAGS,-Zmt)
522 AC_CHECK_LIB(bsd, random)
524 enable_threads="system_threads"
527 proc_mutex_is_global=1
528 OBJECTS_PLATFORM='$(OBJECTS_os2)'
532 APR_ADDTO(CPPFLAGS,-DBEOS)
533 enable_threads="system_threads"
535 APR_CHECK_DEFINE(BONE_VERSION, sys/socket.h)
538 proc_mutex_is_global=1
539 OBJECTS_PLATFORM='$(OBJECTS_beos)'
551 OBJECTS_PLATFORM='$(OBJECTS_os390)'
560 enable_threads="system_threads"
563 proc_mutex_is_global=1
564 OBJECTS_PLATFORM='$(OBJECTS_win32)'
582 AC_SUBST(OBJECTS_PLATFORM)
584 # Check whether LFS has explicitly been disabled
585 AC_ARG_ENABLE(lfs,[ --disable-lfs Disable large file support on 32-bit platforms],
586 [apr_lfs_choice=$enableval], [apr_lfs_choice=yes])
588 if test "$apr_lfs_choice" = "yes"; then
589 # Check whether the transitional LFS API is sufficient
590 AC_CACHE_CHECK([whether to enable -D_LARGEFILE64_SOURCE], [apr_cv_use_lfs64], [
591 apr_save_CPPFLAGS=$CPPFLAGS
592 CPPFLAGS="$CPPFLAGS -D_LARGEFILE64_SOURCE"
594 #include <sys/types.h>
595 #include <sys/stat.h>
607 if (sizeof(off64_t) != 8 || sizeof(off_t) != 4)
609 if ((fd = open("conftest.lfs", O_LARGEFILE|O_CREAT|O_WRONLY, 0644)) < 0)
611 if (ftruncate64(fd, off) != 0)
613 else if (fstat64(fd, &st) != 0 || st.st_size != off)
615 else if (lseek64(fd, off, SEEK_SET) != off)
617 else if (close(fd) != 0)
619 else if (lstat64("conftest.lfs", &st) != 0 || st.st_size != off)
621 else if (stat64("conftest.lfs", &st) != 0 || st.st_size != off)
623 unlink("conftest.lfs");
626 }], [apr_cv_use_lfs64=yes], [apr_cv_use_lfs64=no], [apr_cv_use_lfs64=no])
627 CPPFLAGS=$apr_save_CPPFLAGS])
628 if test "$apr_cv_use_lfs64" = "yes"; then
629 APR_ADDTO(CPPFLAGS, [-D_LARGEFILE64_SOURCE])
633 AC_ARG_ENABLE(nonportable-atomics,
634 [ --enable-nonportable-atomics Use optimized atomic code which may produce nonportable binaries],
635 [if test $enableval = yes; then
636 force_generic_atomics=no
638 force_generic_atomics=yes
642 i[[456]]86) force_generic_atomics=yes ;;
643 *) force_generic_atomics=no ;;
647 if test $force_generic_atomics = yes; then
648 AC_DEFINE([USE_ATOMICS_GENERIC], 1,
649 [Define if use of generic atomics is requested])
652 AC_SUBST(proc_mutex_is_global)
654 AC_SUBST(INSTALL_SUBDIRS)
656 # For some platforms we need a version string which allows easy numeric
660 if test -x /sbin/sysctl; then
661 os_version=`/sbin/sysctl -n kern.osreldate`
667 os_major=[`uname -r | sed -e 's/\([1-9][0-9]*\)\..*/\1/'`]
668 os_minor=[`uname -r | sed -e 's/[1-9][0-9]*\.\([0-9]\+\)\..*/\1/'`]
669 if test $os_major -lt 2 -o \( $os_major -eq 2 -a $os_minor -lt 4 \); then
670 AC_MSG_WARN([Configured for pre-2.4 Linux $os_major.$os_minor])
674 AC_MSG_NOTICE([Configured for Linux $os_major.$os_minor])
678 os_version=`uname -r | sed -e 's/\.//g'`
681 os_version=OS_VERSION_IS_NOT_SET
685 echo "${nl}Checking for libraries..."
687 dnl ----------------------------- Checks for Any required Libraries
688 dnl Note: Autoconf will always append LIBS with an extra " " in AC_CHECK_LIB.
689 dnl It should check for LIBS being empty and set LIBS equal to the new value
690 dnl without the extra " " in that case, but they didn't do that. So, we
691 dnl end up LIBS="-lm -lcrypt -lnsl -ldl" which is an annoyance.
694 APR_ADDTO(LIBS,[-lshell32 -ladvapi32 -lws2_32 -lrpcrt4 -lmswsock])
695 ac_cv_func_CreateFileMapping=yes
698 AC_SEARCH_LIBS(gethostbyname, nsl)
699 AC_SEARCH_LIBS(gethostname, nsl)
700 AC_SEARCH_LIBS(socket, socket)
701 AC_SEARCH_LIBS(crypt, crypt ufc)
702 AC_CHECK_LIB(truerand, main)
703 AC_SEARCH_LIBS(modf, m)
707 dnl ----------------------------- Checking for Threads
708 echo "${nl}Checking for Threads..."
710 if test -z "$enable_threads"; then
711 AC_ARG_ENABLE(threads,
712 [ --enable-threads Enable threading support in APR.],
713 [ enable_threads=$enableval] ,
714 [ APR_CHECK_PTHREADS_H([ enable_threads="pthread" ] ,
715 [ enable_threads="no" ] ) ] )
718 if test "$enable_threads" = "no"; then
723 if test "$enable_threads" = "pthread"; then
724 # We have specified pthreads for our threading library, just make sure
725 # that we have everything we need
726 APR_PTHREADS_CHECK_SAVE
728 APR_CHECK_PTHREADS_H([
735 APR_PTHREADS_CHECK_RESTORE ] )
736 elif test "$enable_threads" = "system_threads"; then
741 # We basically specified that we wanted threads, but not how to implement
742 # them. In this case, just look for pthreads. In the future, we can check
743 # for other threading libraries as well.
744 APR_PTHREADS_CHECK_SAVE
746 APR_CHECK_PTHREADS_H([
753 APR_PTHREADS_CHECK_RESTORE ] )
755 if test "$pthreadh" = "1"; then
756 APR_CHECK_PTHREAD_GETSPECIFIC_TWO_ARGS
757 APR_CHECK_PTHREAD_ATTR_GETDETACHSTATE_ONE_ARG
758 APR_CHECK_PTHREAD_RECURSIVE_MUTEX
759 AC_CHECK_FUNCS([pthread_key_delete pthread_rwlock_init \
760 pthread_attr_setguardsize pthread_yield])
762 if test "$ac_cv_func_pthread_rwlock_init" = "yes"; then
763 dnl ----------------------------- Checking for pthread_rwlock_t
764 AC_CACHE_CHECK([for pthread_rwlock_t], [apr_cv_type_rwlock_t],
765 AC_TRY_COMPILE([#include <sys/types.h>
766 #include <pthread.h>], [pthread_rwlock_t *rwlock;],
767 [apr_cv_type_rwlock_t=yes], [apr_cv_type_rwlock_t=no],
768 [apr_cv_type_rwlock_t=no]))
769 if test "$apr_cv_type_rwlock_t" = "yes"; then
770 AC_DEFINE(HAVE_PTHREAD_RWLOCKS, 1, [Define if pthread rwlocks are available])
774 if test "$ac_cv_func_pthread_yield" = "no"; then
775 dnl ----------------------------- Checking for sched_yield
776 AC_CHECK_HEADERS([sched.h])
777 AC_CHECK_FUNCS([sched_yield])
782 ac_cv_define_READDIR_IS_THREAD_SAFE=no
783 ac_cv_define_GETHOSTBYNAME_IS_THREAD_SAFE=no
784 ac_cv_define_GETHOSTBYADDR_IS_THREAD_SAFE=no
785 ac_cv_define_GETSERVBYNAME_IS_THREAD_SAFE=no
786 if test "$threads" = "1"; then
787 echo "APR will use threads"
788 AC_CHECK_LIB(c_r, readdir,
789 AC_DEFINE(READDIR_IS_THREAD_SAFE, 1,
790 [Define if readdir is thread safe]))
791 if test "x$apr_gethostbyname_is_thread_safe" = "x"; then
792 AC_CHECK_LIB(c_r, gethostbyname, apr_gethostbyname_is_thread_safe=yes)
794 if test "$apr_gethostbyname_is_thread_safe" = "yes"; then
795 AC_DEFINE(GETHOSTBYNAME_IS_THREAD_SAFE, 1,
796 [Define if gethostbyname is thread safe])
798 if test "x$apr_gethostbyaddr_is_thread_safe" = "x"; then
799 AC_CHECK_LIB(c_r, gethostbyaddr, apr_gethostbyaddr_is_thread_safe=yes)
801 if test "$apr_gethostbyaddr_is_thread_safe" = "yes"; then
802 AC_DEFINE(GETHOSTBYADDR_IS_THREAD_SAFE, 1,
803 [Define if gethostbyaddr is thread safe])
805 if test "x$apr_getservbyname_is_thread_safe" = "x"; then
806 AC_CHECK_LIB(c_r, getservbyname, apr_getservbyname_is_thread_safe=yes)
808 if test "$apr_getservbyname_is_thread_safe" = "yes"; then
809 AC_DEFINE(GETSERVBYNAME_IS_THREAD_SAFE, 1,
810 [Define if getservbyname is thread safe])
812 AC_CHECK_FUNCS(gethostbyname_r gethostbyaddr_r getservbyname_r)
814 echo "APR will be non-threaded"
817 dnl Electric Fence malloc checker.
818 dnl --with-efence specifies the path to Electric Fence.
819 dnl This test should remain after the threads checks since libefence
820 dnl may depend on libpthread.
822 [ --with-efence[[=DIR]] path to Electric Fence installation],
823 [ apr_efence_dir="$withval"
824 if test "$apr_efence_dir" != "yes"; then
825 APR_ADDTO(LDFLAGS,[-L$apr_efence_dir/lib])
826 if test "x$apr_platform_runtime_link_flag" != "x"; then
828 [$apr_platform_runtime_link_flag$apr_efence_dir/lib])
831 AC_CHECK_LIB(efence, malloc,
832 [ APR_ADDTO(LIBS,-lefence) ],
833 [ AC_MSG_ERROR(Electric Fence requested but not detected) ])
836 AC_CHECK_FUNCS(sigsuspend, [ have_sigsuspend="1" ], [ have_sigsuspend="0" ])
837 AC_CHECK_FUNCS(sigwait, [ have_sigwait="1" ], [ have_sigwait="0" ])
838 dnl AC_CHECK_FUNCS doesn't work for this on Tru64 since the function
839 dnl is renamed in signal.h. Todo: Autodetect
847 AC_SUBST(have_sigsuspend)
848 AC_SUBST(have_sigwait)
850 AC_CHECK_FUNCS(poll kqueue port_create)
852 # Check for the Linux epoll interface; epoll* may be available in libc
853 # but return ENOSYS on a pre-2.6 kernel, so do a run-time check.
854 AC_CACHE_CHECK([for epoll support], [apr_cv_epoll],
856 #include <sys/epoll.h>
861 return epoll_create(5) == -1;
862 }], [apr_cv_epoll=yes], [apr_cv_epoll=no], [apr_cv_epoll=no])])
864 if test "$apr_cv_epoll" = "yes"; then
865 AC_DEFINE([HAVE_EPOLL], 1, [Define if the epoll interface is supported])
868 dnl ----------------------------- Checking for extended file descriptor handling
869 # test for epoll_create1
870 AC_CACHE_CHECK([for epoll_create1 support], [apr_cv_epoll_create1],
872 #include <sys/epoll.h>
877 return epoll_create1(0) == -1;
878 }], [apr_cv_epoll_create1=yes], [apr_cv_epoll_create1=no], [apr_cv_epoll_create1=no])])
880 if test "$apr_cv_epoll_create1" = "yes"; then
881 AC_DEFINE([HAVE_EPOLL_CREATE1], 1, [Define if epoll_create1 function is supported])
885 AC_CACHE_CHECK([for dup3 support], [apr_cv_dup3],
891 return dup3(STDOUT_FILENO, STDERR_FILENO, 0) == -1;
892 }], [apr_cv_dup3=yes], [apr_cv_dup3=no], [apr_cv_dup3=no])])
894 if test "$apr_cv_dup3" = "yes"; then
895 AC_DEFINE([HAVE_DUP3], 1, [Define if dup3 function is supported])
898 # Test for accept4(). Create a non-blocking socket, bind it to
899 # an unspecified port & address (kernel picks), and attempt to
900 # call accept4() on it. If the syscall is wired up (i.e. the
901 # kernel is new enough), it should return EAGAIN.
902 AC_CACHE_CHECK([for accept4 support], [apr_cv_accept4],
904 #include <sys/types.h>
905 #include <sys/socket.h>
906 #include <sys/wait.h>
907 #include <netinet/in.h>
908 #include <netinet/tcp.h>
914 int main(int argc, char **argv)
917 struct sockaddr_in sin;
919 if ((fd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
921 flags = fcntl(fd, F_GETFL);
922 if (flags == -1 || fcntl(fd, F_SETFL, flags|O_NONBLOCK) == -1)
925 memset(&sin, 0, sizeof sin);
926 sin.sin_family = AF_INET;
928 if (bind(fd, (struct sockaddr *) &sin, sizeof sin) == -1)
931 if (listen(fd, 5) == -1)
934 if (accept4(fd, NULL, 0, SOCK_NONBLOCK) == 0
935 || errno == EAGAIN || errno == EWOULDBLOCK)
939 }], [apr_cv_accept4=yes], [apr_cv_accept4=no], [apr_cv_accept4=no])])
941 if test "$apr_cv_accept4" = "yes"; then
942 AC_DEFINE([HAVE_ACCEPT4], 1, [Define if accept4 function is supported])
945 AC_CACHE_CHECK([for SOCK_CLOEXEC support], [apr_cv_sock_cloexec],
947 #include <sys/types.h>
948 #include <sys/socket.h>
952 return socket(AF_INET, SOCK_STREAM|SOCK_CLOEXEC, 0) == -1;
953 }], [apr_cv_sock_cloexec=yes], [apr_cv_sock_cloexec=no], [apr_cv_sock_cloexec=no])])
955 if test "$apr_cv_sock_cloexec" = "yes"; then
956 AC_DEFINE([HAVE_SOCK_CLOEXEC], 1, [Define if the SOCK_CLOEXEC flag is supported])
959 dnl ----------------------------- Checking for fdatasync: OS X doesn't have it
960 AC_CHECK_FUNCS(fdatasync)
962 dnl ----------------------------- Checking for extended file descriptor handling
963 # test for epoll_create1
964 AC_CACHE_CHECK([for epoll_create1 support], [apr_cv_epoll_create1],
966 #include <sys/epoll.h>
971 return epoll_create1(0) == -1;
972 }], [apr_cv_epoll_create1=yes], [apr_cv_epoll_create1=no], [apr_cv_epoll_create1=no])])
974 if test "$apr_cv_epoll_create1" = "yes"; then
975 AC_DEFINE([HAVE_EPOLL_CREATE1], 1, [Define if epoll_create1 function is supported])
978 # Check for z/OS async i/o support.
979 AC_CACHE_CHECK([for asio -> message queue support], [apr_cv_aio_msgq],
988 a.aio_notifytype = AIO_MSGQ; /* use IPC message queue for notification */
990 return aio_cancel(2, NULL) == -1;
991 }], [apr_cv_aio_msgq=yes], [apr_cv_aio_msgq=no], [apr_cv_aio_msgq=no])])
993 if test "$apr_cv_aio_msgq" = "yes"; then
994 AC_DEFINE([HAVE_AIO_MSGQ], 1, [Define if async i/o supports message q's])
998 AC_CACHE_CHECK([for dup3 support], [apr_cv_dup3],
1004 return dup3(STDOUT_FILENO, STDERR_FILENO, 0) == -1;
1005 }], [apr_cv_dup3=yes], [apr_cv_dup3=no], [apr_cv_dup3=no])])
1007 if test "$apr_cv_dup3" = "yes"; then
1008 AC_DEFINE([HAVE_DUP3], 1, [Define if dup3 function is supported])
1012 AC_CACHE_CHECK([for accept4 support], [apr_cv_accept4],
1015 #include <sys/types.h>
1016 #include <sys/socket.h>
1018 #include <sys/wait.h>
1022 #define A4_SOCK "./apr_accept4_test_socket"
1028 struct sockaddr_un loc, rem;
1031 if ((pid = fork())) {
1036 if ((fd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1)
1037 goto cleanup_failure2;
1039 loc.sun_family = AF_UNIX;
1040 strncpy(loc.sun_path, A4_SOCK, sizeof(loc.sun_path) - 1);
1042 if (bind(fd, (struct sockaddr *) &loc,
1043 sizeof(struct sockaddr_un)) == -1)
1044 goto cleanup_failure;
1046 if (listen(fd, 5) == -1)
1047 goto cleanup_failure;
1049 rem_sz = sizeof(struct sockaddr_un);
1050 if (accept4(fd, (struct sockaddr *) &rem, &rem_sz, 0) == -1) {
1051 goto cleanup_failure;
1055 waitpid(pid, &status, 0);
1064 waitpid(pid, &status, 0);
1069 if ((fd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1)
1070 return 1; /* this will be bad: we'll hang */
1072 loc.sun_family = AF_UNIX;
1073 strncpy(loc.sun_path, A4_SOCK, sizeof(loc.sun_path) - 1);
1075 while(connect(fd, (struct sockaddr *) &loc,
1076 sizeof(struct sockaddr_un)) == -1 &&
1077 (errno==ENOENT || errno==ECONNREFUSED))
1083 }], [apr_cv_accept4=yes], [apr_cv_accept4=no], [apr_cv_accept4=no])])
1085 if test "$apr_cv_accept4" = "yes"; then
1086 AC_DEFINE([HAVE_ACCEPT4], 1, [Define if accept4 function is supported])
1089 AC_CACHE_CHECK([for SOCK_CLOEXEC support], [apr_cv_sock_cloexec],
1091 #include <sys/types.h>
1092 #include <sys/socket.h>
1096 return socket(AF_INET, SOCK_STREAM|SOCK_CLOEXEC, 0) == -1;
1097 }], [apr_cv_sock_cloexec=yes], [apr_cv_sock_cloexec=no], [apr_cv_sock_cloexec=no])])
1099 if test "$apr_cv_sock_cloexec" = "yes"; then
1100 AC_DEFINE([HAVE_SOCK_CLOEXEC], 1, [Define if the SOCK_CLOEXEC flag is supported])
1103 dnl ----------------------------- Checking for missing POSIX thread functions
1104 AC_CHECK_FUNCS([getpwnam_r getpwuid_r getgrnam_r getgrgid_r])
1106 dnl ----------------------------- Checking for Shared Memory Support
1107 echo "${nl}Checking for Shared Memory Support..."
1109 # The real-time POSIX extensions (e.g. shm_*, sem_*) may only
1110 # be available if linking against librt.
1111 AC_SEARCH_LIBS(shm_open, rt)
1115 ac_includes_default="$ac_includes_default
1116 #if HAVE_SYS_MUTEX_H /* needed to define lock_t for sys/shm.h */
1117 # include <sys/mutex.h>
1121 AC_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])
1122 AC_CHECK_FUNCS([mmap munmap shm_open shm_unlink shmget shmat shmdt shmctl \
1125 APR_CHECK_DEFINE(MAP_ANON, sys/mman.h)
1126 AC_CHECK_FILE(/dev/zero)
1128 # Not all systems can mmap /dev/zero (such as HP-UX). Check for that.
1129 if test "$ac_cv_func_mmap" = "yes" &&
1130 test "$ac_cv_file__dev_zero" = "yes"; then
1131 AC_MSG_CHECKING(for mmap that can map /dev/zero)
1133 #include <sys/types.h>
1134 #include <sys/stat.h>
1136 #ifdef HAVE_SYS_MMAN_H
1137 #include <sys/mman.h>
1143 fd = open("/dev/zero", O_RDWR);
1147 m = mmap(0, sizeof(void*), PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
1148 if (m == (void *)-1) { /* aka MAP_FAILED */
1151 if (munmap(m, sizeof(void*)) < 0) {
1155 }], [], [ac_cv_file__dev_zero=no], [ac_cv_file__dev_zero=no])
1157 AC_MSG_RESULT($ac_cv_file__dev_zero)
1160 # Now we determine which one is our anonymous shmem preference.
1164 APR_BEGIN_DECISION([anonymous shared memory allocation method])
1165 APR_IFALLYES(header:sys/ipc.h header:sys/shm.h header:sys/file.h dnl
1166 func:shmget func:shmat func:shmdt func:shmctl,
1168 APR_DECIDE(USE_SHMEM_SHMGET_ANON, [SysV IPC shmget()])])
1169 APR_IFALLYES(header:sys/mman.h func:mmap func:munmap file:/dev/zero,
1171 APR_DECIDE(USE_SHMEM_MMAP_ZERO,
1172 [SVR4-style mmap() on /dev/zero])])
1173 APR_IFALLYES(header:sys/mman.h func:mmap func:munmap define:MAP_ANON,
1175 APR_DECIDE(USE_SHMEM_MMAP_ANON,
1176 [4.4BSD-style mmap() via MAP_ANON])])
1177 APR_IFALLYES(header:os2.h,
1179 APR_DECIDE(USE_SHMEM_OS2_ANON, [OS/2 DosAllocSharedMem()])])
1180 APR_IFALLYES(header:kernel/OS.h func:create_area,
1182 APR_DECIDE(USE_SHMEM_BEOS_ANON,
1184 APR_IFALLYES(header:windows.h func:CreateFileMapping,
1186 APR_DECIDE(USE_SHMEM_WIN32_ANON,
1187 [Windows CreateFileMapping()])])
1190 # Linux has problems with MM_SHMT_MMANON even though it reports
1192 # FIXME - find exact 2.3 version that MMANON was fixed in. It is
1193 # confirmed fixed in 2.4 series.
1194 if test $os_pre24linux -eq 1; then
1195 AC_MSG_WARN([Disabling anon mmap() support for Linux pre-2.4])
1196 APR_DECISION_OVERRIDE(USE_SHMEM_MMAP_ZERO USE_SHMEM_SHMGET_ANON)
1200 APR_DECISION_OVERRIDE(USE_SHMEM_SHMGET_ANON)
1204 AC_DEFINE_UNQUOTED($ac_decision)
1210 case $ac_decision in
1211 USE_SHMEM_SHMGET_ANON )
1214 USE_SHMEM_MMAP_ZERO )
1217 USE_SHMEM_MMAP_ANON )
1222 AC_SUBST(useshmgetanon)
1223 AC_SUBST(usemmapzero)
1224 AC_SUBST(usemmapanon)
1225 AC_SUBST(haveshmgetanon)
1226 AC_SUBST(havemmapzero)
1227 AC_SUBST(havemmapanon)
1229 # Now we determine which one is our name-based shmem preference.
1236 APR_BEGIN_DECISION([namebased memory allocation method])
1237 APR_IFALLYES(header:sys/mman.h func:mmap func:munmap,
1239 APR_DECIDE(USE_SHMEM_MMAP_TMP,
1240 [Classical mmap() on temporary file])])
1241 APR_IFALLYES(header:sys/mman.h func:mmap func:munmap func:shm_open dnl
1244 APR_DECIDE(USE_SHMEM_MMAP_SHM,
1245 [mmap() via POSIX.1 shm_open() on temporary file])])
1246 APR_IFALLYES(header:sys/ipc.h header:sys/shm.h header:sys/file.h dnl
1247 func:shmget func:shmat func:shmdt func:shmctl,
1249 APR_DECIDE(USE_SHMEM_SHMGET, [SysV IPC shmget()])])
1250 APR_IFALLYES(header:kernel/OS.h func:create_area,
1252 APR_DECIDE(USE_SHMEM_BEOS, [BeOS areas])])
1253 APR_IFALLYES(header:os2.h,
1255 APR_DECIDE(USE_SHMEM_OS2, [OS/2 DosAllocSharedMem()])])
1256 APR_IFALLYES(header:windows.h,
1258 APR_DECIDE(USE_SHMEM_WIN32, [Windows shared memory])])
1259 AC_ARG_ENABLE(posix-shm,
1260 [ --enable-posix-shm Use POSIX shared memory (shm_open) if available],
1262 if test "$havemmapshm" = "1"; then
1263 APR_DECISION_OVERRIDE(USE_SHMEM_MMAP_SHM)
1268 # Linux pre-2.4 had problems with MM_SHMT_MMANON even though
1269 # it reports that it has it.
1270 if test $os_pre24linux -eq 1; then
1271 APR_DECISION_OVERRIDE(USE_SHMEM_MMAP_TMP USE_SHMEM_MMAP_SHM dnl
1277 AC_DEFINE_UNQUOTED($ac_decision)
1286 case $ac_decision in
1287 USE_SHMEM_MMAP_TMP )
1290 USE_SHMEM_MMAP_SHM )
1307 # Do we have any shared memory support?
1308 if test "$usemmaptmp$usemmapshm$usemmapzero$useshmget$usemmapanon$usebeosarea$useos2shm$usewin32shm" = "00000000"; then
1314 AC_SUBST(usemmaptmp)
1315 AC_SUBST(usemmapshm)
1317 AC_SUBST(usebeosarea)
1319 AC_SUBST(usewin32shm)
1320 AC_SUBST(havemmaptmp)
1321 AC_SUBST(havemmapshm)
1322 AC_SUBST(haveshmget)
1323 AC_SUBST(havebeosarea)
1324 AC_SUBST(haveos2shm)
1325 AC_SUBST(havewin32shm)
1328 dnl ----------------------------- Checks for Any required Functions
1329 dnl Checks for library functions. (N.B. poll is further down)
1333 AC_CHECK_FUNCS([calloc setsid isinf isnan \
1334 getenv putenv setenv unsetenv \
1335 writev getifaddrs utime utimes])
1336 AC_CHECK_FUNCS(setrlimit, [ have_setrlimit="1" ], [ have_setrlimit="0" ])
1337 AC_CHECK_FUNCS(getrlimit, [ have_getrlimit="1" ], [ have_getrlimit="0" ])
1339 AC_CHECK_LIB(sendfile, sendfilev)
1340 AC_CHECK_FUNCS(sendfile send_file sendfilev, [ sendfile="1" ])
1342 dnl THIS MUST COME AFTER THE THREAD TESTS - FreeBSD doesn't always have a
1343 dnl threaded poll() and we don't want to use sendfile on early FreeBSD
1344 dnl systems if we are also using threads.
1346 AC_ARG_WITH(sendfile, [ --with-sendfile Override decision to use sendfile],
1347 [ if test "$withval" = "yes"; then
1352 orig_sendfile=$sendfile
1355 # FreeBSD < 4.2 has issues with threads+sendfile
1356 if test $os_version -le "401999"; then
1357 if test "$threads" = "1"; then
1366 # disable sendfile support for 2.2 on S/390
1367 if test $os_pre24linux -eq 1; then
1368 AC_MSG_WARN([Disabled sendfile support for Linux 2.2 on S/390])
1373 # compiler-independent check for 64-bit build
1374 AC_CHECK_SIZEOF(void*, 4)
1375 if test "x$ac_cv_sizeof_voidp" = "x8"; then
1376 # sendfile not working for 64-bit build
1381 if test "$orig_sendfile" != "$sendfile"; then
1382 echo "sendfile support disabled to avoid system problem"
1386 AC_CHECK_FUNCS(sigaction, [ have_sigaction="1" ], [ have_sigaction="0" ])
1389 AC_CHECK_FUNCS(fork, [ fork="1" ], [ fork="0" ])
1391 APR_CHECK_INET_NETWORK
1392 AC_SUBST(apr_inaddr_none)
1393 AC_CHECK_FUNC(_getch)
1394 AC_CHECK_FUNCS(strerror_r, [ strerror_r="1" ], [ strerror_r="0" ])
1395 if test "$strerror_r" = "1"; then
1396 APR_CHECK_STRERROR_R_RC
1398 AC_CHECK_FUNCS(mmap, [ mmap="1" ], [ mmap="0" ])
1399 if test "$native_mmap_emul" = "1"; then
1402 AC_CHECK_FUNCS(memmove, [ have_memmove="1" ], [have_memmove="0" ])
1403 AC_CHECK_FUNCS([getpass getpassphrase gmtime_r localtime_r mkstemp])
1406 AC_SUBST(have_inet_addr)
1407 AC_SUBST(tcp_nodelay_inherited)
1408 AC_SUBST(o_nonblock_inherited)
1409 AC_SUBST(have_inet_network)
1410 AC_SUBST(have_sigaction)
1411 AC_SUBST(have_setrlimit)
1412 AC_SUBST(have_getrlimit)
1414 AC_SUBST(have_memmove)
1416 APR_CHECK_SIGWAIT_ONE_ARG
1418 dnl ----------------------------- Checks for Any required Headers
1466 netinet/sctp_uio.h \
1488 # IRIX 6.5 has a problem in <netinet/tcp.h> which prevents it from
1489 # being included by itself. Check for <netinet/tcp.h> manually,
1490 # including another header file first.
1491 AC_CACHE_CHECK([for netinet/tcp.h], [apr_cv_hdr_netinet_tcp_h],
1493 [#ifdef HAVE_NETINET_IN_H
1494 #include <netinet/in.h>
1496 #include <netinet/tcp.h>
1497 ], [apr_cv_hdr_netinet_tcp_h=yes], [apr_cv_hdr_netinet_tcp_h=no])])
1498 if test "$apr_cv_hdr_netinet_tcp_h" = "yes"; then
1500 AC_DEFINE([HAVE_NETINET_TCP_H], 1, [Defined if netinet/tcp.h is present])
1505 AC_SUBST(arpa_ineth)
1515 AC_SUBST(sys_syslimitsh)
1516 AC_SUBST(netinet_inh)
1517 AC_SUBST(netinet_sctph)
1518 AC_SUBST(netinet_sctp_uioh)
1519 AC_SUBST(netinet_tcph)
1525 AC_SUBST(sys_ioctlh)
1526 AC_SUBST(sys_sendfileh)
1527 AC_SUBST(sys_signalh)
1528 AC_SUBST(sys_socketh)
1529 AC_SUBST(sys_sockioh)
1530 AC_SUBST(sys_typesh)
1540 AC_SUBST(semaphoreh)
1544 # Checking for h_errno in <netdb.h>
1545 if test "$netdbh" = "1"; then
1546 APR_CHECK_H_ERRNO_FLAG
1547 if test "$ac_cv_h_errno_cflags" = "no"; then
1548 AC_MSG_ERROR([can not find h_errno in netdb.h])
1552 AC_ARG_ENABLE(allocator-uses-mmap,
1553 [ --enable-allocator-uses-mmap Use mmap in apr_allocator instead of malloc ],
1554 [ if test "$enableval" = "yes"; then
1555 APR_IFALLYES(header:sys/mman.h func:mmap func:munmap define:MAP_ANON,
1556 [AC_DEFINE(APR_ALLOCATOR_USES_MMAP, 1,
1557 [Define if apr_allocator should use mmap]) ],
1558 [AC_MSG_ERROR([mmap()/MAP_ANON not supported]) ]
1563 dnl ----------------------------- Checks for standard typedefs
1568 AC_CHECK_TYPE(ssize_t, int)
1575 dnl Checks for pointer size
1576 AC_CHECK_SIZEOF(void*, 4)
1578 if test "x$ac_cv_sizeof_voidp" != "x"; then
1579 voidp_size=$ac_cv_sizeof_voidp
1581 AC_ERROR([Cannot determine size of void*])
1584 dnl Checks for integer size
1585 AC_CHECK_SIZEOF(char, 1)
1586 AC_CHECK_SIZEOF(int, 4)
1587 AC_CHECK_SIZEOF(long, 4)
1588 AC_CHECK_SIZEOF(short, 2)
1589 AC_CHECK_SIZEOF(long long, 8)
1591 if test "$ac_cv_sizeof_short" = "2"; then
1594 if test "$ac_cv_sizeof_int" = "4"; then
1597 # Now we need to find what apr_int64_t (sizeof == 8) will be.
1598 # The first match is our preference.
1599 if test "$ac_cv_sizeof_int" = "8"; then
1600 int64_literal='#define APR_INT64_C(val) (val)'
1601 uint64_literal='#define APR_UINT64_C(val) (val##U)'
1602 int64_t_fmt='#define APR_INT64_T_FMT "d"'
1603 uint64_t_fmt='#define APR_UINT64_T_FMT "u"'
1604 uint64_t_hex_fmt='#define APR_UINT64_T_HEX_FMT "x"'
1607 int64_strfn="strtoi"
1608 elif test "$ac_cv_sizeof_long" = "8"; then
1609 int64_literal='#define APR_INT64_C(val) (val##L)'
1610 uint64_literal='#define APR_UINT64_C(val) (val##UL)'
1611 int64_t_fmt='#define APR_INT64_T_FMT "ld"'
1612 uint64_t_fmt='#define APR_UINT64_T_FMT "lu"'
1613 uint64_t_hex_fmt='#define APR_UINT64_T_HEX_FMT "lx"'
1616 int64_strfn="strtol"
1617 elif test "$ac_cv_sizeof_long_long" = "8"; then
1618 int64_literal='#define APR_INT64_C(val) (val##LL)'
1619 uint64_literal='#define APR_UINT64_C(val) (val##ULL)'
1620 # Linux, Solaris, FreeBSD all support ll with printf.
1621 # BSD 4.4 originated 'q'. Solaris is more popular and
1622 # doesn't support 'q'. Solaris wins. Exceptions can
1623 # go to the OS-dependent section.
1624 int64_t_fmt='#define APR_INT64_T_FMT "lld"'
1625 uint64_t_fmt='#define APR_UINT64_T_FMT "llu"'
1626 uint64_t_hex_fmt='#define APR_UINT64_T_HEX_FMT "llx"'
1627 int64_value="long long"
1628 long_value="long long"
1629 int64_strfn="strtoll"
1630 elif test "$ac_cv_sizeof_longlong" = "8"; then
1631 int64_literal='#define APR_INT64_C(val) (val##LL)'
1632 uint64_literal='#define APR_UINT64_C(val) (val##ULL)'
1633 int64_t_fmt='#define APR_INT64_T_FMT "qd"'
1634 uint64_t_fmt='#define APR_UINT64_T_FMT "qu"'
1635 uint64_t_hex_fmt='#define APR_UINT64_T_HEX_FMT "qx"'
1636 int64_value="__int64"
1637 long_value="__int64"
1638 int64_strfn="strtoll"
1640 # int64_literal may be overriden if your compiler thinks you have
1641 # a 64-bit value but APR does not agree.
1642 AC_ERROR([could not detect a 64-bit integer type])
1645 # If present, allow the C99 macro INT64_C to override our conversion.
1647 # HP-UX's ANSI C compiler provides this without any includes, so we
1648 # will first look for INT64_C without adding stdint.h
1649 AC_CACHE_CHECK([for INT64_C], [apr_cv_define_INT64_C], [
1650 AC_EGREP_CPP(YES_IS_DEFINED,
1653 #endif], [apr_cv_define_INT64_C=yes], [
1654 # Now check for INT64_C in stdint.h
1655 AC_EGREP_CPP(YES_IS_DEFINED, [#include <stdint.h>
1658 #endif], [apr_cv_define_INT64_C=yes], [apr_cv_define_INT64_C=no])])])
1660 if test "$apr_cv_define_INT64_C" = "yes"; then
1661 int64_literal='#define APR_INT64_C(val) INT64_C(val)'
1662 uint64_literal='#define APR_UINT64_C(val) UINT64_C(val)'
1668 if test "$ac_cv_type_size_t" = "yes"; then
1669 size_t_value="size_t"
1671 size_t_value="apr_int32_t"
1673 if test "$ac_cv_type_ssize_t" = "yes"; then
1674 ssize_t_value="ssize_t"
1676 ssize_t_value="apr_int32_t"
1678 if test "$ac_cv_socklen_t" = "yes"; then
1679 socklen_t_value="socklen_t"
1682 if test "$ac_cv_sizeof_long" = "8"; then
1683 # 64-bit HP-UX requires 32-bit socklens in
1684 # kernel, but user-space declarations say
1685 # 64-bit (socklen_t == size_t == long).
1686 # This will result in many compile warnings,
1687 # but we're functionally busted otherwise.
1688 socklen_t_value="int"
1693 socklen_t_value="int"
1696 APR_CHECK_SIZEOF_EXTENDED([#include <sys/types.h>], pid_t, 8)
1698 if test "$ac_cv_sizeof_pid_t" = "$ac_cv_sizeof_short"; then
1699 pid_t_fmt='#define APR_PID_T_FMT "hd"'
1700 elif test "$ac_cv_sizeof_pid_t" = "$ac_cv_sizeof_int"; then
1701 pid_t_fmt='#define APR_PID_T_FMT "d"'
1702 elif test "$ac_cv_sizeof_pid_t" = "$ac_cv_sizeof_long"; then
1703 pid_t_fmt='#define APR_PID_T_FMT "ld"'
1704 elif test "$ac_cv_sizeof_pid_t" = "$ac_cv_sizeof_long_long"; then
1705 pid_t_fmt='#define APR_PID_T_FMT APR_INT64_T_FMT'
1707 pid_t_fmt='#error Can not determine the proper size for pid_t'
1710 # Basically, we have tried to figure out the correct format strings
1711 # for APR types which vary between platforms, but we don't always get
1715 # uniquely, the 31-bit Linux/s390 uses "unsigned long int"
1716 # for size_t rather than "unsigned int":
1724 if test "$ac_cv_sizeof_long" = "8"; then
1725 pid_t_fmt='#define APR_PID_T_FMT "d"'
1727 pid_t_fmt='#define APR_PID_T_FMT "ld"'
1751 int64_t_fmt='#define APR_INT64_T_FMT "I64d"'
1752 uint64_t_fmt='#define APR_UINT64_T_FMT "I64u"'
1753 uint64_t_hex_fmt='#define APR_UINT64_T_HEX_FMT "I64x"'
1754 int64_value="__int64"
1755 long_value="__int64"
1756 int64_strfn="_strtoi64"
1760 APR_CHECK_TYPES_COMPATIBLE(ssize_t, int, [ssize_t_fmt="d"])
1761 APR_CHECK_TYPES_COMPATIBLE(ssize_t, long, [ssize_t_fmt="ld"])
1762 APR_CHECK_TYPES_COMPATIBLE(size_t, unsigned int, [size_t_fmt="u"])
1763 APR_CHECK_TYPES_COMPATIBLE(size_t, unsigned long, [size_t_fmt="lu"])
1765 APR_CHECK_SIZEOF_EXTENDED([#include <sys/types.h>], ssize_t, 8)
1767 AC_MSG_CHECKING([which format to use for apr_ssize_t])
1768 if test -n "$ssize_t_fmt"; then
1769 AC_MSG_RESULT(%$ssize_t_fmt)
1770 elif test "$ac_cv_sizeof_ssize_t" = "$ac_cv_sizeof_int"; then
1773 elif test "$ac_cv_sizeof_ssize_t" = "$ac_cv_sizeof_long"; then
1777 AC_ERROR([could not determine the proper format for apr_ssize_t])
1780 ssize_t_fmt="#define APR_SSIZE_T_FMT \"$ssize_t_fmt\""
1782 APR_CHECK_SIZEOF_EXTENDED([#include <stddef.h>], size_t, 8)
1784 AC_MSG_CHECKING([which format to use for apr_size_t])
1785 if test -n "$size_t_fmt"; then
1786 AC_MSG_RESULT(%$size_t_fmt)
1787 elif test "$ac_cv_sizeof_size_t" = "$ac_cv_sizeof_int"; then
1790 elif test "$ac_cv_sizeof_size_t" = "$ac_cv_sizeof_long"; then
1794 AC_ERROR([could not determine the proper format for apr_size_t])
1797 size_t_fmt="#define APR_SIZE_T_FMT \"$size_t_fmt\""
1799 APR_CHECK_SIZEOF_EXTENDED([#include <sys/types.h>], off_t, 8)
1801 if test "${ac_cv_sizeof_off_t}${apr_cv_use_lfs64}" = "4yes"; then
1804 AC_CHECK_FUNCS([mmap64 sendfile64 sendfilev64 mkstemp64 readdir64_r])
1805 elif test "${ac_cv_sizeof_off_t}" != "${ac_cv_sizeof_size_t}"; then
1806 # unsure of using -gt above is as portable, can can't forsee where
1807 # off_t can legitimately be smaller than size_t
1813 AC_MSG_CHECKING([which type to use for apr_off_t])
1814 if test "${ac_cv_sizeof_off_t}${apr_cv_use_lfs64}" = "4yes"; then
1816 off_t_fmt='#define APR_OFF_T_FMT APR_INT64_T_FMT'
1817 off_t_value='off64_t'
1818 off_t_strfn='apr_strtoi64'
1819 elif test "${ac_cv_sizeof_off_t}x${ac_cv_sizeof_long}" = "4x4"; then
1820 # Special case: off_t may change size with _FILE_OFFSET_BITS
1821 # on 32-bit systems with LFS support. To avoid compatibility
1822 # issues when other packages do define _FILE_OFFSET_BITS,
1823 # hard-code apr_off_t to long.
1825 off_t_fmt='#define APR_OFF_T_FMT "ld"'
1826 off_t_strfn='strtol'
1827 elif test "$ac_cv_type_off_t" = "yes"; then
1829 # off_t is more commonly a long than an int; prefer that case
1830 # where int and long are the same size.
1831 if test "$ac_cv_sizeof_off_t" = "$ac_cv_sizeof_long"; then
1832 off_t_fmt='#define APR_OFF_T_FMT "ld"'
1833 off_t_strfn='strtol'
1834 elif test "$ac_cv_sizeof_off_t" = "$ac_cv_sizeof_int"; then
1835 off_t_fmt='#define APR_OFF_T_FMT "d"'
1836 off_t_strfn='strtoi'
1837 elif test "$ac_cv_sizeof_off_t" = "$ac_cv_sizeof_long_long"; then
1838 off_t_fmt='#define APR_OFF_T_FMT APR_INT64_T_FMT'
1839 off_t_strfn='apr_strtoi64'
1841 AC_ERROR([could not determine the size of off_t])
1846 off_t_value=apr_int64_t
1847 off_t_fmt='#define APR_OFF_T_FMT "I64d"'
1848 off_t_strfn='_strtoi64'
1853 off_t_value=apr_int32_t
1855 off_t_strfn='strtoi'
1857 AC_MSG_RESULT($off_t_value)
1859 # Regardless of whether _LARGEFILE64_SOURCE is used, on some
1860 # platforms _FILE_OFFSET_BITS will affect the size of ino_t and hence
1861 # the build-time ABI may be different from the apparent ABI when using
1862 # APR with another package which *does* define _FILE_OFFSET_BITS.
1863 # (Exactly as per the case above with off_t where LFS is *not* used)
1865 # To be safe, hard-code apr_ino_t as 'unsigned long' or 'unsigned int'
1866 # iff that is exactly the size of ino_t here; otherwise use ino_t as existing
1867 # releases did. To be correct, apr_ino_t should have been made an
1868 # ino64_t as apr_off_t is off64_t, but this can't be done now without
1874 ino_t_value=apr_int64_t
1878 APR_CHECK_SIZEOF_EXTENDED(AC_INCLUDES_DEFAULT, ino_t, $ac_cv_sizeof_long)
1879 if test $ac_cv_sizeof_ino_t = 4; then
1880 if test $ac_cv_sizeof_long = 4; then
1881 ino_t_value="unsigned long"
1883 ino_t_value="unsigned int"
1888 AC_MSG_NOTICE([using $ino_t_value for ino_t])
1890 # Checks for endianness
1892 if test $ac_cv_c_bigendian = yes; then
1898 APR_CHECK_SIZEOF_EXTENDED([#include <sys/types.h>
1899 #include <sys/uio.h>],struct iovec,0)
1900 if test "$ac_cv_sizeof_struct_iovec" = "0"; then
1906 AC_SUBST(voidp_size)
1907 AC_SUBST(short_value)
1909 AC_SUBST(long_value)
1910 AC_SUBST(int64_value)
1911 AC_SUBST(off_t_value)
1912 AC_SUBST(size_t_value)
1913 AC_SUBST(ssize_t_value)
1914 AC_SUBST(socklen_t_value)
1915 AC_SUBST(int64_t_fmt)
1916 AC_SUBST(uint64_t_fmt)
1917 AC_SUBST(uint64_t_hex_fmt)
1918 AC_SUBST(ssize_t_fmt)
1919 AC_SUBST(size_t_fmt)
1922 AC_SUBST(int64_literal)
1923 AC_SUBST(uint64_literal)
1927 AC_SUBST(have_iovec)
1928 AC_SUBST(ino_t_value)
1930 dnl ----------------------------- Checking for string functions
1931 AC_CHECK_FUNCS(strnicmp, have_strnicmp="1", have_strnicmp="0")
1932 AC_CHECK_FUNCS(strncasecmp, have_strncasecmp="1", have_strncasecmp="0")
1933 AC_CHECK_FUNCS(stricmp, have_stricmp="1", have_stricmp="0")
1934 AC_CHECK_FUNCS(strcasecmp, have_strcasecmp="1", have_strcasecmp="0")
1935 AC_CHECK_FUNCS(strdup, have_strdup="1", have_strdup="0")
1936 AC_CHECK_FUNCS(strstr, have_strstr="1", have_strstr="0")
1937 AC_CHECK_FUNCS(memchr, have_memchr="1", have_memchr="0")
1938 AC_CHECK_FUNC($int64_strfn, have_int64_strfn="1", have_int64_strfn="0")
1940 dnl ----------------------------- We have a fallback position
1941 if test "$have_int64_strfn" = "0" && test "$int64_strfn" = "strtoll"; then
1942 int64_strfn="strtoq"
1943 AC_CHECK_FUNC(strtoq, [have_int64_strfn=1], [have_int64_strfn=0])
1946 if test "$have_int64_strfn" = "1"; then
1947 AC_DEFINE_UNQUOTED(APR_INT64_STRFN, [$int64_strfn],
1948 [Define as function which can be used for conversion of strings to apr_int64_t])
1951 AC_SUBST(have_strnicmp)
1952 AC_SUBST(have_strncasecmp)
1953 AC_SUBST(have_stricmp)
1954 AC_SUBST(have_strcasecmp)
1955 AC_SUBST(have_strdup)
1956 AC_SUBST(have_strstr)
1957 AC_SUBST(have_memchr)
1959 if test "$off_t_strfn" = "apr_strtoi64" && test "$have_int64_strfn" = "1"; then
1960 off_t_strfn=$int64_strfn
1962 AC_DEFINE_UNQUOTED(APR_OFF_T_STRFN, [$off_t_strfn],
1963 [Define as function used for conversion of strings to apr_off_t])
1965 dnl ----------------------------- Checking for DSO support
1966 echo "${nl}Checking for DSO..."
1968 [ --disable-dso Disable DSO support ],
1969 [if test "x$enableval" = "xyes"; then
1976 if test "$dsotype" = "any"; then
1977 if test "$dsotype" = "any"; then
1980 # Original Darwin, not for 9.0!:
1981 AC_CHECK_FUNC(NSLinkModule, [dsotype=dyld]);;
1982 hppa*-hpux[[1-9]]\.*|hppa*-hpux1[[01]]*)
1983 # shl is specific to parisc hpux SOM binaries, not used for 64 bit
1984 AC_CHECK_LIB(dld, shl_load, [have_shl=1])
1985 if test "$ac_cv_sizeof_voidp$have_shl" = "41"; then
1986 dsotype=shl; APR_ADDTO(LIBS,-ldld)
1989 # several 'other's below probably belong up here. If they always
1990 # use a platform implementation and shouldn't test the dlopen/dlfcn
1991 # features, then bring them up here.
1992 # But if they -should- optionally use dlfcn, and/or need the config
1993 # detection of dlopen/dlsym, do not move them up.
1998 if test "$dsotype" = "any"; then
1999 AC_CHECK_FUNC(dlopen, [dsotype=dlfcn])
2001 if test "$dsotype" = "any"; then
2002 AC_CHECK_LIB(dl, dlopen, [dsotype=dlfcn; APR_ADDTO(LIBS,-ldl)])
2004 if test "$dsotype" = "dlfcn"; then
2005 # ReliantUnix has dlopen() in libc but dlsym() in libdl :(
2006 AC_CHECK_FUNC(dlsym, [],
2007 [AC_CHECK_LIB(dl, dlsym,
2008 [APR_ADDTO(LIBS, -ldl)],
2010 echo "Weird: dlopen() was found but dlsym() was not found!"])])
2012 if test "$dsotype" = "any"; then
2014 AC_CHECK_LIB(root, load_image, [dsotype=other])
2017 if test "$dsotype" = "any"; then
2019 *os390|*os400|*-aix*)
2020 # Some -aix5 will use dl, no hassles. Keep that pattern here.
2023 if test "$have_shl" = "1"; then
2024 dsotype=shl; APR_ADDTO(LIBS,-ldld)
2030 if test "$dsotype" = "any"; then
2031 AC_MSG_ERROR([Could not detect suitable DSO implementation])
2032 elif test "$dsotype" = "no"; then
2036 dlfcn) AC_DEFINE(DSO_USE_DLFCN, 1, [Define if DSO support uses dlfcn.h]);;
2037 shl) AC_DEFINE(DSO_USE_SHL, 1, [Define if DSO support uses shl_load]);;
2038 dyld) AC_DEFINE(DSO_USE_DYLD, 1, [Define if DSO support uses dyld.h]);;
2039 other) ;; # Use whatever is in dso/OSDIR
2040 *) AC_MSG_ERROR([Unknown DSO implementation "$dsotype"]);;
2043 apr_modules="$apr_modules dso"
2048 dnl ----------------------------- Checking for Processes
2049 echo "${nl}Checking for Processes..."
2051 AC_CHECK_FUNCS(waitpid)
2053 AC_ARG_ENABLE(other-child,
2054 [ --enable-other-child Enable reliable child processes ],
2055 [ if test "$enableval" = "yes"; then
2064 if test -z "$have_proc_invoked"; then
2065 have_proc_invoked="0"
2068 AC_SUBST(have_proc_invoked)
2070 AC_MSG_CHECKING(for Variable Length Arrays)
2071 APR_TRY_COMPILE_NO_WARNING([],
2075 ], vla_msg=yes, vla_msg=no )
2076 AC_MSG_RESULT([$vla_msg])
2077 if test "$vla_msg" = "yes"; then
2078 AC_DEFINE(HAVE_VLA, 1, [Define if C compiler supports VLA])
2081 AC_CACHE_CHECK(struct rlimit,ac_cv_struct_rlimit,[
2083 #include <sys/types.h>
2084 #include <sys/time.h>
2085 #include <sys/resource.h>
2088 struct rlimit limit;
2093 ac_cv_struct_rlimit=yes ], [
2094 ac_cv_struct_rlimit=no ], [
2095 ac_cv_struct_rlimit=no ] ) ] )
2097 test "x$ac_cv_struct_rlimit" = xyes && struct_rlimit=1
2098 AC_SUBST(struct_rlimit)
2100 dnl ----------------------------- Checking for Locking Characteristics
2101 echo "${nl}Checking for Locking..."
2103 AC_CHECK_FUNCS(semget semctl flock)
2104 AC_CHECK_HEADERS(semaphore.h OS.h)
2105 AC_SEARCH_LIBS(sem_open, rt)
2106 AC_CHECK_FUNCS(sem_close sem_unlink sem_post sem_wait create_sem)
2108 # Some systems return ENOSYS from sem_open.
2109 AC_CACHE_CHECK(for working sem_open,ac_cv_func_sem_open,[
2114 #include <semaphore.h>
2116 #define SEM_FAILED (-1)
2121 const char *sem_name = "/apr_autoconf";
2123 psem = sem_open(sem_name, O_CREAT, 0644, 1);
2124 if (psem == (sem_t *)SEM_FAILED) {
2128 psem = sem_open(sem_name, O_CREAT | O_EXCL, 0644, 1);
2129 if (psem != (sem_t *)SEM_FAILED) {
2133 sem_unlink(sem_name);
2135 }], [ac_cv_func_sem_open=yes], [ac_cv_func_sem_open=no],
2136 [ac_cv_func_sem_open=no])])
2138 # It's stupid, but not all platforms have union semun, even those that need it.
2139 AC_MSG_CHECKING(for union semun in sys/sem.h)
2141 #include <sys/types.h>
2142 #include <sys/ipc.h>
2143 #include <sys/sem.h>
2146 semctl(0, 0, 0, arg);
2147 ], [have_union_semun="1" union_semun=yes ]
2149 have_union_semun="0"
2151 AC_MSG_RESULT([$msg])
2152 AC_SUBST(have_union_semun)
2154 dnl Checks for libraries.
2155 APR_CHECK_DEFINE(LOCK_EX, sys/file.h)
2156 APR_CHECK_DEFINE(F_SETLK, fcntl.h)
2157 APR_CHECK_DEFINE(SEM_UNDO, sys/sem.h)
2159 # We are assuming that if the platform doesn't have POLLIN, it doesn't have
2160 # any POLL definitions.
2161 APR_CHECK_DEFINE_FILES(POLLIN, poll.h sys/poll.h)
2163 if test "$threads" = "1"; then
2164 APR_CHECK_DEFINE(PTHREAD_PROCESS_SHARED, pthread.h)
2165 AC_CHECK_FUNCS(pthread_mutexattr_setpshared)
2166 # Some systems have setpshared and define PROCESS_SHARED, but don't
2167 # really support PROCESS_SHARED locks. So, we must validate that we
2168 # can go through the steps without receiving some sort of system error.
2169 # Linux and older versions of AIX have this problem.
2170 APR_IFALLYES(header:pthread.h define:PTHREAD_PROCESS_SHARED func:pthread_mutexattr_setpshared, [
2171 AC_CACHE_CHECK([for working PROCESS_SHARED locks], apr_cv_process_shared_works, [
2173 #include <sys/types.h>
2174 #include <pthread.h>
2177 pthread_mutex_t mutex;
2178 pthread_mutexattr_t attr;
2179 if (pthread_mutexattr_init(&attr))
2181 if (pthread_mutexattr_setpshared(&attr, PTHREAD_PROCESS_SHARED))
2183 if (pthread_mutex_init(&mutex, &attr))
2185 if (pthread_mutexattr_destroy(&attr))
2187 if (pthread_mutex_destroy(&mutex))
2190 }], [apr_cv_process_shared_works=yes], [apr_cv_process_shared_works=no])])
2191 # Override detection of pthread_mutexattr_setpshared
2192 ac_cv_func_pthread_mutexattr_setpshared=$apr_cv_process_shared_works])
2194 if test "$ac_cv_func_pthread_mutexattr_setpshared" = "yes"; then
2195 APR_CHECK_PTHREAD_ROBUST_SHARED_MUTEX
2199 # See which lock mechanisms we can support on this system.
2200 APR_IFALLYES(header:semaphore.h func:sem_open func:sem_close dnl
2201 func:sem_unlink func:sem_post func:sem_wait,
2202 hasposixser="1", hasposixser="0")
2203 APR_IFALLYES(func:semget func:semctl define:SEM_UNDO, hassysvser="1",
2205 APR_IFALLYES(func:flock define:LOCK_EX, hasflockser="1", hasflockser="0")
2206 APR_IFALLYES(header:fcntl.h define:F_SETLK, hasfcntlser="1", hasfcntlser="0")
2207 # note: the current APR use of shared mutex requires /dev/zero
2208 APR_IFALLYES(header:pthread.h define:PTHREAD_PROCESS_SHARED dnl
2209 func:pthread_mutexattr_setpshared dnl
2211 hasprocpthreadser="1", hasprocpthreadser="0")
2212 APR_IFALLYES(header:OS.h func:create_sem, hasbeossem="1", hasbeossem="0")
2214 # See which lock mechanism we'll select by default on this system.
2215 # The last APR_DECIDE to execute sets the default.
2216 # At this stage, we match the ordering in Apache 1.3
2217 # which is (highest to lowest): sysvsem -> fcntl -> flock.
2218 # POSIX semaphores and cross-process pthread mutexes are not
2219 # used by default since they have less desirable behaviour when
2220 # e.g. a process holding the mutex segfaults.
2221 # The BEOSSEM decision doesn't require any substitutions but is
2222 # included here to prevent the fcntl() branch being selected
2223 # from the decision making.
2224 APR_BEGIN_DECISION([apr_lock implementation method])
2225 APR_IFALLYES(func:flock define:LOCK_EX,
2226 APR_DECIDE(USE_FLOCK_SERIALIZE, [4.2BSD-style flock()]))
2227 APR_IFALLYES(header:fcntl.h define:F_SETLK,
2228 APR_DECIDE(USE_FCNTL_SERIALIZE, [SVR4-style fcntl()]))
2229 APR_IFALLYES(func:semget func:semctl define:SEM_UNDO,
2230 APR_DECIDE(USE_SYSVSEM_SERIALIZE, [SysV IPC semget()]))
2231 APR_IFALLYES(header:OS.h func:create_sem,
2232 APR_DECIDE(USE_BEOSSEM, [BeOS Semaphores]))
2233 if test "x$apr_lock_method" != "x"; then
2234 APR_DECISION_FORCE($apr_lock_method)
2237 AC_DEFINE_UNQUOTED($ac_decision)
2244 case $ac_decision in
2245 USE_FLOCK_SERIALIZE )
2248 USE_FCNTL_SERIALIZE )
2251 USE_SYSVSEM_SERIALIZE )
2254 USE_POSIXSEM_SERIALIZE )
2257 USE_PROC_PTHREAD_SERIALIZE )
2265 if test $hasfcntlser = "1"; then
2266 AC_MSG_CHECKING(if fcntl returns EACCES when F_SETLK is already held)
2268 #ifdef HAVE_STDLIB_H
2271 #ifdef HAVE_SYS_TYPES_H
2272 #include <sys/types.h>
2274 #ifdef HAVE_SYS_STAT_H
2275 #include <sys/stat.h>
2277 #ifdef HAVE_SYS_WAIT_H
2278 #include <sys/wait.h>
2280 #if defined(HAVE_UNISTD_H)
2287 struct flock proc_mutex_lock_it = {0};
2288 const char *fname = "conftest.fcntl";
2293 proc_mutex_lock_it.l_whence = SEEK_SET; /* from current point */
2294 proc_mutex_lock_it.l_type = F_WRLCK; /* set exclusive/write lock */
2296 fd = creat(fname, S_IRWXU);
2299 if (rc = lockit()) {
2311 exit(WEXITSTATUS(status) != EACCES);
2317 rc = fcntl(fd, F_SETLK, &proc_mutex_lock_it);
2318 } while ( rc < 0 && errno == EINTR);
2320 return (rc < 0) ? errno : 0;
2321 }], [apr_fcntl_tryacquire_eacces=1], [apr_fcntl_tryacquire_eacces=0], [apr_fcntl_tryacquire_eacces=0])
2324 if test "$apr_fcntl_tryacquire_eacces" = "1"; then
2325 AC_DEFINE(FCNTL_TRYACQUIRE_EACCES, 1, [Define if fcntl returns EACCES when F_SETLK is already held])
2332 AC_SUBST(hasflockser)
2333 AC_SUBST(hassysvser)
2334 AC_SUBST(hasposixser)
2335 AC_SUBST(hasfcntlser)
2336 AC_SUBST(hasprocpthreadser)
2341 AC_SUBST(procpthreadser)
2342 AC_SUBST(pthreadser)
2344 AC_MSG_CHECKING(if all interprocess locks affect threads)
2345 if test "x$apr_process_lock_is_global" = "xyes"; then
2353 AC_SUBST(proclockglobal)
2355 AC_MSG_CHECKING(if POSIX sems affect threads in the same process)
2356 if test "x$apr_posixsem_is_global" = "xyes"; then
2357 AC_DEFINE(POSIXSEM_IS_GLOBAL, 1,
2358 [Define if POSIX semaphores affect threads within the process])
2364 AC_MSG_CHECKING(if SysV sems affect threads in the same process)
2365 if test "x$apr_sysvsem_is_global" = "xyes"; then
2366 AC_DEFINE(SYSVSEM_IS_GLOBAL, 1,
2367 [Define if SysV semaphores affect threads within the process])
2373 AC_MSG_CHECKING(if fcntl locks affect threads in the same process)
2374 if test "x$apr_fcntl_is_global" = "xyes"; then
2375 AC_DEFINE(FCNTL_IS_GLOBAL, 1,
2376 [Define if fcntl locks affect threads within the process])
2382 AC_MSG_CHECKING(if flock locks affect threads in the same process)
2383 if test "x$apr_flock_is_global" = "xyes"; then
2384 AC_DEFINE(FLOCK_IS_GLOBAL, 1,
2385 [Define if flock locks affect threads within the process])
2391 dnl ----------------------------- Checking for /dev/random
2392 AC_MSG_CHECKING(for entropy source)
2397 [ --with-egd[[=DIR]] use EGD-compatible socket],
2398 [ AC_DEFINE(HAVE_EGD, 1, [Define if EGD is supported])
2399 if test "$withval" = "yes"; then
2400 AC_DEFINE_UNQUOTED(EGD_DEFAULT_SOCKET, ["/var/run/egd-pool","/dev/egd-pool","/etc/egd-pool","/etc/entropy"],
2401 [Define to list of paths to EGD sockets])
2403 AC_DEFINE_UNQUOTED(EGD_DEFAULT_SOCKET, ["$withval"])
2405 AC_MSG_RESULT(EGD-compatible daemon)
2409 if test "$rand" != "1"; then
2410 AC_ARG_WITH(devrandom,
2411 [ --with-devrandom[[=DEV]] use /dev/random or compatible [[searches by default]]],
2412 [ apr_devrandom="$withval" ], [ apr_devrandom="yes" ])
2414 if test "$apr_devrandom" = "yes"; then
2415 # /dev/random on OpenBSD doesn't provide random data, so
2416 # prefer /dev/arandom, which does; see random(4).
2417 for f in /dev/arandom /dev/urandom /dev/random; do
2424 elif test "$apr_devrandom" != "no"; then
2425 if test -r "$apr_devrandom"; then
2428 AC_ERROR([$apr_devrandom not found or unreadable.])
2432 if test "$rand" = "1"; then
2435 if test $os_version -lt 1700; then
2437 why_no_rand=" ($apr_devrandom unusable on z/OS before V1R7)"
2443 if test "$rand" = "1"; then
2444 AC_DEFINE_UNQUOTED(DEV_RANDOM, ["$apr_devrandom"], [Define to path of random device])
2445 AC_MSG_RESULT([$apr_devrandom])
2449 if test "$rand" != "1"; then
2451 # we have built in support for OS/2
2453 AC_MSG_RESULT([Using OS/2 builtin random])
2457 if test "$rand" != "1"; then
2458 if test "$ac_cv_lib_truerand_main" = "yes"; then
2459 AC_DEFINE(HAVE_TRUERAND, 1, [Define if truerand is supported])
2460 AC_MSG_RESULT(truerand)
2463 AC_MSG_RESULT(not found$why_no_rand)
2473 dnl ----------------------------- Checking for File Info Support
2474 echo "${nl}Checking for File Info Support..."
2475 AC_CHECK_MEMBERS([struct stat.st_blocks, struct stat.st_atimensec,
2476 struct stat.st_ctimensec, struct stat.st_mtimensec, struct stat.st_atim.tv_nsec,
2477 struct stat.st_ctim.tv_nsec, struct stat.st_mtim.tv_nsec,
2478 struct stat.st_atime_n, struct stat.st_ctime_n, struct stat.st_mtime_n],,,[
2479 #ifdef HAVE_SYS_TYPES_H
2480 #include <sys/types.h>
2482 #ifdef HAVE_SYS_STAT_H
2483 #include <sys/stat.h>
2485 #ifdef HAVE_UNISTD_H
2489 APR_CHECK_DIRENT_INODE
2490 APR_CHECK_DIRENT_TYPE
2492 dnl ----------------------------- Checking for UUID Support
2493 echo "${nl}Checking for OS UUID Support..."
2495 AC_CHECK_HEADERS(uuid.h uuid/uuid.h sys/uuid.h, break)
2497 apr_revert_save_LIBS=$LIBS
2499 # Prefer the flavor(s) that live in libc;
2500 AC_SEARCH_LIBS(uuid_create, uuid)
2501 AC_SEARCH_LIBS(uuid_generate, uuid)
2502 if test "$ac_cv_search_uuid_create" = "none required" -o \
2503 "$ac_cv_search_uuid_generate" = "none required"; then
2504 LIBS=$apr_revert_save_LIBS
2507 AC_CHECK_FUNCS(uuid_create uuid_generate)
2509 AC_CACHE_CHECK([for os uuid usability], [apr_cv_osuuid], [
2510 # Ensure this test closely mirrors misc/unix/rand.c!
2512 #if defined(HAVE_SYS_TYPES_H)
2513 #include <sys/types.h>
2515 #if defined(HAVE_UNISTD_H)
2518 #if defined(HAVE_UUID_H)
2520 #elif defined(HAVE_UUID_UUID_H)
2521 #include <uuid/uuid.h>
2522 #elif defined(HAVE_SYS_UUID_H)
2523 #include <sys/uuid.h>
2527 if test $ac_cv_func_uuid_create = yes; then
2528 AC_TRY_LINK([$uuid_includes], [
2531 uuid_create(&g, &s);
2532 if (s == uuid_s_ok) s = 0;
2533 ], [apr_cv_osuuid=yes], [apr_cv_func_uuid_create=no])
2535 if test $ac_cv_func_uuid_generate = yes; then
2536 AC_TRY_LINK([$uuid_includes], [
2539 ], [apr_cv_osuuid=yes], [apr_cv_func_uuid_generate=no])
2543 if test $apr_cv_osuuid = yes; then
2547 LIBS=$apr_revert_save_LIBS
2552 dnl ----------------------------- Checking for Time Support
2553 echo "${nl}Checking for Time Support..."
2555 AC_CHECK_MEMBERS([struct tm.tm_gmtoff, struct tm.__tm_gmtoff],,,[
2556 #include <sys/types.h>
2559 dnl ----------------------------- Checking for Networking Support
2560 echo "${nl}Checking for Networking support..."
2562 if test "$ac_cv_type_in_addr" = "yes"; then
2568 AC_MSG_CHECKING([if fd == socket on this platform])
2569 if test "x$file_as_socket" != "x0" ; then
2576 AC_SUBST(have_in_addr)
2577 AC_SUBST(file_as_socket)
2579 if test "$ac_cv_func_poll $file_as_socket" = "yes 1"; then
2580 AC_DEFINE(WAITIO_USES_POLL, 1,
2581 [Define if apr_wait_for_io_or_timeout() uses poll(2)])
2584 # Check the types only if we have gethostbyname_r
2585 if test "$ac_cv_func_gethostbyname_r" = "yes"; then
2586 APR_CHECK_GETHOSTBYNAME_R_STYLE
2589 # Check the types only if we have getservbyname_r
2590 if test "$ac_cv_func_getservbyname_r" = "yes"; then
2591 APR_CHECK_GETSERVBYNAME_R_STYLE
2594 APR_CHECK_TCP_NODELAY_INHERITED
2595 APR_CHECK_O_NONBLOCK_INHERITED
2596 APR_CHECK_TCP_NODELAY_WITH_CORK
2598 # Look for a way of corking TCP...
2599 APR_CHECK_DEFINE(TCP_CORK, netinet/tcp.h)
2600 APR_CHECK_DEFINE(TCP_NOPUSH, netinet/tcp.h)
2601 apr_tcp_nopush_flag="0"
2602 have_corkable_tcp="0"
2603 if test "x$ac_cv_define_TCP_CORK" = "xyes"; then
2604 apr_tcp_nopush_flag="TCP_CORK"
2605 have_corkable_tcp="1"
2610 #include <linux/socket.h>
2615 apr_tcp_nopush_flag="3"
2616 have_corkable_tcp="1"
2623 if test "x$ac_cv_define_TCP_NOPUSH" = "xyes"; then
2624 apr_tcp_nopush_flag="TCP_NOPUSH"
2625 have_corkable_tcp="1"
2628 APR_CHECK_DEFINE(SO_ACCEPTFILTER, sys/socket.h)
2629 if test "x$ac_cv_define_SO_ACCEPTFILTER" = "xyes"; then
2638 AC_SUBST(apr_tcp_nopush_flag)
2639 AC_SUBST(have_corkable_tcp)
2640 AC_SUBST(acceptfilter)
2643 AC_CHECK_FUNCS(set_h_errno)
2645 echo "${nl}Checking for IPv6 Networking support..."
2646 dnl Start of checking for IPv6 support...
2649 [ --disable-ipv6 Disable IPv6 support in APR.],
2650 [ if test "$enableval" = "no"; then
2651 user_disabled_ipv6=1
2653 [ user_disabled_ipv6=0 ] )
2660 AC_SEARCH_LIBS(getaddrinfo, socket inet6)
2661 AC_SEARCH_LIBS(gai_strerror, socket inet6)
2662 AC_SEARCH_LIBS(getnameinfo, socket inet6)
2663 AC_CHECK_FUNCS(gai_strerror)
2664 APR_CHECK_WORKING_GETADDRINFO
2665 APR_CHECK_NEGATIVE_EAI
2666 APR_CHECK_WORKING_GETNAMEINFO
2667 APR_CHECK_SOCKADDR_IN6
2668 APR_CHECK_SOCKADDR_STORAGE
2671 if test "$user_disabled_ipv6" = 1; then
2672 ipv6_result="no -- disabled by user"
2674 if test "x$broken_ipv6" = "x0"; then
2675 if test "x$have_sockaddr_in6" = "x1"; then
2676 if test "x$ac_cv_working_getaddrinfo" = "xyes"; then
2677 if test "x$ac_cv_working_getnameinfo" = "xyes"; then
2678 APR_CHECK_GETADDRINFO_ADDRCONFIG
2682 ipv6_result="no -- no getnameinfo"
2685 ipv6_result="no -- no working getaddrinfo"
2688 ipv6_result="no -- no sockaddr_in6"
2691 ipv6_result="no -- the platform has known problems supporting IPv6"
2695 AC_MSG_CHECKING(if APR supports IPv6)
2696 AC_MSG_RESULT($ipv6_result)
2700 # hstrerror is only needed if IPv6 is not enabled,
2701 # so getaddrinfo/gai_strerror are not used.
2702 if test $have_ipv6 = 0; then
2703 AC_SEARCH_LIBS(hstrerror, resolv,
2704 [AC_DEFINE(HAVE_HSTRERROR, 1, [Define if hstrerror is present])])
2707 dnl Check for langinfo support
2709 AC_CHECK_HEADERS(langinfo.h)
2710 AC_CHECK_FUNCS(nl_langinfo)
2712 dnl ------------------------------ Defaults for some platform nuances
2714 dnl Do we have a Win32-centric Unicode FS?
2715 APR_SETIFNULL(have_unicode_fs, [0])
2716 AC_SUBST(have_unicode_fs)
2718 APR_SETIFNULL(apr_has_xthread_files, [0])
2719 AC_SUBST(apr_has_xthread_files)
2721 APR_SETIFNULL(apr_procattr_user_set_requires_password, [0])
2722 AC_SUBST(apr_procattr_user_set_requires_password)
2724 APR_SETIFNULL(apr_thread_func, [])
2725 AC_SUBST(apr_thread_func)
2727 APR_SETIFNULL(apr_has_user, [1])
2728 AC_SUBST(apr_has_user)
2730 dnl ----------------------------- Finalize the variables
2732 echo "${nl}Restore user-defined environment settings..."
2734 APR_RESTORE_THE_ENVIRONMENT(CPPFLAGS, EXTRA_)
2735 APR_RESTORE_THE_ENVIRONMENT(CFLAGS, EXTRA_)
2736 APR_RESTORE_THE_ENVIRONMENT(LDFLAGS, EXTRA_)
2737 APR_RESTORE_THE_ENVIRONMENT(LIBS, EXTRA_)
2738 APR_RESTORE_THE_ENVIRONMENT(INCLUDES, EXTRA_)
2739 AC_SUBST(NOTEST_CPPFLAGS)
2740 AC_SUBST(NOTEST_CFLAGS)
2741 AC_SUBST(NOTEST_LDFLAGS)
2742 AC_SUBST(NOTEST_LIBS)
2743 AC_SUBST(NOTEST_INCLUDES)
2745 dnl ----------------------------- Construct the files
2747 AC_SUBST(INTERNAL_CPPFLAGS)
2753 AC_SUBST(DEFAULT_OSDIR)
2755 AC_SUBST(LIBTOOL_LIBS)
2757 # Use -no-install or -no-fast-install to link the test
2758 # programs on all platforms but Darwin, where it would cause
2759 # the programs to be linked against installed versions of
2760 # libapr instead of those just built.
2766 LT_NO_INSTALL="-no-fast-install"
2769 LT_NO_INSTALL="-no-install"
2772 AC_SUBST(LT_NO_INSTALL)
2775 # BSD/OS (BSDi) needs to use a different include syntax in the Makefiles
2779 # Check whether they've installed GNU make
2780 if make --version > /dev/null 2>&1; then
2781 INCLUDE_RULES="include $apr_buildout/apr_rules.mk"
2782 INCLUDE_OUTPUTS="include $apr_srcdir/build-outputs.mk"
2785 INCLUDE_RULES=".include \"$apr_buildout/apr_rules.mk\""
2786 INCLUDE_OUTPUTS=".include \"$apr_srcdir/build-outputs.mk\""
2790 INCLUDE_RULES="include $apr_buildout/apr_rules.mk"
2791 INCLUDE_OUTPUTS="include $apr_srcdir/build-outputs.mk"
2794 AC_SUBST(INCLUDE_RULES)
2795 AC_SUBST(INCLUDE_OUTPUTS)
2797 AC_CONFIG_FILES([Makefile
2801 apr-$APR_MAJOR_VERSION-config:apr-config.in
2804 if test -d $srcdir/test; then
2805 AC_CONFIG_FILES([test/Makefile test/internal/Makefile])
2808 dir=include/arch/unix
2809 test -d $dir || $MKDIR $dir
2811 AC_CONFIG_COMMANDS([default], [
2812 # Commands run at the end of config.status:
2813 for i in $APR_SAVE_HEADERS; do
2814 if cmp -s $i $i.save 2>/dev/null; then
2816 AC_MSG_NOTICE([$i is unchanged])
2820 chmod +x apr-$APR_MAJOR_VERSION-config
2822 dnl This section is expanded by configure UNQUOTED so variable
2823 dnl references must be backslash-escaped as necessary.
2825 # Commands run at the beginning of config.status:
2826 APR_SAVE_HEADERS="include/apr.h include/arch/unix/apr_private.h"
2827 APR_MAJOR_VERSION=$APR_MAJOR_VERSION
2830 for apri in \${APR_SAVE_HEADERS}; do
2831 test -r \${apri} && mv \${apri} \${apri}.save