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