summaryrefslogtreecommitdiff
path: root/m4/pthread_sigmask.m4
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2011-07-08 13:20:19 -0700
committerPaul Eggert <eggert@cs.ucla.edu>2011-07-08 13:20:19 -0700
commit2a84b02da8b20138fad7fafdea92d7c8f0564ee0 (patch)
treeda64c1fd303aa85b53ad485779b05fbdd2685a28 /m4/pthread_sigmask.m4
parent1692ae2dd5ff8f6f1fc6f6f62b9a44ab7e615615 (diff)
downloademacs-2a84b02da8b20138fad7fafdea92d7c8f0564ee0.tar.gz
Simplify Emacs part of pthread_sigmask support.
* Makefile.in (GNULIB_TOOL_FLAGS): Do not avoid sigprocmask. * configure.in (AC_TYPE_UID_T): New dummy macro. Configure gnulib after adjusting LIBS, so that gnulib can assume the libraries in LIBS. * lib/pthread_sigmask.c, lib/sigprocmask.c, m4/signalblocking.m4: New files, automatically imported from gnulib. * lib/gnulib.mk, m4/gl-comp.m4: Regenerate. * src/Makefile.in (LIB_PTHREAD_SIGMASK): New macro. (LIBES): Use it.
Diffstat (limited to 'm4/pthread_sigmask.m4')
-rw-r--r--m4/pthread_sigmask.m477
1 files changed, 64 insertions, 13 deletions
diff --git a/m4/pthread_sigmask.m4 b/m4/pthread_sigmask.m4
index d25e2cc3e70..dfa0f660a75 100644
--- a/m4/pthread_sigmask.m4
+++ b/m4/pthread_sigmask.m4
@@ -1,26 +1,77 @@
-# pthread_sigmask.m4 serial 2
+# pthread_sigmask.m4 serial 7
dnl Copyright (C) 2011 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
-AC_DEFUN([gl_PTHREAD_SIGMASK],
+AC_DEFUN([gl_FUNC_PTHREAD_SIGMASK],
[
+ AC_CHECK_FUNCS_ONCE([pthread_sigmask])
+ LIB_PTHREAD_SIGMASK=
m4_ifdef([gl_THREADLIB], [
AC_REQUIRE([gl_THREADLIB])
if test "$gl_threads_api" = posix; then
- gl_save_LIBS="$LIBS"
- LIBS="$LIBS $LIBMULTITHREAD"
- AC_CHECK_FUNCS([pthread_sigmask])
- LIBS="$gl_save_LIBS"
+ if test $ac_cv_func_pthread_sigmask = yes; then
+ dnl pthread_sigmask is available without -lpthread.
+ :
+ else
+ if test -n "$LIBMULTITHREAD"; then
+ AC_CACHE_CHECK([for pthread_sigmask in $LIBMULTITHREAD],
+ [gl_cv_func_pthread_sigmask_in_LIBMULTITHREAD],
+ [gl_save_LIBS="$LIBS"
+ LIBS="$LIBS $LIBMULTITHREAD"
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <pthread.h>
+ #include <signal.h>
+ ]],
+ [[return pthread_sigmask (0, (sigset_t *) 0, (sigset_t *) 0);]])
+ ],
+ [gl_cv_func_pthread_sigmask_in_LIBMULTITHREAD=yes],
+ [gl_cv_func_pthread_sigmask_in_LIBMULTITHREAD=no])
+ LIBS="$gl_save_LIBS"
+ ])
+ if test $gl_cv_func_pthread_sigmask_in_LIBMULTITHREAD = yes; then
+ dnl pthread_sigmask is available with -lpthread.
+ LIB_PTHREAD_SIGMASK="$LIBMULTITHREAD"
+ else
+ dnl pthread_sigmask is not available at all.
+ HAVE_PTHREAD_SIGMASK=0
+ fi
+ else
+ dnl pthread_sigmask is not available at all.
+ HAVE_PTHREAD_SIGMASK=0
+ fi
+ fi
else
- ac_cv_func_pthread_sigmask=no
+ dnl pthread_sigmask may exist but does not interoperate with the chosen
+ dnl multithreading facility.
+ dnl If "$gl_threads_api" = pth, we could use the function pth_sigmask,
+ dnl but it is equivalent to sigprocmask, so we choose to emulate
+ dnl pthread_sigmask with sigprocmask also in this case. This yields fewer
+ dnl link dependencies.
+ if test $ac_cv_func_pthread_sigmask = yes; then
+ REPLACE_PTHREAD_SIGMASK=1
+ else
+ HAVE_PTHREAD_SIGMASK=0
+ fi
+ fi
+ ] ,[
+ dnl gl_THREADLIB is not in use. Assume the application wants
+ dnl POSIX semantics.
+ if test $ac_cv_func_pthread_sigmask != yes; then
+ gl_save_LIBS=$LIBS
+ AC_SEARCH_LIBS([pthread_sigmask], [pthread c_r])
+ LIBS=$gl_save_LIBS
+ if test "$ac_cv_search_pthread_sigmask" = no; then
+ HAVE_PTHREAD_SIGMASK=0
+ elif test "$ac_cv_search_pthread_sigmask" != 'none required'; then
+ LIB_PTHREAD_SIGMASK=$ac_cv_search_pthread_sigmask
+ fi
fi
- ], [
- AC_CHECK_FUNCS_ONCE([pthread_sigmask])
])
-
- if test $ac_cv_func_pthread_sigmask = no; then
- REPLACE_PTHREAD_SIGMASK=1
- fi
+ AC_SUBST([LIB_PTHREAD_SIGMASK])
+ dnl We don't need a variable LTLIB_PTHREAD_SIGMASK, because when
+ dnl "$gl_threads_api" = posix, $LTLIBMULTITHREAD and $LIBMULTITHREAD are the
+ dnl same: either both empty or both "-lpthread".
])