AC_INIT
AC_USE_SYSTEM_EXTENSIONS
AC_CONFIG_SRCDIR(gettext.c)
AC_CONFIG_HEADER(config.h)
AC_CONFIG_MACRO_DIR(../config)
AM_GNU_GETTEXT_VERSION(0.12.1)
AM_GNU_GETTEXT([], [need-ngettext])

# This replaces the extensive use of DEFS in the original Makefile.in.
AC_DEFINE(IN_LIBINTL, 1, [Define because this is libintl.])
AC_DEFINE(IN_LIBRARY, 1, [Define because this is a library.])
AC_DEFINE(DEPENDS_ON_LIBICONV, 1, [Define because we depend on libiconv.])
AC_DEFINE(ENABLE_RELOCATABLE, 1, [Define to enable relocation.])
AC_DEFINE(NO_XMALLOC, 1, [Define if there is no xmalloc.])
AC_DEFINE(set_relocation_prefix, libintl_set_relocation_prefix,
[Define this entry point correctly.])
AC_DEFINE(relocate, libintl_relocate,
[Define this entry point correctly.])

MISSING=`cd $ac_aux_dir && ${PWDCMD-pwd}`/missing
AC_CHECK_PROGS([ACLOCAL], [aclocal], [$MISSING aclocal])
AC_CHECK_PROGS([AUTOCONF], [autoconf], [$MISSING autoconf])
AC_CHECK_PROGS([AUTOHEADER], [autoheader], [$MISSING autoheader])

AC_ARG_ENABLE(maintainer-mode,
[  --enable-maintainer-mode enable rules only needed by maintainers],,
enable_maintainer_mode=no)
if test "x$enable_maintainer_mode" = xno; then
  MAINT='#'
else
  MAINT=
fi
AC_SUBST(MAINT)

dnl Variables for tags utilities; based on automake 1.16.4+'s init.m4
if test -z "$CTAGS"; then
  CTAGS=ctags
fi
AC_SUBST([CTAGS])
if test -z "$ETAGS"; then
  ETAGS=etags
fi
AC_SUBST([ETAGS])
if test -z "$MKID"; then
  MKID=mkid
fi
AC_SUBST([MKID])

# Additional info for config.intl.
AC_SUBST(LIBINTL_DEP)
AC_SUBST(INCINTL)

LIBINTL_DEP=
INCINTL=
case $USE_INCLUDED_LIBINTL in
  yes)
    LIBINTL=`echo $LIBINTL | sed 's,${top_builddir},&/..,' `
    LTLIBINTL=`echo $LTLIBINTL | sed 's,${top_builddir},&/..,' `
    LIBINTL_DEP='${top_builddir}/../intl/libintl.a'
    INCINTL='-I${top_builddir}/../intl'
    ;;
esac

BISON3_YES='#'
BISON3_NO=
if test "$INTLBISON" != :; then
  ac_bison3=no
  AC_MSG_CHECKING([bison 3 or later])
changequote(<<,>>)dnl
  ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'`
  case $ac_prog_version in
    [3-9].*)
changequote([,])dnl
      ac_prog_version="$ac_prog_version, bison3"; ac_bison3=yes;;
    *) ac_prog_version="$ac_prog_version, old";;
  esac
  AC_MSG_RESULT([$ac_prog_version])
  if test $ac_bison3 = yes; then
    BISON3_YES=
    BISON3_NO='#'
  fi
fi
AC_SUBST(BISON3_YES)
AC_SUBST(BISON3_NO)

AC_ARG_ENABLE(host-shared,
[AS_HELP_STRING([--enable-host-shared],
		[build host code as shared libraries])],
[PICFLAG=-fPIC], [PICFLAG=])
AC_SUBST(PICFLAG)

AC_CONFIG_FILES(Makefile config.intl)
AC_OUTPUT
