~ubuntu-branches/ubuntu/oneiric/tiff/oneiric

« back to all changes in this revision

Viewing changes to m4/acinclude.m4

  • Committer: Bazaar Package Importer
  • Author(s): Jay Berkenbilt
  • Date: 2009-08-28 15:44:23 UTC
  • mfrom: (1.1.3 upstream)
  • Revision ID: james.westby@ubuntu.com-20090828154423-7oisj77n302jrroa
Tags: 3.9.1-1
New upstream release

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
dnl ---------------------------------------------------------------------------
 
2
dnl Message output
 
3
dnl ---------------------------------------------------------------------------
 
4
AC_DEFUN([LOC_MSG],[echo "$1"])
 
5
 
 
6
dnl ---------------------------------------------------------------------------
 
7
dnl Available from the GNU Autoconf Macro Archive at:
 
8
dnl http://www.gnu.org/software/ac-archive/vl_prog_cc_warnings.html
 
9
dnl ---------------------------------------------------------------------------
 
10
 
 
11
dnl @synopsis VL_PROG_CC_WARNINGS([ANSI])
 
12
dnl
 
13
dnl Enables a reasonable set of warnings for the C compiler.
 
14
dnl Optionally, if the first argument is nonempty, turns on flags which
 
15
dnl enforce and/or enable proper ANSI C if such are known with the
 
16
dnl compiler used.
 
17
dnl
 
18
dnl Currently this macro knows about GCC, Solaris C compiler, Digital
 
19
dnl Unix C compiler, C for AIX Compiler, HP-UX C compiler, IRIX C
 
20
dnl compiler, NEC SX-5 (Super-UX 10) C compiler, and Cray J90 (Unicos
 
21
dnl 10.0.0.8) C compiler.
 
22
dnl
 
23
dnl @category C
 
24
dnl @author Ville Laurikari <vl@iki.fi>
 
25
dnl @version 2002-04-04
 
26
dnl @license AllPermissive
 
