~ubuntu-branches/ubuntu/wily/libsocketcan/wily

« back to all changes in this revision

Viewing changes to config/m4/acx_pthread.m4

  • Committer: Package Import Robot
  • Author(s): Alexander GQ Gerasiov
  • Date: 2014-03-18 18:47:57 UTC
  • Revision ID: package-import@ubuntu.com-20140318184757-0ri1lkf00s2mx3gd
Tags: upstream-0.0.9+git20140207
ImportĀ upstreamĀ versionĀ 0.0.9+git20140207

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
dnl @synopsis ACX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
 
2
dnl
 
3
dnl @summary figure out how to build C programs using POSIX threads
 
4
dnl
 
5
dnl This macro figures out how to build C programs using POSIX threads.
 
6
dnl It sets the PTHREAD_LIBS output variable to the threads library and
 
7
dnl linker flags, and the PTHREAD_CFLAGS output variable to any special
 
8
dnl C compiler flags that are needed. (The user can also force certain
 
9
dnl compiler flags/libs to be tested by setting these environment
 
10
dnl variables.)
 
11
dnl
 
12
dnl Also sets PTHREAD_CC to any special C compiler that is needed for
 
13
dnl multi-threaded programs (defaults to the value of CC otherwise).
 
14
dnl (This is necessary on AIX to use the special cc_r compiler alias.)
 
15
dnl
 
16
dnl NOTE: You are assumed to not only compile your program with these
 
17
dnl flags, but also link it with them as well. e.g. you should link
 
18
dnl with $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS
 
19
dnl $LIBS
 
20
dnl
 
21
dnl If you are only building threads programs, you may wish to use
 
22
dnl these variables in your default LIBS, CFLAGS, and CC:
 
23
dnl
 
24
dnl        LIBS="$PTHREAD_LIBS $LIBS"
 
25
dnl        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
 
26
dnl        CC="$PTHREAD_CC"
 
27
dnl
 
28
dnl In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute
 
29
dnl constant has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to
 
30
dnl that name (e.g. PTHREAD_CREATE_UNDETACHED on AIX).
 
31
dnl
 
32
dnl ACTION-IF-FOUND is a list of shell commands to run if a threads
 
33
dnl library is found, and ACTION-IF-NOT-FOUND is a list of commands to
 
34
dnl run it if it is not found. If ACTION-IF-FOUND is not specified, the
 
35
dnl default action will define HAVE_PTHREAD.
 
36
dnl
 
37
dnl Please let the authors know if this macro fails on any platform, or
 
38
dnl if you have any other suggestions or comments. This macro was based
 
39
dnl on work by SGJ on autoconf scripts for FFTW (www.fftw.org) (with
 
40
dnl help from M. Frigo), as well as ac_pthread and hb_pthread macros
 
41
dnl posted by Alejandro Forero Cuervo to the autoconf macro repository.
 
42
dnl We are also grateful for the helpful feedback of numerous users.
 
43
dnl
 
44
dnl @category InstalledPackages
 
45
dnl @author Steven G. Johnson <stevenj@alum.mit.edu>
 
46
dnl @version 2005-06-15
 
47
dnl @license GPLWithACException
 
48
 
 
49
AC_DEFUN([ACX_PTHREAD], [
 
50
AC_REQUIRE([AC_CANONICAL_HOST])
 
51
AC_LANG_SAVE
 
52
AC_LANG_C
 
53
acx_pthread_ok=no
 
54
 
 
55
# We used to check for pthread.h first, but this fails if pthread.h
 
56
# requires special compiler flags (e.g. on True64 or Sequent).
 
57
# It gets checked for in the link test anyway.
 
58
 
 
59
# First of all, check if the user has set any of the PTHREAD_LIBS,
 
60
# etcetera environment variables, and if threads linking works using
 
61
# them:
 
62
if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then
 
63
        save_CFLAGS="$CFLAGS"
 
64
        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
 
65
        save_LIBS="$LIBS"
 
66
        LIBS="$PTHREAD_LIBS $LIBS"
 
67
        AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS])
 
