ost_pthread.m4
来自「贡献一份commoncpp2,有兴趣的可以研究一下」· M4 代码 · 共 574 行 · 第 1/2 页
M4
574 行
#endif return (int)PTHREAD_MUTEXTYPE_RECURSIVE; ], ost_cv_mutex_recursive="portable", [ AC_EGREP_HEADER(PTHREAD_MUTEXTYPE_RECURSIVE_NP,pthread.h, ost_cv_mutex_recursive=non-portable) AC_EGREP_HEADER(PTHREAD_MUTEX_RECURSIVE_INITIALIZER_NP, pthread.h, ost_cv_mutex_recursive=lthread) AC_EGREP_HEADER(PTHREAD_MUTEX_RECURSIVE_NP,pthread.h, ost_cv_mutex_recursive=linux) AC_EGREP_HEADER(MUTEX_TYPE_COUNTING_FAST,pthread.h, ost_cv_mutex_recursive=counting) ]) if test $ost_cv_mutex_recursive = "none" ; then if test $ost_cv_thread_library = "lthread" ; then ost_cv_mutex_recursive=linux fi fi rm -f conftest* ]) if test $ost_cv_mutex_recursive = "none" ; then AC_TRY_COMPILE( [#include <pthread.h>], [return MUTEX_TYPE_COUNTING_FAST;], ost_cv_mutex_recursive=counting) fi if test "$ost_cv_cxx_mode" = true ; then CXXFLAGS="$SAVE_CXXFLAGS" AC_LANG_RESTORE fi case $ost_cv_mutex_recursive in non-portable) AC_DEFINE(PTHREAD_MUTEXTYPE_RECURSIVE, PTHREAD_MUTEXTYPE_RECURSIVE_NP, [mutex type]) ;; linux) AC_DEFINE(PTHREAD_MUTEXTYPE_RECURSIVE, PTHREAD_MUTEX_RECURSIVE_NP) ;; counting) AC_DEFINE(PTHREAD_MUTEXTYPE_RECURSIVE, MUTEX_TYPE_COUNTING_FAST) ;; esac AC_CHECK_LIB(${ost_cv_thread_library}, pthread_mutexattr_settype, AC_DEFINE(HAVE_PTHREAD_MUTEXATTR_SETTYPE, [1], [has setttype]), [ AC_CHECK_LIB(${ost_cv_thread_library}, pthread_mutexattr_settype_np, AC_DEFINE(HAVE_PTHREAD_MUTEXATTR_SETTYPE_NP, [1], [has non portable settype])) AC_CHECK_LIB(${ost_cv_thread_library}, pthread_mutexattr_setkind_np, AC_DEFINE(HAVE_PTHREAD_MUTEXATTR_SETKIND_NP, [1], [has non portable setkind])) ] ) ost_cv_thread_rwlock=false AC_CHECK_LIB(${ost_cv_thread_library}, pthread_rwlock_init,[ ost_cv_thread_rwlock=true AC_DEFINE(HAVE_PTHREAD_RWLOCK, [1], [has rwlock support])]) AC_CHECK_LIB(c, pread,[ AC_DEFINE(HAVE_PREAD_PWRITE, [1], [has pwrite])],[ AC_CHECK_LIB(${ost_cv_thread_library}, pread,[ AC_DEFINE(HAVE_PREAD_PWRITE, [1])],[ AC_CHECK_LIB(c_r, pread,[AC_DEFINE(HAVE_PREAD_PWRITE)]) ]) ]) AC_CHECK_LIB(${ost_cv_thread_library}, pthread_suspend, AC_DEFINE(HAVE_PTHREAD_SUSPEND, [1], [has suspend])) AC_CHECK_LIB(${ost_cv_thread_library}, pthread_attr_setstacksize, AC_DEFINE(HAVE_PTHREAD_ATTR_SETSTACKSIZE, [1], [has stack size])) AC_CHECK_LIB(${ost_cv_thread_library}, pthread_yield_np, AC_DEFINE(HAVE_PTHREAD_YIELD_NP, [1], [has np yield]),[ AC_CHECK_LIB(${ost_cv_thread_library}, pthread_yield, AC_DEFINE(HAVE_PTHREAD_YIELD, [1], [has yield]),[ AC_CHECK_LIB(${ost_cv_thread_library}, sched_yield, AC_DEFINE(HAVE_PTHREAD_SCHED_YIELD, [1], [has sched yield])) ]) ]) AC_CHECK_LIB(${ost_cv_thread_library}, pthread_cancel,[ AC_DEFINE(HAVE_PTHREAD_CANCEL, [1], [has cancel]) AC_CHECK_LIB(${ost_cv_thread_library}, pthread_setcanceltype, AC_DEFINE(HAVE_PTHREAD_SETCANCELTYPE, [1], [has setcanceltype]), AC_CHECK_LIB($ost_cv_thread_library, pthread_setcanel, AC_DEFINE(HAVE_PTHREAD_SETCANCEL, [1], [has setcancel]))) ],[ AC_CHECK_LIB(${ost_cv_thread_library}, pthread_setcanceltype,[ AC_DEFINE(HAVE_PTHREAD_CANCEL) AC_DEFINE(HAVE_PTHREAD_SETCANCELTYPE)]) ]) AC_CHECK_LIB(${ost_cv_thread_library}, pthread_delay_np, AC_DEFINE(HAVE_PTHREAD_DELAY_NP, [1], [has non portable delay])) fi UNAME=`uname` if test "$UNAME" = "AIX" ; then AC_CHECK_PROG(PTHREAD_CC, cc_r, cc_r, ${CC}) CC=$PTHREAD_CC AC_DEFINE(COMMON_AIX_FIXES, [1], [aix fixes needed]) fiAH_BOTTOM([#ifdef HAVE_THREAD_H#include "@thrprefix@/thread.h"#if defined(i386) && defined(__svr4__) && !defined(__sun)#define _THR_UNIXWARE#endif#if defined(__SVR4) && defined(__sun)#define _THR_SUNOS5#else#if defined(__SVR4__) && defined(__SUN__)#define _THR_SUNOS5#endif#endif#endif#ifdef HAVE_WORKING_SYS_ATOMIC_H#include <sys/atomic.h>#define HAVE_ATOMIC#elif defined(HAVE_ATOMIC_AIX)#include <sys/atomic_op.h>#ifndef HAVE_ATOMIC#define HAVE_ATOMIC#endif#endif#if defined(__cplusplus)#if defined(HAVE_GCC_BITS_ATOMIC) || defined(HAVE_GCC_CXX_BITS_ATOMIC)#include <bits/atomicity.h>#define HAVE_ATOMIC#endif#endif#if defined(HAVE_PTHREAD_H) && ( defined(_THREAD_SAFE) || defined(_REENTRANT) )#ifdef __QNX__#define __EXT_QNX#endif#include <pthread.h>#ifdef HAVE_PTHREAD_NP_H#include <pthread_np.h>#endif#ifdef HAVE_SEMAPHORE_H#include <semaphore.h>#endif#ifdef _POSIX_PRIORITY_SCHEDULING#ifdef HAVE_SCHED_H#include <sched.h>#else#ifdef HAVE_SYS_SCHED_H#include <sys/sched.h>#endif#endif#endif#define __PTHREAD_H__#ifndef PTHREAD_MUTEXTYPE_RECURSIVE#ifdef MUTEX_TYPE_COUNTING_FAST#define PTHREAD_MUTEXTYPE_RECURSIVE MUTEX_TYPE_COUNTING_FAST#endif#endif#ifndef PTHREAD_MUTEXTYPE_RECURSIVE#ifdef PTHREAD_MUTEX_RECURSIVE#define PTHREAD_MUTEXTYPE_RECURSIVE PTHREAD_MUTEX_RECURSIVE#endif#endif#ifndef HAVE_PTHREAD_MUTEXATTR_SETTYPE#if HAVE_PTHREAD_MUTEXATTR_SETKIND_NP#ifndef PTHREAD_MUTEXTYPE_RECURSIVE#define PTHREAD_MUTEXTYPE_RECURSIVE PTHREAD_MUTEX_RECURSIVE_NP#endif#define pthread_mutexattr_gettype(x, y) pthread_mutexattr_getkind_np(x, y)#define pthread_mutexattr_settype(x, y) pthread_mutexattr_setkind_np(x, y)#endif#if HAVE_PTHREAD_MUTEXATTR_SETTYPE_NP#ifndef PTHREAD_MUTEXTYPE_RECURSIVE#define PTHREAD_MUTEXTYPE_RECURSIVE PTHREAD_MUTEXTYPE_RECURSIVE_NP#endif#define pthread_mutexattr_settype(x, y) pthread_mutexattr_settype_np(x, y)#define pthread_mutexattr_gettype(x, y) pthread_mutexattr_gettype_np(x, y)#endif#endif#ifdef HAVE_PTHREAD_MACH_THREAD_NP#define _THR_MACH#endif#ifndef HAVE_PTHREAD_YIELD#ifdef HAVE_PTHREAD_YIELD_NP#define pthread_yield() pthread_yield_np()#define HAVE_PTHREAD_YIELD#endif#endif#ifndef HAVE_PTHREAD_YIELD#ifdef HAVE_PTHREAD_SCHED_YIELD#define pthread_yield() sched_yield()#define HAVE_PTHREAD_YIELD#endif#endif#ifndef HAVE_PTHREAD_DELAY#ifdef HAVE_PTHREAD_DELAY_NP#define HAVE_PTHREAD_DELAY#define pthread_delay(x) pthread_delay_np(x)#endif#if defined(HAVE_PTHREAD_NANOSLEEP)#ifndef HAVE_PTHREAD_DELAY#define HAVE_PTHREAD_DELAY#ifdef __FreeBSD__#ifdef __cplusplusextern "C" int nanosleep(const struct timespec *rqtp, struct timespec *rmtp);#endif#endif#define pthread_delay(x) nanosleep(x, NULL)#endif#endif#endif#ifdef HAVE_PTHREAD_ATTR_SETSTACK#ifndef PTHREAD_STACK_MIN#define PTHREAD_STACK_MIN 32768#endif#endif#ifndef HAVE_PTHREAD_CANCEL#ifdef SIGCANCEL#define CCXX_SIG_THREAD_CANCEL SIGCANCEL#else#define CCXX_SIG_THREAD_CANCEL SIGQUIT#endif#define pthread_cancel(x) pthread_kill(x, CCXX_SIG_THREAD_CANCEL)#define pthread_setcanceltype(x, y)#define pthread_setcancelstate(x, y)#endif#ifndef HAVE_PTHREAD_SETCANCELTYPE#ifdef HAVE_PTHREAD_SETCANCELenum{ PTHREAD_CANCEL_ASYNCHRONOUS = CANCEL_ON, PTHREAD_CANCEL_DEFERRED = CANCEL_OFF};enum{ PTHREAD_CANCEL_ENABLE = CANCEL_ON, PTHREAD_CANCEL_DISABLE = CANCEL_OFF};#define pthread_setcancelstate(x, y) \ (y == NULL) ? pthread_setcancel(x) : *y = pthread_setcancel#define pthread_setcanceltype(x, y) \ (y == NULL) ? pthread_setasynccancel(x) | *y = pthread_setasynccancel(x)#else#define pthread_setcanceltype(x, y)#define pthread_setcancelstate(x, y)#endif#endif#ifdef _AIX#ifdef HAVE_PTHREAD_SUSPEND#undef HAVE_PTHREAD_SUSPEND#endif#endif#endif ])])
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?