27
 
 
28
AC_DEFUN([VL_PROG_CC_WARNINGS], [
 
29
  ansi=$1
 
30
  if test -z "$ansi"; then
 
31
    msg="for C compiler warning flags"
 
32
  else
 
33
    msg="for C compiler warning and ANSI conformance flags"
 
34
  fi
 
35
  AC_CACHE_CHECK($msg, vl_cv_prog_cc_warnings, [
 
36
    if test -n "$CC"; then
 
37
      cat > conftest.c <<EOF
 
38
int main(int argc, char **argv) { return 0; }
 
39
EOF
 
40
 
 
41
      dnl GCC. -W option has been renamed in -wextra in latest gcc versions.
 
42
      if test "$GCC" = "yes"; then
 
43
        if test -z "$ansi"; then
 
44
          vl_cv_prog_cc_warnings="-Wall -W"
 
45
        else
 
46
          vl_cv_prog_cc_warnings="-Wall -W -ansi -pedantic"
 
47
        fi
 
48
 
 
49
      dnl Most compilers print some kind of a version string with some command
 
50
      dnl line options (often "-V").  The version string should be checked
 
51
      dnl before doing a test compilation run with compiler-specific flags.
 
52
      dnl This is because some compilers (like the Cray compiler) only
 
53
      dnl produce a warning message for unknown flags instead of returning
 
54
      dnl an error, resulting in a false positive.  Also, compilers may do
 
55
      dnl erratic things when invoked with flags meant for a different
 
56
      dnl compiler.
 
57
 
 
58
      dnl Solaris C compiler
 
59
      elif $CC -V 2>&1 | grep -i "WorkShop" > /dev/null 2>&1 &&
 
60
           $CC -c -v -Xc conftest.c > /dev/null 2>&1 &&
 
61
           test -f conftest.o; then
 
62
        if test -z "$ansi"; then
 
63
          vl_cv_prog_cc_warnings="-v"
 
64
        else
 
65
          vl_cv_prog_cc_warnings="-v -Xc"
 
66
        fi
 
67
 
 
68
      dnl Digital Unix C compiler
 
69
      elif $CC -V 2>&1 | grep -i "Digital UNIX Compiler" > /dev/null 2>&1 &&
 
70
           $CC -c -verbose -w0 -warnprotos -std1 conftest.c > /dev/null 2>&1 &&
 
71
           test -f conftest.o; then
 
72
        if test -z "$ansi"; then
 
73
          vl_cv_prog_cc_warnings="-verbose -w0 -warnprotos"
 
74
        else
 
75
          vl_cv_prog_cc_warnings="-verbose -w0 -warnprotos -std1"
 
76
        fi
 
77
 
 
78
      dnl C for AIX Compiler
 
79
      elif $CC 2>&1 | grep -i "C for AIX Compiler" > /dev/null 2>&1 &&
 
80
           $CC -c -qlanglvl=ansi -qinfo=all conftest.c > /dev/null 2>&1 &&
 
81
           test -f conftest.o; then
 
82
        if test -z "$ansi"; then
 
83
          vl_cv_prog_cc_warnings="-qsrcmsg -qinfo=all:noppt:noppc:noobs:nocnd"
 
84
        else
 
85
          vl_cv_prog_cc_warnings="-qsrcmsg -qinfo=all:noppt:noppc:noobs:nocnd -qlanglvl=ansi"
 
86
        fi
 
87
 
 
88
      dnl IRIX C compiler
 
89
      elif $CC -version 2>&1 | grep -i "MIPSpro Compilers" > /dev/null 2>&1 &&
 
90
           $CC -c -fullwarn -ansi -ansiE conftest.c > /dev/null 2>&1 &&
 
91
           test -f conftest.o; then
 
92
        if test -z "$ansi"; then
 
93
          vl_cv_prog_cc_warnings="-fullwarn"
 
94
        else
 
95
          vl_cv_prog_cc_warnings="-fullwarn -ansi -ansiE"
 
96
        fi
 
97
 
 
98
      dnl HP-UX C compiler
 
99
      elif what $CC 2>&1 | grep -i "HP C Compiler" > /dev/null 2>&1 &&
 
100
           $CC -c -Aa +w1 conftest.c > /dev/null 2>&1 &&
 
101
           test -f conftest.o; then
 
102
        if test -z "$ansi"; then
 
103
          vl_cv_prog_cc_warnings="+w1"
 
104
        else
 
105
          vl_cv_prog_cc_warnings="+w1 -Aa"
 
106
        fi
 
107
 
 
108
      dnl The NEC SX-5 (Super-UX 10) C compiler
 
109
      elif $CC -V 2>&1 | grep "/SX" > /dev/null 2>&1 &&
 
110
           $CC -c -pvctl[,]fullmsg -Xc conftest.c > /dev/null 2>&1 &&
 
111
           test -f conftest.o; then
 
112
        if test -z "$ansi"; then
 
113
          vl_cv_prog_cc_warnings="-pvctl[,]fullmsg"
 
114
        else
 
115
          vl_cv_prog_cc_warnings="-pvctl[,]fullmsg -Xc"
 
116
        fi
 
117
 
 
118
      dnl The Cray C compiler (Unicos)
 
119
      elif $CC -V 2>&1 | grep -i "Cray" > /dev/null 2>&1 &&
 
120
           $CC -c -h msglevel 2 conftest.c > /dev/null 2>&1 &&
 
121
           test -f conftest.o; then
 
122
        if test -z "$ansi"; then
 
123
          vl_cv_prog_cc_warnings="-h msglevel 2"
 
124
        else
 
125
          vl_cv_prog_cc_warnings="-h msglevel 2 -h conform"
 
126
        fi
 
127
 
 
128
      fi
 
129
      rm -f conftest.*
 
130
    fi
 
131
    if test -n "$vl_cv_prog_cc_warnings"; then
 
132
      CFLAGS="$CFLAGS $vl_cv_prog_cc_warnings"
 
133
    else
 
134
      vl_cv_prog_cc_warnings="unknown"
 
135
    fi
 
136
  ])
 
137
])dnl
 
138
 
 
139
dnl ---------------------------------------------------------------------------
 
140
dnl Available from the GNU Autoconf Macro Archive at:
 
141
dnl http://autoconf-archive.cryp.to/ax_lang_compiler_ms.html
 
142
dnl ---------------------------------------------------------------------------
 
143
 
 
144
dnl @synopsis AX_LANG_COMPILER_MS
 
145
dnl
 
146
dnl Check whether the compiler for the current language is Microsoft.
 
147
dnl
 
148
dnl This macro is modeled after _AC_LANG_COMPILER_GNU in the GNU
 
149
dnl Autoconf implementation.
 
150
dnl
 
151
dnl @category InstalledPackages
 
