From 6b9c54820015f69e667ed54441e83042c9a84cc1 Mon Sep 17 00:00:00 2001 From: =?utf8?q?S=C3=B8ren=20Sandmann=20Pedersen?= Date: Tue, 16 Mar 2010 11:01:08 -0400 Subject: [PATCH] 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. --- configure.ac | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ pixman/Makefile.am | 2 +- 2 files changed, 81 insertions(+), 1 deletion(-) 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 + +#include +#include + +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 diff --git a/pixman/Makefile.am b/pixman/Makefile.am index 8ac6827..5a0e7a9 100644 --- a/pixman/Makefile.am +++ b/pixman/Makefile.am @@ -1,5 +1,5 @@ lib_LTLIBRARIES = libpixman-1.la -libpixman_1_la_LDFLAGS = -version-info $(LT_VERSION_INFO) -no-undefined +libpixman_1_la_LDFLAGS = -version-info $(LT_VERSION_INFO) -no-undefined @PTHREAD_LDFLAGS@ libpixman_1_la_LIBADD = @DEP_LIBS@ -lm libpixman_1_la_SOURCES = \ pixman.h \ -- 2.7.4