1# pthread-thread.m4 serial 2
2dnl Copyright (C) 2019-2021 Free Software Foundation, Inc.
3dnl This file is free software; the Free Software Foundation
4dnl gives unlimited permission to copy and/or distribute it,
5dnl with or without modifications, as long as this notice is preserved.
6
7AC_DEFUN([gl_PTHREAD_THREAD],
8[
9  AC_REQUIRE([gl_PTHREAD_H])
10  AC_REQUIRE([AC_CANONICAL_HOST])
11
12  if { case "$host_os" in mingw*) true;; *) false;; esac; } \
13     && test $gl_threads_api = windows; then
14    dnl Choose function names that don't conflict with the mingw-w64 winpthreads
15    dnl library.
16    REPLACE_PTHREAD_CREATE=1
17    REPLACE_PTHREAD_ATTR_INIT=1
18    REPLACE_PTHREAD_ATTR_GETDETACHSTATE=1
19    REPLACE_PTHREAD_ATTR_SETDETACHSTATE=1
20    REPLACE_PTHREAD_ATTR_DESTROY=1
21    REPLACE_PTHREAD_SELF=1
22    REPLACE_PTHREAD_EQUAL=1
23    REPLACE_PTHREAD_DETACH=1
24    REPLACE_PTHREAD_JOIN=1
25    REPLACE_PTHREAD_EXIT=1
26  else
27    if test $HAVE_PTHREAD_H = 0; then
28      HAVE_PTHREAD_CREATE=0
29      HAVE_PTHREAD_ATTR_INIT=0
30      HAVE_PTHREAD_ATTR_GETDETACHSTATE=0
31      HAVE_PTHREAD_ATTR_SETDETACHSTATE=0
32      HAVE_PTHREAD_ATTR_DESTROY=0
33      HAVE_PTHREAD_SELF=0
34      HAVE_PTHREAD_EQUAL=0
35      HAVE_PTHREAD_DETACH=0
36      HAVE_PTHREAD_JOIN=0
37      HAVE_PTHREAD_EXIT=0
38    else
39      dnl On HP-UX 11.11, pthread_create() and pthread_attr_init() are only
40      dnl defined as inline functions.
41      AC_CACHE_CHECK([whether pthread_create exists as a global function],
42        [gl_cv_func_pthread_create],
43        [saved_LIBS="$LIBS"
44         LIBS="$LIBS $LIBPMULTITHREAD"
45         AC_LINK_IFELSE(
46           [AC_LANG_SOURCE(
47              [[extern
48                #ifdef __cplusplus
49                "C"
50                #endif
51                int pthread_create (void);
52                int main ()
53                {
54                  return pthread_create ();
55                }
56              ]])],
57           [gl_cv_func_pthread_create=yes],
58           [gl_cv_func_pthread_create=no])
59         LIBS="$saved_LIBS"
60        ])
61      if test $gl_cv_func_pthread_create = no; then
62        REPLACE_PTHREAD_CREATE=1
63        REPLACE_PTHREAD_ATTR_INIT=1
64        AC_DEFINE([PTHREAD_CREATE_IS_INLINE], [1],
65          [Define if pthread_create is an inline function.])
66      fi
67    fi
68  fi
69])
70