152
dnl @author Braden McDaniel <braden@endoframe.com>
 
153
dnl @version 2004-11-15
 
154
dnl @license AllPermissive
 
155
 
 
156
AC_DEFUN([AX_LANG_COMPILER_MS],
 
157
[AC_CACHE_CHECK([whether we are using the Microsoft _AC_LANG compiler],
 
158
                [ax_cv_[]_AC_LANG_ABBREV[]_compiler_ms],
 
159
[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [[#ifndef _MSC_VER
 
160
       choke me
 
161
#endif
 
162
]])],
 
163
                   [ax_compiler_ms=yes],
 
164
                   [ax_compiler_ms=no])
 
165
ax_cv_[]_AC_LANG_ABBREV[]_compiler_ms=$ax_compiler_ms
 
166
])])
 
167
 
 
168
dnl ---------------------------------------------------------------------------
 
169
dnl Available from the GNU Autoconf Macro Archive at:
 
170
dnl http://www.gnu.org/software/ac-archive/ax_check_gl.html
 
171
dnl ---------------------------------------------------------------------------
 
172
 
 
173
dnl @synopsis AX_CHECK_GL
 
174
dnl
 
175
dnl Check for an OpenGL implementation. If GL is found, the required
 
176
dnl compiler and linker flags are included in the output variables
 
177
dnl "GL_CFLAGS" and "GL_LIBS", respectively. This macro adds the
 
178
dnl configure option "--with-apple-opengl-framework", which users can
 
179
dnl use to indicate that Apple's OpenGL framework should be used on Mac
 
180
dnl OS X. If Apple's OpenGL framework is used, the symbol
 
181
dnl "HAVE_APPLE_OPENGL_FRAMEWORK" is defined. If no GL implementation
 
182
dnl is found, "no_gl" is set to "yes".
 
183
dnl
 
184
dnl @category InstalledPackages
 
185
dnl @author Braden McDaniel <braden@endoframe.com>
 
186
dnl @version 2004-11-15
 
187
dnl @license AllPermissive
 
