dnl Process this file with autoconf to produce a configure script
AC_INIT(DOM/DOMTest/DTest.h)

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 ;;
        *-*-sysv5uw7*)  platform=UNIXWARE ;;
        *-*-linux*)     platform=LINUX ;;
	*-*-freebsd*)	platform=FREEBSD ;;
        *-*-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 ;;
		*-*-osf*)	platform=TRU64 ;;
        *-apple-*)		platform=MACOSX ;;
        *)              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)

ldflags=${LDFLAGS}
AC_SUBST(ldflags)

threads=${THREADS}
AC_SUBST(threads)

extra_libs=${EXTRA_LIBS}
AC_SUBST(extra_libs)

dnl output the Makefiles
AC_OUTPUT([Makefile \
DOM/DOMTest/Makefile \
IDom/IDOMTest/Makefile \
DOM/DOMIDTest/Makefile \
DOM/DOMMemTest/Makefile \
IDom/IDOMMemTest/Makefile \
DOM/Traversal/Makefile \
IDom/ITraversal/Makefile \
EncodingTest/Makefile \
DOM/RangeTest/Makefile \
IDom/IRangeTest/Makefile \
InitTermTest/Makefile \
ThreadTest/Makefile])

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

