📄 ost_pthread.m4
字号:
dnl Copyright (C) 1999-2001 Open Source Telecom Corporation.dnldnl This program is free software; you can redistribute it and/or modifydnl it under the terms of the GNU General Public License as published bydnl the Free Software Foundation; either version 2 of the License, ordnl (at your option) any later version.dnldnl This program is distributed in the hope that it will be useful,dnl but WITHOUT ANY WARRANTY; without even the implied warranty ofdnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See thednl GNU General Public License for more details.dnl dnl You should have received a copy of the GNU General Public Licensednl along with this program; if not, write to the Free Software dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.dnl dnl As a special exception to the GNU General Public License, if you dnl distribute this file as part of a program that contains a configuration dnl script generated by Autoconf, you may include it under the same dnl distribution terms that you use for the rest of that program.AC_DEFUN([OST_LIB_PTHREAD],[ AC_REQUIRE([OST_SYS_POSIX]) AC_REQUIRE([OST_CC_SYSTIME]) THREAD_FLAGS="" THREAD_LIBS="" ost_cv_thread_library="none" ost_cv_rt_library="none" ost_cv_cxx_mode=false AC_ARG_WITH(pthread, [ --with-pthread[=lib] using specified pthread library], [if test "$withval" != "" ; then ost_cv_thread_library=$withval ; fi] ) AC_ARG_WITH(linuxthreads, [ --with-linuxthreads use linux kernel mode library], [ost_cv_thread_library=lthread AC_DEFINE(WITH_LINUXTHREADS, [1], [bsd system using linuxthreads]) if test "$withval" != "yes" ; then THREAD_FLAGS="-D__USE_GNU -D__USE_UNIX98 -I$withval $THREAD_FLAGS" CFLAGS="-D__USE_GNU -D__USE_UNIX98 -I$withval $CFLAGS" else THREAD_FLAGS="-D__USE_GNU -D__USE_UNIX98 -I/usr/local/include/pthread/linuxthreads $THREAD_FLAGS" CFLAGS="-D__USE_GNU -D__USE_UNIX98 -I/usr/local/include/pthread/linuxthreads $CFLAGS" fi ]) AC_CHECK_HEADERS(pthread.h, [ AC_DEFINE(HAVE_PTHREAD_H, [1], [posix thread header]) ost_cv_posix_threads=yes], ost_cv_posix_threads=no) if test $ost_cv_posix_threads = no ; then AC_LANG_SAVE AC_LANG_CPLUSPLUS SAVE_CXXFLAGS="$CXXFLAGS" CXXFLAGS="$CXXFLAGS -pthread" AC_TRY_COMPILE([#include <pthread.h>],[], AC_DEFINE(HAVE_PTHREAD_H, [1]) ost_cv_cxx_mode=true ost_cv_posix_threads=yes) CXXFLAGS="$SAVE_CXXFLAGS" AC_LANG_RESTORE fiAC_LANG_SAVEAC_LANG_CPLUSPLUS ost_cv_posix_atomic=no AC_CHECK_HEADERS(sys/atomic_op.h,[ AC_DEFINE(HAVE_ATOMIC_AIX, [1], [atomic aix operations]) ]) AC_CHECK_HEADERS([sys/atomic.h], ost_cv_posix_sys_atomic=yes, ost_cv_posix_sys_atomic=no) if test $ost_cv_posix_sys_atomic = yes ; then AC_MSG_CHECKING([for atomic_t]) AC_TRY_COMPILE([#include <sys/atomic.h>], [ atomic_t at; at.counter = 1; atomic_dec_and_test(&at); atomic_sub(4, &at); atomic_inc(&at); atomic_add(3, &at); ], [ost_cv_posix_atomic=yes AC_DEFINE(HAVE_WORKING_SYS_ATOMIC_H, [1], [has usable atomic functions])], [ost_cv_posix_atomic=no]) AC_MSG_RESULT($ost_cv_posix_atomic) fi dnl check for gcc's bits/atomicity and the atomic functions therein AC_CHECK_HEADERS([bits/atomicity.h], ost_cv_bits_atomicity=yes, ost_cv_bits_atomicity=no) if test $ost_cv_bits_atomicity = yes ; then AC_MSG_CHECKING([for _Atomic_word]) AC_TRY_COMPILE([#include <bits/atomicity.h>], [ _Atomic_word i = 0; __atomic_add(&i, 1); __exchange_and_add(&i, 1); ], [ost_cv_gcc_atomic=yes AC_DEFINE(HAVE_GCC_BITS_ATOMIC, [1], [has gcc atomic functions])], [ost_cv_gcc_atomic=no]) AC_MSG_RESULT($ost_cv_gcc_atomic) AC_MSG_CHECKING([for __gnu_cxx::_Atomic_word]) AC_TRY_COMPILE([#include <bits/atomicity.h>], [ using namespace __gnu_cxx; _Atomic_word i = 0; __atomic_add(&i, 1); __exchange_and_add(&i, 1); ], [ost_cv_gcc_cxx_atomic=yes AC_DEFINE(HAVE_GCC_CXX_BITS_ATOMIC, [1], [has __gnu_cxx atomic functions])], [ost_cv_gcc_cxx_atomic=no]) AC_MSG_RESULT($ost_cv_gcc_cxx_atomic) fiAC_LANG_RESTORE if test "$target" = NONE ; then targetdir="" else targetdir="$target" fi AC_CHECK_HEADERS(thread.h) if test "$prefix" = NONE ; then thrprefix="/usr/$targetdir/include" if test -d /usr/$targetdir/sys-include ; then thrprefix="$prefix/$targetdir/sys-include" ; fi else thrprefix="$prefix/$targetdir/include" if test -d "$prefix/$targetdir/sys-include" ; then thrprefix="$prefix/$targetdir/sys-include" ; fi fi if test ! -f $thrprefix/thread.h ; then thrprefix=/usr/include fi AC_SUBST(thrprefix) if test $ost_cv_posix_threads = yes ; then if test "$ost_cv_thread_library" = "none" ; then ost_cv_thread_flags="" for flags in -kthread -pthread -mthreads -pthreads -Kthread --threadsafe -mt ; do AC_MSG_CHECKING(whether ${CC-cc} accepts $flags) echo 'void f(){}' >conftest.c if test -z "`${CC-cc} $flags -c conftest.c 2>&1`"; then ost_cv_thread_flags=$flags AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) fi rm -f conftest* if test ! -z "$ost_cv_thread_flags" ; then break ; fi done# if test "$ost_cv_prog_cc_pthread" = "no" ; then# AC_CACHE_CHECK(whether ${CC-cc} accepts -mthreads,# ost_cv_prog_cc_mthreads,# [echo 'void f(){}' >conftest.c# if test -z "`${CC-cc} -mthreads -c conftest.c 2>&1`"; then# ost_cv_prog_cc_mthreads=yes# else# ost_cv_prog_cc_mthreads=no# fi# rm -f conftest*# ])# fi ost_cv_thread_library=none AC_CHECK_LIB(pthread, pthread_self, ost_cv_thread_library=pthread, AC_CHECK_LIB(c_r, pthread_self, ost_cv_thread_library=c_r, AC_CHECK_LIB(pthread, pthread_kill, ost_cv_thread_library=pthread, AC_CHECK_LIB(pthreads, pthread_self, ost_cv_thread_library=pthreads, AC_CHECK_LIB(thread, pthread_self, ost_cv_thread_library=thread))))) if test $ost_cv_thread_library = none ; then AC_CHECK_LIB(gthreads, pthread_self,[ AC_CHECK_LIB(malloc, malloc) ost_cv_thread_library=gthreads]) fi if test $ost_cv_thread_library = none ; then AC_CHECK_LIB(cma, pthread_self, ost_cv_thread_library=cma) fi if test $ost_cv_thread_library = none ; then AC_CHECK_LIB(c, pthread_self, ost_cv_thread_library=c) fi if test $ost_cv_thread_library = none ; then AC_MSG_ERROR(no library for posix threads found!) fi else# ost_cv_prog_cc_pthread=no# ost_cv_prog_cc_mthreads=no ost_cv_thread_flags="" fi AC_CHECK_LIB(${ost_cv_thread_library}, pthread_mach_thread_np, AC_DEFINE(HAVE_PTHREAD_MACH_THREAD_NP, [1], [has mach link]) ) AC_CHECK_LIB(${ost_cv_thread_library}, nanosleep, AC_DEFINE(HAVE_PTHREAD_NANOSLEEP, [1], [has nanosleep]),[ AC_CHECK_LIB(posix4, nanosleep,[ AC_DEFINE(HAVE_PTHREAD_NANOSLEEP, [1]) THREAD_LIBS="$THREAD_LIBS -lposix4" ],[ AC_CHECK_LIB(rt, nanosleep,[ AC_DEFINE(HAVE_PTHREAD_NANOSLEEP, [1]) ost_cv_rt_library="-lrt"]) ]) ]) AC_CHECK_LIB(rt, mlockall,[ AC_DEFINE(HAVE_MLOCK, [1], [have mlock]) AC_DEFINE(HAVE_MLOCKALL, [1], [have memlockall]) ost_cv_rt_library="-lrt"], [ AC_CHECK_FUNCS(mlock) AC_CHECK_FUNCS(mlockall) ]) if test "$ost_cv_rt_library" != "none" ; then THREAD_LIBS="$THREAD_LIBS $ost_cv_rt_library" ; fi if test ! -z "$ost_cv_thread_flags" ; then THREAD_LIBS="$THREAD_LIBS $ost_cv_thread_flags" else THREAD_LIBS="$THREAD_LIBS -l$ost_cv_thread_library" fi AC_MSG_CHECKING([if more special flags are required for pthreads]) flag=no case "${host_cpu}-${host_os}" in *-aix* | *-freebsd*) flag="-D_THREAD_SAFE";; *solaris* | alpha*-osf*) flag="-D_REENTRANT";; esac AC_MSG_RESULT(${flag}) if test "x$flag" != xno; then THREAD_FLAGS="$flag" fi AC_SUBST(THREAD_FLAGS) AC_SUBST(THREAD_LIBS)# LIBS="$THREAD_LIBS $LIBS" if test "$ost_cv_thread_library" != "lthread" ; then AC_CHECK_HEADERS(pthread_np.h) fi AC_CHECK_HEADERS(semaphore.h) AC_CHECK_HEADERS(sched.h) AC_CHECK_HEADERS(sys/sched.h) AC_CHECK_FUNCS(sched_getscheduler) AC_CACHE_CHECK([for recursive mutex type support], ost_cv_mutex_recursive, [ ost_cv_mutex_recursive="none" if test "$ost_cv_cxx_mode" = true ; then AC_LANG_SAVE AC_LANG_CPLUSPLUS SAVE_CXXFLAGS="$CXXFLAGS" CXXFLAGS="$CXXFLAGS -pthread" fi AC_TRY_COMPILE( [#include <pthread.h>], [ #ifndef PTHREAD_MUTEXTYPE_RECURSIVE #ifdef PTHREAD_MUTEX_RECURSIVE #define PTHREAD_MUTEXTYPE_RECURSIVE PTHREAD_MUTEX_RECURSIVE #endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -