#13795: Initial commit for sflphone-android
includes: libexpat libyaml libdbus-c++ commoncpp ccrtp
libdbus (from android-4.0.4 sources)
TODO:
- git ignores "/jni/sflphone", sflphone repo should be cloned.
- sflphone-android only needs daemon directory. Ideally it should be possible
to clone it without cloning the whole sflphone project.
into sfl-android (commit 6a0fa7a "#13961: Fix cipher handling" has been used here)
- add pjsip-android project as a git submodule
- sflphone-android needs pjsip android project. Ideally daemon git repository
should not embed pjsip. Instead pjsip should be clone from official repositories.
Considering this, structure should have three distincts git repos:
sflphone-android/.git
sflphone-android/jni/ccrtp-1.8.0-android
sflphone-android/jni/commoncpp2-1.8.1-android
sflphone-android/jni/dbus
sflphone-android/jni/libdbus-c++-0.9.0-android
sflphone-android/jni/libexpat
sflphone-android/jni/libyaml
sflphone-android/jni/sflphone-daemon/.git
sflphone-android/jni/sflphone-daemon/src/audio
sflphone-android/jni/sflphone-daemon/src/config
sflphone-android/jni/sflphone-daemon/src/dbus
sflphone-android/jni/sflphone-daemon/src/history
sflphone-android/jni/sflphone-daemon/src/hooks
sflphone-android/jni/sflphone-daemon/src/iax
sflphone-android/jni/sflphone-daemon/src/sip
sflphone-android/jni/sflphone-daemon/src/video
sflphone-android/jni/pjsip-android/.git
Signed-off-by: Emeric Vigier <emeric.vigier@savoirfairelinux.com>
diff --git a/jni/commoncpp2-1.8.1-android/m4/ost_pthread.m4 b/jni/commoncpp2-1.8.1-android/m4/ost_pthread.m4
new file mode 100644
index 0000000..624f134
--- /dev/null
+++ b/jni/commoncpp2-1.8.1-android/m4/ost_pthread.m4
@@ -0,0 +1,586 @@
+dnl Copyright (C) 1999-2005 Open Source Telecom Corporation.
+dnl Copyright (C) 2006-2010 David Sugar, Tycho Softworks.
+dnl
+dnl This program is free software; you can redistribute it and/or modify
+dnl it under the terms of the GNU General Public License as published by
+dnl the Free Software Foundation; either version 2 of the License, or
+dnl (at your option) any later version.
+dnl
+dnl This program is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+dnl GNU General Public License for more details.
+dnl
+dnl You should have received a copy of the GNU General Public License
+dnl 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_save_CXXFLAGS="$CXXFLAGS"
+ AC_LANG_CPLUSPLUS
+ 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="$ac_save_CXXFLAGS"
+ AC_LANG_RESTORE
+ fi
+
+ AC_LANG_SAVE
+ ac_save_CXXFLAGS="$CXXFLAGS"
+ CXXFLAGS=""
+ AC_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
+
+ if test 0 = 1 ; then
+ 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)
+ fi
+ fi
+
+ AC_LANG_RESTORE
+ CXXFLAGS="$ac_save_CXXFLAGS"
+
+ 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, clock_gettime,[
+ ost_cv_rt_library="-lrt"
+ AC_DEFINE(HAVE_HIRES_TIMER, [1], [have hires])
+ ],[
+ AC_CHECK_FUNCS(clock_gettime,[
+ AC_DEFINE(HAVE_HIRES_TIMER, [1], [have hires])
+ ])
+ ])
+
+ 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" ; fi
+ if test "$ost_cv_thread_library" != "none" -a "$ost_cv_thread_library" != "c" ; then
+ 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
+ ac_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
+ #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="$ac_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])
+ fi
+
+ AH_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 __cplusplus
+extern "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_SETCANCEL
+enum
+{ 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
+
+
+ ])
+
+])
+