68
        AC_TRY_LINK_FUNC(pthread_join, acx_pthread_ok=yes)
 
69
        AC_MSG_RESULT($acx_pthread_ok)
 
70
        if test x"$acx_pthread_ok" = xno; then
 
71
                PTHREAD_LIBS=""
 
72
                PTHREAD_CFLAGS=""
 
73
        fi
 
74
        LIBS="$save_LIBS"
 
75
        CFLAGS="$save_CFLAGS"
 
76
fi
 
77
 
 
78
# We must check for the threads library under a number of different
 
79
# names; the ordering is very important because some systems
 
80
# (e.g. DEC) have both -lpthread and -lpthreads, where one of the
 
81
# libraries is broken (non-POSIX).
 
82
 
 
83
# Create a list of thread flags to try.  Items starting with a "-" are
 
84
# C compiler flags, and other items are library names, except for "none"
 
85
# which indicates that we try without any flags at all, and "pthread-config"
 
86
# which is a program returning the flags for the Pth emulation library.
 
87
 
 
88
acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
 
89
 
 
90
# The ordering *is* (sometimes) important.  Some notes on the
 
91
# individual items follow:
 
92
 
 
93
# pthreads: AIX (must check this before -lpthread)
 
94
# none: in case threads are in libc; should be tried before -Kthread and
 
95
#       other compiler flags to prevent continual compiler warnings
 
96
# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
 
97
# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
 
98
# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
 
99
# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads)
 
100
# -pthreads: Solaris/gcc
 
101
# -mthreads: Mingw32/gcc, Lynx/gcc
 
102
# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
 
103
#      doesn't hurt to check since this sometimes defines pthreads too;
 
104
#      also defines -D_REENTRANT)
 
105
#      ... -mt is also the pthreads flag for HP/aCC
 
106
# pthread: Linux, etcetera
 
107
# --thread-safe: KAI C++
 
108
# pthread-config: use pthread-config program (for GNU Pth library)
 
109
 
 
110
case "${host_cpu}-${host_os}" in
 
111
        *solaris*)
 
112
 
 
113
        # On Solaris (at least, for some versions), libc contains stubbed
 
114
        # (non-functional) versions of the pthreads routines, so link-based
 
115
        # tests will erroneously succeed.  (We need to link with -pthreads/-mt/
 
116
        # -lpthread.)  (The stubs are missing pthread_cleanup_push, or rather
 
117
        # a function called by this macro, so we could check for that, but
 
118
        # who knows whether they'll stub that too in a future libc.)  So,
 
119
        # we'll just look for -pthreads and -lpthread first:
 
120
 
 
121
        acx_pthread_flags="-pthreads pthread -mt -pthread $acx_pthread_flags"
 
122
        ;;
 
123
esac
 
124
 
 
125
if test x"$acx_pthread_ok" = xno; then
 
126
for flag in $acx_pthread_flags; do
 
127
 
 
128
        case $flag in
 
129
                none)
 
130
                AC_MSG_CHECKING([whether pthreads work without any flags])
 
131
                ;;
 
132
 
 
133
                -*)
 
134
                AC_MSG_CHECKING([whether pthreads work with $flag])
 
135
                PTHREAD_CFLAGS="$flag"
 
136
                ;;
 
137
 
 
138
                pthread-config)
 
139
                AC_CHECK_PROG(acx_pthread_config, pthread-config, yes, no)
 
140
                if test x"$acx_pthread_config" = xno; then continue; fi
 
141
                PTHREAD_CFLAGS="`pthread-config --cflags`"
 
142
                PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
 
143
                ;;
 
144
 
 
145
                *)
 
146
                AC_MSG_CHECKING([for the pthreads library -l$flag])
 
147
                PTHREAD_LIBS="-l$flag"
 
148
                ;;
 
149
        esac
 
