##
# Check for ANTLR's antlr3 script.
# Will set ANTLR to the location of the script.
##
AC_DEFUN([AC_PROG_ANTLR], [
AC_ARG_VAR([ANTLR],[location of the antlr3 script])
# Check the existence of the runantlr script
if test "x$ANTLR" = "x"; then
AC_PATH_PROG(ANTLR, [antlr3])
else
AC_MSG_CHECKING([antlr3 script ($ANTLR)])
if test ! -e "$ANTLR"; then
AC_MSG_RESULT([not found])
unset ANTLR
elif test ! -x "$ANTLR"; then
AC_MSG_RESULT([not executable])
unset ANTLR
else
AC_MSG_RESULT([OK])
fi
fi
if test "x$ANTLR" = "x"; then
AC_MSG_WARN(
[No usable antlr3 script found. Make sure that the parser code has
been generated already. To obtain ANTLR see .]
)
ANTLR_VERSION=
else
ANTLR_VERSION="`$ANTLR -version 2>&1 | sed 's,.*Version *\([[0-9.]]*\).*,\1,'`"
case "$ANTLR_VERSION" in
3.2|3.2.*) ANTLR_VERSION=3.2 ;;
3.4|3.4.*) ANTLR_VERSION=3.4 ;;
*) AC_MSG_WARN([unknown version of antlr: $ANTLR_VERSION]);;
esac
fi
])
##
# Check the existence of the ANTLR3 C runtime library and headers
# Will set ANTLR_INCLUDES and ANTLR_LIBS to the location of the ANTLR
# headers and library respectively
##
AC_DEFUN([AC_LIB_ANTLR],[
AC_ARG_VAR(ANTLR_HOME, [path to libantlr3c installation])
# Get the location of the ANTLR3 C includes and libraries
AC_ARG_WITH(
[antlr-dir],
AS_HELP_STRING(
[--with-antlr-dir=PATH],
[path to ANTLR C headers and libraries]
),
ANTLR_PREFIXES="$withval",
ANTLR_PREFIXES="$ANTLR_HOME /usr/local /usr /opt/local /opt"
)
AC_MSG_CHECKING(for ANTLR3 C runtime library)
# Use C and remember the variables we are changing
AC_LANG_PUSH(C)
OLD_CPPFLAGS="$CPPFLAGS"
OLD_LIBS="$LIBS"
# Try all the includes/libs set in ANTLR_PREFIXES
for antlr_prefix in $ANTLR_PREFIXES
do
CPPFLAGS="$OLD_CPPFLAGS -I$antlr_prefix/include"
LIBS="$OLD_LIBS -L$antlr_prefix/lib -lantlr3c"
AC_LINK_IFELSE([AC_LANG_SOURCE(
[
#include
int main() {
pANTLR3_TOKEN_FACTORY factory = antlr3TokenFactoryNew((pANTLR3_INPUT_STREAM) NULL);
return 0;
}
])],
[
AC_MSG_RESULT(found in $antlr_prefix)
ANTLR_INCLUDES="-I$antlr_prefix/include"
ANTLR_LDFLAGS="-L$antlr_prefix/lib -lantlr3c"
break
],
[
AC_MSG_RESULT(no)
AC_MSG_ERROR([ANTLR3 C runtime not found, see ])
]
)
done
AC_MSG_CHECKING([for presence of older antlr3AsciiFileStreamNew()])
AC_LINK_IFELSE([AC_LANG_SOURCE(
[
#include
int main() {
pANTLR3_UINT8 fName = (pANTLR3_UINT8)"foo";
pANTLR3_INPUT_STREAM input = antlr3AsciiFileStreamNew(fName);
return 0;
}
])],
[
AC_MSG_RESULT([found it (must be antlr3 3.2 or similar)])
if test -n "$ANTLR_VERSION" -a "$ANTLR_VERSION" != 3.2; then
AC_MSG_WARN([your antlr parser generator is version $ANTLR_VERSION, which doesn't match the library!])
fi
CVC4CPPFLAGS="${CVC4CPPFLAGS:+$CVC4CPPFLAGS }-DCVC4_ANTLR3_OLD_INPUT_STREAM"
],
[
AC_MSG_RESULT(failed)
AC_MSG_CHECKING([for presence of newer antlr3FileStreamNew()])
AC_LINK_IFELSE([AC_LANG_SOURCE(
[
#include
int main() {
pANTLR3_UINT8 fName = (pANTLR3_UINT8)"foo";
pANTLR3_INPUT_STREAM input = antlr3FileStreamNew(fName, ANTLR3_ENC_8BIT);
return 0;
}
])],
[
AC_MSG_RESULT([found it (must be antlr3 3.4 or similar)])
if test -n "$ANTLR_VERSION" -a "$ANTLR_VERSION" != 3.4; then
AC_MSG_WARN([your antlr parser generator is version $ANTLR_VERSION, which doesn't match the library!])
fi
],
[
AC_MSG_ERROR([cannot figure out how to create an antlr3 input stream, bailing..])
]
)
]
)
# Return the old compile variables and pop the language.
LIBS="$OLD_LIBS"
CPPFLAGS="$OLD_CPPFLAGS"
AC_LANG_POP()
# Define the ANTLR include/libs variables
AC_SUBST(ANTLR_INCLUDES)
AC_SUBST(ANTLR_LDFLAGS)
])