AC_CONFIG_AUX_DIR(./helpers)
OS=`./config.guess`
OS=`./config.sub $OS` 

echo "Configuring APR library"
echo "Platform: ${OS}"

dnl Process this file with autoconf to produce a configure script.
AC_INIT(configure.in)

AC_CONFIG_HEADER(include/apr_config.h)

AC_ARG_WITH(optim,[  --with-optim="FLAGS"      compiler optimisation flags],
	[OPTIM="$withval"])

# Most platforms use a prefix of 'lib' on their library files.
LIBPREFIX='lib'

dnl Checks for programs.
AC_PROG_CC
AC_PROG_RANLIB
AC_PROG_MAKE_SET
AC_CHECK_PROG(RM, rm, rm)
AC_CHECK_PROG(AR, ar, ar)

dnl # this is the place to put specific options for platform/compiler
dnl # combinations
case "$OS:$CC" in
    *-hp-hpux*:cc ) CFAGS="$CFLAGS -Ae +DAportable" ;;
esac


# This macro needs to be here in case we are on an AIX box.
AC_AIX

dnl Checks for integer size
AC_CHECK_SIZEOF(char, 1)
AC_CHECK_SIZEOF(int, 4)
AC_CHECK_SIZEOF(long, 4)
AC_CHECK_SIZEOF(short, 2)
AC_CHECK_SIZEOF(long double, 12)
AC_CHECK_SIZEOF(long long, 8)

dnl Checks for standard typedefs
AC_TYPE_OFF_T
AC_TYPE_PID_T
AC_TYPE_SIZE_T
AC_TYPE_UID_T
AC_CHECK_TYPE(ssize_t, int)
AC_C_INLINE

# Use /bin/sh if it exists, otherwise go looking for sh in the path
if (test -z "$SH" -a -e /bin/sh); then
  SH="/bin/sh"
fi
AC_CHECK_PROG(SH, sh, sh)

AC_CHECK_DEFINE(LOCK_EX, sys/file.h)
AC_CHECK_DEFINE(F_SETLK, fcntl.h)
AC_CHECK_DEFINE(PTHREAD_PROCESS_SHARED, pthread.h)

dnl Checks for libraries.
AC_BEGIN_DECISION([lock implementation method])
AC_IFALLYES(header:sys/file.h define:LOCK_EX,
            AC_DECIDE(USE_FLOCK_SERIALIZE, [4.2BSD-style flock()]))
AC_IFALLYES(header:sys/ipc.h header:sys/sem.h header:sys/file.h dnl
            func:semget func:semctl,
            AC_DECIDE(USE_SYSVSEM_SERIALIZE, [SysV IPC semget()]))
AC_IFALLYES(header:fcntl.h define:F_SETLK,
            AC_DECIDE(USE_FCNTL_SERIALIZE, [SVR4-style fcntl()]))
AC_IFALLYES(header:pthread.h define:PTHREAD_PROCESS_SHARED dnl
            custom:use_pthread_cross,
            AC_DECIDE(USE_PROC_PTHREAD_SERIALIZE, [pthread mutex]))
AC_DECISION_FORCE(USE_FCNTL_SERIALIZE)
AC_END_DECISION
AC_DEFINE_UNQUOTED($ac_decision) 

AC_USE_FUNCTION(pthread_mutex_init, PTHREAD_SERIALIZE)

case "$OS" in
   *beos*)
       OSDIR="beos"
       ;;
   *)
       OSDIR="unix"
       ;;
esac

AC_CHECK_LIB(dl, dlopen)
AC_CHECK_LIB(pthread, pthread_mutex_init)

if (test "$SYS_SW" = "AIX"); then
    CFLAGS="$CFLAGS -U__STR__"
    case "$SYS_KV" in
	[12]*)
	    AC_DEFINE(USEBCOPY)
	    ;;
	3*)
	    AC_DEFINE(NEED_RLIM_T)
	    ;;
	41*)
	    AC_DEFINE(NEED_RLIM_T)
	    ;;
    esac
fi

if (test "$SYS_SW" = "FreeBSD"); then
    CFLAGS="$CFLAGS -pthread -U__STR__"
