-# Can we rebuild the parsers?
-# We really want flex and refuse other lex. So, the parser is portable and
-# does not induce extra lib dependency
-AC_PROG_LEX
-if test "$LEX" != flex; then
- LEX="$SHELL $missing_dir/missing flex"
+AC_ARG_WITH(pthread, [ --with-pthread Use pthread instead of ucontext.],with_context=pthread)
+
+AC_ARG_WITH(context,
+ [ --with-context=[ucontext/pthread] Use either (System V) swapcontext or pthread [[default=auto]].],,
+ with_context=auto)
+case $with_context in
+ ucontext) ;;
+ pthread) ;;
+ windows) ;;
+ auto) with_context=ucontext;;
+ *) AC_MSG_ERROR("--with-context must be either ucontext or pthread") ;;
+esac
+
+USE_CONTEXT=no
+if test "x$with_context" = "xucontext" ; then
+ if test ".$mcsc" = .yes; then
+ AC_MSG_RESULT(found working ucontext. Great!)
+ AC_DEFINE([USE_UCONTEXT],1,[Define if we use ucontext or not])
+ USE_CONTEXT=yes
+ else
+ if test ".$windows_context" = .yes ; then
+ AC_MSG_RESULT(use windows context portability layer.)
+ with_context=windows
+ else
+ AC_MSG_RESULT([[no working ucontext found. Try pthreads as a fallback]])
+ with_context=pthread
+ fi
+ fi
+fi
+AC_SUBST(USE_CONTEXT)
+
+if test "x$with_context" = "xpthread"; then
+ AC_CHECK_HEADERS([pthread.h])
+ AC_CHECK_LIB(pthread,pthread_create,,
+ [AC_MSG_ERROR([[Cannot find pthreads, no way (try --with-context=ucontext if you haven't already tried).]])])
+ AC_DEFINE([USE_PTHREADS],1,[Define if we use pthreads or not])
+ AC_MSG_RESULT(You have pthreads. Let's use them.)