diff options
author | Lorry Tar Creator <lorry-tar-importer@baserock.org> | 2013-03-14 05:42:27 +0000 |
---|---|---|
committer | <> | 2013-04-03 16:25:08 +0000 |
commit | c4dd7a1a684490673e25aaf4fabec5df138854c4 (patch) | |
tree | 4d57c44caae4480efff02b90b9be86f44bf25409 /TSRM/threads.m4 | |
download | php2-master.tar.gz |
Imported from /home/lorry/working-area/delta_php2/php-5.4.13.tar.bz2.HEADphp-5.4.13master
Diffstat (limited to 'TSRM/threads.m4')
-rw-r--r-- | TSRM/threads.m4 | 173 |
1 files changed, 173 insertions, 0 deletions
diff --git a/TSRM/threads.m4 b/TSRM/threads.m4 new file mode 100644 index 0000000..38494ce --- /dev/null +++ b/TSRM/threads.m4 @@ -0,0 +1,173 @@ +dnl Copyright (c) 1999, 2000 Sascha Schumann. All rights reserved. +dnl +dnl Redistribution and use in source and binary forms, with or without +dnl modification, are permitted provided that the following conditions +dnl are met: +dnl +dnl 1. Redistributions of source code must retain the above copyright +dnl notice, this list of conditions and the following disclaimer. +dnl +dnl 2. Redistributions in binary form must reproduce the above copyright +dnl notice, this list of conditions and the following disclaimer in +dnl the documentation and/or other materials provided with the +dnl distribution. +dnl +dnl THIS SOFTWARE IS PROVIDED BY SASCHA SCHUMANN ``AS IS'' AND ANY +dnl EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +dnl IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +dnl PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SASCHA SCHUMANN OR +dnl HIS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +dnl SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +dnl NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +dnl LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +dnl HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +dnl STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +dnl ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +dnl OF THE POSSIBILITY OF SUCH DAMAGE. + +dnl +dnl PTHREADS_FLAGS +dnl +dnl Set some magic defines to achieve POSIX threads conformance +dnl +AC_DEFUN([PTHREADS_FLAGS],[ + if test -z "$host_alias" && test -n "$host"; then + host_alias=$host + fi + if test -z "$host_alias"; then + AC_MSG_ERROR(host_alias is not set. Make sure to run config.guess) + fi + case $host_alias in + *solaris*) + PTHREAD_FLAGS="-D_POSIX_PTHREAD_SEMANTICS -D_REENTRANT";; + *freebsd*) + PTHREAD_FLAGS="-D_REENTRANT -D_THREAD_SAFE";; + *linux*) + PTHREAD_FLAGS=-D_REENTRANT;; + *aix*) + PTHREAD_FLAGS=-D_THREAD_SAFE;; + *irix*) + PTHREAD_FLAGS=-D_POSIX_THREAD_SAFE_FUNCTIONS;; + *hpux*) + PTHREAD_FLAGS=-D_REENTRANT;; + *sco*) + PTHREAD_FLAGS=-D_REENTRANT;; +dnl Solves sigwait() problem, creates problems with u_long etc. +dnl PTHREAD_FLAGS="-D_REENTRANT -D_XOPEN_SOURCE=500 -D_POSIX_C_SOURCE=199506 -D_XOPEN_SOURCE_EXTENDED=1";; + esac + + if test -n "$PTHREAD_FLAGS"; then + CPPFLAGS="$CPPFLAGS $PTHREAD_FLAGS" + fi +])dnl +dnl +dnl PTHREADS_CHECK_COMPILE +dnl +dnl Check whether the current setup can use POSIX threads calls +dnl +AC_DEFUN([PTHREADS_CHECK_COMPILE], [ +AC_TRY_RUN( [ +#include <pthread.h> +#include <stddef.h> + +void *thread_routine(void *data) { + return data; +} + +int main() { + pthread_t thd; + pthread_mutexattr_t mattr; + int data = 1; + pthread_mutexattr_init(&mattr); + return pthread_create(&thd, NULL, thread_routine, &data); +} ], [ + pthreads_working=yes + ], [ + pthreads_working=no + ], [ + dnl For cross compiling running this test is of no use. NetWare supports pthreads + pthreads_working=no + case $host_alias in + *netware*) + pthreads_working=yes + esac +] +) ] )dnl +dnl +dnl PTHREADS_CHECK() +dnl +dnl Try to find a way to enable POSIX threads +dnl +dnl Magic flags +dnl -kthread gcc (FreeBSD) +dnl -Kthread UDK cc (UnixWare) +dnl -mt WorkShop cc (Solaris) +dnl -mthreads gcc (AIX) +dnl -pthread gcc (Linux, FreeBSD, NetBSD, OpenBSD) +dnl -pthreads gcc (Solaris) +dnl -qthreaded AIX cc V5 +dnl -threads gcc (HP-UX) +dnl +AC_DEFUN([PTHREADS_CHECK],[ + +if test "$beos_threads" = "1"; then + pthreads_working="yes" + ac_cv_pthreads_cflags="" +else + save_CFLAGS=$CFLAGS + save_LIBS=$LIBS + PTHREADS_ASSIGN_VARS + PTHREADS_CHECK_COMPILE + LIBS=$save_LIBS + CFLAGS=$save_CFLAGS + + AC_CACHE_CHECK(for pthreads_cflags,ac_cv_pthreads_cflags,[ + ac_cv_pthreads_cflags= + if test "$pthreads_working" != "yes"; then + for flag in -kthread -pthread -pthreads -mthreads -Kthread -threads -mt -qthreaded; do + ac_save=$CFLAGS + CFLAGS="$CFLAGS $flag" + PTHREADS_CHECK_COMPILE + CFLAGS=$ac_save + if test "$pthreads_working" = "yes"; then + ac_cv_pthreads_cflags=$flag + break + fi + done + fi +fi +]) + +AC_CACHE_CHECK(for pthreads_lib, ac_cv_pthreads_lib,[ +ac_cv_pthreads_lib= +if test "$pthreads_working" != "yes"; then + for lib in pthread pthreads c_r; do + ac_save=$LIBS + LIBS="$LIBS -l$lib" + PTHREADS_CHECK_COMPILE + LIBS=$ac_save + if test "$pthreads_working" = "yes"; then + ac_cv_pthreads_lib=$lib + break + fi + done +fi +]) + +if test "$pthreads_working" = "yes"; then + threads_result="POSIX-Threads found" +else + threads_result="POSIX-Threads not found" +fi +])dnl +dnl +dnl +AC_DEFUN([PTHREADS_ASSIGN_VARS],[ +if test -n "$ac_cv_pthreads_lib"; then + LIBS="$LIBS -l$ac_cv_pthreads_lib" +fi + +if test -n "$ac_cv_pthreads_cflags"; then + CFLAGS="$CFLAGS $ac_cv_pthreads_cflags" +fi +])dnl |