dnl   configuration script for expat
dnl   Process this file with autoconf to produce a configure script.
dnl
dnl   Copyright 2000 Clark Cooper
dnl
dnl   This file is part of EXPAT.
dnl
dnl   EXPAT is free software; you can redistribute it and/or modify it
dnl   under the terms of the License (based on the MIT/X license) contained
dnl   in the file COPYING that comes with this distribution.
dnl

AC_INIT(Makefile.in)
AC_CONFIG_AUX_DIR(conftools)

dnl
dnl Follow the GNU/Linux convention of odd number minor version for
dnl beta/development releases and even number minor version for stable
dnl releases. Edit is bumped with each release and set to 0 with
dnl change to major or minor version.
dnl

EXPAT_MAJOR_VERSION=1
EXPAT_MINOR_VERSION=95
EXPAT_EDIT=2

EXPAT_VERSION=$EXPAT_MAJOR_VERSION.$EXPAT_MINOR_VERSION.$EXPAT_EDIT
VERSION=$EXPAT_VERSION
PACKAGE=expat

dnl
dnl Increment LIBREVISION if source code has changed at all
dnl
dnl If the API has changed, increment LIBCURRENT and set LIBREVISION to 0
dnl
dnl If the API changes compatibly (i.e. simply adding a new function
dnl without changing or removing earlier interfaces), then increment LIBAGE.
dnl 
dnl If the API changes incompatibly set LIBAGE back to 0
dnl

LIBCURRENT=1
LIBREVISION=0
LIBAGE=1

AC_CONFIG_HEADER(config.h)

AC_CANONICAL_SYSTEM
case "$host_os" in
*os2*)
    # Use a custom made libtool replacement
    echo Using aplibtool
    LIBTOOL="$srcdir/../../../apr/build/aplibtool"
    ;;
*)
    AC_LIBTOOL_WIN32_DLL
AC_PROG_LIBTOOL
    ;;
esac

blddir=`pwd`
AC_SUBST(blddir)

AC_SUBST(PACKAGE)
AC_SUBST(VERSION)
AC_SUBST(EXPAT_MAJOR_VERSION)
AC_SUBST(EXPAT_MINOR_VERSION)
AC_SUBST(EXPAT_EDIT)

AC_SUBST(LIBCURRENT)
AC_SUBST(LIBREVISION)
AC_SUBST(LIBAGE)

dnl Checks for programs.
AC_PROG_CC
AC_PROG_INSTALL

dnl Checks for libraries.

dnl Checks for header files.
AC_HEADER_STDC
AC_CHECK_HEADERS(fcntl.h unistd.h string.h)

dnl Checks for typedefs, structures, and compiler characteristics.
dnl check for endianness
if test "$cross_compiling" = "no"; then
  AC_C_BIGENDIAN
else
  AC_DEFINE(AP_UNKNOWN_BYTE_ORDER,1,
                [byte order is unknown due to cross-compilation])
fi
AC_C_CONST
AC_TYPE_OFF_T
AC_TYPE_SIZE_T

dnl Checks for library functions.

AC_FUNC_MEMCMP
AC_FUNC_MMAP
AC_SUBST(FILEMAP_OBJ)
if test -z "$HAVE_MMAP"; then
FILEMAP_OBJ=unixfilemap.o
else
FILEMAP_OBJ=readfilemap.o
fi

AC_CHECK_FUNCS(memmove bcopy)

AC_OUTPUT(Makefile lib/Makefile lib/expat.h)
