Show
Ignore:
Timestamp:
06/09/08 10:10:11 (5 months ago)
Author:
ludovic.rousseau
Message:

upgrade from http://autoconf-archive.cryp.to/acx_pthread.html

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/m4/acx_pthread.m4

    r3529 r3531  
    1 dnl Available from the GNU Autoconf Macro Archive at: 
    2 dnl http://www.gnu.org/software/ac-archive/htmldoc/acx_pthread.html 
    3 dnl 
     1# =========================================================================== 
     2#              http://autoconf-archive.cryp.to/acx_pthread.html 
     3# =========================================================================== 
     4# 
     5# SYNOPSIS 
     6# 
     7#   ACX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) 
     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# 
     28#          LIBS="$PTHREAD_LIBS $LIBS" 
     29#          CFLAGS="$CFLAGS $PTHREAD_CFLAGS" 
     30#          CC="$PTHREAD_CC" 
     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# 
     48# LAST MODIFICATION 
     49# 
     50#   2008-04-12 
     51# 
     52# COPYLEFT 
     53# 
     54#   Copyright (c) 2008 Steven G. Johnson <stevenj@alum.mit.edu> 
     55# 
     56#   This program is free software: you can redistribute it and/or modify it 
     57#   under the terms of the GNU General Public License as published by the 
     58#   Free Software Foundation, either version 3 of the License, or (at your 
     59#   option) any later version. 
     60# 
     61#   This program is distributed in the hope that it will be useful, but 
     62#   WITHOUT ANY WARRANTY; without even the implied warranty of 
     63#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General 
     64#   Public License for more details. 
     65# 
     66#   You should have received a copy of the GNU General Public License along 
     67#   with this program. If not, see <http://www.gnu.org/licenses/>. 
     68# 
     69#   As a special exception, the respective Autoconf Macro's copyright owner 
     70#   gives unlimited permission to copy, distribute and modify the configure 
     71#   scripts that are the output of Autoconf when processing the Macro. You 
     72#   need not follow the terms of the GNU General Public License when using 
     73#   or distributing such scripts, even though portions of the text of the 
     74#   Macro appear in them. The GNU General Public License (GPL) does govern 
     75#   all other use of the material that constitutes the Autoconf Macro. 
     76# 
     77#   This special exception to the GPL applies to versions of the Autoconf 
     78#   Macro released by the Autoconf Macro Archive. When you make and 
     79#   distribute a modified version of the Autoconf Macro, you may extend this 
     80#   special exception to the GPL to apply to your modified version as well. 
     81 
    482AC_DEFUN([ACX_PTHREAD], [ 
    583AC_REQUIRE([AC_CANONICAL_HOST]) 
     
    38116# Create a list of thread flags to try.  Items starting with a "-" are 
    39117# C compiler flags, and other items are library names, except for "none" 
    40 # which indicates that we try without any flags at all. 
    41  
    42 acx_pthread_flags="pthreads none -Kthread -kthread lthread pthread -pthread -pthreads -mthreads --thread-safe -mt" 
     118# which indicates that we try without any flags at all, and "pthread-config" 
     119# which is a program returning the flags for the Pth emulation library. 
     120 
     121acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" 
    43122 
    44123# The ordering *is* (sometimes) important.  Some notes on the 
     
    57136#      doesn't hurt to check since this sometimes defines pthreads too; 
    58137#      also defines -D_REENTRANT) 
     138#      ... -mt is also the pthreads flag for HP/aCC 
    59139# pthread: Linux, etcetera 
    60140# --thread-safe: KAI C++ 
     141# pthread-config: use pthread-config program (for GNU Pth library) 
    61142 
    62143case "${host_cpu}-${host_os}" in 
     
    65146        # On Solaris (at least, for some versions), libc contains stubbed 
    66147        # (non-functional) versions of the pthreads routines, so link-based 
    67         # tests will erroneously succeed.  (We need to link with -pthread or 
     148        # tests will erroneously succeed.  (We need to link with -pthreads/-mt/ 
    68149        # -lpthread.)  (The stubs are missing pthread_cleanup_push, or rather 
    69150        # a function called by this macro, so we could check for that, but 
     
    71152        # we'll just look for -pthreads and -lpthread first: 
    72153 
    73         acx_pthread_flags="-pthread -pthreads pthread -mt $acx_pthread_flags" 
     154        acx_pthread_flags="-pthreads pthread -mt -pthread $acx_pthread_flags" 
    74155        ;; 
    75156esac 
     
    87168                PTHREAD_CFLAGS="$flag" 
    88169                ;; 
     170 
     171                pthread-config) 
     172                AC_CHECK_PROG(acx_pthread_config, pthread-config, yes, no) 
     173                if test x"$acx_pthread_config" = xno; then continue; fi 
     174                PTHREAD_CFLAGS="`pthread-config --cflags`" 
     175                PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" 
     176                ;; 
    89177 
    90178                *) 
     
    134222        CFLAGS="$CFLAGS $PTHREAD_CFLAGS" 
    135223 
    136         # Detect AIX lossage: threads are created detached by default 
    137         # and the JOINABLE attribute has a nonstandard name (UNDETACHED). 
    138         AC_MSG_CHECKING([for joinable pthread attribute]) 
    139         AC_TRY_LINK([#include <pthread.h>], 
    140                     [int attr=PTHREAD_CREATE_JOINABLE;], 
    141                     ok=PTHREAD_CREATE_JOINABLE, ok=unknown) 
    142         if test x"$ok" = xunknown; then 
    143                 AC_TRY_LINK([#include <pthread.h>], 
    144                             [int attr=PTHREAD_CREATE_UNDETACHED;], 
    145                             ok=PTHREAD_CREATE_UNDETACHED, ok=unknown) 
    146         fi 
    147         if test x"$ok" != xPTHREAD_CREATE_JOINABLE; then 
    148                 AC_DEFINE(PTHREAD_CREATE_JOINABLE, $ok, 
    149                           [Define to the necessary symbol if this constant 
    150                            uses a non-standard name on your system.]) 
    151         fi 
    152         AC_MSG_RESULT(${ok}) 
    153         if test x"$ok" = xunknown; then 
    154                 AC_MSG_WARN([we do not know how to create joinable pthreads]) 
     224        # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. 
     225        AC_MSG_CHECKING([for joinable pthread attribute]) 
     226        attr_name=unknown 
     227        for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do 
     228            AC_TRY_LINK([#include <pthread.h>], [int attr=$attr; return attr;], 
     229                        [attr_name=$attr; break]) 
     230        done 
     231        AC_MSG_RESULT($attr_name) 
     232        if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then 
     233            AC_DEFINE_UNQUOTED(PTHREAD_CREATE_JOINABLE, $attr_name, 
     234                               [Define to necessary symbol if this constant 
     235                                uses a non-standard name on your system.]) 
    155236        fi 
    156237 
     
    158239        flag=no 
    159240        case "${host_cpu}-${host_os}" in 
    160                 *-aix* | *-freebsd*)    flag="-D_THREAD_SAFE";; 
    161                 *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";; 
     241            *-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";; 
     242            *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";; 
    162243        esac 
    163244        AC_MSG_RESULT(${flag}) 
    164245        if test "x$flag" != xno; then 
    165                 PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS" 
     246            PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS" 
    166247        fi 
    167248 
     
    169250        CFLAGS="$save_CFLAGS" 
    170251 
    171         # More AIX lossage: must compile with cc_r 
    172         AC_CHECK_PROG(PTHREAD_CC, cc_r, cc_r, ${CC}) 
     252        # More AIX lossage: must compile with xlc_r or cc_r 
     253        if test x"$GCC" != xyes; then 
     254          AC_CHECK_PROGS(PTHREAD_CC, xlc_r cc_r, ${CC}) 
     255        else 
     256          PTHREAD_CC=$CC 
     257        fi 
    173258else 
    174259        PTHREAD_CC="$CC"