diff options
Diffstat (limited to 'gl/m4/threadlib.m4')
| -rw-r--r-- | gl/m4/threadlib.m4 | 54 |
1 files changed, 44 insertions, 10 deletions
diff --git a/gl/m4/threadlib.m4 b/gl/m4/threadlib.m4 index 3dd38aa8..05cc4ffa 100644 --- a/gl/m4/threadlib.m4 +++ b/gl/m4/threadlib.m4 | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | # threadlib.m4 serial 3 (gettext-0.18) | 1 | # threadlib.m4 serial 5 (gettext-0.18) |
| 2 | dnl Copyright (C) 2005-2009 Free Software Foundation, Inc. | 2 | dnl Copyright (C) 2005-2010 Free Software Foundation, Inc. |
| 3 | dnl This file is free software; the Free Software Foundation | 3 | dnl This file is free software; the Free Software Foundation |
| 4 | dnl gives unlimited permission to copy and/or distribute it, | 4 | dnl gives unlimited permission to copy and/or distribute it, |
| 5 | dnl with or without modifications, as long as this notice is preserved. | 5 | dnl with or without modifications, as long as this notice is preserved. |
| @@ -52,13 +52,24 @@ AC_HELP_STRING([--disable-threads], [build without multithread safety]), | |||
| 52 | [if test -n "$gl_use_threads_default"; then | 52 | [if test -n "$gl_use_threads_default"; then |
| 53 | gl_use_threads="$gl_use_threads_default" | 53 | gl_use_threads="$gl_use_threads_default" |
| 54 | else | 54 | else |
| 55 | changequote(,)dnl | ||
| 55 | case "$host_os" in | 56 | case "$host_os" in |
| 56 | dnl Disable multithreading by default on OSF/1, because it interferes | 57 | dnl Disable multithreading by default on OSF/1, because it interferes |
| 57 | dnl with fork()/exec(): When msgexec is linked with -lpthread, its | 58 | dnl with fork()/exec(): When msgexec is linked with -lpthread, its |
| 58 | dnl child process gets an endless segmentation fault inside execvp(). | 59 | dnl child process gets an endless segmentation fault inside execvp(). |
| 60 | dnl Disable multithreading by default on Cygwin 1.5.x, because it has | ||
| 61 | dnl bugs that lead to endless loops or crashes. See | ||
| 62 | dnl <http://cygwin.com/ml/cygwin/2009-08/msg00283.html>. | ||
| 59 | osf*) gl_use_threads=no ;; | 63 | osf*) gl_use_threads=no ;; |
| 64 | cygwin*) | ||
| 65 | case `uname -r` in | ||
| 66 | 1.[0-5].*) gl_use_threads=no ;; | ||
| 67 | *) gl_use_threads=yes ;; | ||
| 68 | esac | ||
| 69 | ;; | ||
| 60 | *) gl_use_threads=yes ;; | 70 | *) gl_use_threads=yes ;; |
| 61 | esac | 71 | esac |
| 72 | changequote([,])dnl | ||
| 62 | fi | 73 | fi |
| 63 | ]) | 74 | ]) |
| 64 | if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then | 75 | if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then |
| @@ -96,11 +107,34 @@ AC_DEFUN([gl_THREADLIB_BODY], | |||
| 96 | LTLIBMULTITHREAD= | 107 | LTLIBMULTITHREAD= |
| 97 | if test "$gl_use_threads" != no; then | 108 | if test "$gl_use_threads" != no; then |
| 98 | dnl Check whether the compiler and linker support weak declarations. | 109 | dnl Check whether the compiler and linker support weak declarations. |
| 99 | AC_MSG_CHECKING([whether imported symbols can be declared weak]) | 110 | AC_CACHE_CHECK([whether imported symbols can be declared weak], |
| 100 | gl_have_weak=no | 111 | [gl_cv_have_weak], |
| 101 | AC_TRY_LINK([extern void xyzzy (); | 112 | [gl_cv_have_weak=no |
| 102 | #pragma weak xyzzy], [xyzzy();], [gl_have_weak=yes]) | 113 | dnl First, test whether the compiler accepts it syntactically. |
| 103 | AC_MSG_RESULT([$gl_have_weak]) | 114 | AC_TRY_LINK([extern void xyzzy (); |
| 115 | #pragma weak xyzzy], [xyzzy();], [gl_cv_have_weak=maybe]) | ||
| 116 | if test $gl_cv_have_weak = maybe; then | ||
| 117 | dnl Second, test whether it actually works. On Cygwin 1.7.2, with | ||
| 118 | dnl gcc 4.3, symbols declared weak always evaluate to the address 0. | ||
| 119 | AC_TRY_RUN([ | ||
| 120 | #include <stdio.h> | ||
| 121 | #pragma weak fputs | ||
| 122 | int main () | ||
| 123 | { | ||
| 124 | return (fputs == NULL); | ||
| 125 | }], [gl_cv_have_weak=yes], [gl_cv_have_weak=no], | ||
| 126 | [dnl When cross-compiling, assume that only ELF platforms support | ||
| 127 | dnl weak symbols. | ||
| 128 | AC_EGREP_CPP([Extensible Linking Format], | ||
| 129 | [#ifdef __ELF__ | ||
| 130 | Extensible Linking Format | ||
| 131 | #endif | ||
| 132 | ], | ||
| 133 | [gl_cv_have_weak="guessing yes"], | ||
| 134 | [gl_cv_have_weak="guessing no"]) | ||
| 135 | ]) | ||
| 136 | fi | ||
| 137 | ]) | ||
| 104 | if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then | 138 | if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then |
| 105 | # On OSF/1, the compiler needs the flag -pthread or -D_REENTRANT so that | 139 | # On OSF/1, the compiler needs the flag -pthread or -D_REENTRANT so that |
| 106 | # it groks <pthread.h>. It's added above, in gl_THREADLIB_EARLY_BODY. | 140 | # it groks <pthread.h>. It's added above, in gl_THREADLIB_EARLY_BODY. |
| @@ -154,7 +188,7 @@ AC_DEFUN([gl_THREADLIB_BODY], | |||
| 154 | AC_DEFINE([USE_POSIX_THREADS], [1], | 188 | AC_DEFINE([USE_POSIX_THREADS], [1], |
| 155 | [Define if the POSIX multithreading library can be used.]) | 189 | [Define if the POSIX multithreading library can be used.]) |
| 156 | if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then | 190 | if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then |
| 157 | if test $gl_have_weak = yes; then | 191 | if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then |
| 158 | AC_DEFINE([USE_POSIX_THREADS_WEAK], [1], | 192 | AC_DEFINE([USE_POSIX_THREADS_WEAK], [1], |
| 159 | [Define if references to the POSIX multithreading library should be made weak.]) | 193 | [Define if references to the POSIX multithreading library should be made weak.]) |
| 160 | LIBTHREAD= | 194 | LIBTHREAD= |
| @@ -182,7 +216,7 @@ AC_DEFUN([gl_THREADLIB_BODY], | |||
| 182 | LTLIBMULTITHREAD="$LTLIBTHREAD" | 216 | LTLIBMULTITHREAD="$LTLIBTHREAD" |
| 183 | AC_DEFINE([USE_SOLARIS_THREADS], [1], | 217 | AC_DEFINE([USE_SOLARIS_THREADS], [1], |
| 184 | [Define if the old Solaris multithreading library can be used.]) | 218 | [Define if the old Solaris multithreading library can be used.]) |
| 185 | if test $gl_have_weak = yes; then | 219 | if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then |
| 186 | AC_DEFINE([USE_SOLARIS_THREADS_WEAK], [1], | 220 | AC_DEFINE([USE_SOLARIS_THREADS_WEAK], [1], |
| 187 | [Define if references to the old Solaris multithreading library should be made weak.]) | 221 | [Define if references to the old Solaris multithreading library should be made weak.]) |
| 188 | LIBTHREAD= | 222 | LIBTHREAD= |
| @@ -208,7 +242,7 @@ AC_DEFUN([gl_THREADLIB_BODY], | |||
| 208 | AC_DEFINE([USE_PTH_THREADS], [1], | 242 | AC_DEFINE([USE_PTH_THREADS], [1], |
| 209 | [Define if the GNU Pth multithreading library can be used.]) | 243 | [Define if the GNU Pth multithreading library can be used.]) |
| 210 | if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then | 244 | if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then |
| 211 | if test $gl_have_weak = yes; then | 245 | if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then |
| 212 | AC_DEFINE([USE_PTH_THREADS_WEAK], [1], | 246 | AC_DEFINE([USE_PTH_THREADS_WEAK], [1], |
| 213 | [Define if references to the GNU Pth multithreading library should be made weak.]) | 247 | [Define if references to the GNU Pth multithreading library should be made weak.]) |
| 214 | LIBTHREAD= | 248 | LIBTHREAD= |
