Blame m4/lock.m4

Packit Service 4684c1
# lock.m4 serial 14
Packit Service 4684c1
dnl Copyright (C) 2005-2020 Free Software Foundation, Inc.
Packit Service 4684c1
dnl This file is free software; the Free Software Foundation
Packit Service 4684c1
dnl gives unlimited permission to copy and/or distribute it,
Packit Service 4684c1
dnl with or without modifications, as long as this notice is preserved.
Packit Service 4684c1
Packit Service 4684c1
dnl From Bruno Haible.
Packit Service 4684c1
Packit Service 4684c1
AC_DEFUN([gl_LOCK],
Packit Service 4684c1
[
Packit Service 4684c1
  AC_REQUIRE([gl_THREADLIB])
Packit Service 4684c1
  if test "$gl_threads_api" = posix; then
Packit Service 4684c1
    # OSF/1 4.0 and Mac OS X 10.1 lack the pthread_rwlock_t type and the
Packit Service 4684c1
    # pthread_rwlock_* functions.
Packit Service 4684c1
    has_rwlock=false
Packit Service 4684c1
    AC_CHECK_TYPE([pthread_rwlock_t],
Packit Service 4684c1
      [has_rwlock=true
Packit Service 4684c1
       AC_DEFINE([HAVE_PTHREAD_RWLOCK], [1],
Packit Service 4684c1
         [Define if the POSIX multithreading library has read/write locks.])],
Packit Service 4684c1
      [],
Packit Service 4684c1
      [#include <pthread.h>])
Packit Service 4684c1
    if $has_rwlock; then
Packit Service 4684c1
      gl_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER
Packit Service 4684c1
    fi
Packit Service 4684c1
    # glibc defines PTHREAD_MUTEX_RECURSIVE as enum, not as a macro.
Packit Service 4684c1
    AC_COMPILE_IFELSE([
Packit Service 4684c1
      AC_LANG_PROGRAM(
Packit Service 4684c1
        [[#include <pthread.h>]],
Packit Service 4684c1
        [[
Packit Service 4684c1
#if __FreeBSD__ == 4
Packit Service 4684c1
error "No, in FreeBSD 4.0 recursive mutexes actually don't work."
Packit Service 4684c1
#elif (defined __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ \
Packit Service 4684c1
       && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1070)
Packit Service 4684c1
error "No, in Mac OS X < 10.7 recursive mutexes actually don't work."
Packit Service 4684c1
#else
Packit Service 4684c1
int x = (int)PTHREAD_MUTEX_RECURSIVE;
Packit Service 4684c1
return !x;
Packit Service 4684c1
#endif
Packit Service 4684c1
        ]])],
Packit Service 4684c1
      [AC_DEFINE([HAVE_PTHREAD_MUTEX_RECURSIVE], [1],
Packit Service 4684c1
         [Define if the <pthread.h> defines PTHREAD_MUTEX_RECURSIVE.])])
Packit Service 4684c1
  fi
Packit Service 4684c1
  gl_PREREQ_LOCK
Packit Service 4684c1
])
Packit Service 4684c1
Packit Service 4684c1
# Prerequisites of lib/glthread/lock.c.
Packit Service 4684c1
AC_DEFUN([gl_PREREQ_LOCK], [:])