+###################################
+## SimGrid and GRAS specific checks
+##
+
+SG_CONFIGURE_PART(Checking GRAS architecture signature...)
+# Check architecture signature begin
+GRAS_ARCH
+# Check architecture signature end
+GRAS_CHECK_STRUCT_COMPACTION
+
+
+dnl ##
+dnl ## CONTEXT IMPLEMENTATION
+dnl ##
+
+SG_CONFIGURE_PART([Checking threads, contexts or assimilated...])
+
+dnl #
+dnl # 1. determine possibilities
+dnl #
+
+dnl # check for MCSC method (ucontexts)
+AC_CHECK_MCSC(mcsc=yes, mcsc=no)
+
+dnl # check for pthread method
+AC_CHECK_HEADERS([pthread.h])
+AC_CHECK_LIB(pthread,pthread_create,pthread=yes, pthread=no)
+
+if test x$pthread = xyes ; then
+ AC_CHECK_LIB(pthread, sem_init, HAVE_SEM_INIT=yes, HAVE_SEM_INIT=no)
+ if test ${HAVE_SEM_INIT} = yes ; then
+ AC_MSG_CHECKING(if sem_init is compilable)
+ AC_TRY_COMPILE([#include <semaphore.h>],
+ [sem_t s; sem_init(&s);], HAVE_SEM_INIT=yes, HAVE_SEM_INIT=no)
+ if test ${HAVE_SEM_INIT} = yes ; then
+ AC_DEFINE([HAVE_SEM_INIT],1,[Define if sem_init() is avaible or not (part of XPG6 standard only)])
+ AC_MSG_RESULT(yes)
+ else
+ AC_MSG_RESULT(no)
+ fi
+ fi
+ AC_CHECK_LIB(pthread, sem_timedwait, HAVE_SEM_TIMEDWAIT=yes, HAVE_SEM_TIMEDWAIT=no)
+ if test ${HAVE_SEM_TIMEDWAIT} = yes ; then
+ AC_MSG_CHECKING(if sem_timedwait is compilable)
+ AC_TRY_COMPILE([#include <semaphore.h>],
+ [sem_t *s; const struct timespec * t; sem_timedwait(s, t);], HAVE_SEM_TIMEDWAIT=yes, HAVE_SEM_TIMEDWAIT=no)
+ if test ${HAVE_SEM_TIMEDWAIT} = yes ; then
+ AC_DEFINE([HAVE_SEM_TIMEDWAIT],1,[Define if sem_timedwait() is avaible or not (part of XPG6 standard only)])
+ AC_MSG_RESULT(yes)
+ else
+ AC_MSG_RESULT(no)
+ fi
+ fi
+
+ AC_CHECK_LIB(pthread, pthread_mutex_timedlock, HAVE_MUTEX_TIMEDLOCK=yes, HAVE_MUTEX_TIMEDLOCK=no)
+ if test ${HAVE_MUTEX_TIMEDLOCK} = yes ; then
+ AC_MSG_CHECKING(if pthread_mutex_timedlock is compilable)
+ AC_TRY_COMPILE([#include <pthread.h>],
+ [pthread_mutex_t s; const struct timespec t; sem_timedlock(&s, &t);], HAVE_MUTEX_TIMEDLOCK=yes, HAVE_MUTEX_TIMEDLOCK=no)
+ if test ${HAVE_MUTEX_TIMEDLOCK} = yes ; then
+ AC_DEFINE([HAVE_MUTEX_TIMEDLOCK],1,[Define if pthread_mutex_timedlock() is avaible or not (part of XPG6 standard only?)])
+ AC_MSG_RESULT(yes)
+ else
+ AC_MSG_RESULT(no)
+ fi
+ fi
+fi
+
+dnl #
+dnl # 2. make a general decision
+dnl #
+
+if test ".$mcsc" = .yes; then
+ # ucontext found
+ mcsc=yes
+elif test ".$pthread" = .yes; then
+ # ucontext not found, but pthread found
+ pthread=yes
+else
+ ac_header=windows.h
+ as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ windows_context=yes
+ else
+ AC_ERROR([no appropriate backend found])
+ fi
+fi
+AM_CONDITIONAL(IS_WINDOWS,test x$windows_context = xyes)