1 dnl Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE
3 dnl Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 dnl CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
6 dnl This library is free software; you can redistribute it and/or
7 dnl modify it under the terms of the GNU Lesser General Public
8 dnl License as published by the Free Software Foundation; either
9 dnl version 2.1 of the License, or (at your option) any later version.
11 dnl This library is distributed in the hope that it will be useful,
12 dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
13 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 dnl Lesser General Public License for more details.
16 dnl You should have received a copy of the GNU Lesser General Public
17 dnl License along with this library; if not, write to the Free Software
18 dnl Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 dnl See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
23 dnl Paul RASCLE: modification for Linux: -pthread required by boost...
24 dnl Available from the GNU Autoconf Macro Archive at:
26 AC_DEFUN([ACX_PTHREAD], [
27 AC_REQUIRE([AC_CANONICAL_HOST])
32 # We used to check for pthread.h first, but this fails if pthread.h
33 # requires special compiler flags (e.g. on True64 or Sequent).
34 # It gets checked for in the link test anyway.
36 # First of all, check if the user has set any of the PTHREAD_LIBS,
37 # etcetera environment variables, and if threads linking works using
39 if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then
41 CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
43 LIBS="$PTHREAD_LIBS $LIBS"
44 AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS])
45 AC_TRY_LINK_FUNC(pthread_join, acx_pthread_ok=yes)
46 AC_MSG_RESULT($acx_pthread_ok)
47 if test x"$acx_pthread_ok" = xno; then
55 # We must check for the threads library under a number of different
56 # names; the ordering is very important because some systems
57 # (e.g. DEC) have both -lpthread and -lpthreads, where one of the
58 # libraries is broken (non-POSIX).
60 # Create a list of thread flags to try. Items starting with a "-" are
61 # C compiler flags, and other items are library names, except for "none"
62 # which indicates that we try without any flags at all, and "pthread-config"
63 # which is a program returning the flags for the Pth emulation library.
65 acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
67 # The ordering *is* (sometimes) important. Some notes on the
68 # individual items follow:
70 # pthreads: AIX (must check this before -lpthread)
71 # none: in case threads are in libc; should be tried before -Kthread and
72 # other compiler flags to prevent continual compiler warnings
73 # -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
74 # -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
75 # lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
76 # -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads)
77 # -pthreads: Solaris/gcc
78 # -mthreads: Mingw32/gcc, Lynx/gcc
79 # -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
80 # doesn't hurt to check since this sometimes defines pthreads too;
81 # also defines -D_REENTRANT)
82 # pthread: Linux, etcetera
83 # --thread-safe: KAI C++
84 # pthread-config: use pthread-config program (for GNU Pth library)
86 case "${host_cpu}-${host_os}" in
89 # On linux "none" works, but boost requires -pthread, so, try first "-pthread"
90 acx_pthread_flags="-pthread pthreads none -Kthread -kthread lthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
95 # On Solaris (at least, for some versions), libc contains stubbed
96 # (non-functional) versions of the pthreads routines, so link-based
97 # tests will erroneously succeed. (We need to link with -pthread or
98 # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather
99 # a function called by this macro, so we could check for that, but
100 # who knows whether they'll stub that too in a future libc.) So,
101 # we'll just look for -pthreads and -lpthread first:
103 acx_pthread_flags="-pthread -pthreads pthread -mt $acx_pthread_flags"
107 if test x"$acx_pthread_ok" = xno; then
108 for flag in $acx_pthread_flags; do
112 AC_MSG_CHECKING([whether pthreads work without any flags])
116 AC_MSG_CHECKING([whether pthreads work with $flag])
117 PTHREAD_CFLAGS="$flag"
121 AC_CHECK_PROG(acx_pthread_config, pthread-config, yes, no)
122 if test x"$acx_pthread_config" = xno; then continue; fi
123 PTHREAD_CFLAGS="`pthread-config --cflags`"
124 PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
128 AC_MSG_CHECKING([for the pthreads library -l$flag])
129 PTHREAD_LIBS="-l$flag"
134 save_CFLAGS="$CFLAGS"
135 LIBS="$PTHREAD_LIBS $LIBS"
136 CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
138 # Check for various functions. We must include pthread.h,
139 # since some functions may be macros. (On the Sequent, we
140 # need a special flag -Kthread to make this header compile.)
141 # We check for pthread_join because it is in -lpthread on IRIX
142 # while pthread_create is in libc. We check for pthread_attr_init
143 # due to DEC craziness with -lpthreads. We check for
144 # pthread_cleanup_push because it is one of the few pthread
145 # functions on Solaris that doesn't have a non-functional libc stub.
146 # We try pthread_create on general principles.
147 AC_TRY_LINK([#include <pthread.h>],
148 [pthread_t th; pthread_join(th, 0);
149 pthread_attr_init(0); pthread_cleanup_push(0, 0);
150 pthread_create(0,0,0,0); pthread_cleanup_pop(0); ],
151 [acx_pthread_ok=yes])
154 CFLAGS="$save_CFLAGS"
156 AC_MSG_RESULT($acx_pthread_ok)
157 if test "x$acx_pthread_ok" = xyes; then
166 # Various other checks:
167 if test "x$acx_pthread_ok" = xyes; then
169 LIBS="$PTHREAD_LIBS $LIBS"
170 save_CFLAGS="$CFLAGS"
171 CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
173 # Detect AIX lossage: threads are created detached by default
174 # and the JOINABLE attribute has a nonstandard name (UNDETACHED).
175 AC_MSG_CHECKING([for joinable pthread attribute])
176 AC_TRY_LINK([#include <pthread.h>],
177 [int attr=PTHREAD_CREATE_JOINABLE;],
178 ok=PTHREAD_CREATE_JOINABLE, ok=unknown)
179 if test x"$ok" = xunknown; then
180 AC_TRY_LINK([#include <pthread.h>],
181 [int attr=PTHREAD_CREATE_UNDETACHED;],
182 ok=PTHREAD_CREATE_UNDETACHED, ok=unknown)
184 if test x"$ok" != xPTHREAD_CREATE_JOINABLE; then
185 AC_DEFINE(PTHREAD_CREATE_JOINABLE, $ok,
186 [Define to the necessary symbol if this constant
187 uses a non-standard name on your system.])
190 if test x"$ok" = xunknown; then
191 AC_MSG_WARN([we do not know how to create joinable pthreads])
194 AC_MSG_CHECKING([if more special flags are required for pthreads])
196 case "${host_cpu}-${host_os}" in
197 *-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";;
198 *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";;
200 AC_MSG_RESULT(${flag})
201 if test "x$flag" != xno; then
202 PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS"
206 CFLAGS="$save_CFLAGS"
208 # More AIX lossage: must compile with cc_r
209 AC_CHECK_PROG(PTHREAD_CC, cc_r, cc_r, ${CC})
214 AC_SUBST(PTHREAD_LIBS)
215 AC_SUBST(PTHREAD_CFLAGS)
218 # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
219 if test x"$acx_pthread_ok" = xyes; then
220 ifelse([$1],,AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.]),[$1])