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 ;;
        *-*-sco*)       platform=OPENSERVER ;;
        *-*-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 ;;
        *-*-cygwin*)		platform=CYGWIN ;;
        *)              platform=UNKNOWN ;;
esac
AC_SUBST(platform)

compiler=${CXX}
AC_SUBST(compiler)
AC_SUBST(GXX)
AC_SUBST(GCC)

# 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)

bitstobuild=${BITSTOBUILD}
AC_SUBST(bitstobuild)

extra_libs=${EXTRA_LIBS}
AC_SUBST(extra_libs)

dnl output the Makefiles
AC_OUTPUT([Makefile \
DOM/DeprecatedDOMCount/Makefile \
DOM/DOMTest/Makefile \
DOM/DOMMemTest/Makefile \
DOM/Traversal/Makefile \
EncodingTest/Makefile \
DOM/RangeTest/Makefile \
InitTermTest/Makefile \
ThreadTest/Makefile])

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

