diff options
Diffstat (limited to 'gl/m4/threadlib.m4')
| -rw-r--r-- | gl/m4/threadlib.m4 | 413 |
1 files changed, 216 insertions, 197 deletions
diff --git a/gl/m4/threadlib.m4 b/gl/m4/threadlib.m4 index b536b047..333c8fe0 100644 --- a/gl/m4/threadlib.m4 +++ b/gl/m4/threadlib.m4 | |||
| @@ -1,8 +1,10 @@ | |||
| 1 | # threadlib.m4 serial 32a | 1 | # threadlib.m4 |
| 2 | dnl Copyright (C) 2005-2023 Free Software Foundation, Inc. | 2 | # serial 45.1 |
| 3 | dnl Copyright (C) 2005-2025 Free Software Foundation, Inc. | ||
| 3 | dnl This file is free software; the Free Software Foundation | 4 | dnl This file is free software; the Free Software Foundation |
| 4 | dnl gives unlimited permission to copy and/or distribute it, | 5 | dnl gives unlimited permission to copy and/or distribute it, |
| 5 | dnl with or without modifications, as long as this notice is preserved. | 6 | dnl with or without modifications, as long as this notice is preserved. |
| 7 | dnl This file is offered as-is, without any warranty. | ||
| 6 | 8 | ||
| 7 | dnl From Bruno Haible. | 9 | dnl From Bruno Haible. |
| 8 | 10 | ||
| @@ -55,24 +57,22 @@ AC_DEFUN([gl_ANYTHREADLIB_EARLY], | |||
| 55 | [ | 57 | [ |
| 56 | AC_REQUIRE([AC_CANONICAL_HOST]) | 58 | AC_REQUIRE([AC_CANONICAL_HOST]) |
| 57 | if test -z "$gl_anythreadlib_early_done"; then | 59 | if test -z "$gl_anythreadlib_early_done"; then |
| 58 | case "$host_os" in | 60 | AS_CASE([$host_os], |
| 59 | osf*) | 61 | [osf*], |
| 60 | # On OSF/1, the compiler needs the flag -D_REENTRANT so that it | 62 | [# On OSF/1, the compiler needs the flag -D_REENTRANT so that it |
| 61 | # groks <pthread.h>. cc also understands the flag -pthread, but | 63 | # groks <pthread.h>. cc also understands the flag -pthread, but |
| 62 | # we don't use it because 1. gcc-2.95 doesn't understand -pthread, | 64 | # we do not use it because 1. gcc-2.95 does not understand -pthread, |
| 63 | # 2. putting a flag into CPPFLAGS that has an effect on the linker | 65 | # 2. putting a flag into CPPFLAGS that has an effect on the linker |
| 64 | # causes the AC_LINK_IFELSE test below to succeed unexpectedly, | 66 | # causes the AC_LINK_IFELSE test below to succeed unexpectedly, |
| 65 | # leading to wrong values of LIBTHREAD and LTLIBTHREAD. | 67 | # leading to wrong values of LIBTHREAD and LTLIBTHREAD. |
| 66 | CPPFLAGS="$CPPFLAGS -D_REENTRANT" | 68 | CPPFLAGS="$CPPFLAGS -D_REENTRANT" |
| 67 | ;; | 69 | ]) |
| 68 | esac | ||
| 69 | # Some systems optimize for single-threaded programs by default, and | 70 | # Some systems optimize for single-threaded programs by default, and |
| 70 | # need special flags to disable these optimizations. For example, the | 71 | # need special flags to disable these optimizations. For example, the |
| 71 | # definition of 'errno' in <errno.h>. | 72 | # definition of errno in <errno.h>. |
| 72 | case "$host_os" in | 73 | AS_CASE([$host_os], |
| 73 | aix* | freebsd*) CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE" ;; | 74 | [aix* | freebsd*], [CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE"], |
| 74 | solaris*) CPPFLAGS="$CPPFLAGS -D_REENTRANT" ;; | 75 | [hpux* | solaris*], [CPPFLAGS="$CPPFLAGS -D_REENTRANT"]) |
| 75 | esac | ||
| 76 | gl_anythreadlib_early_done=done | 76 | gl_anythreadlib_early_done=done |
| 77 | fi | 77 | fi |
| 78 | ]) | 78 | ]) |
| @@ -84,23 +84,26 @@ AC_DEFUN([gl_WEAK_SYMBOLS], | |||
| 84 | AC_REQUIRE([AC_CANONICAL_HOST]) | 84 | AC_REQUIRE([AC_CANONICAL_HOST]) |
| 85 | AC_CACHE_CHECK([whether imported symbols can be declared weak], | 85 | AC_CACHE_CHECK([whether imported symbols can be declared weak], |
| 86 | [gl_cv_have_weak], | 86 | [gl_cv_have_weak], |
| 87 | [case "$host_os" in | 87 | [AS_CASE([$host_os], |
| 88 | cygwin*) | 88 | [cygwin* | mingw* | windows*], |
| 89 | dnl On Cygwin 3.2.0 with gcc 10.2, the test below would succeed, but | 89 | [ |
| 90 | dnl programs that use pthread_in_use() with weak symbol references | 90 | dnl On Cygwin 3.2.0 with gcc 10.2, and likewise on mingw 10.0.0 with |
| 91 | dnl crash miserably at runtime. | 91 | dnl gcc 11.3, the test below would succeed, but programs that use |
| 92 | dnl pthread_in_use() with weak symbol references crash miserably at | ||
| 93 | dnl runtime. | ||
| 92 | gl_cv_have_weak="guessing no" | 94 | gl_cv_have_weak="guessing no" |
| 93 | ;; | 95 | ], |
| 94 | *) | 96 | [ |
| 95 | gl_cv_have_weak=no | 97 | gl_cv_have_weak=no |
| 96 | dnl First, test whether the compiler accepts it syntactically. | 98 | dnl First, test whether the compiler accepts it syntactically. |
| 97 | AC_LINK_IFELSE( | 99 | AC_LINK_IFELSE( |
| 98 | [AC_LANG_PROGRAM( | 100 | [AC_LANG_PROGRAM( |
| 99 | [[extern void xyzzy (); | 101 | [[extern void xyzzy (); |
| 100 | #pragma weak xyzzy]], | 102 | #pragma weak xyzzy |
| 103 | ]], | ||
| 101 | [[xyzzy();]])], | 104 | [[xyzzy();]])], |
| 102 | [gl_cv_have_weak=maybe]) | 105 | [gl_cv_have_weak=maybe]) |
| 103 | if test $gl_cv_have_weak = maybe; then | 106 | AS_IF([test $gl_cv_have_weak = maybe], [ |
| 104 | dnl Second, test whether it actually works. On Cygwin 1.7.2, with | 107 | dnl Second, test whether it actually works. On Cygwin 1.7.2, with |
| 105 | dnl gcc 4.3, symbols declared weak always evaluate to the address 0. | 108 | dnl gcc 4.3, symbols declared weak always evaluate to the address 0. |
| 106 | AC_RUN_IFELSE( | 109 | AC_RUN_IFELSE( |
| @@ -123,20 +126,19 @@ int main () | |||
| 123 | [gl_cv_have_weak="guessing yes"], | 126 | [gl_cv_have_weak="guessing yes"], |
| 124 | [gl_cv_have_weak="guessing no"]) | 127 | [gl_cv_have_weak="guessing no"]) |
| 125 | ]) | 128 | ]) |
| 126 | fi | 129 | ]) |
| 127 | ;; | 130 | ]) |
| 128 | esac | 131 | dnl But when linking statically, weak symbols do not work. |
| 129 | dnl But when linking statically, weak symbols don't work. | 132 | AS_CASE([" $LDFLAGS "], |
| 130 | case " $LDFLAGS " in | 133 | [*" -static "*], [gl_cv_have_weak=no]) |
| 131 | *" -static "*) gl_cv_have_weak=no ;; | ||
| 132 | esac | ||
| 133 | dnl Test for a bug in FreeBSD 11: A link error occurs when using a weak | 134 | dnl Test for a bug in FreeBSD 11: A link error occurs when using a weak |
| 134 | dnl symbol and linking against a shared library that has a dependency on | 135 | dnl symbol and linking against a shared library that has a dependency on |
| 135 | dnl the shared library that defines the symbol. | 136 | dnl the shared library that defines the symbol. |
| 136 | case "$gl_cv_have_weak" in | 137 | AS_CASE([$gl_cv_have_weak], |
| 137 | *yes) | 138 | [*yes], |
| 138 | case "$host_os" in | 139 | [AS_CASE([$host_os], |
| 139 | freebsd* | dragonfly* | midnightbsd*) | 140 | [freebsd* | dragonfly* | midnightbsd*], |
| 141 | [ | ||
| 140 | : > conftest1.c | 142 | : > conftest1.c |
| 141 | $CC $CPPFLAGS $CFLAGS $LDFLAGS -fPIC -shared -o libempty.so conftest1.c -lpthread >&AS_MESSAGE_LOG_FD 2>&1 | 143 | $CC $CPPFLAGS $CFLAGS $LDFLAGS -fPIC -shared -o libempty.so conftest1.c -lpthread >&AS_MESSAGE_LOG_FD 2>&1 |
| 142 | cat <<EOF > conftest2.c | 144 | cat <<EOF > conftest2.c |
| @@ -150,17 +152,15 @@ EOF | |||
| 150 | $CC $CPPFLAGS $CFLAGS $LDFLAGS -o conftest conftest2.c libempty.so >&AS_MESSAGE_LOG_FD 2>&1 \ | 152 | $CC $CPPFLAGS $CFLAGS $LDFLAGS -o conftest conftest2.c libempty.so >&AS_MESSAGE_LOG_FD 2>&1 \ |
| 151 | || gl_cv_have_weak=no | 153 | || gl_cv_have_weak=no |
| 152 | rm -f conftest1.c libempty.so conftest2.c conftest | 154 | rm -f conftest1.c libempty.so conftest2.c conftest |
| 153 | ;; | 155 | ]) |
| 154 | esac | 156 | ]) |
| 155 | ;; | ||
| 156 | esac | ||
| 157 | ]) | 157 | ]) |
| 158 | case "$gl_cv_have_weak" in | 158 | AS_CASE([$gl_cv_have_weak], |
| 159 | *yes) | 159 | [*yes], |
| 160 | [ | ||
| 160 | AC_DEFINE([HAVE_WEAK_SYMBOLS], [1], | 161 | AC_DEFINE([HAVE_WEAK_SYMBOLS], [1], |
| 161 | [Define to 1 if the compiler and linker support weak declarations of symbols.]) | 162 | [Define to 1 if the compiler and linker support weak declarations of symbols.]) |
| 162 | ;; | 163 | ]) |
| 163 | esac | ||
| 164 | ]) | 164 | ]) |
| 165 | 165 | ||
| 166 | dnl ============================================================================ | 166 | dnl ============================================================================ |
| @@ -174,7 +174,7 @@ dnl Sets the variable LIBPMULTITHREAD, for programs that really need | |||
| 174 | dnl multithread functionality. The difference between LIBPTHREAD and | 174 | dnl multithread functionality. The difference between LIBPTHREAD and |
| 175 | dnl LIBPMULTITHREAD is that on platforms supporting weak symbols, typically | 175 | dnl LIBPMULTITHREAD is that on platforms supporting weak symbols, typically |
| 176 | dnl LIBPTHREAD is empty whereas LIBPMULTITHREAD is not. | 176 | dnl LIBPTHREAD is empty whereas LIBPMULTITHREAD is not. |
| 177 | dnl Sets the variable LIB_SCHED_YIELD to the linker options needed to use the | 177 | dnl Sets the variable SCHED_YIELD_LIB to the linker options needed to use the |
| 178 | dnl sched_yield() function. | 178 | dnl sched_yield() function. |
| 179 | dnl Adds to CPPFLAGS the flag -D_REENTRANT or -D_THREAD_SAFE if needed for | 179 | dnl Adds to CPPFLAGS the flag -D_REENTRANT or -D_THREAD_SAFE if needed for |
| 180 | dnl multithread-safe programs. | 180 | dnl multithread-safe programs. |
| @@ -186,15 +186,15 @@ dnl The guts of gl_PTHREADLIB. Needs to be expanded only once. | |||
| 186 | AC_DEFUN([gl_PTHREADLIB_BODY], | 186 | AC_DEFUN([gl_PTHREADLIB_BODY], |
| 187 | [ | 187 | [ |
| 188 | AC_REQUIRE([gl_ANYTHREADLIB_EARLY]) | 188 | AC_REQUIRE([gl_ANYTHREADLIB_EARLY]) |
| 189 | if test -z "$gl_pthreadlib_body_done"; then | 189 | AS_IF([test -z "$gl_pthreadlib_body_done"], [ |
| 190 | gl_pthread_api=no | 190 | gl_pthread_api=no |
| 191 | LIBPTHREAD= | 191 | LIBPTHREAD= |
| 192 | LIBPMULTITHREAD= | 192 | LIBPMULTITHREAD= |
| 193 | # On OSF/1, the compiler needs the flag -pthread or -D_REENTRANT so that | 193 | # On OSF/1, the compiler needs the flag -pthread or -D_REENTRANT so that |
| 194 | # it groks <pthread.h>. It's added above, in gl_ANYTHREADLIB_EARLY. | 194 | # it groks <pthread.h>. It is added above, in gl_ANYTHREADLIB_EARLY. |
| 195 | AC_CHECK_HEADER([pthread.h], | 195 | AC_CHECK_HEADER([pthread.h], |
| 196 | [gl_have_pthread_h=yes], [gl_have_pthread_h=no]) | 196 | [gl_have_pthread_h=yes], [gl_have_pthread_h=no]) |
| 197 | if test "$gl_have_pthread_h" = yes; then | 197 | AS_IF([test "$gl_have_pthread_h" = yes], [ |
| 198 | # Other possible tests: | 198 | # Other possible tests: |
| 199 | # -lpthreads (FSU threads, PCthreads) | 199 | # -lpthreads (FSU threads, PCthreads) |
| 200 | # -lgthreads | 200 | # -lgthreads |
| @@ -205,8 +205,8 @@ AC_DEFUN([gl_PTHREADLIB_BODY], | |||
| 205 | # If -pthread works, prefer it to -lpthread, since Ubuntu 14.04 | 205 | # If -pthread works, prefer it to -lpthread, since Ubuntu 14.04 |
| 206 | # needs -pthread for some reason. See: | 206 | # needs -pthread for some reason. See: |
| 207 | # https://lists.gnu.org/r/bug-gnulib/2014-09/msg00023.html | 207 | # https://lists.gnu.org/r/bug-gnulib/2014-09/msg00023.html |
| 208 | save_LIBS=$LIBS | 208 | saved_LIBS="$LIBS" |
| 209 | for gl_pthread in '' '-pthread'; do | 209 | for gl_pthread in "" "-pthread"; do |
| 210 | LIBS="$LIBS $gl_pthread" | 210 | LIBS="$LIBS $gl_pthread" |
| 211 | AC_LINK_IFELSE( | 211 | AC_LINK_IFELSE( |
| 212 | [AC_LANG_PROGRAM( | 212 | [AC_LANG_PROGRAM( |
| @@ -219,7 +219,7 @@ AC_DEFUN([gl_PTHREADLIB_BODY], | |||
| 219 | [gl_pthread_api=yes | 219 | [gl_pthread_api=yes |
| 220 | LIBPTHREAD=$gl_pthread | 220 | LIBPTHREAD=$gl_pthread |
| 221 | LIBPMULTITHREAD=$gl_pthread]) | 221 | LIBPMULTITHREAD=$gl_pthread]) |
| 222 | LIBS=$save_LIBS | 222 | LIBS="$saved_LIBS" |
| 223 | test $gl_pthread_api = yes && break | 223 | test $gl_pthread_api = yes && break |
| 224 | done | 224 | done |
| 225 | echo "$as_me:__oline__: gl_pthread_api=$gl_pthread_api" >&AS_MESSAGE_LOG_FD | 225 | echo "$as_me:__oline__: gl_pthread_api=$gl_pthread_api" >&AS_MESSAGE_LOG_FD |
| @@ -228,8 +228,9 @@ AC_DEFUN([gl_PTHREADLIB_BODY], | |||
| 228 | gl_pthread_in_glibc=no | 228 | gl_pthread_in_glibc=no |
| 229 | # On Linux with glibc >= 2.34, libc contains the fully functional | 229 | # On Linux with glibc >= 2.34, libc contains the fully functional |
| 230 | # pthread functions. | 230 | # pthread functions. |
| 231 | case "$host_os" in | 231 | AS_CASE([$host_os], |
| 232 | linux*) | 232 | [linux*], |
| 233 | [ | ||
| 233 | AC_EGREP_CPP([Lucky user], | 234 | AC_EGREP_CPP([Lucky user], |
| 234 | [#include <features.h> | 235 | [#include <features.h> |
| 235 | #ifdef __GNU_LIBRARY__ | 236 | #ifdef __GNU_LIBRARY__ |
| @@ -240,19 +241,18 @@ AC_DEFUN([gl_PTHREADLIB_BODY], | |||
| 240 | ], | 241 | ], |
| 241 | [gl_pthread_in_glibc=yes], | 242 | [gl_pthread_in_glibc=yes], |
| 242 | []) | 243 | []) |
| 243 | ;; | 244 | ]) |
| 244 | esac | ||
| 245 | echo "$as_me:__oline__: gl_pthread_in_glibc=$gl_pthread_in_glibc" >&AS_MESSAGE_LOG_FD | 245 | echo "$as_me:__oline__: gl_pthread_in_glibc=$gl_pthread_in_glibc" >&AS_MESSAGE_LOG_FD |
| 246 | 246 | ||
| 247 | # Test for libpthread by looking for pthread_kill. (Not pthread_self, | 247 | # Test for libpthread by looking for pthread_kill. (Not pthread_self, |
| 248 | # since it is defined as a macro on OSF/1.) | 248 | # since it is defined as a macro on OSF/1.) |
| 249 | if test $gl_pthread_api = yes && test -z "$LIBPTHREAD"; then | 249 | AS_IF([test $gl_pthread_api = yes && test -z "$LIBPTHREAD"], [ |
| 250 | # The program links fine without libpthread. But it may actually | 250 | # The program links fine without libpthread. But it may actually |
| 251 | # need to link with libpthread in order to create multiple threads. | 251 | # need to link with libpthread in order to create multiple threads. |
| 252 | AC_CHECK_LIB([pthread], [pthread_kill], | 252 | AC_CHECK_LIB([pthread], [pthread_kill], |
| 253 | [if test $gl_pthread_in_glibc = yes; then | 253 | [AS_IF([test $gl_pthread_in_glibc = yes], [ |
| 254 | LIBPMULTITHREAD= | 254 | LIBPMULTITHREAD= |
| 255 | else | 255 | ], [ |
| 256 | LIBPMULTITHREAD=-lpthread | 256 | LIBPMULTITHREAD=-lpthread |
| 257 | # On Solaris and HP-UX, most pthread functions exist also in libc. | 257 | # On Solaris and HP-UX, most pthread functions exist also in libc. |
| 258 | # Therefore pthread_in_use() needs to actually try to create a | 258 | # Therefore pthread_in_use() needs to actually try to create a |
| @@ -260,56 +260,68 @@ AC_DEFUN([gl_PTHREADLIB_BODY], | |||
| 260 | # pthread_create will actually create a thread. | 260 | # pthread_create will actually create a thread. |
| 261 | # On Solaris 10 or newer, this test is no longer needed, because | 261 | # On Solaris 10 or newer, this test is no longer needed, because |
| 262 | # libc contains the fully functional pthread functions. | 262 | # libc contains the fully functional pthread functions. |
| 263 | case "$host_os" in | 263 | AS_CASE([$host_os], |
| 264 | changequote(,)dnl | 264 | [[solaris | solaris2.[1-9] | solaris2.[1-9].* | hpux*]], |
| 265 | solaris | solaris2.[1-9] | solaris2.[1-9].* | hpux*) | 265 | [ |
| 266 | changequote([,])dnl | 266 | AC_DEFINE([PTHREAD_IN_USE_DETECTION_HARD], [1], |
| 267 | AC_DEFINE([PTHREAD_IN_USE_DETECTION_HARD], [1], | 267 | [Define if the pthread_in_use() detection is hard.]) |
| 268 | [Define if the pthread_in_use() detection is hard.]) | 268 | ]) |
| 269 | esac | 269 | ]) |
| 270 | fi | 270 | ], |
| 271 | [dnl This is needed on FreeBSD 5.2.1. | ||
| 272 | AC_CHECK_LIB([thr], [pthread_kill], | ||
| 273 | [if test $gl_pthread_in_glibc = yes; then | ||
| 274 | LIBPMULTITHREAD= | ||
| 275 | else | ||
| 276 | LIBPMULTITHREAD=-lthr | ||
| 277 | fi | ||
| 278 | ]) | ||
| 271 | ]) | 279 | ]) |
| 272 | elif test $gl_pthread_api != yes; then | 280 | ], [test $gl_pthread_api != yes], [ |
| 273 | # Some library is needed. Try libpthread and libc_r. | 281 | # Some library is needed. Try libpthread and libc_r. |
| 274 | AC_CHECK_LIB([pthread], [pthread_kill], | 282 | AC_CHECK_LIB([pthread], [pthread_kill], |
| 275 | [gl_pthread_api=yes | 283 | [gl_pthread_api=yes |
| 276 | LIBPTHREAD=-lpthread | 284 | LIBPTHREAD=-lpthread |
| 277 | LIBPMULTITHREAD=-lpthread]) | 285 | LIBPMULTITHREAD=-lpthread]) |
| 278 | if test $gl_pthread_api != yes; then | 286 | AS_IF([test $gl_pthread_api != yes], [ |
| 279 | # For FreeBSD 4. | 287 | # For FreeBSD 4. |
| 280 | AC_CHECK_LIB([c_r], [pthread_kill], | 288 | AC_CHECK_LIB([c_r], [pthread_kill], |
| 281 | [gl_pthread_api=yes | 289 | [gl_pthread_api=yes |
| 282 | LIBPTHREAD=-lc_r | 290 | LIBPTHREAD=-lc_r |
| 283 | LIBPMULTITHREAD=-lc_r]) | 291 | LIBPMULTITHREAD=-lc_r]) |
| 284 | fi | 292 | ]) |
| 285 | fi | 293 | ]) |
| 286 | echo "$as_me:__oline__: LIBPMULTITHREAD=$LIBPMULTITHREAD" >&AS_MESSAGE_LOG_FD | 294 | echo "$as_me:__oline__: LIBPMULTITHREAD=$LIBPMULTITHREAD" >&AS_MESSAGE_LOG_FD |
| 287 | fi | 295 | ]) |
| 288 | AC_MSG_CHECKING([whether POSIX threads API is available]) | 296 | AC_MSG_CHECKING([whether POSIX threads API is available]) |
| 289 | AC_MSG_RESULT([$gl_pthread_api]) | 297 | AC_MSG_RESULT([$gl_pthread_api]) |
| 290 | AC_SUBST([LIBPTHREAD]) | 298 | AC_SUBST([LIBPTHREAD]) |
| 291 | AC_SUBST([LIBPMULTITHREAD]) | 299 | AC_SUBST([LIBPMULTITHREAD]) |
| 292 | if test $gl_pthread_api = yes; then | 300 | AS_IF([test $gl_pthread_api = yes], [ |
| 293 | AC_DEFINE([HAVE_PTHREAD_API], [1], | 301 | AC_DEFINE([HAVE_PTHREAD_API], [1], |
| 294 | [Define if you have the <pthread.h> header and the POSIX threads API.]) | 302 | [Define if you have the <pthread.h> header and the POSIX threads API.]) |
| 295 | fi | 303 | ]) |
| 296 | 304 | ||
| 297 | dnl On some systems, sched_yield is in librt, rather than in libpthread. | 305 | dnl On some systems, sched_yield is in librt, rather than in libpthread. |
| 298 | AC_LINK_IFELSE( | 306 | AC_LINK_IFELSE( |
| 299 | [AC_LANG_PROGRAM( | 307 | [AC_LANG_PROGRAM( |
| 300 | [[#include <sched.h>]], | 308 | [[#include <sched.h> |
| 309 | ]], | ||
| 301 | [[sched_yield ();]])], | 310 | [[sched_yield ();]])], |
| 302 | [LIB_SCHED_YIELD= | 311 | [SCHED_YIELD_LIB= |
| 303 | ], | 312 | ], |
| 304 | [dnl Solaris 7...10 has sched_yield in librt, not in libpthread or libc. | 313 | [dnl Solaris 7...10 has sched_yield in librt, not in libpthread or libc. |
| 305 | AC_CHECK_LIB([rt], [sched_yield], [LIB_SCHED_YIELD=-lrt], | 314 | AC_CHECK_LIB([rt], [sched_yield], [SCHED_YIELD_LIB=-lrt], |
| 306 | [dnl Solaris 2.5.1, 2.6 has sched_yield in libposix4, not librt. | 315 | [dnl Solaris 2.5.1, 2.6 has sched_yield in libposix4, not librt. |
| 307 | AC_CHECK_LIB([posix4], [sched_yield], [LIB_SCHED_YIELD=-lposix4])]) | 316 | AC_CHECK_LIB([posix4], [sched_yield], [SCHED_YIELD_LIB=-lposix4])]) |
| 308 | ]) | 317 | ]) |
| 318 | AC_SUBST([SCHED_YIELD_LIB]) | ||
| 319 | dnl For backward compatibility. | ||
| 320 | LIB_SCHED_YIELD="$SCHED_YIELD_LIB" | ||
| 309 | AC_SUBST([LIB_SCHED_YIELD]) | 321 | AC_SUBST([LIB_SCHED_YIELD]) |
| 310 | 322 | ||
| 311 | gl_pthreadlib_body_done=done | 323 | gl_pthreadlib_body_done=done |
| 312 | fi | 324 | ]) |
| 313 | ]) | 325 | ]) |
| 314 | 326 | ||
| 315 | AC_DEFUN([gl_PTHREADLIB], | 327 | AC_DEFUN([gl_PTHREADLIB], |
| @@ -336,44 +348,45 @@ AC_DEFUN([gl_STDTHREADLIB_BODY], | |||
| 336 | [ | 348 | [ |
| 337 | AC_REQUIRE([gl_ANYTHREADLIB_EARLY]) | 349 | AC_REQUIRE([gl_ANYTHREADLIB_EARLY]) |
| 338 | AC_REQUIRE([AC_CANONICAL_HOST]) | 350 | AC_REQUIRE([AC_CANONICAL_HOST]) |
| 339 | if test -z "$gl_stdthreadlib_body_done"; then | 351 | AS_IF([test -z "$gl_stdthreadlib_body_done"], [ |
| 340 | AC_CHECK_HEADERS_ONCE([threads.h]) | 352 | AC_CHECK_HEADERS_ONCE([threads.h]) |
| 341 | 353 | ||
| 342 | case "$host_os" in | 354 | AS_CASE([$host_os], |
| 343 | mingw*) | 355 | [mingw* | windows*], |
| 356 | [ | ||
| 344 | LIBSTDTHREAD= | 357 | LIBSTDTHREAD= |
| 345 | ;; | 358 | ], |
| 346 | *) | 359 | [ |
| 347 | gl_PTHREADLIB_BODY | 360 | gl_PTHREADLIB_BODY |
| 348 | if test $ac_cv_header_threads_h = yes; then | 361 | AS_IF([test $ac_cv_header_threads_h = yes], [ |
| 349 | dnl glibc >= 2.29 has thrd_create in libpthread. | 362 | dnl glibc >= 2.29 has thrd_create in libpthread. |
| 350 | dnl FreeBSD >= 10 has thrd_create in libstdthreads; this library depends | 363 | dnl FreeBSD >= 10 has thrd_create in libstdthreads; this library depends |
| 351 | dnl on libpthread (for the symbol 'pthread_mutexattr_gettype'). | 364 | dnl on libpthread (for the symbol pthread_mutexattr_gettype). |
| 352 | dnl glibc >= 2.34, AIX >= 7.1, and Solaris >= 11.4 have thrd_create in | 365 | dnl glibc >= 2.34, AIX >= 7.1, and Solaris >= 11.4 have thrd_create in |
| 353 | dnl libc. | 366 | dnl libc. |
| 354 | AC_CHECK_FUNCS([thrd_create]) | 367 | gl_CHECK_FUNCS_ANDROID([thrd_create], [[#include <threads.h> |
| 355 | if test $ac_cv_func_thrd_create = yes; then | 368 | ]]) |
| 369 | AS_IF([test $ac_cv_func_thrd_create = yes], [ | ||
| 356 | LIBSTDTHREAD= | 370 | LIBSTDTHREAD= |
| 357 | else | 371 | ], [ |
| 358 | AC_CHECK_LIB([stdthreads], [thrd_create], [ | 372 | AC_CHECK_LIB([stdthreads], [thrd_create], [ |
| 359 | LIBSTDTHREAD='-lstdthreads -lpthread' | 373 | LIBSTDTHREAD="-lstdthreads -lpthread" |
| 360 | ], [ | 374 | ], [ |
| 361 | dnl Guess that thrd_create is in libpthread. | 375 | dnl Guess that thrd_create is in libpthread. |
| 362 | LIBSTDTHREAD="$LIBPMULTITHREAD" | 376 | LIBSTDTHREAD="$LIBPMULTITHREAD" |
| 363 | ]) | 377 | ]) |
| 364 | fi | 378 | ]) |
| 365 | else | 379 | ], [ |
| 366 | dnl Libraries needed by thrd.c, mtx.c, cnd.c, tss.c. | 380 | dnl Libraries needed by thrd.c, mtx.c, cnd.c, tss.c. |
| 367 | LIBSTDTHREAD="$LIBPMULTITHREAD $LIB_SCHED_YIELD" | 381 | LIBSTDTHREAD="$LIBPMULTITHREAD $SCHED_YIELD_LIB" |
| 368 | fi | 382 | ]) |
| 369 | ;; | 383 | ]) |
| 370 | esac | ||
| 371 | AC_SUBST([LIBSTDTHREAD]) | 384 | AC_SUBST([LIBSTDTHREAD]) |
| 372 | 385 | ||
| 373 | AC_MSG_CHECKING([whether ISO C threads API is available]) | 386 | AC_MSG_CHECKING([whether ISO C threads API is available]) |
| 374 | AC_MSG_RESULT([$ac_cv_header_threads_h]) | 387 | AC_MSG_RESULT([$ac_cv_header_threads_h]) |
| 375 | gl_stdthreadlib_body_done=done | 388 | gl_stdthreadlib_body_done=done |
| 376 | fi | 389 | ]) |
| 377 | ]) | 390 | ]) |
| 378 | 391 | ||
| 379 | AC_DEFUN([gl_STDTHREADLIB], | 392 | AC_DEFUN([gl_STDTHREADLIB], |
| @@ -390,7 +403,7 @@ dnl ------------ | |||
| 390 | dnl Tests for a multithreading library to be used. | 403 | dnl Tests for a multithreading library to be used. |
| 391 | dnl If the configure.ac contains a definition of the gl_THREADLIB_DEFAULT_NO | 404 | dnl If the configure.ac contains a definition of the gl_THREADLIB_DEFAULT_NO |
| 392 | dnl (it must be placed before the invocation of gl_THREADLIB_EARLY!), then the | 405 | dnl (it must be placed before the invocation of gl_THREADLIB_EARLY!), then the |
| 393 | dnl default is 'no', otherwise it is system dependent. In both cases, the user | 406 | dnl default is "no", otherwise it is system dependent. In both cases, the user |
| 394 | dnl can change the choice through the options --enable-threads=choice or | 407 | dnl can change the choice through the options --enable-threads=choice or |
| 395 | dnl --disable-threads. | 408 | dnl --disable-threads. |
| 396 | dnl Defines at most one of the macros USE_ISOC_THREADS, USE_POSIX_THREADS, | 409 | dnl Defines at most one of the macros USE_ISOC_THREADS, USE_POSIX_THREADS, |
| @@ -435,49 +448,45 @@ AC_DEFUN([gl_THREADLIB_EARLY_BODY], | |||
| 435 | m4_ifdef([gl_THREADLIB_DEFAULT_NO], | 448 | m4_ifdef([gl_THREADLIB_DEFAULT_NO], |
| 436 | [m4_divert_text([DEFAULTS], [gl_use_threads_default=no])], | 449 | [m4_divert_text([DEFAULTS], [gl_use_threads_default=no])], |
| 437 | [m4_divert_text([DEFAULTS], [gl_use_threads_default=])]) | 450 | [m4_divert_text([DEFAULTS], [gl_use_threads_default=])]) |
| 438 | m4_divert_text([DEFAULTS], [gl_use_winpthreads_default=]) | 451 | dnl gl_use_winpthreads_default defaults to "no", because in mingw 10, like |
| 452 | dnl in mingw 5, the use of libwinpthread still makes test-pthread-tss crash. | ||
| 453 | m4_divert_text([DEFAULTS], [gl_use_winpthreads_default=no]) | ||
| 439 | AC_ARG_ENABLE([threads], | 454 | AC_ARG_ENABLE([threads], |
| 440 | AS_HELP_STRING([--enable-threads={isoc|posix|isoc+posix|windows}], [specify multithreading API])m4_ifdef([gl_THREADLIB_DEFAULT_NO], [], [ | 455 | AS_HELP_STRING([[--enable-threads={isoc|posix|isoc+posix|windows}]], [specify multithreading API])m4_ifdef([gl_THREADLIB_DEFAULT_NO], [], [ |
| 441 | AS_HELP_STRING([--disable-threads], [build without multithread safety])]), | 456 | AS_HELP_STRING([[--disable-threads]], [build without multithread safety])]), |
| 442 | [gl_use_threads=$enableval], | 457 | [gl_use_threads=$enableval], |
| 443 | [if test -n "$gl_use_threads_default"; then | 458 | [if test -n "$gl_use_threads_default"; then |
| 444 | gl_use_threads="$gl_use_threads_default" | 459 | gl_use_threads="$gl_use_threads_default" |
| 445 | else | 460 | else |
| 446 | changequote(,)dnl | 461 | AS_CASE([$host_os], |
| 447 | case "$host_os" in | ||
| 448 | dnl Disable multithreading by default on OSF/1, because it interferes | 462 | dnl Disable multithreading by default on OSF/1, because it interferes |
| 449 | dnl with fork()/exec(): When msgexec is linked with -lpthread, its | 463 | dnl with fork()/exec(): When msgexec is linked with -lpthread, its |
| 450 | dnl child process gets an endless segmentation fault inside execvp(). | 464 | dnl child process gets an endless segmentation fault inside execvp(). |
| 451 | osf*) gl_use_threads=no ;; | 465 | [osf*], [gl_use_threads=no], |
| 452 | dnl Disable multithreading by default on Cygwin 1.5.x, because it has | 466 | dnl Disable multithreading by default on Cygwin 1.5.x, because it has |
| 453 | dnl bugs that lead to endless loops or crashes. See | 467 | dnl bugs that lead to endless loops or crashes. See |
| 454 | dnl <https://cygwin.com/ml/cygwin/2009-08/msg00283.html>. | 468 | dnl <https://cygwin.com/ml/cygwin/2009-08/msg00283.html>. |
| 455 | cygwin*) | 469 | [cygwin*], |
| 456 | case `uname -r` in | 470 | [AS_CASE([$(uname -r)], |
| 457 | 1.[0-5].*) gl_use_threads=no ;; | 471 | [[1.[0-5].*]], [gl_use_threads=no], |
| 458 | *) gl_use_threads=yes ;; | 472 | [gl_use_threads=yes]) |
| 459 | esac | 473 | ], |
| 460 | ;; | ||
| 461 | dnl Obey gl_AVOID_WINPTHREAD on mingw. | 474 | dnl Obey gl_AVOID_WINPTHREAD on mingw. |
| 462 | mingw*) | 475 | [mingw* | windows*], |
| 463 | case "$gl_use_winpthreads_default" in | 476 | [AS_CASE([$gl_use_winpthreads_default], |
| 464 | yes) gl_use_threads=posix ;; | 477 | [yes], [gl_use_threads=posix], |
| 465 | no) gl_use_threads=windows ;; | 478 | [no], [gl_use_threads=windows], |
| 466 | *) gl_use_threads=yes ;; | 479 | [gl_use_threads=yes]) |
| 467 | esac | 480 | ], |
| 468 | ;; | 481 | [gl_use_threads=yes]) |
| 469 | *) gl_use_threads=yes ;; | ||
| 470 | esac | ||
| 471 | changequote([,])dnl | ||
| 472 | fi | 482 | fi |
| 473 | ]) | 483 | ]) |
| 474 | if test "$gl_use_threads" = yes \ | 484 | AS_CASE([$gl_use_threads], |
| 475 | || test "$gl_use_threads" = isoc \ | 485 | [yes | isoc | posix | isoc+posix], |
| 476 | || test "$gl_use_threads" = posix \ | 486 | [ |
| 477 | || test "$gl_use_threads" = isoc+posix; then | 487 | # For using <threads.h> or <pthread.h>: |
| 478 | # For using <threads.h> or <pthread.h>: | 488 | gl_ANYTHREADLIB_EARLY |
| 479 | gl_ANYTHREADLIB_EARLY | 489 | ]) |
| 480 | fi | ||
| 481 | ]) | 490 | ]) |
| 482 | 491 | ||
| 483 | dnl The guts of gl_THREADLIB. Needs to be expanded only once. | 492 | dnl The guts of gl_THREADLIB. Needs to be expanded only once. |
| @@ -490,86 +499,95 @@ AC_DEFUN([gl_THREADLIB_BODY], | |||
| 490 | LTLIBTHREAD= | 499 | LTLIBTHREAD= |
| 491 | LIBMULTITHREAD= | 500 | LIBMULTITHREAD= |
| 492 | LTLIBMULTITHREAD= | 501 | LTLIBMULTITHREAD= |
| 493 | if test "$gl_use_threads" != no; then | 502 | AS_IF([test "$gl_use_threads" = no], |
| 503 | [AC_DEFINE([AVOID_ANY_THREADS], [1], | ||
| 504 | [Define if no multithread safety and no multithreading is desired.])], | ||
| 505 | [ | ||
| 494 | dnl Check whether the compiler and linker support weak declarations. | 506 | dnl Check whether the compiler and linker support weak declarations. |
| 495 | gl_WEAK_SYMBOLS | 507 | gl_WEAK_SYMBOLS |
| 496 | if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then | 508 | AS_CASE([$gl_cv_have_weak], |
| 497 | dnl If we use weak symbols to implement pthread_in_use / pth_in_use / | 509 | [*yes], |
| 498 | dnl thread_in_use, we also need to test whether the ISO C 11 thrd_create | 510 | [ |
| 499 | dnl facility is in use. | 511 | dnl If we use weak symbols to implement pthread_in_use / pth_in_use / |
| 500 | AC_CHECK_HEADERS_ONCE([threads.h]) | 512 | dnl thread_in_use, we also need to test whether the ISO C 11 thrd_create |
| 501 | : | 513 | dnl facility is in use. |
| 502 | fi | 514 | AC_CHECK_HEADERS_ONCE([threads.h]) |
| 503 | if test "$gl_use_threads" = isoc || test "$gl_use_threads" = isoc+posix; then | 515 | : |
| 504 | AC_CHECK_HEADERS_ONCE([threads.h]) | 516 | ]) |
| 505 | gl_have_isoc_threads="$ac_cv_header_threads_h" | 517 | AS_CASE([$gl_use_threads], |
| 506 | fi | 518 | [isoc | isoc+posix], |
| 507 | if test "$gl_use_threads" = yes \ | 519 | [ |
| 508 | || test "$gl_use_threads" = posix \ | 520 | AC_CHECK_HEADERS_ONCE([threads.h]) |
| 509 | || test "$gl_use_threads" = isoc+posix; then | 521 | gl_have_isoc_threads="$ac_cv_header_threads_h" |
| 510 | gl_PTHREADLIB_BODY | 522 | ]) |
| 511 | LIBTHREAD=$LIBPTHREAD LTLIBTHREAD=$LIBPTHREAD | 523 | AS_CASE([$gl_use_threads], |
| 512 | LIBMULTITHREAD=$LIBPMULTITHREAD LTLIBMULTITHREAD=$LIBPMULTITHREAD | 524 | [yes | posix | isoc+posix], |
| 513 | if test $gl_pthread_api = yes; then | 525 | [ |
| 514 | if test "$gl_use_threads" = isoc+posix && test "$gl_have_isoc_threads" = yes; then | 526 | gl_PTHREADLIB_BODY |
| 515 | gl_threads_api='isoc+posix' | 527 | LIBTHREAD=$LIBPTHREAD LTLIBTHREAD=$LIBPTHREAD |
| 516 | AC_DEFINE([USE_ISOC_AND_POSIX_THREADS], [1], | 528 | LIBMULTITHREAD=$LIBPMULTITHREAD LTLIBMULTITHREAD=$LIBPMULTITHREAD |
| 517 | [Define if the combination of the ISO C and POSIX multithreading APIs can be used.]) | 529 | AS_IF([test $gl_pthread_api = yes], [ |
| 518 | LIBTHREAD= LTLIBTHREAD= | 530 | AS_IF([test "$gl_use_threads" = isoc+posix && |
| 519 | else | 531 | test "$gl_have_isoc_threads" = yes], [ |
| 520 | gl_threads_api=posix | 532 | gl_threads_api="isoc+posix" |
| 521 | AC_DEFINE([USE_POSIX_THREADS], [1], | 533 | AC_DEFINE([USE_ISOC_AND_POSIX_THREADS], [1], |
| 522 | [Define if the POSIX multithreading library can be used.]) | 534 | [Define if the combination of the ISO C and POSIX multithreading APIs can be used.]) |
| 523 | if test -z "$LIBMULTITHREAD" && test -z "$LTLIBMULTITHREAD"; then | 535 | LIBTHREAD= LTLIBTHREAD= |
| 524 | AC_DEFINE([USE_POSIX_THREADS_FROM_LIBC], [1], | 536 | ], [ |
| 525 | [Define if references to the POSIX multithreading library are satisfied by libc.]) | 537 | gl_threads_api=posix |
| 526 | else | 538 | AC_DEFINE([USE_POSIX_THREADS], [1], |
| 527 | if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then | 539 | [Define if the POSIX multithreading library can be used.]) |
| 528 | AC_DEFINE([USE_POSIX_THREADS_WEAK], [1], | 540 | AS_IF([test -z "$LIBMULTITHREAD" && test -z "$LTLIBMULTITHREAD"], [ |
| 529 | [Define if references to the POSIX multithreading library should be made weak.]) | 541 | AC_DEFINE([USE_POSIX_THREADS_FROM_LIBC], [1], |
| 530 | LIBTHREAD= LTLIBTHREAD= | 542 | [Define if references to the POSIX multithreading library are satisfied by libc.]) |
| 531 | else | 543 | ], [ |
| 532 | case "$host_os" in | 544 | AS_CASE([$gl_cv_have_weak], |
| 533 | freebsd* | dragonfly* | midnightbsd*) | 545 | [*yes], |
| 534 | if test "x$LIBTHREAD" != "x$LIBMULTITHREAD"; then | 546 | [ |
| 535 | dnl If weak symbols can't tell whether pthread_create(), pthread_key_create() | 547 | AC_DEFINE([USE_POSIX_THREADS_WEAK], [1], |
| 536 | dnl etc. will succeed, we need a runtime test. | 548 | [Define if references to the POSIX multithreading library should be made weak.]) |
| 537 | AC_DEFINE([PTHREAD_IN_USE_DETECTION_HARD], [1], | 549 | LIBTHREAD= LTLIBTHREAD= |
| 538 | [Define if the pthread_in_use() detection is hard.]) | 550 | ], |
| 539 | fi | 551 | [AS_CASE([$host_os], |
| 540 | ;; | 552 | [freebsd* | dragonfly* | midnightbsd*], |
| 541 | esac | 553 | [ |
| 542 | fi | 554 | AS_IF([test "x$LIBTHREAD" != "x$LIBMULTITHREAD"], [ |
| 543 | fi | 555 | dnl If weak symbols cannot tell whether |
| 544 | fi | 556 | dnl pthread_create(), dnl pthread_key_create() |
| 545 | fi | 557 | dnl etc. will succeed, we need a runtime test. |
| 546 | fi | 558 | AC_DEFINE([PTHREAD_IN_USE_DETECTION_HARD], [1], |
| 547 | if test $gl_threads_api = none; then | 559 | [Define if the pthread_in_use() detection is hard.]) |
| 548 | if test "$gl_use_threads" = isoc && test "$gl_have_isoc_threads" = yes; then | 560 | ]) |
| 561 | ]) | ||
| 562 | ]) | ||
| 563 | ]) | ||
| 564 | ]) | ||
| 565 | ]) | ||
| 566 | ]) | ||
| 567 | AS_IF([test $gl_threads_api = none], [ | ||
| 568 | AS_IF([test "$gl_use_threads" = isoc && test "$gl_have_isoc_threads" = yes], [ | ||
| 549 | gl_STDTHREADLIB_BODY | 569 | gl_STDTHREADLIB_BODY |
| 550 | LIBTHREAD=$LIBSTDTHREAD LTLIBTHREAD=$LIBSTDTHREAD | 570 | LIBTHREAD=$LIBSTDTHREAD LTLIBTHREAD=$LIBSTDTHREAD |
| 551 | LIBMULTITHREAD=$LIBSTDTHREAD LTLIBMULTITHREAD=$LIBSTDTHREAD | 571 | LIBMULTITHREAD=$LIBSTDTHREAD LTLIBMULTITHREAD=$LIBSTDTHREAD |
| 552 | gl_threads_api=isoc | 572 | gl_threads_api=isoc |
| 553 | AC_DEFINE([USE_ISOC_THREADS], [1], | 573 | AC_DEFINE([USE_ISOC_THREADS], [1], |
| 554 | [Define if the ISO C multithreading library can be used.]) | 574 | [Define if the ISO C multithreading library can be used.]) |
| 555 | fi | 575 | ]) |
| 556 | fi | 576 | ]) |
| 557 | if test $gl_threads_api = none; then | 577 | AS_IF([test $gl_threads_api = none], [ |
| 558 | case "$gl_use_threads" in | 578 | # The "win32" is for backward compatibility. |
| 559 | yes | windows | win32) # The 'win32' is for backward compatibility. | 579 | AS_CASE([$gl_use_threads], |
| 560 | if { case "$host_os" in | 580 | [yes | windows | win32], |
| 561 | mingw*) true;; | 581 | [AS_CASE([$host_os], |
| 562 | *) false;; | 582 | [mingw* | windows*], |
| 563 | esac | 583 | [ |
| 564 | }; then | 584 | gl_threads_api=windows |
| 565 | gl_threads_api=windows | 585 | AC_DEFINE([USE_WINDOWS_THREADS], [1], |
| 566 | AC_DEFINE([USE_WINDOWS_THREADS], [1], | 586 | [Define if the native Windows multithreading API can be used.]) |
| 567 | [Define if the native Windows multithreading API can be used.]) | 587 | ]) |
| 568 | fi | 588 | ]) |
| 569 | ;; | 589 | ]) |
| 570 | esac | 590 | ]) |
| 571 | fi | ||
| 572 | fi | ||
| 573 | AC_MSG_CHECKING([for multithread API to use]) | 591 | AC_MSG_CHECKING([for multithread API to use]) |
| 574 | AC_MSG_RESULT([$gl_threads_api]) | 592 | AC_MSG_RESULT([$gl_threads_api]) |
| 575 | AC_SUBST([LIBTHREAD]) | 593 | AC_SUBST([LIBTHREAD]) |
| @@ -589,7 +607,7 @@ dnl gl_DISABLE_THREADS | |||
| 589 | dnl ------------------ | 607 | dnl ------------------ |
| 590 | dnl Sets the gl_THREADLIB default so that threads are not used by default. | 608 | dnl Sets the gl_THREADLIB default so that threads are not used by default. |
| 591 | dnl The user can still override it at installation time, by using the | 609 | dnl The user can still override it at installation time, by using the |
| 592 | dnl configure option '--enable-threads'. | 610 | dnl configure option "--enable-threads". |
| 593 | 611 | ||
| 594 | AC_DEFUN([gl_DISABLE_THREADS], [ | 612 | AC_DEFUN([gl_DISABLE_THREADS], [ |
| 595 | m4_divert_text([INIT_PREPARE], [gl_use_threads_default=no]) | 613 | m4_divert_text([INIT_PREPARE], [gl_use_threads_default=no]) |
| @@ -601,7 +619,8 @@ dnl ------------------- | |||
| 601 | dnl Sets the gl_THREADLIB default so that on mingw, a dependency to the | 619 | dnl Sets the gl_THREADLIB default so that on mingw, a dependency to the |
| 602 | dnl libwinpthread DLL (mingw-w64 winpthreads library) is avoided. | 620 | dnl libwinpthread DLL (mingw-w64 winpthreads library) is avoided. |
| 603 | dnl The user can still override it at installation time, by using the | 621 | dnl The user can still override it at installation time, by using the |
| 604 | dnl configure option '--enable-threads'. | 622 | dnl configure option "--enable-threads=posix". |
| 623 | dnl As of 2023, this is now the default. | ||
| 605 | 624 | ||
| 606 | AC_DEFUN([gl_AVOID_WINPTHREAD], [ | 625 | AC_DEFUN([gl_AVOID_WINPTHREAD], [ |
| 607 | m4_divert_text([INIT_PREPARE], [gl_use_winpthreads_default=no]) | 626 | m4_divert_text([INIT_PREPARE], [gl_use_winpthreads_default=no]) |
