1#
2# Begin pthreads checking.
3#
4# First, decide whether to use multithreading or not.
5#
6# Enable multithreading by default on systems where it is known
7# to work well, and where debugging of multithreaded programs
8# is supported.
9#
10
11AC_MSG_CHECKING(whether to build with thread support)
12
13case $host in
14*-dec-osf*)
15	use_threads=true ;;
16[*-solaris2.[0-6]])
17	# Thread signals are broken on Solaris 2.6; they are sometimes
18	# delivered to the wrong thread.
19	use_threads=false ;;
20*-solaris*)
21	use_threads=true ;;
22*-ibm-aix*)
23	use_threads=true ;;
24*-hp-hpux10*)
25	use_threads=false ;;
26*-hp-hpux11*)
27	use_threads=true ;;
28*-sgi-irix*)
29	use_threads=true ;;
30*-sco-sysv*uw*|*-*-sysv*UnixWare*)
31        # UnixWare
32	use_threads=false ;;
33*-*-sysv*OpenUNIX*)
34        # UnixWare
35	use_threads=true ;;
36*-netbsd*)
37	if test -r /usr/lib/libpthread.so ; then
38	    use_threads=true
39	else
40	    # Socket I/O optimizations introduced in 9.2 expose a
41	    # bug in unproven-pthreads; see PR #12650
42	    use_threads=false
43	fi
44	;;
45*-openbsd*)
46	# OpenBSD users have reported that named dumps core on
47	# startup when built with threads.
48	use_threads=false ;;
49*-freebsd*)
50	use_threads=false ;;
51*-bsdi[234]*)
52	# Thread signals do not work reliably on some versions of BSD/OS.
53	use_threads=false ;;
54*-bsdi5*)
55	use_threads=true ;;
56*-linux*)
57   	# Threads are disabled on Linux by default because most
58	# Linux kernels produce unusable core dumps from multithreaded
59	# programs, and because of limitations in setuid().
60	use_threads=false ;;
61*)
62	use_threads=false ;;
63esac
64
65AC_ARG_ENABLE(threads,
66	[  --enable-threads	enable multithreading])
67case "$enable_threads" in
68	yes)
69		use_threads=true
70		;;
71	no)
72		use_threads=false
73		;;
74	'')
75		# Use system-dependent default
76		;;
77	*)
78	    	AC_MSG_ERROR([--enable-threads takes yes or no])
79		;;
80esac
81
82if $use_threads
83then
84	AC_MSG_RESULT(yes)
85else
86	AC_MSG_RESULT(no)
87fi
88
89if $use_threads
90then
91	#
92	# Search for / configure pthreads in a system-dependent fashion.
93	#
94	case "$host" in
95	  *-netbsd*)
96		# NetBSD has multiple pthreads implementations.	 The
97		# recommended one to use is "unproven-pthreads".  The
98		# older "mit-pthreads" may also work on some NetBSD
99		# versions.  The PTL2 thread library does not
100		# currently work with bind9, but can be chosen with
101		# the --with-ptl2 option for those who wish to
102		# experiment with it.
103		CC="gcc"
104		AC_MSG_CHECKING(which NetBSD thread library to use)
105
106		AC_ARG_WITH(ptl2,
107[  --with-ptl2		on NetBSD, use the ptl2 thread library (experimental)],
108		    use_ptl2="$withval", use_ptl2="no")
109
110		: ${LOCALBASE:=/usr/pkg}
111
112		if test "X$use_ptl2" = "Xyes"
113		then
114			AC_MSG_RESULT(PTL2)
115			AC_MSG_WARN(
116[linking with PTL2 is highly experimental and not expected to work])
117			CC=ptlgcc
118		else
119			if test -r /usr/lib/libpthread.so
120			then
121				AC_MSG_RESULT(native)
122				LIBS="-lpthread $LIBS"
123			else
124				if test ! -d $LOCALBASE/pthreads
125				then
126					AC_MSG_RESULT(none)
127					AC_MSG_ERROR("could not find thread libraries")
128				fi
129
130				if $use_threads
131				then
132					AC_MSG_RESULT(mit-pthreads/unproven-pthreads)
133					pkg="$LOCALBASE/pthreads"
134					lib1="-L$pkg/lib -Wl,-R$pkg/lib"
135					lib2="-lpthread -lm -lgcc -lpthread"
136					LIBS="$lib1 $lib2 $LIBS"
137					CPPFLAGS="$CPPFLAGS -I$pkg/include"
138					STD_CINCLUDES="$STD_CINCLUDES -I$pkg/include"
139				fi
140			fi
141		fi
142		;;
143		*-freebsd*)
144			# We don't want to set -lpthread as that break
145			# the ability to choose threads library at final
146			# link time and is not valid for all architectures.
147
148			PTHREAD=
149			if test "X$GCC" = "Xyes"; then
150				saved_cc="$CC"
151				CC="$CC -pthread"
152				AC_MSG_CHECKING(for gcc -pthread support);
153				AC_TRY_LINK([#include <pthread.h>],
154					    [printf("%x\n", pthread_create);],
155					    PTHREAD="yes"
156					    AC_MSG_RESULT(yes),
157					    AC_MSG_RESULT(no))
158				CC="$saved_cc"
159			fi
160			if test "X$PTHREAD" != "Xyes"; then
161				AC_CHECK_LIB(pthread, pthread_create,,
162				AC_CHECK_LIB(thr, thread_create,,
163				AC_CHECK_LIB(c_r, pthread_create,,
164				AC_CHECK_LIB(c, pthread_create,,
165				AC_MSG_ERROR("could not find thread libraries")))))
166			fi
167			;;
168		*)
169			AC_CHECK_LIB(pthread, pthread_create,,
170				AC_CHECK_LIB(pthread, __pthread_create,,
171				AC_CHECK_LIB(pthread, __pthread_create_system,,
172				AC_CHECK_LIB(c_r, pthread_create,,
173				AC_CHECK_LIB(c, pthread_create,,
174				AC_MSG_ERROR("could not find thread libraries"))))))
175		;;
176	esac
177fi
178