dnl Process this file with autoconf to produce a configure script
AC_INIT(util/XML4CDefs.hpp)
dnl AC_CONFIG_HEADER(common/icucfg.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
dnl Do not know how to use this macro, so comment it out.
dnl
dnl special pthread handling (AIX uses pthreads instead of pthread)
dnl AC_CHECK_LIB(pthread, pthread_create)
dnl if test $ac_cv_lib_pthread_pthread_create = no; then
dnl AC_CHECK_LIB(pthreads, pthread_create)
dnl fi
dnl

dnl Checks for typedefs
AC_CHECK_TYPE(XMLByte,unsigned char)

dnl Determine the host system and Makefile fragment
AC_CANONICAL_HOST

dnl Platform-specific Makefile setup
case "${host}" in
        *-*-solaris*)   platform=SOLARIS ;;
        *-*-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 ;;
        *)              platform=UNKNOWN ;;
esac
AC_SUBST(platform)

cxx=${CXX}
AC_SUBST(cxx)

cc=${CC}
AC_SUBST(cc)

AC_SUBST(prefix)
AC_SUBST(osver)

cxxflags=${CXXFLAGS}
AC_SUBST(cxxflags)

cppflags=${CPPFLAGS}
AC_SUBST(cppflags)

cflags=${CFLAGS}
AC_SUBST(cflags)

ldflags=${LDCFLAGS}
AC_SUBST(ldflags)

libs=${LIBS}
AC_SUBST(libs)

uselibwww=${USELIBWWW}
AC_SUBST(uselibwww)

messageloader=${MESSAGELOADER}
AC_SUBST(messageloader)

transcoder=${TRANSCODER}
AC_SUBST(transcoder)

dnl output the Makefiles
AC_OUTPUT([Makefile \
util/Makefile \
util/Transcoders/ICU/Makefile \
util/Transcoders/Iconv/Makefile \
util/Platforms/Makefile \
util/Compilers/Makefile \
util/MsgLoaders/InMemory/Makefile \
util/MsgLoaders/ICU/Makefile \
util/MsgLoaders/MsgCatalog/Makefile \
validators/DTD/Makefile \
framework/Makefile \
dom/Makefile \
parsers/Makefile \
internal/Makefile \
sax/Makefile \
../obj/Makefile])
