* m4/pthread-spin.m4 (gl_PTHREAD_SPIN): Define through AC_DEFUN_ONCE.
Require gl_PTHREAD_H_PART1, not gl_PTHREAD_H.
* m4/pthread_h.m4 (gl_PTHREAD_H_PART1): New macro, extracted from
gl_PTHREAD_H.
(gl_PTHREAD_H): Require it. Invoke gl_PTHREAD_SPIN.
* lib/pthread.in.h (pthread_spinlock_t,
GNULIB_defined_pthread_spin_types): Don't define if
HAVE_PTHREAD_SPIN_INIT && !REPLACE_PTHREAD_SPIN_INIT.
* modules/pthread-h (Files): Add m4/pthread-spin.m4.
+2024-03-28 Bruno Haible <bruno@clisp.org>
+
+ pthread-h: Fix override of pthread_spinlock_t with non-GNU compilers.
+ * m4/pthread-spin.m4 (gl_PTHREAD_SPIN): Define through AC_DEFUN_ONCE.
+ Require gl_PTHREAD_H_PART1, not gl_PTHREAD_H.
+ * m4/pthread_h.m4 (gl_PTHREAD_H_PART1): New macro, extracted from
+ gl_PTHREAD_H.
+ (gl_PTHREAD_H): Require it. Invoke gl_PTHREAD_SPIN.
+ * lib/pthread.in.h (pthread_spinlock_t,
+ GNULIB_defined_pthread_spin_types): Don't define if
+ HAVE_PTHREAD_SPIN_INIT && !REPLACE_PTHREAD_SPIN_INIT.
+ * modules/pthread-h (Files): Add m4/pthread-spin.m4.
+
2024-03-28 Bruno Haible <bruno@clisp.org>
havelib: Recognize ELF platform despite SunPRO C on Linux.
/* Implement the most essential subset of POSIX 1003.1-2008 pthread.h.
- Copyright (C) 2009-2023 Free Software Foundation, Inc.
+ Copyright (C) 2009-2024 Free Software Foundation, Inc.
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as
#else
# if @HAVE_PTHREAD_SPINLOCK_T@
/* <pthread.h> exists and defines pthread_spinlock_t. */
-# if !(((__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7) \
- || __clang_major__ > 3 || (__clang_major__ == 3 && __clang_minor__ >= 1)) \
- || (((__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 1)) \
- && !defined __ANDROID__) \
- || __clang_major__ >= 3)) \
- && !defined __ibmxl__)
+# if !@HAVE_PTHREAD_SPIN_INIT@ || @REPLACE_PTHREAD_SPIN_INIT@
+/* If the 'pthread-spin' module is in use, it defines all the pthread_spin*
+ functions. Prepare for it by overriding pthread_spinlock_t if that might
+ be needed. */
+# if !(((__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7) \
+ || __clang_major__ > 3 || (__clang_major__ == 3 && __clang_minor__ >= 1)) \
+ || (((__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 1)) \
+ && !defined __ANDROID__) \
+ || __clang_major__ >= 3)) \
+ && !defined __ibmxl__)
/* We can't use GCC built-ins. Approximate spinlocks with mutexes. */
-# if !GNULIB_defined_pthread_spin_types
-# define pthread_spinlock_t pthread_mutex_t
-# define GNULIB_defined_pthread_spin_types 1
+# if !GNULIB_defined_pthread_spin_types
+# define pthread_spinlock_t pthread_mutex_t
+# define GNULIB_defined_pthread_spin_types 1
+# endif
# endif
# endif
# else
-# pthread-spin.m4 serial 2.2
+# pthread-spin.m4 serial 2.3
dnl Copyright (C) 2019-2024 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_SPIN],
+AC_DEFUN_ONCE([gl_PTHREAD_SPIN],
[
- AC_REQUIRE([gl_PTHREAD_H])
+ AC_REQUIRE([gl_PTHREAD_H_PART1])
AC_REQUIRE([AC_CANONICAL_HOST])
if { case "$host_os" in mingw*) true;; *) false;; esac; } \
-# pthread_h.m4 serial 8
-dnl Copyright (C) 2009-2023 Free Software Foundation, Inc.
+# pthread_h.m4 serial 8.1
+dnl Copyright (C) 2009-2024 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_ONCE([gl_PTHREAD_H],
+AC_DEFUN_ONCE([gl_PTHREAD_H_PART1],
[
dnl Ensure to expand the default settings once only, before all statements
dnl that occur in other macros.
if test $ac_cv_type_pthread_spinlock_t != yes; then
HAVE_PTHREAD_SPINLOCK_T=0
fi
+])
+
+AC_DEFUN([gl_PTHREAD_H],
+[
+ AC_REQUIRE([gl_PTHREAD_H_PART1])
+
+ dnl Set HAVE_PTHREAD_SPIN_INIT, REPLACE_PTHREAD_SPIN_INIT.
+ gl_PTHREAD_SPIN
dnl Constants may be defined as C preprocessor macros or as enum items.
lib/pthread.in.h
m4/pthread_h.m4
m4/threadlib.m4
+m4/pthread-spin.m4
Depends-on:
extensions