xref: /php-src/TSRM/threads.m4 (revision 868257a3)
1dnl  Copyright (c) 1999, 2000 Sascha Schumann. All rights reserved.
2dnl
3dnl  Redistribution and use in source and binary forms, with or without
4dnl  modification, are permitted provided that the following conditions
5dnl  are met:
6dnl
7dnl  1. Redistributions of source code must retain the above copyright
8dnl     notice, this list of conditions and the following disclaimer.
9dnl
10dnl  2. Redistributions in binary form must reproduce the above copyright
11dnl     notice, this list of conditions and the following disclaimer in
12dnl     the documentation and/or other materials provided with the
13dnl     distribution.
14dnl
15dnl  THIS SOFTWARE IS PROVIDED BY SASCHA SCHUMANN ``AS IS'' AND ANY
16dnl  EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17dnl  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
18dnl  PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL SASCHA SCHUMANN OR
19dnl  HIS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
20dnl  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
21dnl  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22dnl  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23dnl  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
24dnl  STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25dnl  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
26dnl  OF THE POSSIBILITY OF SUCH DAMAGE.
27
28dnl
29dnl PTHREADS_FLAGS
30dnl
31dnl Set some magic defines to achieve POSIX threads conformance.
32dnl
33AC_DEFUN([PTHREADS_FLAGS],[
34  case $host_alias in
35  *solaris*)
36    PTHREAD_FLAGS="-D_POSIX_PTHREAD_SEMANTICS -D_REENTRANT";;
37  *freebsd*)
38    PTHREAD_FLAGS="-D_REENTRANT -D_THREAD_SAFE";;
39  *linux*)
40    PTHREAD_FLAGS=-D_REENTRANT;;
41  *aix*)
42    PTHREAD_FLAGS=-D_THREAD_SAFE;;
43  *hpux*)
44    PTHREAD_FLAGS=-D_REENTRANT;;
45  *sco*)
46    PTHREAD_FLAGS=-D_REENTRANT;;
47  esac
48
49  if test -n "$PTHREAD_FLAGS"; then
50    CPPFLAGS="$CPPFLAGS $PTHREAD_FLAGS"
51  fi
52])
53
54dnl
55dnl PTHREADS_CHECK_COMPILE
56dnl
57dnl Check whether the current setup can use POSIX threads calls.
58dnl
59AC_DEFUN([PTHREADS_CHECK_COMPILE], [
60AC_LINK_IFELSE([ AC_LANG_SOURCE([
61#include <pthread.h>
62#include <stddef.h>
63
64void *thread_routine(void *data) {
65    return data;
66}
67
68int main(void) {
69    pthread_t thd;
70    pthread_mutexattr_t mattr;
71    int data = 1;
72    pthread_mutexattr_init(&mattr);
73    return pthread_create(&thd, NULL, thread_routine, &data);
74} ]) ], [
75  pthreads_checked=yes
76  ], [
77  pthreads_checked=no
78  ]
79) ] )
80
81dnl
82dnl PTHREADS_CHECK
83dnl
84dnl Try to find a way to enable POSIX threads.
85dnl
86dnl  Magic flags
87dnl  -kthread          gcc (FreeBSD)
88dnl  -Kthread          UDK cc (UnixWare)
89dnl  -mt               WorkShop cc (Solaris)
90dnl  -mthreads         gcc (AIX)
91dnl  -pthread          gcc (Linux, FreeBSD, NetBSD, OpenBSD)
92dnl  -pthreads         gcc (Solaris)
93dnl  -qthreaded        AIX cc V5
94dnl  -threads          gcc (HP-UX)
95dnl
96AC_DEFUN([PTHREADS_CHECK],[
97AC_CACHE_CHECK(for pthreads_cflags,ac_cv_pthreads_cflags,[
98ac_cv_pthreads_cflags=
99if test "$pthreads_working" != "yes"; then
100  for flag in -kthread -pthread -pthreads -mthreads -Kthread -threads -mt -qthreaded; do
101    ac_save=$CFLAGS
102    CFLAGS="$CFLAGS $flag"
103    PTHREADS_CHECK_COMPILE
104    CFLAGS=$ac_save
105    if test "$pthreads_checked" = "yes"; then
106      ac_cv_pthreads_cflags=$flag
107      break
108    fi
109  done
110fi
111])
112
113AC_CACHE_CHECK(for pthreads_lib, ac_cv_pthreads_lib,[
114ac_cv_pthreads_lib=
115if test "$pthreads_working" != "yes"; then
116 for lib in pthread pthreads c_r; do
117    ac_save=$LIBS
118    LIBS="$LIBS -l$lib"
119    PTHREADS_CHECK_COMPILE
120    LIBS=$ac_save
121    if test "$pthreads_checked" = "yes"; then
122      ac_cv_pthreads_lib=$lib
123      break
124    fi
125  done
126fi
127])
128
129if test "x$ac_cv_pthreads_cflags" != "x" || test "x$ac_cv_pthreads_lib" != "x"; then
130  pthreads_working="yes"
131fi
132])
133