150
 
 
151
        save_LIBS="$LIBS"
 
152
        save_CFLAGS="$CFLAGS"
 
153
        LIBS="$PTHREAD_LIBS $LIBS"
 
154
        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
 
155
 
 
156
        # Check for various functions.  We must include pthread.h,
 
157
        # since some functions may be macros.  (On the Sequent, we
 
158
        # need a special flag -Kthread to make this header compile.)
 
159
        # We check for pthread_join because it is in -lpthread on IRIX
 
160
        # while pthread_create is in libc.  We check for pthread_attr_init
 
161
        # due to DEC craziness with -lpthreads.  We check for
 
162
        # pthread_cleanup_push because it is one of the few pthread
 
163
        # functions on Solaris that doesn't have a non-functional libc stub.
 
164
        # We try pthread_create on general principles.
 
165
        AC_TRY_LINK([#include <pthread.h>],
 
166
                    [pthread_t th; pthread_join(th, 0);
 
167
                     pthread_attr_init(0); pthread_cleanup_push(0, 0);
 
168
                     pthread_create(0,0,0,0); pthread_cleanup_pop(0); ],
 
169
                    [acx_pthread_ok=yes])
 
170
 
 
171
        LIBS="$save_LIBS"
 
172
        CFLAGS="$save_CFLAGS"
 
173
 
 
174
        AC_MSG_RESULT($acx_pthread_ok)
 
175
        if test "x$acx_pthread_ok" = xyes; then
 
176
                break;
 
177
        fi
 
178
 
 
179
        PTHREAD_LIBS=""
 
180
        PTHREAD_CFLAGS=""
 
181
done
 
182
fi
 
183
 
 
184
# Various other checks:
 
185
if test "x$acx_pthread_ok" = xyes; then
 
186
        save_LIBS="$LIBS"
 
187
        LIBS="$PTHREAD_LIBS $LIBS"
 
188
        save_CFLAGS="$CFLAGS"
 
189
        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
 
190
 
 
191
        # Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
 
192
        AC_MSG_CHECKING([for joinable pthread attribute])
 
193
        attr_name=unknown
 
194
        for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
 
195
            AC_TRY_LINK([#include <pthread.h>], [int attr=$attr; return attr;],
 
196
                        [attr_name=$attr; break])
 
197
        done
 
198
        AC_MSG_RESULT($attr_name)
 
199
        if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then
 
200
            AC_DEFINE_UNQUOTED(PTHREAD_CREATE_JOINABLE, $attr_name,
 
201
                               [Define to necessary symbol if this constant
 
202
                                uses a non-standard name on your system.])
 
203
        fi
 
204
 
 
205
        AC_MSG_CHECKING([if more special flags are required for pthreads])
 
206
        flag=no
 
207
        case "${host_cpu}-${host_os}" in
 
208
            *-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";;
 
209
            *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";;
 
210
        esac
 
211
        AC_MSG_RESULT(${flag})
 
212
        if test "x$flag" != xno; then
 
213
            PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS"
 
214
        fi
 
215
 
 
216
        LIBS="$save_LIBS"
 
217
        CFLAGS="$save_CFLAGS"
 
218
 
 
219
        # More AIX lossage: must compile with cc_r
 
220
        AC_CHECK_PROG(PTHREAD_CC, cc_r, cc_r, ${CC})
 
221
else
 
222
        PTHREAD_CC="$CC"
 
223
fi
 
224
 
 
225
AC_SUBST(PTHREAD_LIBS)
 
226
AC_SUBST(PTHREAD_CFLAGS)
 
227
AC_SUBST(PTHREAD_CC)
 
228
 
 
229
# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
 
230
if test x"$acx_pthread_ok" = xyes; then
 
231
        ifelse([$1],,AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.]),[$1])
 
232
        :
 
233
else
 
234
        acx_pthread_ok=no
 
235
        $2
 
236
fi
 
237
AC_LANG_RESTORE
 
238
])dnl ACX_PTHREAD