Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Newer
Older
100644 278 lines (249 sloc) 11.249 kb
a96ec4d Andrew Caudwell Initial revision of Gource.
authored
1 # ===========================================================================
f36a260 Andrew Caudwell Updated to latest version of GL autoconf macros (autoconf-gl-macros-2010...
authored
2 # http://www.nongnu.org/autoconf-archive/ax_pthread.html
a96ec4d Andrew Caudwell Initial revision of Gource.
authored
3 # ===========================================================================
4 #
5 # SYNOPSIS
6 #
f36a260 Andrew Caudwell Updated to latest version of GL autoconf macros (autoconf-gl-macros-2010...
authored
7 # AX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
a96ec4d Andrew Caudwell Initial revision of Gource.
authored
8 #
9 # DESCRIPTION
10 #
11 # This macro figures out how to build C programs using POSIX threads. It
12 # sets the PTHREAD_LIBS output variable to the threads library and linker
13 # flags, and the PTHREAD_CFLAGS output variable to any special C compiler
14 # flags that are needed. (The user can also force certain compiler
15 # flags/libs to be tested by setting these environment variables.)
16 #
17 # Also sets PTHREAD_CC to any special C compiler that is needed for
18 # multi-threaded programs (defaults to the value of CC otherwise). (This
19 # is necessary on AIX to use the special cc_r compiler alias.)
20 #
21 # NOTE: You are assumed to not only compile your program with these flags,
22 # but also link it with them as well. e.g. you should link with
23 # $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS
24 #
25 # If you are only building threads programs, you may wish to use these
26 # variables in your default LIBS, CFLAGS, and CC:
27 #
f36a260 Andrew Caudwell Updated to latest version of GL autoconf macros (autoconf-gl-macros-2010...
authored
28 # LIBS="$PTHREAD_LIBS $LIBS"
29 # CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
30 # CC="$PTHREAD_CC"
a96ec4d Andrew Caudwell Initial revision of Gource.
authored
31 #
32 # In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute constant
33 # has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to that name
34 # (e.g. PTHREAD_CREATE_UNDETACHED on AIX).
35 #
36 # ACTION-IF-FOUND is a list of shell commands to run if a threads library
37 # is found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it
38 # is not found. If ACTION-IF-FOUND is not specified, the default action
39 # will define HAVE_PTHREAD.
40 #
41 # Please let the authors know if this macro fails on any platform, or if
42 # you have any other suggestions or comments. This macro was based on work
43 # by SGJ on autoconf scripts for FFTW (http://www.fftw.org/) (with help
44 # from M. Frigo), as well as ac_pthread and hb_pthread macros posted by
45 # Alejandro Forero Cuervo to the autoconf macro repository. We are also
46 # grateful for the helpful feedback of numerous users.
47 #
f36a260 Andrew Caudwell Updated to latest version of GL autoconf macros (autoconf-gl-macros-2010...
authored
48 # LICENSE
a96ec4d Andrew Caudwell Initial revision of Gource.
authored
49 #
50 # Copyright (c) 2008 Steven G. Johnson <stevenj@alum.mit.edu>
51 #
52 # This program is free software: you can redistribute it and/or modify it
53 # under the terms of the GNU General Public License as published by the
54 # Free Software Foundation, either version 3 of the License, or (at your
55 # option) any later version.
56 #
57 # This program is distributed in the hope that it will be useful, but
58 # WITHOUT ANY WARRANTY; without even the implied warranty of
59 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
60 # Public License for more details.
61 #
62 # You should have received a copy of the GNU General Public License along
63 # with this program. If not, see <http://www.gnu.org/licenses/>.
64 #
65 # As a special exception, the respective Autoconf Macro's copyright owner
66 # gives unlimited permission to copy, distribute and modify the configure
67 # scripts that are the output of Autoconf when processing the Macro. You
68 # need not follow the terms of the GNU General Public License when using
69 # or distributing such scripts, even though portions of the text of the
70 # Macro appear in them. The GNU General Public License (GPL) does govern
71 # all other use of the material that constitutes the Autoconf Macro.
72 #
73 # This special exception to the GPL applies to versions of the Autoconf
f36a260 Andrew Caudwell Updated to latest version of GL autoconf macros (autoconf-gl-macros-2010...
authored
74 # Macro released by the Autoconf Archive. When you make and distribute a
75 # modified version of the Autoconf Macro, you may extend this special
76 # exception to the GPL to apply to your modified version as well.
a96ec4d Andrew Caudwell Initial revision of Gource.
authored
77
f36a260 Andrew Caudwell Updated to latest version of GL autoconf macros (autoconf-gl-macros-2010...
authored
78 AU_ALIAS([ACX_PTHREAD], [AX_PTHREAD])
79 AC_DEFUN([AX_PTHREAD], [
a96ec4d Andrew Caudwell Initial revision of Gource.
authored
80 AC_REQUIRE([AC_CANONICAL_HOST])
81 AC_LANG_SAVE
82 AC_LANG_C
f36a260 Andrew Caudwell Updated to latest version of GL autoconf macros (autoconf-gl-macros-2010...
authored
83 ax_pthread_ok=no
a96ec4d Andrew Caudwell Initial revision of Gource.
authored
84
85 # We used to check for pthread.h first, but this fails if pthread.h
86 # requires special compiler flags (e.g. on True64 or Sequent).
87 # It gets checked for in the link test anyway.
88
89 # First of all, check if the user has set any of the PTHREAD_LIBS,
90 # etcetera environment variables, and if threads linking works using
91 # them:
92 if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then
93 save_CFLAGS="$CFLAGS"
94 CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
95 save_LIBS="$LIBS"
96 LIBS="$PTHREAD_LIBS $LIBS"
97 AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS])
f36a260 Andrew Caudwell Updated to latest version of GL autoconf macros (autoconf-gl-macros-2010...
authored
98 AC_TRY_LINK_FUNC(pthread_join, ax_pthread_ok=yes)
99 AC_MSG_RESULT($ax_pthread_ok)
100 if test x"$ax_pthread_ok" = xno; then
a96ec4d Andrew Caudwell Initial revision of Gource.
authored
101 PTHREAD_LIBS=""
102 PTHREAD_CFLAGS=""
103 fi
104 LIBS="$save_LIBS"
105 CFLAGS="$save_CFLAGS"
106 fi
107
108 # We must check for the threads library under a number of different
109 # names; the ordering is very important because some systems
110 # (e.g. DEC) have both -lpthread and -lpthreads, where one of the
111 # libraries is broken (non-POSIX).
112
113 # Create a list of thread flags to try. Items starting with a "-" are
114 # C compiler flags, and other items are library names, except for "none"
115 # which indicates that we try without any flags at all, and "pthread-config"
116 # which is a program returning the flags for the Pth emulation library.
117
f36a260 Andrew Caudwell Updated to latest version of GL autoconf macros (autoconf-gl-macros-2010...
authored
118 ax_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
a96ec4d Andrew Caudwell Initial revision of Gource.
authored
119
120 # The ordering *is* (sometimes) important. Some notes on the
121 # individual items follow:
122
123 # pthreads: AIX (must check this before -lpthread)
124 # none: in case threads are in libc; should be tried before -Kthread and
125 # other compiler flags to prevent continual compiler warnings
126 # -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
127 # -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
128 # lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
129 # -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads)
130 # -pthreads: Solaris/gcc
131 # -mthreads: Mingw32/gcc, Lynx/gcc
132 # -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
133 # doesn't hurt to check since this sometimes defines pthreads too;
134 # also defines -D_REENTRANT)
135 # ... -mt is also the pthreads flag for HP/aCC
136 # pthread: Linux, etcetera
137 # --thread-safe: KAI C++
138 # pthread-config: use pthread-config program (for GNU Pth library)
139
140 case "${host_cpu}-${host_os}" in
141 *solaris*)
142
143 # On Solaris (at least, for some versions), libc contains stubbed
144 # (non-functional) versions of the pthreads routines, so link-based
145 # tests will erroneously succeed. (We need to link with -pthreads/-mt/
146 # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather
147 # a function called by this macro, so we could check for that, but
148 # who knows whether they'll stub that too in a future libc.) So,
149 # we'll just look for -pthreads and -lpthread first:
150
f36a260 Andrew Caudwell Updated to latest version of GL autoconf macros (autoconf-gl-macros-2010...
authored
151 ax_pthread_flags="-pthreads pthread -mt -pthread $ax_pthread_flags"
a96ec4d Andrew Caudwell Initial revision of Gource.
authored
152 ;;
153 esac
154
f36a260 Andrew Caudwell Updated to latest version of GL autoconf macros (autoconf-gl-macros-2010...
authored
155 if test x"$ax_pthread_ok" = xno; then
156 for flag in $ax_pthread_flags; do
a96ec4d Andrew Caudwell Initial revision of Gource.
authored
157
158 case $flag in
159 none)
160 AC_MSG_CHECKING([whether pthreads work without any flags])
161 ;;
162
163 -*)
164 AC_MSG_CHECKING([whether pthreads work with $flag])
165 PTHREAD_CFLAGS="$flag"
166 ;;
167
168 pthread-config)
f36a260 Andrew Caudwell Updated to latest version of GL autoconf macros (autoconf-gl-macros-2010...
authored
169 AC_CHECK_PROG(ax_pthread_config, pthread-config, yes, no)
170 if test x"$ax_pthread_config" = xno; then continue; fi
a96ec4d Andrew Caudwell Initial revision of Gource.
authored
171 PTHREAD_CFLAGS="`pthread-config --cflags`"
172 PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
173 ;;
174
175 *)
176 AC_MSG_CHECKING([for the pthreads library -l$flag])
177 PTHREAD_LIBS="-l$flag"
178 ;;
179 esac
180
181 save_LIBS="$LIBS"
182 save_CFLAGS="$CFLAGS"
183 LIBS="$PTHREAD_LIBS $LIBS"
184 CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
185
186 # Check for various functions. We must include pthread.h,
187 # since some functions may be macros. (On the Sequent, we
188 # need a special flag -Kthread to make this header compile.)
189 # We check for pthread_join because it is in -lpthread on IRIX
190 # while pthread_create is in libc. We check for pthread_attr_init
191 # due to DEC craziness with -lpthreads. We check for
192 # pthread_cleanup_push because it is one of the few pthread
193 # functions on Solaris that doesn't have a non-functional libc stub.
194 # We try pthread_create on general principles.
f36a260 Andrew Caudwell Updated to latest version of GL autoconf macros (autoconf-gl-macros-2010...
authored
195 AC_TRY_LINK([#include <pthread.h>
196 static void routine(void* a) {a=0;}
197 static void* start_routine(void* a) {return a;}],
198 [pthread_t th; pthread_attr_t attr;
199 pthread_join(th, 0);
200 pthread_attr_init(&attr);
201 pthread_cleanup_push(routine, 0);
202 pthread_create(&th,0,start_routine,0);
203 pthread_cleanup_pop(0); ],
204 [ax_pthread_ok=yes])
a96ec4d Andrew Caudwell Initial revision of Gource.
authored
205
206 LIBS="$save_LIBS"
207 CFLAGS="$save_CFLAGS"
208
f36a260 Andrew Caudwell Updated to latest version of GL autoconf macros (autoconf-gl-macros-2010...
authored
209 AC_MSG_RESULT($ax_pthread_ok)
210 if test "x$ax_pthread_ok" = xyes; then
a96ec4d Andrew Caudwell Initial revision of Gource.
authored
211 break;
212 fi
213
214 PTHREAD_LIBS=""
215 PTHREAD_CFLAGS=""
216 done
217 fi
218
219 # Various other checks:
f36a260 Andrew Caudwell Updated to latest version of GL autoconf macros (autoconf-gl-macros-2010...
authored
220 if test "x$ax_pthread_ok" = xyes; then
a96ec4d Andrew Caudwell Initial revision of Gource.
authored
221 save_LIBS="$LIBS"
222 LIBS="$PTHREAD_LIBS $LIBS"
223 save_CFLAGS="$CFLAGS"
224 CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
225
226 # Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
227 AC_MSG_CHECKING([for joinable pthread attribute])
228 attr_name=unknown
229 for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
230 AC_TRY_LINK([#include <pthread.h>], [int attr=$attr; return attr;],
231 [attr_name=$attr; break])
232 done
233 AC_MSG_RESULT($attr_name)
234 if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then
235 AC_DEFINE_UNQUOTED(PTHREAD_CREATE_JOINABLE, $attr_name,
236 [Define to necessary symbol if this constant
237 uses a non-standard name on your system.])
238 fi
239
240 AC_MSG_CHECKING([if more special flags are required for pthreads])
241 flag=no
242 case "${host_cpu}-${host_os}" in
243 *-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";;
244 *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";;
245 esac
246 AC_MSG_RESULT(${flag})
247 if test "x$flag" != xno; then
248 PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS"
249 fi
250
251 LIBS="$save_LIBS"
252 CFLAGS="$save_CFLAGS"
253
254 # More AIX lossage: must compile with xlc_r or cc_r
255 if test x"$GCC" != xyes; then
256 AC_CHECK_PROGS(PTHREAD_CC, xlc_r cc_r, ${CC})
257 else
258 PTHREAD_CC=$CC
259 fi
260 else
261 PTHREAD_CC="$CC"
262 fi
263
264 AC_SUBST(PTHREAD_LIBS)
265 AC_SUBST(PTHREAD_CFLAGS)
266 AC_SUBST(PTHREAD_CC)
267
268 # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
f36a260 Andrew Caudwell Updated to latest version of GL autoconf macros (autoconf-gl-macros-2010...
authored
269 if test x"$ax_pthread_ok" = xyes; then
a96ec4d Andrew Caudwell Initial revision of Gource.
authored
270 ifelse([$1],,AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.]),[$1])
271 :
272 else
f36a260 Andrew Caudwell Updated to latest version of GL autoconf macros (autoconf-gl-macros-2010...
authored
273 ax_pthread_ok=no
a96ec4d Andrew Caudwell Initial revision of Gource.
authored
274 $2
275 fi
276 AC_LANG_RESTORE
f36a260 Andrew Caudwell Updated to latest version of GL autoconf macros (autoconf-gl-macros-2010...
authored
277 ])dnl AX_PTHREAD
Something went wrong with that request. Please try again.