| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381 |
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
- "http://www.w3.org/TR/html4/strict.dtd">
- <html lang="en">
- <head>
- <title>
- Autoconf Macro: acx_pthread
- </title>
- <link rel="stylesheet" type="text/css" href="autoconf-archive.css">
- </head>
- <body>
- <table summary="web navigation" style="width:100%;">
- <tbody>
- <tr>
- <td style="width:25%;" align="center" valign="top">
- <a href="http://autoconf-archive.cryp.to/acx_pthread.m4">Download M4
- Source</a>
- </td>
- <td style="width:25%;" align="center" valign="top">
- <a href=
- "http://git.cryp.to/autoconf-archive?a=history;f=acx_pthread.m4">Macro
- History</a>
- </td>
- <td style="width:25%;" align="center" valign="top">
- <a href="macros-by-category.html">Category Index</a>
- </td>
- <td style="width:25%;" align="center" valign="top">
- <form method="get" action="http://www.google.com/search">
- <div>
- <input name="sitesearch" value="autoconf-archive.cryp.to" type=
- "hidden"><a href="http://www.google.com/">Search</a>: <input name="q"
- size="10" maxlength="255" type="text">
- </div>
- </form>
- </td>
- </tr>
- </tbody>
- </table>
- <hr>
- <h1>
- acx_pthread
- </h1>
- <h2>
- Synopsis
- </h2>
- <p class="indent" style="white-space:nowrap;">
- <code>ACX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])</code>
- </p>
- <h2>
- Description
- </h2>
- <div class="indent">
- <p>
- This macro figures out how to build C programs using POSIX threads. It sets
- the PTHREAD_LIBS output variable to the threads library and linker flags,
- and the PTHREAD_CFLAGS output variable to any special C compiler flags that
- are needed. (The user can also force certain compiler flags/libs to be
- tested by setting these environment variables.)
- </p>
- <p>
- Also sets PTHREAD_CC to any special C compiler that is needed for
- multi-threaded programs (defaults to the value of CC otherwise). (This is
- necessary on AIX to use the special cc_r compiler alias.)
- </p>
- <p>
- NOTE: You are assumed to not only compile your program with these flags,
- but also link it with them as well. e.g. you should link with $PTHREAD_CC
- $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS
- </p>
- <p>
- If you are only building threads programs, you may wish to use these
- variables in your default LIBS, CFLAGS, and CC:
- </p>
- <pre>
- LIBS="$PTHREAD_LIBS $LIBS"
- CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
- CC="$PTHREAD_CC"
- </pre>
- <p>
- In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute constant has a
- nonstandard name, defines PTHREAD_CREATE_JOINABLE to that name (e.g.
- PTHREAD_CREATE_UNDETACHED on AIX).
- </p>
- <p>
- ACTION-IF-FOUND is a list of shell commands to run if a threads library is
- found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it is not
- found. If ACTION-IF-FOUND is not specified, the default action will define
- HAVE_PTHREAD.
- </p>
- <p>
- Please let the authors know if this macro fails on any platform, or if you
- have any other suggestions or comments. This macro was based on work by SGJ
- on autoconf scripts for FFTW (<a href=
- "http://www.fftw.org/">http://www.fftw.org/</a>) (with help from M. Frigo),
- as well as ac_pthread and hb_pthread macros posted by Alejandro Forero
- Cuervo to the autoconf macro repository. We are also grateful for the
- helpful feedback of numerous users.
- </p>
- </div>
- <h2>
- Author
- </h2>
- <p class="indent">
- Steven G. Johnson <stevenj@alum.mit.edu>
- </p>
- <h2>
- Last Modified
- </h2>
- <p class="indent">
- 2008-04-12
- </p>
- <h2>
- Cross References
- </h2>
- <p class="indent">
- <img src="group19-xrefs.png" alt="group19-xrefs.png" usemap=
- "#group19"><map id="group19" name="group19">
- <area shape="poly" href="acx_pthread.html" title="acx_pthread" alt=""
- coords=
- "944,101 940,94 928,87 909,82 886,79 860,77 834,79 811,82 792,87 780,94 776,101 780,109 792,115 811,121 834,124 860,125 886,124 909,121 928,115 940,109">
- <area shape="poly" href="ax_check_gl.html" title="ax_check_gl" alt=""
- coords=
- "661,173 656,166 644,159 625,154 601,151 575,149 548,151 524,154 505,159 493,166 489,173 493,181 505,187 524,193 548,196 575,197 601,196 625,193 644,187 656,181">
- <area shape="poly" href="ax_lang_compiler_ms.html" title=
- "ax_lang_compiler_ms" alt="" coords=
- "1000,173 993,166 973,159 942,154 903,151 860,149 817,151 778,154 747,159 727,166 720,173 727,181 747,187 778,193 817,196 860,197 903,196 942,193 973,187 993,181">
- <area shape="poly" href="ax_check_glu.html" title="ax_check_glu" alt=""
- coords=
- "429,173 425,166 412,159 391,154 366,151 337,149 309,151 283,154 263,159 250,166 245,173 250,181 263,187 283,193 309,196 337,197 366,196 391,193 412,187 425,181">
- <area shape="poly" href="ax_check_glut.html" title="ax_check_glut" alt=""
- coords=
- "197,173 192,166 179,159 158,154 131,151 101,149 72,151 45,154 24,159 10,166 6,173 10,181 24,187 45,193 72,196 101,197 131,196 158,193 179,187 192,181">
- <area shape="poly" href="ax_lib_xerces.html" title="ax_lib_xerces" alt=""
- coords=
- "668,29 663,22 650,15 629,10 603,7 575,5 546,7 520,10 499,15 486,22 482,29 486,37 499,43 520,49 546,52 575,53 603,52 629,49 650,43 663,37">
- <area shape="poly" href="ax_path_milter.html" title="ax_path_milter" alt=""
- coords=
- "671,101 667,94 653,87 631,82 605,79 575,77 545,79 518,82 497,87 483,94 478,101 483,109 497,115 518,121 545,124 575,125 605,124 631,121 653,115 667,109">
- </map>
- </p>
- <h2>
- M4 Source Code
- </h2>
- <div class="indent">
- <pre class="m4source">
- AC_DEFUN([ACX_PTHREAD], [
- AC_REQUIRE([AC_CANONICAL_HOST])
- AC_LANG_SAVE
- AC_LANG_C
- acx_pthread_ok=no
- # We used to check for pthread.h first, but this fails if pthread.h
- # requires special compiler flags (e.g. on True64 or Sequent).
- # It gets checked for in the link test anyway.
- # First of all, check if the user has set any of the PTHREAD_LIBS,
- # etcetera environment variables, and if threads linking works using
- # them:
- if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then
- save_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
- save_LIBS="$LIBS"
- LIBS="$PTHREAD_LIBS $LIBS"
- AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS])
- AC_TRY_LINK_FUNC(pthread_join, acx_pthread_ok=yes)
- AC_MSG_RESULT($acx_pthread_ok)
- if test x"$acx_pthread_ok" = xno; then
- PTHREAD_LIBS=""
- PTHREAD_CFLAGS=""
- fi
- LIBS="$save_LIBS"
- CFLAGS="$save_CFLAGS"
- fi
- # We must check for the threads library under a number of different
- # names; the ordering is very important because some systems
- # (e.g. DEC) have both -lpthread and -lpthreads, where one of the
- # libraries is broken (non-POSIX).
- # Create a list of thread flags to try. Items starting with a "-" are
- # C compiler flags, and other items are library names, except for "none"
- # which indicates that we try without any flags at all, and "pthread-config"
- # which is a program returning the flags for the Pth emulation library.
- acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
- # The ordering *is* (sometimes) important. Some notes on the
- # individual items follow:
- # pthreads: AIX (must check this before -lpthread)
- # none: in case threads are in libc; should be tried before -Kthread and
- # other compiler flags to prevent continual compiler warnings
- # -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
- # -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
- # lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
- # -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads)
- # -pthreads: Solaris/gcc
- # -mthreads: Mingw32/gcc, Lynx/gcc
- # -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
- # doesn't hurt to check since this sometimes defines pthreads too;
- # also defines -D_REENTRANT)
- # ... -mt is also the pthreads flag for HP/aCC
- # pthread: Linux, etcetera
- # --thread-safe: KAI C++
- # pthread-config: use pthread-config program (for GNU Pth library)
- case "${host_cpu}-${host_os}" in
- *solaris*)
- # On Solaris (at least, for some versions), libc contains stubbed
- # (non-functional) versions of the pthreads routines, so link-based
- # tests will erroneously succeed. (We need to link with -pthreads/-mt/
- # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather
- # a function called by this macro, so we could check for that, but
- # who knows whether they'll stub that too in a future libc.) So,
- # we'll just look for -pthreads and -lpthread first:
- acx_pthread_flags="-pthreads pthread -mt -pthread $acx_pthread_flags"
- ;;
- esac
- if test x"$acx_pthread_ok" = xno; then
- for flag in $acx_pthread_flags; do
- case $flag in
- none)
- AC_MSG_CHECKING([whether pthreads work without any flags])
- ;;
- -*)
- AC_MSG_CHECKING([whether pthreads work with $flag])
- PTHREAD_CFLAGS="$flag"
- ;;
- pthread-config)
- AC_CHECK_PROG(acx_pthread_config, pthread-config, yes, no)
- if test x"$acx_pthread_config" = xno; then continue; fi
- PTHREAD_CFLAGS="`pthread-config --cflags`"
- PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
- ;;
- *)
- AC_MSG_CHECKING([for the pthreads library -l$flag])
- PTHREAD_LIBS="-l$flag"
- ;;
- esac
- save_LIBS="$LIBS"
- save_CFLAGS="$CFLAGS"
- LIBS="$PTHREAD_LIBS $LIBS"
- CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
- # Check for various functions. We must include pthread.h,
- # since some functions may be macros. (On the Sequent, we
- # need a special flag -Kthread to make this header compile.)
- # We check for pthread_join because it is in -lpthread on IRIX
- # while pthread_create is in libc. We check for pthread_attr_init
- # due to DEC craziness with -lpthreads. We check for
- # pthread_cleanup_push because it is one of the few pthread
- # functions on Solaris that doesn't have a non-functional libc stub.
- # We try pthread_create on general principles.
- AC_TRY_LINK([#include <pthread.h>],
- [pthread_t th; pthread_join(th, 0);
- pthread_attr_init(0); pthread_cleanup_push(0, 0);
- pthread_create(0,0,0,0); pthread_cleanup_pop(0); ],
- [acx_pthread_ok=yes])
- LIBS="$save_LIBS"
- CFLAGS="$save_CFLAGS"
- AC_MSG_RESULT($acx_pthread_ok)
- if test "x$acx_pthread_ok" = xyes; then
- break;
- fi
- PTHREAD_LIBS=""
- PTHREAD_CFLAGS=""
- done
- fi
- # Various other checks:
- if test "x$acx_pthread_ok" = xyes; then
- save_LIBS="$LIBS"
- LIBS="$PTHREAD_LIBS $LIBS"
- save_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
- # Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
- AC_MSG_CHECKING([for joinable pthread attribute])
- attr_name=unknown
- for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
- AC_TRY_LINK([#include <pthread.h>], [int attr=$attr; return attr;],
- [attr_name=$attr; break])
- done
- AC_MSG_RESULT($attr_name)
- if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then
- AC_DEFINE_UNQUOTED(PTHREAD_CREATE_JOINABLE, $attr_name,
- [Define to necessary symbol if this constant
- uses a non-standard name on your system.])
- fi
- AC_MSG_CHECKING([if more special flags are required for pthreads])
- flag=no
- case "${host_cpu}-${host_os}" in
- *-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";;
- *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";;
- esac
- AC_MSG_RESULT(${flag})
- if test "x$flag" != xno; then
- PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS"
- fi
- LIBS="$save_LIBS"
- CFLAGS="$save_CFLAGS"
- # More AIX lossage: must compile with xlc_r or cc_r
- if test x"$GCC" != xyes; then
- AC_CHECK_PROGS(PTHREAD_CC, xlc_r cc_r, ${CC})
- else
- PTHREAD_CC=$CC
- fi
- else
- PTHREAD_CC="$CC"
- fi
- AC_SUBST(PTHREAD_LIBS)
- AC_SUBST(PTHREAD_CFLAGS)
- AC_SUBST(PTHREAD_CC)
- # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
- if test x"$acx_pthread_ok" = xyes; then
- ifelse([$1],,AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.]),[$1])
- :
- else
- acx_pthread_ok=no
- $2
- fi
- AC_LANG_RESTORE
- ])dnl ACX_PTHREAD
- </pre>
- </div>
- <h2>
- License
- </h2>
- <div class="indent">
- <span style="white-space:nowrap;">Copyright © 2008 Steven G. Johnson
- <stevenj@alum.mit.edu></span>
- <p>
- This program is free software: you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by the Free
- Software Foundation, either version 3 of the License, or (at your option)
- any later version.
- </p>
- <p>
- This program is distributed in the hope that it will be useful, but WITHOUT
- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- more details.
- </p>
- <p>
- You should have received a copy of the GNU General Public License along
- with this program. If not, see <<a href=
- "http://www.gnu.org/licenses/">http://www.gnu.org/licenses/</a>>.
- </p>
- <p>
- As a special exception, the respective Autoconf Macro's copyright owner
- gives unlimited permission to copy, distribute and modify the configure
- scripts that are the output of Autoconf when processing the Macro. You need
- not follow the terms of the GNU General Public License when using or
- distributing such scripts, even though portions of the text of the Macro
- appear in them. The GNU General Public License (GPL) does govern all other
- use of the material that constitutes the Autoconf Macro.
- </p>
- <p>
- This special exception to the GPL applies to versions of the Autoconf Macro
- released by the Autoconf Macro Archive. When you make and distribute a
- modified version of the Autoconf Macro, you may extend this special
- exception to the GPL to apply to your modified version as well.
- </p>
- </div>
- </body>
- </html>
|