github.com/jlmucb/cloudproxy@v0.0.0-20170830161738-b5aa0b619bc4/src/third_party/googlemock/gtest/m4/acx_pthread.m4 (about)

     1  # This was retrieved from
     2  #    http://svn.0pointer.de/viewvc/trunk/common/acx_pthread.m4?revision=1277&root=avahi
     3  # See also (perhaps for new versions?)
     4  #    http://svn.0pointer.de/viewvc/trunk/common/acx_pthread.m4?root=avahi
     5  #
     6  # We've rewritten the inconsistency check code (from avahi), to work
     7  # more broadly.  In particular, it no longer assumes ld accepts -zdefs.
     8  # This caused a restructing of the code, but the functionality has only
     9  # changed a little.
    10  
    11  dnl @synopsis ACX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
    12  dnl
    13  dnl @summary figure out how to build C programs using POSIX threads
    14  dnl
    15  dnl This macro figures out how to build C programs using POSIX threads.
    16  dnl It sets the PTHREAD_LIBS output variable to the threads library and
    17  dnl linker flags, and the PTHREAD_CFLAGS output variable to any special
    18  dnl C compiler flags that are needed. (The user can also force certain
    19  dnl compiler flags/libs to be tested by setting these environment
    20  dnl variables.)
    21  dnl
    22  dnl Also sets PTHREAD_CC to any special C compiler that is needed for
    23  dnl multi-threaded programs (defaults to the value of CC otherwise).
    24  dnl (This is necessary on AIX to use the special cc_r compiler alias.)
    25  dnl
    26  dnl NOTE: You are assumed to not only compile your program with these
    27  dnl flags, but also link it with them as well. e.g. you should link
    28  dnl with $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS
    29  dnl $LIBS
    30  dnl
    31  dnl If you are only building threads programs, you may wish to use
    32  dnl these variables in your default LIBS, CFLAGS, and CC:
    33  dnl
    34  dnl        LIBS="$PTHREAD_LIBS $LIBS"
    35  dnl        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
    36  dnl        CC="$PTHREAD_CC"
    37  dnl
    38  dnl In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute
    39  dnl constant has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to
    40  dnl that name (e.g. PTHREAD_CREATE_UNDETACHED on AIX).
    41  dnl
    42  dnl ACTION-IF-FOUND is a list of shell commands to run if a threads
    43  dnl library is found, and ACTION-IF-NOT-FOUND is a list of commands to
    44  dnl run it if it is not found. If ACTION-IF-FOUND is not specified, the
    45  dnl default action will define HAVE_PTHREAD.
    46  dnl
    47  dnl Please let the authors know if this macro fails on any platform, or
    48  dnl if you have any other suggestions or comments. This macro was based
    49  dnl on work by SGJ on autoconf scripts for FFTW (www.fftw.org) (with
    50  dnl help from M. Frigo), as well as ac_pthread and hb_pthread macros
    51  dnl posted by Alejandro Forero Cuervo to the autoconf macro repository.
    52  dnl We are also grateful for the helpful feedback of numerous users.
    53  dnl
    54  dnl @category InstalledPackages
    55  dnl @author Steven G. Johnson <stevenj@alum.mit.edu>
    56  dnl @version 2006-05-29
    57  dnl @license GPLWithACException
    58  dnl 
    59  dnl Checks for GCC shared/pthread inconsistency based on work by
    60  dnl Marcin Owsiany <marcin@owsiany.pl>
    61  
    62  
    63  AC_DEFUN([ACX_PTHREAD], [
    64  AC_REQUIRE([AC_CANONICAL_HOST])
    65  AC_LANG_SAVE
    66  AC_LANG_C
    67  acx_pthread_ok=no
    68  
    69  # We used to check for pthread.h first, but this fails if pthread.h
    70  # requires special compiler flags (e.g. on True64 or Sequent).
    71  # It gets checked for in the link test anyway.
    72  
    73  # First of all, check if the user has set any of the PTHREAD_LIBS,
    74  # etcetera environment variables, and if threads linking works using
    75  # them:
    76  if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then
    77          save_CFLAGS="$CFLAGS"
    78          CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
    79          save_LIBS="$LIBS"
    80          LIBS="$PTHREAD_LIBS $LIBS"
    81          AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS])
    82          AC_TRY_LINK_FUNC(pthread_join, acx_pthread_ok=yes)
    83          AC_MSG_RESULT($acx_pthread_ok)
    84          if test x"$acx_pthread_ok" = xno; then
    85                  PTHREAD_LIBS=""
    86                  PTHREAD_CFLAGS=""
    87          fi
    88          LIBS="$save_LIBS"
    89          CFLAGS="$save_CFLAGS"
    90  fi
    91  
    92  # We must check for the threads library under a number of different
    93  # names; the ordering is very important because some systems
    94  # (e.g. DEC) have both -lpthread and -lpthreads, where one of the
    95  # libraries is broken (non-POSIX).
    96  
    97  # Create a list of thread flags to try.  Items starting with a "-" are
    98  # C compiler flags, and other items are library names, except for "none"
    99  # which indicates that we try without any flags at all, and "pthread-config"
   100  # which is a program returning the flags for the Pth emulation library.
   101  
   102  acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
   103  
   104  # The ordering *is* (sometimes) important.  Some notes on the
   105  # individual items follow:
   106  
   107  # pthreads: AIX (must check this before -lpthread)
   108  # none: in case threads are in libc; should be tried before -Kthread and
   109  #       other compiler flags to prevent continual compiler warnings
   110  # -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
   111  # -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
   112  # lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
   113  # -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads)
   114  # -pthreads: Solaris/gcc
   115  # -mthreads: Mingw32/gcc, Lynx/gcc
   116  # -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
   117  #      doesn't hurt to check since this sometimes defines pthreads too;
   118  #      also defines -D_REENTRANT)
   119  #      ... -mt is also the pthreads flag for HP/aCC
   120  # pthread: Linux, etcetera
   121  # --thread-safe: KAI C++
   122  # pthread-config: use pthread-config program (for GNU Pth library)
   123  
   124  case "${host_cpu}-${host_os}" in
   125          *solaris*)
   126  
   127          # On Solaris (at least, for some versions), libc contains stubbed
   128          # (non-functional) versions of the pthreads routines, so link-based
   129          # tests will erroneously succeed.  (We need to link with -pthreads/-mt/
   130          # -lpthread.)  (The stubs are missing pthread_cleanup_push, or rather
   131          # a function called by this macro, so we could check for that, but
   132          # who knows whether they'll stub that too in a future libc.)  So,
   133          # we'll just look for -pthreads and -lpthread first:
   134  
   135          acx_pthread_flags="-pthreads pthread -mt -pthread $acx_pthread_flags"
   136          ;;
   137  esac
   138  
   139  if test x"$acx_pthread_ok" = xno; then
   140  for flag in $acx_pthread_flags; do
   141  
   142          case $flag in
   143                  none)
   144                  AC_MSG_CHECKING([whether pthreads work without any flags])
   145                  ;;
   146  
   147                  -*)
   148                  AC_MSG_CHECKING([whether pthreads work with $flag])
   149                  PTHREAD_CFLAGS="$flag"
   150                  ;;
   151  
   152  		pthread-config)
   153  		AC_CHECK_PROG(acx_pthread_config, pthread-config, yes, no)
   154  		if test x"$acx_pthread_config" = xno; then continue; fi
   155  		PTHREAD_CFLAGS="`pthread-config --cflags`"
   156  		PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
   157  		;;
   158  
   159                  *)
   160                  AC_MSG_CHECKING([for the pthreads library -l$flag])
   161                  PTHREAD_LIBS="-l$flag"
   162                  ;;
   163          esac
   164  
   165          save_LIBS="$LIBS"
   166          save_CFLAGS="$CFLAGS"
   167          LIBS="$PTHREAD_LIBS $LIBS"
   168          CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
   169  
   170          # Check for various functions.  We must include pthread.h,
   171          # since some functions may be macros.  (On the Sequent, we
   172          # need a special flag -Kthread to make this header compile.)
   173          # We check for pthread_join because it is in -lpthread on IRIX
   174          # while pthread_create is in libc.  We check for pthread_attr_init
   175          # due to DEC craziness with -lpthreads.  We check for
   176          # pthread_cleanup_push because it is one of the few pthread
   177          # functions on Solaris that doesn't have a non-functional libc stub.
   178          # We try pthread_create on general principles.
   179          AC_TRY_LINK([#include <pthread.h>],
   180                      [pthread_t th; pthread_join(th, 0);
   181                       pthread_attr_init(0); pthread_cleanup_push(0, 0);
   182                       pthread_create(0,0,0,0); pthread_cleanup_pop(0); ],
   183                      [acx_pthread_ok=yes])
   184  
   185          LIBS="$save_LIBS"
   186          CFLAGS="$save_CFLAGS"
   187  
   188          AC_MSG_RESULT($acx_pthread_ok)
   189          if test "x$acx_pthread_ok" = xyes; then
   190                  break;
   191          fi
   192  
   193          PTHREAD_LIBS=""
   194          PTHREAD_CFLAGS=""
   195  done
   196  fi
   197  
   198  # Various other checks:
   199  if test "x$acx_pthread_ok" = xyes; then
   200          save_LIBS="$LIBS"
   201          LIBS="$PTHREAD_LIBS $LIBS"
   202          save_CFLAGS="$CFLAGS"
   203          CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
   204  
   205          # Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
   206  	AC_MSG_CHECKING([for joinable pthread attribute])
   207  	attr_name=unknown
   208  	for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
   209  	    AC_TRY_LINK([#include <pthread.h>], [int attr=$attr; return attr;],
   210                          [attr_name=$attr; break])
   211  	done
   212          AC_MSG_RESULT($attr_name)
   213          if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then
   214              AC_DEFINE_UNQUOTED(PTHREAD_CREATE_JOINABLE, $attr_name,
   215                                 [Define to necessary symbol if this constant
   216                                  uses a non-standard name on your system.])
   217          fi
   218  
   219          AC_MSG_CHECKING([if more special flags are required for pthreads])
   220          flag=no
   221          case "${host_cpu}-${host_os}" in
   222              *-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";;
   223              *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";;
   224          esac
   225          AC_MSG_RESULT(${flag})
   226          if test "x$flag" != xno; then
   227              PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS"
   228          fi
   229  
   230          LIBS="$save_LIBS"
   231          CFLAGS="$save_CFLAGS"
   232          # More AIX lossage: must compile with xlc_r or cc_r
   233  	if test x"$GCC" != xyes; then
   234            AC_CHECK_PROGS(PTHREAD_CC, xlc_r cc_r, ${CC})
   235          else
   236            PTHREAD_CC=$CC
   237  	fi
   238  
   239  	# The next part tries to detect GCC inconsistency with -shared on some
   240  	# architectures and systems. The problem is that in certain
   241  	# configurations, when -shared is specified, GCC "forgets" to
   242  	# internally use various flags which are still necessary.
   243  	
   244  	#
   245  	# Prepare the flags
   246  	#
   247  	save_CFLAGS="$CFLAGS"
   248  	save_LIBS="$LIBS"
   249  	save_CC="$CC"
   250  	
   251  	# Try with the flags determined by the earlier checks.
   252  	#
   253  	# -Wl,-z,defs forces link-time symbol resolution, so that the
   254  	# linking checks with -shared actually have any value
   255  	#
   256  	# FIXME: -fPIC is required for -shared on many architectures,
   257  	# so we specify it here, but the right way would probably be to
   258  	# properly detect whether it is actually required.
   259  	CFLAGS="-shared -fPIC -Wl,-z,defs $CFLAGS $PTHREAD_CFLAGS"
   260  	LIBS="$PTHREAD_LIBS $LIBS"
   261  	CC="$PTHREAD_CC"
   262  	
   263  	# In order not to create several levels of indentation, we test
   264  	# the value of "$done" until we find the cure or run out of ideas.
   265  	done="no"
   266  	
   267  	# First, make sure the CFLAGS we added are actually accepted by our
   268  	# compiler.  If not (and OS X's ld, for instance, does not accept -z),
   269  	# then we can't do this test.
   270  	if test x"$done" = xno; then
   271  	   AC_MSG_CHECKING([whether to check for GCC pthread/shared inconsistencies])
   272  	   AC_TRY_LINK(,, , [done=yes])
   273  	
   274  	   if test "x$done" = xyes ; then
   275  	      AC_MSG_RESULT([no])
   276  	   else
   277  	      AC_MSG_RESULT([yes])
   278  	   fi
   279  	fi
   280  	
   281  	if test x"$done" = xno; then
   282  	   AC_MSG_CHECKING([whether -pthread is sufficient with -shared])
   283  	   AC_TRY_LINK([#include <pthread.h>],
   284  	      [pthread_t th; pthread_join(th, 0);
   285  	      pthread_attr_init(0); pthread_cleanup_push(0, 0);
   286  	      pthread_create(0,0,0,0); pthread_cleanup_pop(0); ],
   287  	      [done=yes])
   288  	   
   289  	   if test "x$done" = xyes; then
   290  	      AC_MSG_RESULT([yes])
   291  	   else
   292  	      AC_MSG_RESULT([no])
   293  	   fi
   294  	fi
   295  	
   296  	#
   297  	# Linux gcc on some architectures such as mips/mipsel forgets
   298  	# about -lpthread
   299  	#
   300  	if test x"$done" = xno; then
   301  	   AC_MSG_CHECKING([whether -lpthread fixes that])
   302  	   LIBS="-lpthread $PTHREAD_LIBS $save_LIBS"
   303  	   AC_TRY_LINK([#include <pthread.h>],
   304  	      [pthread_t th; pthread_join(th, 0);
   305  	      pthread_attr_init(0); pthread_cleanup_push(0, 0);
   306  	      pthread_create(0,0,0,0); pthread_cleanup_pop(0); ],
   307  	      [done=yes])
   308  	
   309  	   if test "x$done" = xyes; then
   310  	      AC_MSG_RESULT([yes])
   311  	      PTHREAD_LIBS="-lpthread $PTHREAD_LIBS"
   312  	   else
   313  	      AC_MSG_RESULT([no])
   314  	   fi
   315  	fi
   316  	#
   317  	# FreeBSD 4.10 gcc forgets to use -lc_r instead of -lc
   318  	#
   319  	if test x"$done" = xno; then
   320  	   AC_MSG_CHECKING([whether -lc_r fixes that])
   321  	   LIBS="-lc_r $PTHREAD_LIBS $save_LIBS"
   322  	   AC_TRY_LINK([#include <pthread.h>],
   323  	       [pthread_t th; pthread_join(th, 0);
   324  	        pthread_attr_init(0); pthread_cleanup_push(0, 0);
   325  	        pthread_create(0,0,0,0); pthread_cleanup_pop(0); ],
   326  	       [done=yes])
   327  	
   328  	   if test "x$done" = xyes; then
   329  	      AC_MSG_RESULT([yes])
   330  	      PTHREAD_LIBS="-lc_r $PTHREAD_LIBS"
   331  	   else
   332  	      AC_MSG_RESULT([no])
   333  	   fi
   334  	fi
   335  	if test x"$done" = xno; then
   336  	   # OK, we have run out of ideas
   337  	   AC_MSG_WARN([Impossible to determine how to use pthreads with shared libraries])
   338  	
   339  	   # so it's not safe to assume that we may use pthreads
   340  	   acx_pthread_ok=no
   341  	fi
   342  	
   343  	CFLAGS="$save_CFLAGS"
   344  	LIBS="$save_LIBS"
   345  	CC="$save_CC"
   346  else
   347          PTHREAD_CC="$CC"
   348  fi
   349  
   350  AC_SUBST(PTHREAD_LIBS)
   351  AC_SUBST(PTHREAD_CFLAGS)
   352  AC_SUBST(PTHREAD_CC)
   353  
   354  # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
   355  if test x"$acx_pthread_ok" = xyes; then
   356          ifelse([$1],,AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.]),[$1])
   357          :
   358  else
   359          acx_pthread_ok=no
   360          $2
   361  fi
   362  AC_LANG_RESTORE
   363  ])dnl ACX_PTHREAD