summaryrefslogtreecommitdiff
path: root/tool/m4/ruby_thread.m4
blob: 439c63bc228dd3f3a213626e2e493603e552fc14 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
dnl -*- Autoconf -*-
AC_DEFUN([RUBY_THREAD], [
AC_ARG_WITH(thread,
    AS_HELP_STRING([--with-thread=IMPLEMENTATION], [specify the thread implementation to use]),
    [THREAD_MODEL=$withval], [
    THREAD_MODEL=
    AS_CASE(["$target_os"],
        [freebsd*], [
            AC_CACHE_CHECK([whether pthread should be enabled by default],
                rb_cv_enable_pthread_default,
                [AC_PREPROC_IFELSE([AC_LANG_SOURCE([[
@%:@include <osreldate.h>
@%:@if __FreeBSD_version < 502102
@%:@error pthread should be disabled on this platform
@%:@endif
                    ]])],
                    rb_cv_enable_pthread_default=yes,
                    rb_cv_enable_pthread_default=no)])
            AS_IF([test $rb_cv_enable_pthread_default = yes],
                [THREAD_MODEL=pthread],
                [THREAD_MODEL=none])
        ],
        [mingw*], [
            THREAD_MODEL=win32
        ],
        [wasi*], [
            THREAD_MODEL=none
        ],
        [
            THREAD_MODEL=pthread
        ]
    )
])

AS_IF([test x"$THREAD_MODEL" = xpthread], [
    AC_CHECK_HEADERS(pthread.h)
    AS_IF([test x"$ac_cv_header_pthread_h" = xyes], [], [
	AC_MSG_WARN("Don't know how to find pthread header on your system -- thread support disabled")
        THREAD_MODEL=none
    ])
])
AS_IF([test x"$THREAD_MODEL" = xpthread], [
    THREAD_MODEL=none
    for pthread_lib in thr pthread pthreads c c_r root; do
	AC_CHECK_LIB($pthread_lib, pthread_create,
		     [THREAD_MODEL=pthread; break])
    done
    AS_IF([test x"$THREAD_MODEL" = xpthread], [
	AC_DEFINE(_REENTRANT)
	AC_DEFINE(_THREAD_SAFE)
	AC_DEFINE(HAVE_LIBPTHREAD)
	AC_CHECK_HEADERS(pthread_np.h, [], [], [@%:@include <pthread.h>])
	AS_CASE(["$pthread_lib:$target_os"],
		[c:*], [],
		[root:*], [],
		[c_r:*|*:openbsd*|*:mirbsd*],  [LIBS="-pthread $LIBS"],
		[LIBS="-l$pthread_lib $LIBS"])
    ], [
	AC_MSG_WARN("Don't know how to find pthread library on your system -- thread support disabled")
    ])
])

AS_CASE(["$THREAD_MODEL"],
[pthread], [],
[win32],   [],
[none],    [],
[""],      [AC_MSG_ERROR(thread model is missing)],
           [AC_MSG_ERROR(unknown thread model $THREAD_MODEL)])
AC_MSG_CHECKING(thread model)
AC_MSG_RESULT($THREAD_MODEL)

THREAD_IMPL_H=thread_$THREAD_MODEL.h
AS_IF([test ! -f "$srcdir/$THREAD_IMPL_H"],
      [AC_MSG_ERROR('$srcdir/$THREAD_IMPL_H' must exist)])
THREAD_IMPL_SRC=thread_$THREAD_MODEL.c
AS_IF([test ! -f "$srcdir/$THREAD_IMPL_SRC"],
      [AC_MSG_ERROR('$srcdir/$THREAD_IMPL_SRC' must exist)])
AC_DEFINE_UNQUOTED(THREAD_IMPL_H, ["$THREAD_IMPL_H"])
AC_DEFINE_UNQUOTED(THREAD_IMPL_SRC, ["$THREAD_IMPL_SRC"])
])dnl