]>
Commit | Line | Data |
---|---|---|
8414a40c VZ |
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 |