From b0afb8fe0ff1d87165af9df61501197a06240dda Mon Sep 17 00:00:00 2001 From: Lorenz Kästle <12514511+RincewindsHat@users.noreply.github.com> Date: Sun, 28 Dec 2025 12:13:40 +0100 Subject: Sync with Gnulib stable-202507 code (a8ac9f9ce5) --- gl/m4/pthread-once.m4 | 83 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 gl/m4/pthread-once.m4 (limited to 'gl/m4/pthread-once.m4') diff --git a/gl/m4/pthread-once.m4 b/gl/m4/pthread-once.m4 new file mode 100644 index 00000000..85549254 --- /dev/null +++ b/gl/m4/pthread-once.m4 @@ -0,0 +1,83 @@ +# pthread-once.m4 +# serial 6 +dnl Copyright (C) 2019-2025 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. +dnl This file is offered as-is, without any warranty. + +AC_DEFUN([gl_PTHREAD_ONCE], +[ + AC_REQUIRE([gl_PTHREAD_H]) + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_REQUIRE([gl_PTHREADLIB]) + + if { case "$host_os" in mingw* | windows*) true;; *) false;; esac; } \ + && test $gl_threads_api = windows; then + dnl Choose function names that don't conflict with the mingw-w64 winpthreads + dnl library. + REPLACE_PTHREAD_ONCE=1 + PTHREAD_ONCE_LIB= + else + if test $HAVE_PTHREAD_H = 0; then + HAVE_PTHREAD_ONCE=0 + PTHREAD_ONCE_LIB= + else + dnl Work around Cygwin 3.5.3 bug. + AC_CACHE_CHECK([whether pthread_once works], + [gl_cv_func_pthread_once_works], + [case "$host_os" in + cygwin*) gl_cv_func_pthread_once_works="guessing no" ;; + *) gl_cv_func_pthread_once_works="yes" ;; + esac + ]) + case "$gl_cv_func_pthread_once_works" in + *yes) ;; + *) REPLACE_PTHREAD_ONCE=1 ;; + esac + dnl Determine whether linking requires $(LIBPMULTITHREAD) or only + dnl $(LIBPTHREAD). + if test -z "$LIBPTHREAD" && test -n "$LIBPMULTITHREAD"; then + AC_CACHE_CHECK([whether pthread_once can be used without linking with libpthread], + [gl_cv_func_pthread_once_no_lib], + [AC_RUN_IFELSE( + [AC_LANG_PROGRAM( + [[#include + static pthread_once_t a_once = PTHREAD_ONCE_INIT; + static int a; + static void a_init (void) { a = 8647; } + ]], + [[if (pthread_once (&a_once, a_init)) return 1; + if (a != 8647) return 2; + return 0; + ]])], + [gl_cv_func_pthread_once_no_lib=yes], + [gl_cv_func_pthread_once_no_lib=no], + [case "$host_os" in + # Guess no on glibc. + *-gnu* | gnu*) + gl_cv_func_pthread_once_no_lib="guessing no" ;; + # Guess no on FreeBSD. + freebsd* | dragonfly* | midnightbsd*) + gl_cv_func_pthread_once_no_lib="guessing no" ;; + # Guess yes otherwise. + *) + gl_cv_func_pthread_once_no_lib="guessing yes" ;; + esac + ]) + ]) + case "$gl_cv_func_pthread_once_no_lib" in + *yes) PTHREAD_ONCE_LIB="$LIBPTHREAD" ;; + *) PTHREAD_ONCE_LIB="$LIBPMULTITHREAD" ;; + esac + dnl Expected result: + dnl PTHREAD_ONCE_LIB is $(LIBPMULTITHREAD) on glibc < 2.34, FreeBSD. + dnl PTHREAD_ONCE_LIB is $(LIBPTHREAD) in particular on + dnl musl libc, macOS, NetBSD, Solaris, Cygwin, Haiku, Android. + else + PTHREAD_ONCE_LIB="$LIBPTHREAD" + fi + fi + fi + AC_SUBST([PTHREAD_ONCE_LIB]) +]) -- cgit v1.2.3-74-g34f1