diff options
author | Søren Sandmann Pedersen <ssp@redhat.com> | 2010-03-16 11:01:08 -0400 |
---|---|---|
committer | Søren Sandmann Pedersen <ssp@redhat.com> | 2010-03-16 12:01:51 -0400 |
commit | 6b9c54820015f69e667ed54441e83042c9a84cc1 (patch) | |
tree | ce68ecd7352f4adcba2137744622a268124fa23c /configure.ac | |
parent | 313353f1fb9d40d0c3aaf7cfb99ca978b29003a4 (diff) |
Add checks for various types of thread local storage.
OS X does not support __thread, so we have to check for it before
using it. It does however support pthread_get/setspecific(), so if we
don't have __thread, check if those are available.
Diffstat (limited to 'configure.ac')
-rw-r--r-- | configure.ac | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/configure.ac b/configure.ac index fed97b1..0bf5658 100644 --- a/configure.ac +++ b/configure.ac @@ -523,6 +523,86 @@ if test x$have_posix_memalign = xyes; then AC_DEFINE(HAVE_POSIX_MEMALIGN, 1, [Whether we have posix_memalign()]) fi +dnl ===================================== +dnl Thread local storage + +support_for__thread=no + +AC_MSG_CHECKING(for __thread) +AC_COMPILE_IFELSE([ +__thread int x ; +int main () { return 0; } +], support_for__thread=yes) + +if test $support_for__thread = yes; then + AC_DEFINE([TOOLCHAIN_SUPPORTS__THREAD],[],[Whether the tool chain supports __thread]) +fi + +AC_MSG_RESULT($support_for__thread) + +dnl posix tls + +if test $support_for__thread = no; then + +support_for_pthread_setspecific=no + +AC_MSG_CHECKING(for pthread_setspecific) + +save_LDFLAGS=$LDFLAGS + +LDFLAGS="-pthread" + +AC_LINK_IFELSE([ +#include <pthread.h> + +#include <stdlib.h> +#include <pthread.h> + +static pthread_once_t once_control = PTHREAD_ONCE_INIT; +static pthread_key_t key; + +static void +make_key (void) +{ + pthread_key_create (&key, NULL); +} + +int +main () +{ + void *value = NULL; + + if (pthread_once (&once_control, make_key) != 0) + { + value = NULL; + } + else + { + value = pthread_getspecific (key); + if (!value) + { + value = malloc (100); + pthread_setspecific (key, value); + } + } +} +], support_for_pthread_setspecific=yes); + +LDFLAGS=$save_LDFLAGS + +if test $support_for_pthread_setspecific = yes; then + PTHREAD_LDFLAGS="-pthread" + AC_DEFINE([HAVE_PTHREAD_SETSPECIFIC], [], [Whether pthread_setspecific() is supported]) +fi + +AC_MSG_RESULT($support_for_pthread_setspecific); + +fi + +AC_SUBST(TOOLCHAIN_SUPPORTS__THREAD) +AC_SUBST(HAVE_PTHREAD_SETSPECIFIC) +AC_SUBST(PTHREAD_LDFLAGS) + AC_OUTPUT([pixman-1.pc pixman-1-uninstalled.pc Makefile |