Forked from
Glasgow Haskell Compiler / GHC
939 commits behind, 264 commits ahead of the upstream repository.
fp_check_pthreads.m4 3.37 KiB
# FP_CHECK_PTHREAD_LIB
# ----------------------------------
# Check whether -lpthread is needed for pthread.
#
# Sets variables:
# - UseLibpthread: [YES|NO]
AC_DEFUN([FP_CHECK_PTHREAD_LIB],
[
dnl Some platforms (e.g. Android's Bionic) have pthreads support available
dnl without linking against libpthread. Check whether -lpthread is necessary
dnl to use pthreads.
dnl
dnl Note that it is important that this happens before we AC_CHECK_LIB(thread)
AC_MSG_CHECKING(whether -lpthread is needed for pthreads)
AC_CHECK_FUNC(pthread_create,
[
AC_MSG_RESULT(no)
UseLibpthread=NO
],
[
AC_CHECK_LIB(pthread, pthread_create,
[
AC_MSG_RESULT(yes)
UseLibpthread=YES
],
[
AC_MSG_RESULT([no pthreads support found.])
UseLibpthread=NO
])
])
])
# FP_CHECK_PTHREAD_FUNCS
# ----------------------------------
# Check various aspects of the platform's pthreads support
#
# `AC_DEFINE`s various C `HAVE_*` macros.
AC_DEFUN([FP_CHECK_PTHREAD_FUNCS],
[
dnl Setting thread names
dnl ~~~~~~~~~~~~~~~~~~~~
dnl The portability situation here is complicated:
dnl
dnl * FreeBSD supports pthread_set_name_np in <pthread_np.h>
dnl and (if not _POSIX_SOURCE) pthread_setname_np() in <pthread.h>
dnl because of the conditional visibility, we prefer the former.
dnl * glibc supports pthread_setname_np
dnl * Darwin supports pthread_setname_np but does not take a
dnl pthread_t argument.
dnl
AC_CHECK_HEADERS([pthread_np.h])
dnl ** pthread_setname_np is a recent addition to glibc, and OS X has
dnl a different single-argument version.
AC_CHECK_LIB(pthread, pthread_setname_np)
AC_MSG_CHECKING([for pthread_setname_np (Darwin)])
AC_LINK_IFELSE([
AC_LANG_PROGRAM(
[[
#include <pthread.h>
]],
[[pthread_setname_np("name");]]
)],
[
AC_MSG_RESULT(yes)
AC_DEFINE([HAVE_PTHREAD_SETNAME_NP_DARWIN], [1],
[Define to 1 if you have the Darwin version of pthread_setname_np])
],
AC_MSG_RESULT(no)
)
dnl glibc
AC_MSG_CHECKING([for pthread_setname_np (glibc)])
AC_LINK_IFELSE([
AC_LANG_PROGRAM(
[[
#define _GNU_SOURCE
#include <pthread.h>
]],
[[pthread_setname_np(pthread_self(), "name");]]
)],
[
AC_MSG_RESULT(yes)
AC_DEFINE([HAVE_PTHREAD_SETNAME_NP], [1],
[Define to 1 if you have the glibc version of pthread_setname_np])
],
AC_MSG_RESULT(no)
)
dnl NetBSD
AC_MSG_CHECKING([for pthread_setname_np (NetBSD)])
AC_LINK_IFELSE([
AC_LANG_PROGRAM(
[[
#include <pthread.h>
]],
[[pthread_setname_np(pthread_self(), "%s", "name");]]
)],
[
AC_MSG_RESULT([yes])
AC_DEFINE([HAVE_PTHREAD_SETNAME_NP_NETBSD], [1],
[Define to 1 if you have the NetBSD version of pthread_setname_np])
],
AC_MSG_RESULT([no])
)
dnl FreeBSD
AC_MSG_CHECKING([for pthread_set_name_np])
AC_LINK_IFELSE([
AC_LANG_PROGRAM(
[[
#include <pthread_np.h>
]],
[[pthread_set_name_np(pthread_self(), "name");]]
)],
[
AC_MSG_RESULT(yes)
AC_DEFINE([HAVE_PTHREAD_SET_NAME_NP], [1],
[Define to 1 if you have pthread_set_name_np])
],
AC_MSG_RESULT(no)
)
AC_CHECK_FUNCS_ONCE([pthread_condattr_setclock])
])