+ dnl Now the hard part, how to link?
+ dnl
+ dnl currently supported checks:
+ dnl
+ dnl Check for no flags
+ dnl pthread_create() in $LIBS
+ dnl
+ dnl Check special pthread (final) flags
+ dnl pthread_create() with -mt (Solaris)
+ dnl pthread_create() with -kthread (FreeBSD)
+ dnl pthread_create() with -pthread (FreeBSD/Digital Unix)
+ dnl pthread_create() with -pthreads (?)
+ dnl pthread_create() with -thread (?)
+ dnl
+ dnl Check pthread (final) libraries
+ dnl pthread_mutex_unlock() in -lpthread -lmach -lexc -lc_r (OSF/1)
+ dnl pthread_mutex_lock() in -lpthread -lmach -lexc (OSF/1)
+ dnl pthread_mutex_trylock() in -lpthread -lexc (OSF/1)
+ dnl pthread_join() -Wl,-woff,85 -lpthread (IRIX)
+ dnl pthread_create() in -lpthread (many)
+ dnl pthread_create() in -lc_r (FreeBSD)
+ dnl
+ dnl Check pthread (draft4) flags (depreciated)
+ dnl pthread_create() with -threads (OSF/1)
+ dnl
+ dnl Check pthread (draft4) libraries (depreciated)
+ dnl pthread_mutex_unlock() in -lpthreads -lmach -lexc -lc_r (OSF/1)
+ dnl pthread_mutex_lock() in -lpthreads -lmach -lexc (OSF/1)
+ dnl pthread_mutex_trylock() in -lpthreads -lexc (OSF/1)
+ dnl pthread_create() in -lpthreads (many)
+ dnl
+
+ dnl pthread_create in $LIBS
+ AC_MSG_CHECKING([for pthread_create in default libraries])
+ AC_CACHE_VAL(ol_cv_pthread_create,[
+ AC_TRY_RUN([
+#include <pthread.h>
+#ifndef NULL
+#define NULL (void*)0
+#endif
+
+static void *task(p)
+ void *p;
+{
+ return (void *) (p == NULL);
+}
+
+int main(argc, argv)
+ int argc;
+ char **argv;
+{
+ pthread_t t;
+ int status;
+
+ /* make sure pthread_create() isn't just a stub */
+#if HAVE_PTHREADS_D4
+ status = pthread_create(&t, pthread_attr_default, task, NULL));
+#else
+ status = pthread_create(&t, NULL, task, NULL);
+#endif
+
+ if( status ) return status;
+
+ /* make sure pthread_detach() isn't just a stub */
+#if HAVE_PTHREADS_D4
+ status = pthread_detach( &t );
+#else
+ status = pthread_detach( t );
+#endif
+
+ if( status ) return status;
+
+ return status;
+}
+],
+ [ol_cv_pthread_create=yes],
+ [ol_cv_pthread_create=no],
+ [dnl assume yes
+ ol_cv_pthread_create=yes])])
+ AC_MSG_RESULT($ol_cv_pthread_create)
+
+ if test $ol_cv_pthread_create != no ; then
+ ol_link_threads=posix
+ fi
+
+ if test $ol_link_threads = no ; then
+ dnl try -mt
+ AC_CACHE_CHECK([for pthread_create with -mt],
+ [ol_cv_pthread_mt_flag], [
+ dnl save the flags
+ save_LIBS="$LIBS"
+ LIBS="-mt $LIBS"
+ AC_TRY_LINK([char pthread_create();],
+ [pthread_create();],
+ [ol_cv_pthread_mt_flag=yes], [ol_cv_pthread_mt_flag=no])
+ dnl restore the LIBS
+ LIBS="$save_LIBS"
+ ])