AC_DEFUN([AG_GST_BISON_CHECK],
[
  dnl FIXME: check if AC_PROG_YACC is suitable here
  dnl FIXME: make precious
  AC_PATH_PROG(BISON_PATH, bison, no)
  if test x$BISON_PATH = xno; then
    AC_MSG_ERROR(Could not find bison)
  fi

  dnl check bison version
  dnl we need version >= 2.4 for the '<>' support
  dnl in the parser.
  dnl First lines observed: 'bison (GNU Bison) 2.3' or 'GNU Bison version 1.28'
  bison_min_version=2.4
  bison_version=`$BISON_PATH --version | head -n 1 |  sed 's/^[[^0-9]]*//' | sed 's/[[^0-9]]*$//' | cut -d' ' -f1`
  AC_MSG_CHECKING([bison version $bison_version >= $bison_min_version])

  if perl -we "exit ((v$bison_version ge v$bison_min_version) ? 0 : 1)"; then
    AC_MSG_RESULT([yes])
  else
    AC_MSG_ERROR([no])
  fi
])

AC_DEFUN([AG_GST_FLEX_CHECK],
[
  dnl we require flex for building the parser
  AC_PATH_PROG(FLEX_PATH, flex, no)
  if test x$FLEX_PATH = xno; then
    AC_MSG_ERROR(Could not find flex)
  fi

  dnl check flex version
  dnl we need version >= 2.5.31 for the reentrancy support
  dnl in the parser.
  flex_min_version=2.5.31
  flex_version=`$FLEX_PATH --version | head -n 1 | awk '{print $2}'`
  AC_MSG_CHECKING([flex version $flex_version >= $flex_min_version])
  if perl -w <<EOF
    (\$min_version_major, \$min_version_minor, \$min_version_micro ) = "$flex_min_version" =~ /(\d+)\.(\d+)\.(\d+)/;
    (\$flex_version_major, \$flex_version_minor, \$flex_version_micro ) = "$flex_version" =~ /(\d+)\.(\d+)\.(\d+)/;
    exit (((\$flex_version_major > \$min_version_major) ||
     ((\$flex_version_major == \$min_version_major) &&
      (\$flex_version_minor > \$min_version_minor)) ||
     ((\$flex_version_major == \$min_version_major) &&
      (\$flex_version_minor == \$min_version_minor) &&
      (\$flex_version_micro >= \$min_version_micro)))
     ? 0 : 1);
EOF
  then
    AC_MSG_RESULT(yes)
  else
    AC_MSG_ERROR([no])
  fi
])
