diff options
Diffstat (limited to 'libcutl/m4/threads.m4')
-rw-r--r-- | libcutl/m4/threads.m4 | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/libcutl/m4/threads.m4 b/libcutl/m4/threads.m4 new file mode 100644 index 0000000..1609a04 --- /dev/null +++ b/libcutl/m4/threads.m4 @@ -0,0 +1,69 @@ +dnl file : m4/threads.m4 +dnl copyright : Copyright (c) 2009-2013 Code Synthesis Tools CC +dnl license : GNU GPL v2; see accompanying LICENSE file +dnl +AC_DEFUN([THREADS],[ + +threads_thread_keyword=no + +AC_ARG_ENABLE( + [threads], + AS_HELP_STRING([--disable-threads], [disable threads (enabled by default)]), + [AS_IF([test x"$enableval" = xno], [threads=none], [threads=check])], + [threads=check]) + +# If thread support is not disabled by the user, figure out what we can use. +# +if test x$threads = xcheck; then + case $host_os in + windows* | mingw*) + case $host_os in + mingw*) + CXXFLAGS="$CXXFLAGS -mthreads" + ;; + esac + + # Newer versions of GCC can be configured to use either Win32 or POSIX + # threads. It appears that -mthreads should be used in both cases but + # if the model is POSIX then GCC will also link -lpthread by default. + # Use that fact to test which model we have. + # + AC_TRY_LINK([#include <pthread.h>], + [pthread_create(0,0,0,0);], + [threads=posix], + [threads=win32]) + ;; + *) + ACX_PTHREAD + + if test x$acx_pthread_ok = xyes; then + threads=posix + LIBS="$LIBS $PTHREAD_LIBS" + CXXFLAGS="$CXXFLAGS $PTHREAD_CXXFLAGS" + + # Check if we can use the __thread keyword. + # + AC_MSG_CHECKING([for __thread keyword]) + + CXX_LIBTOOL_LINK_IFELSE([ + AC_LANG_SOURCE([ + __thread int tls_var; + + int + main () + { + tls_var = 0; + } + ])], + [threads_thread_keyword=yes]) + + AC_MSG_RESULT([$threads_thread_keyword]) + fi + ;; + esac +fi + +if test x$threads = xcheck; then + AC_MSG_ERROR([thread support not available; use --disable-threads to force single-threaded mode]) +fi +])dnl |