Fix pthreads version detection

This commit is contained in:
Howard Chu 2002-09-11 07:43:20 +00:00
parent dfa8bdec60
commit 97b98783c3

View File

@ -629,48 +629,43 @@ dnl or that pthreads.h does exist. Existence of pthreads.h
dnl should be tested separately. dnl should be tested separately.
dnl dnl
dnl tests: dnl tests:
dnl pthread_yield() was renamed to sched_yield() in Draft 10, so dnl pthread_yield() was dropped in Draft 9, so
dnl only a Draft 10 library will define this dnl only a Draft <= 8 library will define this
dnl PTHREAD_INTR_ENABLE was introduced in Draft 6, and renamed to dnl pthread_detach() was dropped in Draft 8, it is present
dnl PTHREAD_CANCEL_ENABLE in Draft 7. Draft 7-10 has _CANCEL_, dnl in every other version
dnl only Draft 6 has _INTR_ dnl PTHREAD_CREATE_UNDETACHED is only in Draft 7, it was called
dnl PTHREAD_CREATE_JOINABLE after that
dnl pthread_attr_default was dropped in Draft 6, only 4 and 5 have it
dnl PTHREAD_MUTEX_INITIALIZER was introduced in Draft 5. It's not dnl PTHREAD_MUTEX_INITIALIZER was introduced in Draft 5. It's not
dnl interesting to us because we don't try to statically dnl interesting to us because we don't try to statically
dnl initialize mutexes. 5-10 has it. dnl initialize mutexes. 5-10 has it.
dnl pthread_attr_create was renamed to pthread_attr_init after Draft 4. dnl pthread_attr_create was renamed to pthread_attr_init after Draft 4.
dnl Draft 6-10 has _init, Draft 4 has _create. (dunno about 5) dnl Draft 6-10 has _init, Draft 4 has _create. (dunno about 5)
dnl dnl
dnl Besides the use of sched_yield vs pthread_yield, differences from dnl Draft 9 and 10 are equivalent for our purposes.
dnl Draft 7 thru Draft 10 don't appear significant for our purposes.
dnl dnl
AC_DEFUN([OL_POSIX_THREAD_VERSION], AC_DEFUN([OL_POSIX_THREAD_VERSION],
[AC_CACHE_CHECK([POSIX thread version],[ol_cv_pthread_version],[ [AC_CACHE_CHECK([POSIX thread version],[ol_cv_pthread_version],[
AC_EGREP_HEADER(sched_yield,pthread.h, AC_EGREP_HEADER(pthread_yield,pthread.h,[
ol_cv_pthread_version=10, [ AC_EGREP_HEADER(pthread_detach,pthread.h,[
AC_EGREP_CPP(draft7,[ AC_EGREP_CPP(draft7,[
# include <pthread.h> # include <pthread.h>
# ifdef PTHREAD_CANCEL_ENABLE # ifdef PTHREAD_CREATE_JOINABLE
draft7 draft7
# endif # endif
], ol_cv_pthread_version=7, [ ], ol_cv_pthread_version=7, [
AC_EGREP_HEADER(pthread_attr_default,pthread.h,[
AC_EGREP_CPP(draft6,[
# include <pthread.h>
#ifdef PTHREAD_INTR_ENABLE
draft6
#endif
], ol_cv_pthread_version=6, [
AC_EGREP_CPP(draft5,[ AC_EGREP_CPP(draft5,[
# include <pthread.h> # include <pthread.h>
#ifdef PTHREAD_MUTEX_INITIALIZER #ifdef PTHREAD_MUTEX_INITIALIZER
draft5 draft5
#endif #endif
], ol_cv_pthread_version=5, [ ], ol_cv_pthread_version=5, [
AC_EGREP_HEADER(pthread_attr_create,pthread.h, AC_EGREP_HEADER(pthread_attr_create,pthread.h,
ol_cv_pthread_version=4, ol_cv_pthread_version=0) ]) ]) ]) ]) ol_cv_pthread_version=4, ol_cv_pthread_version=0) ]) ],
ol_cv_pthread_version=6) ]) ],
ol_cv_pthread_version=8) ],
ol_cv_pthread_version=10)
]) ])
])dnl ])dnl
dnl dnl