fi

dnl Checks for header files.
AC_HEADER_STDC

AC_CHECK_HEADERS(crypt.h)
AC_CHECK_HEADERS(ctype.h)
AC_CHECK_HEADERS(dir.h)
AC_CHECK_HEADERS(dirent.h)
AC_CHECK_HEADERS(errno.h)
AC_CHECK_HEADERS(net/errno.h)
AC_CHECK_HEADERS(fcntl.h)
AC_CHECK_HEADERS(features.h)
AC_CHECK_HEADERS(grp.h)
AC_CHECK_HEADERS(io.h)
AC_CHECK_HEADERS(limits.h)
AC_CHECK_HEADERS(malloc.h)
AC_CHECK_HEADERS(math.h)
AC_CHECK_HEADERS(memory.h)
AC_CHECK_HEADERS(netdb.h)
AC_CHECK_HEADERS(osreldate.h)
AC_CHECK_HEADERS(process.h)
AC_CHECK_HEADERS(pwd.h)
AC_CHECK_HEADERS(setjmp.h)
AC_CHECK_HEADERS(signal.h)
AC_CHECK_HEADERS(stdarg.h)
AC_CHECK_HEADERS(stddef.h)
AC_CHECK_HEADERS(stdio.h)
AC_CHECK_HEADERS(stdlib.h)
AC_CHECK_HEADERS(string.h)
AC_CHECK_HEADERS(sysapi.h)
AC_CHECK_HEADERS(sysgtime.h)
AC_CHECK_HEADERS(time.h)
AC_CHECK_HEADERS(sys/time.h)
AC_CHECK_HEADERS(sys/times.h)
AC_CHECK_HEADERS(tpfeq.h)
AC_CHECK_HEADERS(tpfio.h)
AC_CHECK_HEADERS(unistd.h)
AC_CHECK_HEADERS(unix.h)
AC_CHECK_HEADERS(winsock.h)

AC_CHECK_HEADERS(arpa/inet.h)
AC_CHECK_HEADERS(netinet/in.h)

AC_CHECK_HEADERS(sys/file.h)
AC_CHECK_HEADERS(sys/ioctl.h)
AC_CHECK_HEADERS(sys/mman.h)
AC_CHECK_HEADERS(sys/param.h)
AC_CHECK_HEADERS(sys/resource.h)
AC_CHECK_HEADERS(sys/select.h)
AC_CHECK_HEADERS(sys/socket.h)
AC_CHECK_HEADERS(sys/stat.h)
AC_CHECK_HEADERS(sys/types.h)
AC_CHECK_HEADERS(sys/wait.h)

AC_CHECK_HEADERS(pthread.h)

dnl Checks for typedefs, structures, and compiler characteristics.
AC_C_CONST
AC_TYPE_SIZE_T
AC_FUNC_MMAP
AC_FUNC_SETPGRP

AC_MSG_CHECKING(looking for union semun in sys/sem.h)
AC_TRY_COMPILE([
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
],[
union semun arg;
semctl(0, 0, 0, arg);
], AC_DEFINE(HAVE_STRUCT_UNION_SEMUN)
msg=yes,dnl
msg=no)
AC_MSG_RESULT([$msg])

dnl Checks for library functions.
AC_CHECK_FUNCS(strcasecmp stricmp poll setsid)
AC_CHECK_FUNCS(sigaction writev)

dnl Start building stuff from our information
AC_SUBST(LDLIBS)
AC_SUBST(OPTIM)
AC_SUBST(RANLIB)
AC_SUBST(AR)
AC_SUBST(RM)
AC_SUBST(OSDIR)
AC_SUBST(LIBPREFIX)
AC_SUBST(EXEEXT)
AC_OUTPUT(Makefile lib/Makefile file_io/$OSDIR/Makefile 
          network_io/$OSDIR/Makefile threadproc/$OSDIR/Makefile 
          locks/$OSDIR/Makefile misc/$OSDIR/Makefile 
          time/$OSDIR/Makefile signal/$OSDIR/Makefile
          test/Makefile)
