2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt#
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews# Begin pthreads checking.
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt#
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews# First, decide whether to use multithreading or not.
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews#
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews# Enable multithreading by default on systems where it is known
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt# to work well, and where debugging of multithreaded programs
2eeb74d1cf5355dd98f6d507a10086e16bb08c4bTinderbox User# is supported.
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt#
83a28ca274521e15086fc39febde507bcc4e145eMark Andrews
30eec077db2bdcb6f2a0dc388a3cdde2ede75ec1Mark AndrewsAC_MSG_CHECKING(whether to build with thread support)
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt
821350367e2c7313c02eb275e8e05d5193b47cfdJeremy C. Reedcase $host in
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt*-dec-osf*)
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt use_threads=true ;;
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt[*-solaris2.[0-6]])
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt # Thread signals are broken on Solaris 2.6; they are sometimes
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt # delivered to the wrong thread.
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt use_threads=false ;;
2637d30fbd235fe98145f4312b10cc41a13bf7dcJeremy C. Reed*-solaris*)
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt use_threads=true ;;
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt*-ibm-aix*)
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt use_threads=true ;;
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt*-hp-hpux10*)
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt use_threads=false ;;
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt*-hp-hpux11*)
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt use_threads=true ;;
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt*-sgi-irix*)
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt use_threads=true ;;
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt*-sco-sysv*uw*|*-*-sysv*UnixWare*)
2637d30fbd235fe98145f4312b10cc41a13bf7dcJeremy C. Reed # UnixWare
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt use_threads=false ;;
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt*-*-sysv*OpenUNIX*)
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt # UnixWare
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt use_threads=true ;;
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt[*-netbsd[1234].*])
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt # NetBSD earlier than NetBSD 5.0 has poor pthreads.
2637d30fbd235fe98145f4312b10cc41a13bf7dcJeremy C. Reed # Don't use it by default.
2637d30fbd235fe98145f4312b10cc41a13bf7dcJeremy C. Reed use_threads=false ;;
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt*-netbsd*)
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt use_threads=true ;;
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt*-openbsd*)
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt # OpenBSD users have reported that named dumps core on
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt # startup when built with threads.
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt use_threads=false ;;
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt[*-freebsd[1234567].*])
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt # Threads are broken at least up to FreeBSD 4.11.
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt # FreeBSD 5, 6 and 7 we have never officially supported threads
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt # on. YMMV
30eec077db2bdcb6f2a0dc388a3cdde2ede75ec1Mark Andrews use_threads=false ;;
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt*-freebsd*)
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt use_threads=true ;;
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt[*-bsdi[234]*])
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt # Thread signals do not work reliably on some versions of BSD/OS.
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt use_threads=false ;;
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt*-bsdi5*)
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt use_threads=true ;;
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt*-linux*)
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt use_threads=true ;;
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt*-darwin[[123456789]].*)
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt use_threads=false ;;
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt*-darwin*.*)
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt use_threads=true ;;
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt*)
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt use_threads=true ;;
2b8bed6681d1541474f022586cbe728dfce36880Evan Huntesac
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt
2b8bed6681d1541474f022586cbe728dfce36880Evan HuntAC_ARG_ENABLE(threads,
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt [ --enable-threads enable multithreading])
3e7aa395774dfb23fe36a30a70b13624487d37b8Evan Huntcase "$enable_threads" in
3e7aa395774dfb23fe36a30a70b13624487d37b8Evan Hunt yes)
3e7aa395774dfb23fe36a30a70b13624487d37b8Evan Hunt use_threads=true
3e7aa395774dfb23fe36a30a70b13624487d37b8Evan Hunt ;;
3e7aa395774dfb23fe36a30a70b13624487d37b8Evan Hunt no)
3e7aa395774dfb23fe36a30a70b13624487d37b8Evan Hunt use_threads=false
3e7aa395774dfb23fe36a30a70b13624487d37b8Evan Hunt ;;
3e7aa395774dfb23fe36a30a70b13624487d37b8Evan Hunt '')
3e7aa395774dfb23fe36a30a70b13624487d37b8Evan Hunt # Use system-dependent default
3e7aa395774dfb23fe36a30a70b13624487d37b8Evan Hunt ;;
3e7aa395774dfb23fe36a30a70b13624487d37b8Evan Hunt *)
3e7aa395774dfb23fe36a30a70b13624487d37b8Evan Hunt AC_MSG_ERROR([--enable-threads takes yes or no])
3e7aa395774dfb23fe36a30a70b13624487d37b8Evan Hunt ;;
3e7aa395774dfb23fe36a30a70b13624487d37b8Evan Huntesac
3e7aa395774dfb23fe36a30a70b13624487d37b8Evan Hunt
3e7aa395774dfb23fe36a30a70b13624487d37b8Evan Huntif $use_threads
2b8bed6681d1541474f022586cbe728dfce36880Evan Huntthen
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt AC_MSG_RESULT(yes)
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Huntelse
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt AC_MSG_RESULT(no)
2b8bed6681d1541474f022586cbe728dfce36880Evan Huntfi
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Huntif $use_threads
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Huntthen
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt #
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt # Search for / configure pthreads in a system-dependent fashion.
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt #
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt case "$host" in
30eec077db2bdcb6f2a0dc388a3cdde2ede75ec1Mark Andrews *-freebsd*)
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt # We don't want to set -lpthread as that break
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt # the ability to choose threads library at final
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt # link time and is not valid for all architectures.
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt PTHREAD=
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt if test "X$GCC" = "Xyes"; then
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt saved_cc="$CC"
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt CC="$CC -pthread"
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt AC_MSG_CHECKING(for gcc -pthread support);
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt AC_TRY_LINK([#include <pthread.h>],
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt [printf("%x\n", pthread_create);],
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt PTHREAD="yes"
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt AC_MSG_RESULT(yes),
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt AC_MSG_RESULT(no))
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt CC="$saved_cc"
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt fi
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt if test "X$PTHREAD" != "Xyes"; then
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt AC_CHECK_LIB(pthread, pthread_create,,
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt AC_CHECK_LIB(thr, thread_create,,
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt AC_CHECK_LIB(c_r, pthread_create,,
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt AC_CHECK_LIB(c, pthread_create,,
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt AC_MSG_ERROR("could not find thread libraries")))))
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt fi
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt ;;
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt *)
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt AC_CHECK_LIB(pthread, pthread_create,,
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt AC_CHECK_LIB(pthread, __pthread_create,,
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt AC_CHECK_LIB(pthread, __pthread_create_system,,
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt AC_CHECK_LIB(c_r, pthread_create,,
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt AC_CHECK_LIB(c, pthread_create,,
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt AC_MSG_ERROR("could not find thread libraries"))))))
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt ;;
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt esac
2b8bed6681d1541474f022586cbe728dfce36880Evan Huntfi
2b8bed6681d1541474f022586cbe728dfce36880Evan Hunt