xref: /Universal-ctags/m4/lock.m4 (revision 820c1a8d46849a90376d8eb15b319ac05439f656)
1*820c1a8dSHiroo HAYASHI# lock.m4 serial 14
2*820c1a8dSHiroo HAYASHIdnl Copyright (C) 2005-2021 Free Software Foundation, Inc.
3*820c1a8dSHiroo HAYASHIdnl This file is free software; the Free Software Foundation
4*820c1a8dSHiroo HAYASHIdnl gives unlimited permission to copy and/or distribute it,
5*820c1a8dSHiroo HAYASHIdnl with or without modifications, as long as this notice is preserved.
6*820c1a8dSHiroo HAYASHI
7*820c1a8dSHiroo HAYASHIdnl From Bruno Haible.
8*820c1a8dSHiroo HAYASHI
9*820c1a8dSHiroo HAYASHIAC_DEFUN([gl_LOCK],
10*820c1a8dSHiroo HAYASHI[
11*820c1a8dSHiroo HAYASHI  AC_REQUIRE([gl_THREADLIB])
12*820c1a8dSHiroo HAYASHI  if test "$gl_threads_api" = posix; then
13*820c1a8dSHiroo HAYASHI    # OSF/1 4.0 and Mac OS X 10.1 lack the pthread_rwlock_t type and the
14*820c1a8dSHiroo HAYASHI    # pthread_rwlock_* functions.
15*820c1a8dSHiroo HAYASHI    has_rwlock=false
16*820c1a8dSHiroo HAYASHI    AC_CHECK_TYPE([pthread_rwlock_t],
17*820c1a8dSHiroo HAYASHI      [has_rwlock=true
18*820c1a8dSHiroo HAYASHI       AC_DEFINE([HAVE_PTHREAD_RWLOCK], [1],
19*820c1a8dSHiroo HAYASHI         [Define if the POSIX multithreading library has read/write locks.])],
20*820c1a8dSHiroo HAYASHI      [],
21*820c1a8dSHiroo HAYASHI      [#include <pthread.h>])
22*820c1a8dSHiroo HAYASHI    if $has_rwlock; then
23*820c1a8dSHiroo HAYASHI      gl_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER
24*820c1a8dSHiroo HAYASHI    fi
25*820c1a8dSHiroo HAYASHI    # glibc defines PTHREAD_MUTEX_RECURSIVE as enum, not as a macro.
26*820c1a8dSHiroo HAYASHI    AC_COMPILE_IFELSE([
27*820c1a8dSHiroo HAYASHI      AC_LANG_PROGRAM(
28*820c1a8dSHiroo HAYASHI        [[#include <pthread.h>]],
29*820c1a8dSHiroo HAYASHI        [[
30*820c1a8dSHiroo HAYASHI#if __FreeBSD__ == 4
31*820c1a8dSHiroo HAYASHIerror "No, in FreeBSD 4.0 recursive mutexes actually don't work."
32*820c1a8dSHiroo HAYASHI#elif (defined __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ \
33*820c1a8dSHiroo HAYASHI       && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1070)
34*820c1a8dSHiroo HAYASHIerror "No, in Mac OS X < 10.7 recursive mutexes actually don't work."
35*820c1a8dSHiroo HAYASHI#else
36*820c1a8dSHiroo HAYASHIint x = (int)PTHREAD_MUTEX_RECURSIVE;
37*820c1a8dSHiroo HAYASHIreturn !x;
38*820c1a8dSHiroo HAYASHI#endif
39*820c1a8dSHiroo HAYASHI        ]])],
40*820c1a8dSHiroo HAYASHI      [AC_DEFINE([HAVE_PTHREAD_MUTEX_RECURSIVE], [1],
41*820c1a8dSHiroo HAYASHI         [Define if the <pthread.h> defines PTHREAD_MUTEX_RECURSIVE.])])
42*820c1a8dSHiroo HAYASHI  fi
43*820c1a8dSHiroo HAYASHI  gl_PREREQ_LOCK
44*820c1a8dSHiroo HAYASHI])
45*820c1a8dSHiroo HAYASHI
46*820c1a8dSHiroo HAYASHI# Prerequisites of lib/glthread/lock.c.
47*820c1a8dSHiroo HAYASHIAC_DEFUN([gl_PREREQ_LOCK], [:])
48