dnl Process this file with autoconf to produce a configure script
AC_INIT(SAXCount/SAXCount.hpp)

dnl Checks for programs
AC_PROG_CC
AC_PROG_CXX
AC_PROG_INSTALL
AC_CHECK_PROG(AUTOCONF, autoconf, autoconf, true)

dnl Checks for libraries
AC_CHECK_LIB(m, floor)

dnl special pthread handling (AIX uses pthreads instead of pthread)
AC_CHECK_LIB(pthread, pthread_create)
if test $ac_cv_lib_pthread_pthread_create = no; then
AC_CHECK_LIB(pthreads, pthread_create)
fi

dnl Checks for header files
AC_CHECK_HEADERS(inttypes.h)
if test $ac_cv_header_inttypes_h = no; then
HAVE_INTTYPES_H=0
else
HAVE_INTTYPES_H=1
fi
AC_SUBST(HAVE_INTTYPES_H)

dnl Determine the host system and Makefile fragment
AC_CANONICAL_HOST

dnl Platform-specific Makefile setup
case "${host}" in
        *-*-solaris*)   platform=SOLARIS ;;
        *-*-sysv5*)     platform=UNIXWARE ;;
        *-*-UnixWare*)  platform=UNIXWARE ;;
        *-*-unixware*)  platform=UNIXWARE ;;
        *-*-linux*)     platform=LINUX ;;
        *-*-irix*)      platform=IRIX ;;
        *-*-aix*)       platform=AIX ;;
        *-*-hp*)        platform=HPUX ;
                        case "${host}" in
                            *-*-hpux11*)  osver=HPUX11;;
                            *-*-hpux10*)  osver=HPUX10;;
                            *)            osver=HPUX11;;
                        esac;;
        *-*-mvs*)       platform=OS390 ;;
        *-*-os400*)     platform=OS400 ;;
        *-*-OS400*)     platform=OS400 ;;
        *)              platform=UNKNOWN ;;
esac
AC_SUBST(platform)

compiler=${CXX}
AC_SUBST(compiler)

# prefix=${prefix}
AC_SUBST(prefix)

cxxflags=${CXXFLAGS}
AC_SUBST(cxxflags)

cflags=${CFLAGS}
AC_SUBST(cflags)

dnl output the Makefiles
AC_OUTPUT([Makefile \
SAXCount/Makefile \
DOMCount/Makefile \
SAXPrint/Makefile \
DOMPrint/Makefile \
MemParse/Makefile \
Redirect/Makefile \
PParse/Makefile \
StdInParse/Makefile \
EnumVal/Makefile \
CreateDOMDocument/Makefile])

echo
echo Having build problems? Read instructions at http://xml.apache.org/xerces-c/build.html

