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 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 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 ;;
        *-*-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)

compiler=${CXX}
AC_SUBST(compiler)

# prefix=${prefix}
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])
