2228f996a42c7c1b8a7f284a3676356e269be457
[profile/ivi/eina.git] / m4 / efl_threads.m4
1 dnl Copyright (C) 2010 Vincent Torri <vtorri at univ-evry dot fr>
2 dnl rwlock code added by Mike Blumenkrantz <mike at zentific dot com>
3 dnl This code is public domain and can be freely used or copied.
4
5 dnl Macro that check if POSIX or Win32 threads library is available or not.
6
7 dnl Usage: EFL_CHECK_THREADS(ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND])
8 dnl Call AC_SUBST(EFL_PTHREAD_CFLAGS)
9 dnl Call AC_SUBST(EFL_PTHREAD_LIBS)
10 dnl Defines EFL_HAVE_POSIX_THREADS or EFL_HAVE_WIN32_THREADS, and EFL_HAVE_THREADS
11
12 AC_DEFUN([EFL_CHECK_THREADS],
13 [
14
15 dnl configure option
16
17 AC_ARG_ENABLE([posix-threads],
18    [AC_HELP_STRING([--disable-posix-threads], [enable POSIX threads code @<:@default=auto@:>@])],
19    [
20     if test "x${enableval}" = "xyes" ; then
21        _efl_enable_posix_threads="yes"
22     else
23        _efl_enable_posix_threads="no"
24     fi
25    ],
26    [_efl_enable_posix_threads="auto"])
27
28 AC_MSG_CHECKING([whether to build POSIX threads code])
29 AC_MSG_RESULT([${_efl_enable_posix_threads}])
30
31 AC_ARG_ENABLE([win32-threads],
32    [AC_HELP_STRING([--disable-win32-threads], [enable Win32 threads code @<:@default=no@:>@])],
33    [
34     if test "x${enableval}" = "xyes" ; then
35        _efl_enable_win32_threads="yes"
36     else
37        _efl_enable_win32_threads="no"
38     fi
39    ],
40    [_efl_enable_win32_threads="no"])
41
42 AC_MSG_CHECKING([whether to build Windows threads code])
43 AC_MSG_RESULT([${_efl_enable_win32_threads}])
44
45 dnl
46 dnl * no  + no
47 dnl * yes + no  : win32: error,    other : pthread
48 dnl * yes + yes : win32 : wthread, other : pthread
49 dnl * no  + yes : win32 : wthread, other : error
50
51 if  test "x${_efl_enable_posix_threads}" = "xyes" && test "x${_efl_enable_win32_threads}" = "xyes" ; then
52    case "$host_os" in
53       mingw*)
54          _efl_enable_posix_threads=no
55          ;;
56       *)
57          _efl_enable_win32_threads=no
58          ;;
59    esac
60 fi
61
62 if  test "x${_efl_enable_win32_threads}" = "xyes" ; then
63    case "$host_os" in
64       mingw*)
65          ;;
66       *)
67          AC_MSG_ERROR([Win32 threads support requested but non Windows system found.])
68          ;;
69    esac
70 fi
71
72 if  test "x${_efl_enable_posix_threads}" = "xyes" ; then
73    case "$host_os" in
74       mingw*)
75          AC_MSG_ERROR([POSIX threads support requested but Windows system found.])
76          ;;
77       *)
78          ;;
79    esac
80 fi
81
82 dnl check if the compiler supports POSIX threads
83
84 case "$host_os" in
85    mingw*)
86       ;;
87    solaris*)
88       _efl_thread_cflags="-mt"
89       _efl_thread_libs="-mt"
90       ;;
91    *)
92       _efl_thread_cflags="-pthread"
93       _efl_thread_libs="-pthread"
94       ;;
95 esac
96
97 _efl_have_posix_threads="no"
98 _efl_have_win32_threads="no"
99
100 if test "x${_efl_enable_posix_threads}" = "xyes" || test "x${_efl_enable_posix_threads}" = "xauto" ; then
101
102    SAVE_CFLAGS=${CFLAGS}
103    CFLAGS="${CFLAGS} ${_efl_threads_cflags}"
104    SAVE_LIBS=${LIBS}
105    LIBS="${LIBS} ${_efl_threads_libs}"
106    AC_LINK_IFELSE(
107       [AC_LANG_PROGRAM([[
108 #include <pthread.h>
109                        ]],
110                        [[
111 pthread_t id;
112 id = pthread_self();
113                        ]])],
114       [_efl_have_posix_threads="yes"],
115       [_efl_have_posix_threads="no"])
116    CFLAGS=${SAVE_CFLAGS}
117    LIBS=${SAVE_LIBS}
118
119 fi
120
121 AC_MSG_CHECKING([whether system support POSIX threads])
122 AC_MSG_RESULT([${_efl_have_posix_threads}])
123 if test "$x{_efl_enable_posix_threads}" = "xyes" && test "x${_efl_have_posix_threads}" = "xno"; then
124    AC_MSG_ERROR([POSIX threads support requested but not found.])
125 fi
126
127 EFL_PTHREAD_CFLAGS=""
128 EFL_PTHREAD_LIBS=""
129 if test "x${_efl_have_posix_threads}" = "xyes" ; then
130    EFL_PTHREAD_CFLAGS=${_efl_thread_cflags}
131    EFL_PTHREAD_LIBS=${_efl_thread_libs}
132 fi
133
134 AC_SUBST(EFL_PTHREAD_CFLAGS)
135 AC_SUBST(EFL_PTHREAD_LIBS)
136
137 if test "x${_efl_have_posix_threads}" = "xyes" ; then
138    AC_DEFINE([EFL_HAVE_POSIX_THREADS], [1], [Define to mention that POSIX threads are supported])
139 fi
140
141
142 if test "x${_efl_enable_win32_threads}" = "xyes" ; then
143    _efl_have_win32_threads="yes"
144    AC_DEFINE([EFL_HAVE_WIN32_THREADS], [1], [Define to mention that Win32 threads are supported])
145 fi
146
147 if test "x${_efl_have_posix_threads}" = "xyes" || test "x${_efl_have_win32_threads}" = "xyes" ; then
148    AC_DEFINE([EFL_HAVE_THREADS], [1], [Define to mention that POSIX or Win32 threads are supported])
149 fi
150
151 AS_IF([test "x$_efl_have_posix_threads" = "xyes" || test "x$_efl_have_win32_threads" = "xyes"], [$1], [$2])
152 ])
153
154 dnl Usage: EFL_CHECK_SPINLOCK(ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND])
155 dnl Defines EFL_HAVE_POSIX_THREADS_SPINLOCK
156 AC_DEFUN([EFL_CHECK_SPINLOCK],
157 [
158
159 dnl check if the compiler supports pthreads spinlock
160
161 _efl_have_posix_threads_spinlock="no"
162
163 if test "x${_efl_have_posix_threads}" = "xyes" ; then
164
165    SAVE_CFLAGS=${CFLAGS}
166    CFLAGS="${CFLAGS} ${EFL_PTHREAD_CFLAGS}"
167    SAVE_LIBS=${LIBS}
168    LIBS="${LIBS} ${EFL_PTHREAD_LIBS}"
169    AC_LINK_IFELSE(
170       [AC_LANG_PROGRAM([[
171 #include <pthread.h>
172                        ]],
173                        [[
174 pthread_spinlock_t lock;
175 int res;
176 res = pthread_spin_init(&lock, PTHREAD_PROCESS_PRIVATE);
177                        ]])],
178       [_efl_have_posix_threads_spinlock="yes"],
179       [_efl_have_posix_threads_spinlock="no"])
180    CFLAGS=${SAVE_CFLAGS}
181    LIBS=${SAVE_LIBS}
182
183 fi
184
185 AC_MSG_CHECKING([whether to build POSIX threads spinlock code])
186 AC_MSG_RESULT([${_efl_have_posix_threads_spinlock}])
187 if test "x${_efl_enable_posix_threads}" = "xyes" && test "x${_efl_have_posix_threads_spinlock}" = "xno" ; then
188    AC_MSG_WARN([POSIX threads support requested but spinlocks are not supported])
189 fi
190
191 if test "x${_efl_have_posix_threads_spinlock}" = "xyes" ; then
192    AC_DEFINE([EFL_HAVE_POSIX_THREADS_SPINLOCK], [1], [Define to mention that POSIX threads spinlocks are supported])
193 fi
194 AS_IF([test "x$_efl_have_posix_threads_spinlock" = "xyes"], [$1], [$2])
195 ])
196