188
 
 
189
AC_DEFUN([AX_CHECK_GL],
 
190
[AC_REQUIRE([AC_PATH_X])dnl
 
191
AC_REQUIRE([ACX_PTHREAD])dnl
 
192
 
 
193
#
 
194
# There isn't a reliable way to know we should use the Apple OpenGL framework
 
195
# without a configure option.  A Mac OS X user may have installed an
 
196
# alternative GL implementation (e.g., Mesa), which may or may not depend on X.
 
197
#
 
198
AC_ARG_WITH([apple-opengl-framework],
 
199
            [AC_HELP_STRING([--with-apple-opengl-framework],
 
200
                            [use Apple OpenGL framework (Mac OS X only)])])
 
201
if test "X$with_apple_opengl_framework" = "Xyes"; then
 
202
  AC_DEFINE([HAVE_APPLE_OPENGL_FRAMEWORK], [1],
 
203
            [Use the Apple OpenGL framework.])
 
204
  GL_LIBS="-framework OpenGL"
 
205
else
 
206
  AC_LANG_PUSH(C)
 
207
 
 
208
  AX_LANG_COMPILER_MS
 
209
  if test X$ax_compiler_ms = Xno; then
 
210
    GL_CFLAGS="${PTHREAD_CFLAGS}"
 
211
    GL_LIBS="${PTHREAD_LIBS} -lm"
 
212
  fi
 
213
 
 
214
  #
 
215
  # Use x_includes and x_libraries if they have been set (presumably by
 
216
  # AC_PATH_X).
 
217
  #
 
218
  if test "X$no_x" != "Xyes"; then
 
219
    if test -n "$x_includes"; then
 
220
      GL_CFLAGS="-I${x_includes} ${GL_CFLAGS}"
 
221
    fi
 
222
    if test -n "$x_libraries"; then
 
223
      GL_LIBS="-L${x_libraries} -lX11 ${GL_LIBS}"
 
224
    fi
 
225
  fi
 
226
 
 
227
  AC_CHECK_HEADERS([windows.h])
 
228
 
 
229
  AC_CACHE_CHECK([for OpenGL library], [ax_cv_check_gl_libgl],
 
230
  [ax_cv_check_gl_libgl="no"
 
231
  ax_save_CPPFLAGS="${CPPFLAGS}"
 
232
  CPPFLAGS="${GL_CFLAGS} ${CPPFLAGS}"
 
233
  ax_save_LIBS="${LIBS}"
 
234
  LIBS=""
 
235
  ax_check_libs="-lopengl32 -lGL"
 
236
  for ax_lib in ${ax_check_libs}; do
 
237
    if test X$ax_compiler_ms = Xyes; then
 
238
      ax_try_lib=`echo $ax_lib | sed -e 's/^-l//' -e 's/$/.lib/'`
 
239
    else
 
240
      ax_try_lib="${ax_lib}"
 
241
    fi
 
242
    LIBS="${ax_try_lib} ${GL_LIBS} ${ax_save_LIBS}"
 
243
    AC_LINK_IFELSE(
 
244
    [AC_LANG_PROGRAM([[
 
245
# if HAVE_WINDOWS_H && defined(_WIN32)
 
246
#   include <windows.h>
 
247
# endif
 
248
# include <GL/gl.h>]],
 
249
                     [[glBegin(0)]])],
 
250
    [ax_cv_check_gl_libgl="${ax_try_lib}"; break])
 
251
  done
 
252
  LIBS=${ax_save_LIBS}
 
253
  CPPFLAGS=${ax_save_CPPFLAGS}])
 
254
 
 
255
  if test "X${ax_cv_check_gl_libgl}" = "Xno"; then
 
256
    no_gl="yes"
 
257
    GL_CFLAGS=""
 
258
    GL_LIBS=""
 
259
  else
 
260
    GL_LIBS="${ax_cv_check_gl_libgl} ${GL_LIBS}"
 
261
  fi
 
262
  AC_LANG_POP(C)
 
263
fi
 
264
 
 
265
AC_SUBST([GL_CFLAGS])
 
266
AC_SUBST([GL_LIBS])
 
267
])dnl
 
268
 
 
269
dnl ---------------------------------------------------------------------------
 
270
dnl Available from the GNU Autoconf Macro Archive at:
 
271
dnl http://www.gnu.org/software/ac-archive/ax_check_glu.html
 
272
dnl ---------------------------------------------------------------------------
 
273
 
 
274
dnl @synopsis AX_CHECK_GLU
 
275
dnl
 
276
dnl Check for GLU. If GLU is found, the required preprocessor and
 
277
dnl linker flags are included in the output variables "GLU_CFLAGS" and
 
278
dnl "GLU_LIBS", respectively. This macro adds the configure option
 
279
dnl "--with-apple-opengl-framework", which users can use to indicate
 
280
dnl that Apple's OpenGL framework should be used on Mac OS X. If
 
281
dnl Apple's OpenGL framework is used, the symbol
 
282
dnl "HAVE_APPLE_OPENGL_FRAMEWORK" is defined. If no GLU implementation
 
283
dnl is found, "no_glu" is set to "yes".
 
284
dnl
 
285
dnl @category InstalledPackages
 
286
dnl @author Braden McDaniel <braden@endoframe.com>
 
287
dnl @version 2004-11-15
 
288
dnl @license AllPermissive
 
289
 
 
290
AC_DEFUN([AX_CHECK_GLU],
 
291
[AC_REQUIRE([AX_CHECK_GL])dnl
 
292
AC_REQUIRE([AC_PROG_CXX])dnl
 
293
GLU_CFLAGS="${GL_CFLAGS}"
 
294
if test "X${with_apple_opengl_framework}" != "Xyes"; then
 
295
  AC_CACHE_CHECK([for OpenGL Utility library], [ax_cv_check_glu_libglu],
 
296
  [ax_cv_check_glu_libglu="no"
 
297
  ax_save_CPPFLAGS="${CPPFLAGS}"
 
298
  CPPFLAGS="${GL_CFLAGS} ${CPPFLAGS}"
 
299
  ax_save_LIBS="${LIBS}"
 
300
  LIBS=""
 
301
  ax_check_libs="-lglu32 -lGLU"
 
302
  for ax_lib in ${ax_check_libs}; do
 
303
    if test X$ax_compiler_ms = Xyes; then
 
304
      ax_try_lib=`echo $ax_lib | sed -e 's/^-l//' -e 's/$/.lib/'`
 
305
    else
 
306
      ax_try_lib="${ax_lib}"
 
307
    fi
 
308
    LIBS="${ax_try_lib} ${GL_LIBS} ${ax_save_LIBS}"
 
309
    #
 
310
    # libGLU typically links with libstdc++ on POSIX platforms. However,
 
311
    # setting the language to C++ means that test program source is named
 
312
    # "conftest.cc"; and Microsoft cl doesn't know what to do with such a
 
313
    # file.
 
314
    #
 
315
    AC_LANG_PUSH([C++])
 
316
    if test X$ax_compiler_ms = Xyes; then
 
317
      AC_LANG_PUSH([C])
 
318
    fi
 
319
    AC_LINK_IFELSE(
 
320
    [AC_LANG_PROGRAM([[
 
321
# if HAVE_WINDOWS_H && defined(_WIN32)
 
322
#   include <windows.h>
 
323
# endif
 
324
# include <GL/glu.h>]],
 
325
                     [[gluBeginCurve(0)]])],
 
326
    [ax_cv_check_glu_libglu="${ax_try_lib}"; break])
 
327
    if test X$ax_compiler_ms = Xyes; then
 
328
      AC_LANG_POP([C])
 
329
    fi
 
330
    AC_LANG_POP([C++])
 
331
  done
 
332
  LIBS=${ax_save_LIBS}
 
333
  CPPFLAGS=${ax_save_CPPFLAGS}])
 
334
  if test "X${ax_cv_check_glu_libglu}" = "Xno"; then
 
335
    no_glu="yes"
 
336
    GLU_CFLAGS=""
 
337
    GLU_LIBS=""
 
338
  else
 
339
    GLU_LIBS="${ax_cv_check_glu_libglu} ${GL_LIBS}"
 
340
  fi
 
341
fi
 
342
AC_SUBST([GLU_CFLAGS])
 
343
AC_SUBST([GLU_LIBS])
 
344
])
 
345
 
 
346
dnl ---------------------------------------------------------------------------
 
347
dnl Available from the GNU Autoconf Macro Archive at:
 
348
dnl http://www.gnu.org/software/ac-archive/ax_check_glut.html
 
349
dnl ---------------------------------------------------------------------------
 
350
 
 
351
dnl @synopsis AX_CHECK_GLUT
 
352
dnl
 
353
dnl Check for GLUT. If GLUT is found, the required compiler and linker
 
354
dnl flags are included in the output variables "GLUT_CFLAGS" and
 
355
dnl "GLUT_LIBS", respectively. This macro adds the configure option
 
356
dnl "--with-apple-opengl-framework", which users can use to indicate
 
357
dnl that Apple's OpenGL framework should be used on Mac OS X. If
 
358
dnl Apple's OpenGL framework is used, the symbol
 
359
dnl "HAVE_APPLE_OPENGL_FRAMEWORK" is defined. If GLUT is not found,
 
360
dnl "no_glut" is set to "yes".
 
361
dnl
 
362
dnl @category InstalledPackages
 
363
dnl @author Braden McDaniel <braden@endoframe.com>
 
364
dnl @version 2004-11-15
 
365
dnl @license AllPermissive
 
366
 
 
367
AC_DEFUN([AX_CHECK_GLUT],
 
368
[AC_REQUIRE([AX_CHECK_GLU])dnl
 
369
AC_REQUIRE([AC_PATH_XTRA])dnl
 
370
 
 
371
if test "X$with_apple_opengl_framework" = "Xyes"; then
 
372
  GLUT_CFLAGS="${GLU_CFLAGS}"
 
373
  GLUT_LIBS="-framework GLUT -lobjc ${GL_LIBS}"
 
374
else
 
375
  GLUT_CFLAGS=${GLU_CFLAGS}
 
376
  GLUT_LIBS=${GLU_LIBS}
 
377
 
 
378
  #
 
379
  # If X is present, assume GLUT depends on it.
 
380
  #
 
381
  if test "X${no_x}" != "Xyes"; then
 
382
    GLUT_LIBS="${X_PRE_LIBS} -lXmu -lXi ${X_EXTRA_LIBS} ${GLUT_LIBS}"
 
383
  fi
 
384
 
 
385
  AC_LANG_PUSH(C)
 
386
 
 
387
  ax_save_CPPFLAGS="${CPPFLAGS}"
 
388
  CPPFLAGS="${GLUT_CFLAGS} ${CPPFLAGS}"
 
389
 
 
390
  AC_CACHE_CHECK([for GLUT library], [ax_cv_check_glut_libglut],
 
391
  [ax_cv_check_glut_libglut="no"
 
392
  ax_save_LIBS="${LIBS}"
 
393
  LIBS=""
 
394
  ax_check_libs="-lglut32 -lglut"
 
395
  for ax_lib in ${ax_check_libs}; do
 
396
    if test X$ax_compiler_ms = Xyes; then
 
397
      ax_try_lib=`echo $ax_lib | sed -e 's/^-l//' -e 's/$/.lib/'`
 
398
    else
 
399
      ax_try_lib="${ax_lib}"
 
400
    fi
 
401
    LIBS="${ax_try_lib} ${GLUT_LIBS} ${ax_save_LIBS}"
 
402
    AC_LINK_IFELSE(
 
403
    [AC_LANG_PROGRAM([[
 
404
# if HAVE_WINDOWS_H && defined(_WIN32)
 
405
#   include <windows.h>
 
406
# endif
 
407
# include <GL/glut.h>]],
 
408
                     [[glutMainLoop()]])],
 
409
    [ax_cv_check_glut_libglut="${ax_try_lib}"; break])
 
410
 
 
411
  done
 
412
  LIBS=${ax_save_LIBS}
 
413
  ])
 
414
  CPPFLAGS="${ax_save_CPPFLAGS}"
 
415
  AC_LANG_POP(C)
 
416
 
 
417
  if test "X${ax_cv_check_glut_libglut}" = "Xno"; then
 
418
    no_glut="yes"
 
419
    GLUT_CFLAGS=""
 
420
    GLUT_LIBS=""
 
421
  else
 
422
    GLUT_LIBS="${ax_cv_check_glut_libglut} ${GLUT_LIBS}"
 
423
  fi
 
424
fi
 
425
 
 
426
AC_SUBST([GLUT_CFLAGS])
 
427
AC_SUBST([GLUT_LIBS])
 
428
])dnl
 
429
 
 
430
dnl ---------------------------------------------------------------------------
 
431
dnl Available from the GNU Autoconf Macro Archive at:
 
432
dnl http://www.gnu.org/software/ac-archive/acx_pthread.html
 
433
dnl ---------------------------------------------------------------------------
 
434
 
 
435
dnl @synopsis ACX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
 
436
dnl
 
437
dnl This macro figures out how to build C programs using POSIX threads.
 
438
dnl It sets the PTHREAD_LIBS output variable to the threads library and
 
439
dnl linker flags, and the PTHREAD_CFLAGS output variable to any special
 
440
dnl C compiler flags that are needed. (The user can also force certain
 
441
dnl compiler flags/libs to be tested by setting these environment
 
442
dnl variables.)
 
443
dnl
 
444
dnl Also sets PTHREAD_CC to any special C compiler that is needed for
 
445
dnl multi-threaded programs (defaults to the value of CC otherwise).
 
446
dnl (This is necessary on AIX to use the special cc_r compiler alias.)
 
447
dnl
 
448
dnl NOTE: You are assumed to not only compile your program with these
 
449
dnl flags, but also link it with them as well. e.g. you should link
 
450
dnl with $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS
 
451
dnl $LIBS
 
452
dnl
 
453
dnl If you are only building threads programs, you may wish to use
 
454
dnl these variables in your default LIBS, CFLAGS, and CC:
 
455
dnl
 
456
dnl        LIBS="$PTHREAD_LIBS $LIBS"
 
457
dnl        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
 
458
dnl        CC="$PTHREAD_CC"
 
459
dnl
 
460
dnl In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute
 
461
dnl constant has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to
 
462
dnl that name (e.g. PTHREAD_CREATE_UNDETACHED on AIX).
 
463
dnl
 
464
dnl ACTION-IF-FOUND is a list of shell commands to run if a threads
 
465
dnl library is found, and ACTION-IF-NOT-FOUND is a list of commands to
 
466
dnl run it if it is not found. If ACTION-IF-FOUND is not specified, the
 
467
dnl default action will define HAVE_PTHREAD.
 
468
dnl
 
469
dnl Please let the authors know if this macro fails on any platform, or
 
470
dnl if you have any other suggestions or comments. This macro was based
 
471
dnl on work by SGJ on autoconf scripts for FFTW (www.fftw.org) (with
 
472
dnl help from M. Frigo), as well as ac_pthread and hb_pthread macros
 
473
dnl posted by Alejandro Forero Cuervo to the autoconf macro repository.
 
474
dnl We are also grateful for the helpful feedback of numerous users.
 
475
dnl
 
476
dnl @category InstalledPackages
 
477
dnl @author Steven G. Johnson <stevenj@alum.mit.edu>
 
478
dnl @version 2005-01-14
 
479
dnl @license GPLWithACException
 
480
 
 
481
AC_DEFUN([ACX_PTHREAD], [
 
482
AC_REQUIRE([AC_CANONICAL_HOST])
 
483
AC_LANG_SAVE
 
484
AC_LANG_C
 
485
acx_pthread_ok=no
 
486
 
 
487
# We used to check for pthread.h first, but this fails if pthread.h
 
488
# requires special compiler flags (e.g. on True64 or Sequent).
 
489
# It gets checked for in the link test anyway.
 
490
 
 
491
# First of all, check if the user has set any of the PTHREAD_LIBS,
 
492
# etcetera environment variables, and if threads linking works using
 
493
# them:
 
494
if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then
 
495
        save_CFLAGS="$CFLAGS"
 
496
        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
 
497
        save_LIBS="$LIBS"
 
498
        LIBS="$PTHREAD_LIBS $LIBS"
 
499
        AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS])
 
500
        AC_TRY_LINK_FUNC(pthread_join, acx_pthread_ok=yes)
 
501
        AC_MSG_RESULT($acx_pthread_ok)
 
502
        if test x"$acx_pthread_ok" = xno; then
 
503
                PTHREAD_LIBS=""
 
504
                PTHREAD_CFLAGS=""
 
505
        fi
 
506
        LIBS="$save_LIBS"
 
507
        CFLAGS="$save_CFLAGS"
 
508
fi
 
509
 
 
510
# We must check for the threads library under a number of different
 
511
# names; the ordering is very important because some systems
 
512
# (e.g. DEC) have both -lpthread and -lpthreads, where one of the
 
513
# libraries is broken (non-POSIX).
 
514
 
 
515
# Create a list of thread flags to try.  Items starting with a "-" are
 
516
# C compiler flags, and other items are library names, except for "none"
 
517
# which indicates that we try without any flags at all, and "pthread-config"
 
518
# which is a program returning the flags for the Pth emulation library.
 
519
 
 
520
acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
 
521
 
 
522
# The ordering *is* (sometimes) important.  Some notes on the
 
523
# individual items follow:
 
524
 
 
525
# pthreads: AIX (must check this before -lpthread)
 
526
# none: in case threads are in libc; should be tried before -Kthread and
 
527
#       other compiler flags to prevent continual compiler warnings
 
528
# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
 
529
# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
 
530
# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
 
531
# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads)
 
532
# -pthreads: Solaris/gcc
 
533
# -mthreads: Mingw32/gcc, Lynx/gcc
 
534
# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
 
535
#      doesn't hurt to check since this sometimes defines pthreads too;
 
536
#      also defines -D_REENTRANT)
 
537
# pthread: Linux, etcetera
 
538
# --thread-safe: KAI C++
 
539
# pthread-config: use pthread-config program (for GNU Pth library)
 
540
 
 
541
case "${host_cpu}-${host_os}" in
 
542
        *solaris*)
 
543
 
 
544
        # On Solaris (at least, for some versions), libc contains stubbed
 
545
        # (non-functional) versions of the pthreads routines, so link-based
 
546
        # tests will erroneously succeed.  (We need to link with -pthread or
 
547
        # -lpthread.)  (The stubs are missing pthread_cleanup_push, or rather
 
548
        # a function called by this macro, so we could check for that, but
 
549
        # who knows whether they'll stub that too in a future libc.)  So,
 
550
        # we'll just look for -pthreads and -lpthread first:
 
551
 
 
552
        acx_pthread_flags="-pthread -pthreads pthread -mt $acx_pthread_flags"
 
553
        ;;
 
554
esac
 
555
 
 
556
if test x"$acx_pthread_ok" = xno; then
 
557
for flag in $acx_pthread_flags; do
 
558
 
 
559
        case $flag in
 
560
                none)
 
561
                AC_MSG_CHECKING([whether pthreads work without any flags])
 
562
                ;;
 
563
 
 
564
                -*)
 
565
                AC_MSG_CHECKING([whether pthreads work with $flag])
 
566
                PTHREAD_CFLAGS="$flag"
 
567
                ;;
 
568
 
 
569
                pthread-config)
 
570
                AC_CHECK_PROG(acx_pthread_config, pthread-config, yes, no)
 
571
                if test x"$acx_pthread_config" = xno; then continue; fi
 
572
                PTHREAD_CFLAGS="`pthread-config --cflags`"
 
573
                PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
 
574
                ;;
 
575
 
 
576
                *)
 
577
                AC_MSG_CHECKING([for the pthreads library -l$flag])
 
578
                PTHREAD_LIBS="-l$flag"
 
579
                ;;
 
580
        esac
 
581
 
 
582
        save_LIBS="$LIBS"
 
583
        save_CFLAGS="$CFLAGS"
 
584
        LIBS="$PTHREAD_LIBS $LIBS"
 
585
        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
 
586
 
 
587
        # Check for various functions.  We must include pthread.h,
 
588
        # since some functions may be macros.  (On the Sequent, we
 
589
        # need a special flag -Kthread to make this header compile.)
 
590
        # We check for pthread_join because it is in -lpthread on IRIX
 
591
        # while pthread_create is in libc.  We check for pthread_attr_init
 
592
        # due to DEC craziness with -lpthreads.  We check for
 
593
        # pthread_cleanup_push because it is one of the few pthread
 
594
        # functions on Solaris that doesn't have a non-functional libc stub.
 
595
        # We try pthread_create on general principles.
 
596
        AC_TRY_LINK([#include <pthread.h>],
 
597
                    [pthread_t th; pthread_join(th, 0);
 
598
                     pthread_attr_init(0); pthread_cleanup_push(0, 0);
 
599
                     pthread_create(0,0,0,0); pthread_cleanup_pop(0); ],
 
600
                    [acx_pthread_ok=yes])
 
601
 
 
602
        LIBS="$save_LIBS"
 
603
        CFLAGS="$save_CFLAGS"
 
604
 
 
605
        AC_MSG_RESULT($acx_pthread_ok)
 
606
        if test "x$acx_pthread_ok" = xyes; then
 
607
                break;
 
608
        fi
 
609
 
 
610
        PTHREAD_LIBS=""
 
611
        PTHREAD_CFLAGS=""
 
612
done
 
613
fi
 
614
 
 
615
# Various other checks:
 
616
if test "x$acx_pthread_ok" = xyes; then
 
617
        save_LIBS="$LIBS"
 
618
        LIBS="$PTHREAD_LIBS $LIBS"
 
619
        save_CFLAGS="$CFLAGS"
 
620
        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
 
621
 
 
622
        # Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
 
623
        AC_MSG_CHECKING([for joinable pthread attribute])
 
624
        attr_name=unknown
 
625
        for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
 
626
            AC_TRY_LINK([#include <pthread.h>], [int attr=$attr;],
 
627
                        [attr_name=$attr; break])
 
628
        done
 
629
        AC_MSG_RESULT($attr_name)
 
630
        if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then
 
631
            AC_DEFINE_UNQUOTED(PTHREAD_CREATE_JOINABLE, $attr_name,
 
632
                               [Define to necessary symbol if this constant
 
633
                                uses a non-standard name on your system.])
 
634
        fi
 
635
 
 
636
        AC_MSG_CHECKING([if more special flags are required for pthreads])
 
637
        flag=no
 
638
        case "${host_cpu}-${host_os}" in
 
639
            *-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";;
 
640
            *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";;
 
641
        esac
 
642
        AC_MSG_RESULT(${flag})
 
643
        if test "x$flag" != xno; then
 
644
            PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS"
 
645
        fi
 
646
 
 
647
        LIBS="$save_LIBS"
 
648
        CFLAGS="$save_CFLAGS"
 
649
 
 
650
        # More AIX lossage: must compile with cc_r
 
651
        AC_CHECK_PROG(PTHREAD_CC, cc_r, cc_r, ${CC})
 
652
else
 
653
        PTHREAD_CC="$CC"
 
654
fi
 
655
 
 
656
AC_SUBST(PTHREAD_LIBS)
 
657
AC_SUBST(PTHREAD_CFLAGS)
 
658
AC_SUBST(PTHREAD_CC)
 
659
 
 
660
# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
 
661
if test x"$acx_pthread_ok" = xyes; then
 
662
        ifelse([$1],,AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.]),[$1])
 
663
        :
 
664
else
 
665
        acx_pthread_ok=no
 
666
        $2
 
667
fi
 
668
AC_LANG_RESTORE
 
669
])dnl ACX_PTHREAD