summaryrefslogtreecommitdiff
path: root/contrib/ragel.m4
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/ragel.m4')
-rw-r--r--contrib/ragel.m453
1 files changed, 53 insertions, 0 deletions
diff --git a/contrib/ragel.m4 b/contrib/ragel.m4
new file mode 100644
index 00000000..e7b42425
--- /dev/null
+++ b/contrib/ragel.m4
@@ -0,0 +1,53 @@
+dnl Check for presence of the Ragel State Machine generator.
+dnl
+dnl This macro checks for the presence of the ragel tool in the system,
+dnl and whether the ragel tool is absolutely needed for a complete
+dnl build.
+dnl
+dnl To check for the need for Ragel, you have to provide the relative
+dnl path of a source file generated through Ragel: if the file is
+dnl present in the source tree, a missing ragel command will not cause
+dnl the configure to abort.
+
+AC_DEFUN([_RAGEL_VARS], [
+ AC_ARG_VAR([RAGEL], [Ragel generator command])
+ AC_ARG_VAR([RAGELFLAGS], [Ragel generator flags])
+])
+
+AC_DEFUN([CHECK_RAGEL], [
+ AC_REQUIRE([_RAGEL_VARS])
+ AC_CHECK_PROG([RAGEL], [ragel], [ragel], [no])
+
+ dnl We set RAGEL to false so that it would execute the "false"
+ dnl command if needed.
+ AS_IF([test x"$RAGEL" = x"no"],
+ [RAGEL=false],
+ AS_IF([test x"$2" != "x"],
+ [ragel_version=`$RAGEL --version | sed -n -e '1s:.*version \(@<:@0-9@:>@\.@<:@0-9@:>@\)\(\.@<:@0-9@:>@\)* .*:\1:p'`
+ ragel_version_compare=`echo $ragel_version | tr -d .`
+ ragel_wanted_version=`echo $2 | tr -d .`
+ AS_IF([test $ragel_version_compare -lt $ragel_wanted_version],
+ [AC_MSG_WARN([Found Ragel $ragel_version but Ragel $2 requested])
+ RAGEL=false
+ ])
+ ]))
+
+ dnl Only test the need if not found
+ AS_IF([test x"$RAGEL" = x"false"], [
+ AC_MSG_CHECKING([whether we need ragel to regenerate sources])
+ AS_IF([test -a "${srcdir}/$1"], [ragel_needed=no], [ragel_needed=yes])
+ AC_MSG_RESULT([$ragel_needed])
+
+ AS_IF([test x"$ragel_needed" = x"yes"],
+ [AC_MSG_ERROR([dnl
+You need Ragel to build from development sources.
+You can find Ragel at http://www.colm.net/open-source/ragel/dnl
+ ])])
+ ])
+])
+
+AC_DEFUN([CHECK_RAGEL_AM], [
+ CHECK_RAGEL([$1], [$2])
+
+ AM_CONDITIONAL([HAVE_RAGEL], [test x"$RAGEL" != x"false"])
+])