use -pthread or equivalent when using threads; many fixes (?) for the threads detection under FreeBSD
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@15155 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
7e0a413dae
commit
009fead004
212
configure.in
212
configure.in
@ -96,9 +96,6 @@ dnl _REENTRANT" and it's easier to just define this symbol for these platforms
|
||||
dnl than checking it during run-time
|
||||
NEEDS_D_REENTRANT_FOR_R_FUNCS=0
|
||||
|
||||
dnl the additional define needed for MT programs
|
||||
CPP_MT_FLAG=-D_REENTRANT
|
||||
|
||||
dnl the list of all available toolkits
|
||||
dnl
|
||||
dnl update NUM_TOOLKITS calculation below when adding a new toolkit here!
|
||||
@ -183,7 +180,6 @@ case "${host}" in
|
||||
*-*-freebsd*)
|
||||
USE_BSD=1
|
||||
USE_FREEBSD=1
|
||||
CPP_MT_FLAG=-D_THREAD_SAFE
|
||||
AC_DEFINE(__FREEBSD__)
|
||||
AC_DEFINE(__BSD__)
|
||||
DEFAULT_DEFAULT_wxUSE_GTK=1
|
||||
@ -268,7 +264,6 @@ case "${host}" in
|
||||
dnl PowerPC Darwin based distributions (including Mac OS X)
|
||||
USE_BSD=1
|
||||
USE_DARWIN=1
|
||||
CPP_MT_FLAG=
|
||||
SO_SUFFIX=dylib
|
||||
AC_DEFINE(__BSD__)
|
||||
AC_DEFINE(__DARWIN__)
|
||||
@ -3121,17 +3116,19 @@ dnl thread support for Unix (always available under Win32)
|
||||
dnl ---------------------------------------------------------------------------
|
||||
|
||||
dnl under MSW we always have thread support
|
||||
CPP_MT_FLAG=
|
||||
if test "$TOOLKIT" != "MSW"; then
|
||||
|
||||
dnl the code below:
|
||||
dnl defines THREADS_OBJ which contains the object files to build
|
||||
dnl defines THREADS_LINK which contains the thread library to link with
|
||||
dnl defines wxUSE_THREADS=1 if thread support is activated
|
||||
dnl
|
||||
dnl defines THREADS_LINK and THREADS_CFLAGS which are the options
|
||||
dnl necessary to build the MT programs for the linker and compiler
|
||||
dnl respectively
|
||||
dnl
|
||||
dnl sets wxUSE_THREADS=1 if thread support is activated
|
||||
|
||||
THREADS_LINK=
|
||||
THREADS_OBJ=
|
||||
CODE_GEN_FLAGS=
|
||||
CODE_GEN_FLAGS_CXX=
|
||||
THREADS_CFLAGS=
|
||||
|
||||
if test "$wxUSE_THREADS" = "yes" ; then
|
||||
if test "$wxUSE_WINE" = 1 ; then
|
||||
@ -3145,67 +3142,130 @@ if test "$TOOLKIT" != "MSW"; then
|
||||
|
||||
if test "$wxUSE_THREADS" = "yes" ; then
|
||||
dnl find if POSIX threads are available
|
||||
dnl
|
||||
dnl the tests here are based on ACX_PTHREAD macro from autoconf macro
|
||||
dnl archive from http://ac-archive.sourceforge.net/
|
||||
dnl
|
||||
dnl thanks to Steven G. Johnson <stevenj@alum.mit.edu> and Alejandro
|
||||
dnl Forero Cuervo <bachue@bachue.com> for the original code
|
||||
|
||||
dnl AIX calls the library libpthreads - thanks IBM!
|
||||
if test "$USE_AIX" = 1; then
|
||||
THREADS_LIB=pthreads
|
||||
else
|
||||
THREADS_LIB=pthread
|
||||
fi
|
||||
dnl TODO: cache the result
|
||||
|
||||
dnl standard lib name is pthread
|
||||
dnl We no longer test for pthread-0.7 as it breaks compilation on some
|
||||
dnl glibc2 systems, especially for static linkage.
|
||||
AC_CHECK_LIB($THREADS_LIB, pthread_create, [
|
||||
THREADS_OBJ="threadpsx.lo"
|
||||
THREADS_LINK=$THREADS_LIB
|
||||
], [
|
||||
dnl thread functions are in libc_r under FreeBSD
|
||||
AC_CHECK_LIB(c_r, pthread_create, [
|
||||
THREADS_OBJ="threadpsx.lo"
|
||||
THREADS_LINK="c_r"
|
||||
], [
|
||||
dnl VZ: SGI threads are not supported currently
|
||||
AC_CHECK_HEADER(sys/prctl.h, [
|
||||
THREADS_OBJ="threadsgi.lo"
|
||||
])
|
||||
])
|
||||
])
|
||||
dnl define the list of the thread options to try in the loop below
|
||||
dnl with the convention that anything starting with '-' is a cpp flag
|
||||
dnl while anything else is a library (i.e. there is an implicit "-l")
|
||||
THREAD_OPTS="-pthread"
|
||||
case "${host}" in
|
||||
*-*-solaris2* | *-*-sunos4* )
|
||||
if test "x$GCC" = "xyes"; then
|
||||
dnl apparently some Solaris/gcc combinations use this one
|
||||
THREAD_OPTS="$THREAD_OPTS -pthreads"
|
||||
else
|
||||
THREAD_OPTS="-mt $THREAD_OPTS"
|
||||
fi
|
||||
;;
|
||||
*-*-freebsd*)
|
||||
dnl look, in order, for the kernel threads, then Linux threads
|
||||
dnl and finally the userland threads
|
||||
THREAD_OPTS="-kthread lthread $THREAD_OPTS c_r"
|
||||
;;
|
||||
*-*-aix* )
|
||||
dnl AIX calls the library libpthreads - thanks IBM!
|
||||
THREAD_OPTS="pthreads"
|
||||
;;
|
||||
*)
|
||||
dnl the default is ok but if it doesn't work try without it
|
||||
dnl just in case
|
||||
THREAD_OPTS="$THREAD_OPTS none"
|
||||
esac
|
||||
|
||||
if test -z "$THREADS_OBJ" ; then
|
||||
wxUSE_THREADS=no
|
||||
AC_MSG_WARN([No thread support on this system... disabled])
|
||||
fi
|
||||
dnl now test for all possibilities
|
||||
THREADS_OK=no
|
||||
for flag in $THREAD_OPTS; do
|
||||
case $flag in
|
||||
none)
|
||||
AC_MSG_CHECKING([whether pthreads work without any flags])
|
||||
;;
|
||||
|
||||
-*)
|
||||
AC_MSG_CHECKING([whether pthreads work with $flag])
|
||||
THREADS_CFLAGS="$flag"
|
||||
;;
|
||||
|
||||
*)
|
||||
AC_MSG_CHECKING([for the pthreads library -l$flag])
|
||||
THREADS_LINK="-l$flag"
|
||||
;;
|
||||
esac
|
||||
|
||||
save_LIBS="$LIBS"
|
||||
save_CFLAGS="$CFLAGS"
|
||||
LIBS="$THREADS_LINK $LIBS"
|
||||
CFLAGS="$CFLAGS $THREADS_CFLAGS"
|
||||
|
||||
AC_TRY_LINK([#include <pthread.h>],
|
||||
[pthread_create(0,0,0,0);],
|
||||
THREADS_OK=yes)
|
||||
|
||||
LIBS="$save_LIBS"
|
||||
CFLAGS="$save_CFLAGS"
|
||||
|
||||
AC_MSG_RESULT($THREADS_OK)
|
||||
if test "x$THREADS_OK" = "xyes"; then
|
||||
break;
|
||||
fi
|
||||
|
||||
THREADS_LINK=""
|
||||
THREADS_CFLAGS=""
|
||||
done
|
||||
|
||||
if test "x$THREADS_OK" != "xyes"; then
|
||||
wxUSE_THREADS=no
|
||||
AC_MSG_WARN([No thread support on this system... disabled])
|
||||
else
|
||||
AC_MSG_CHECKING([if more special flags are required for pthreads])
|
||||
flag=no
|
||||
case "${host}" in
|
||||
*-aix* | *-freebsd*)
|
||||
flag="-D_THREAD_SAFE"
|
||||
;;
|
||||
*solaris* | alpha*-osf*)
|
||||
flag="-D_REENTRANT"
|
||||
;;
|
||||
esac
|
||||
AC_MSG_RESULT(${flag})
|
||||
if test "x$flag" != xno; then
|
||||
THREADS_CFLAGS="$flag $THREADS_CFLAGS"
|
||||
fi
|
||||
|
||||
if test "x$THREADS_LINK" != "x"; then
|
||||
LIBS="$THREADS_LINK $LIBS"
|
||||
fi
|
||||
|
||||
if test "x$THREADS_CFLAGS" != "x"; then
|
||||
CFLAGS="$CFLAGS $THREADS_CFLAGS"
|
||||
CXXFLAGS="$CXXFLAGS $THREADS_CFLAGS"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
dnl do other tests only if we are using threads
|
||||
if test "$wxUSE_THREADS" = "yes" ; then
|
||||
AC_CHECK_FUNCS(thr_setconcurrency)
|
||||
|
||||
dnl define autoconf macro to check for given function in both pthread and
|
||||
dnl posix4 libraries
|
||||
dnl usage: AC_FUNC_THREAD(FUNCTION_NAME)
|
||||
dnl VZ: TODO
|
||||
dnl AC_DEFUN(AC_FUNC_THREAD,
|
||||
dnl [
|
||||
dnl AC_CHECK_LIB($THREADS_LINK, $1,
|
||||
dnl AC_DEFINE(HAVE_`'translit($1, `A-Z', 'a-z'),
|
||||
dnl [AC_CHECK_LIB([posix4], $1,
|
||||
dnl [AC_DEFINE(HAVE_`'translit($1, `A-Z', 'a-z'))
|
||||
dnl POSIX4_LINK=" -lposix4"
|
||||
dnl ])
|
||||
dnl ])
|
||||
dnl ])
|
||||
|
||||
AC_CHECK_HEADERS(sched.h)
|
||||
|
||||
AC_CHECK_LIB($THREADS_LINK, sched_yield,
|
||||
AC_DEFINE(HAVE_SCHED_YIELD),
|
||||
[AC_CHECK_LIB([posix4], sched_yield,
|
||||
[AC_DEFINE(HAVE_SCHED_YIELD) POSIX4_LINK=" -lposix4"],
|
||||
AC_MSG_WARN(wxThread::Yield will not work properly)
|
||||
)]
|
||||
)
|
||||
if test "$ac_cv_header_sched_h" = "yes"; then
|
||||
AC_CHECK_FUNC(sched_yield,
|
||||
AC_DEFINE(HAVE_SCHED_YIELD),
|
||||
[
|
||||
AC_CHECK_LIB(posix4,
|
||||
sched_yield,
|
||||
[AC_DEFINE(HAVE_SCHED_YIELD) POSIX4_LINK=" -lposix4"],
|
||||
AC_MSG_WARN(wxThread::Yield will not work properly)
|
||||
)
|
||||
]
|
||||
)
|
||||
fi
|
||||
|
||||
dnl to be able to set the thread priority, we need to have all of the
|
||||
dnl following functions:
|
||||
@ -3214,9 +3274,9 @@ if test "$TOOLKIT" != "MSW"; then
|
||||
dnl (this one can be in either libpthread or libposix4 (under Solaris))
|
||||
dnl 3. pthread_attr_getschedparam and pthread_attr_setschedparam
|
||||
HAVE_PRIOR_FUNCS=0
|
||||
AC_CHECK_LIB($THREADS_LINK, pthread_attr_getschedpolicy,
|
||||
AC_CHECK_LIB($THREADS_LINK, pthread_attr_setschedparam,
|
||||
AC_CHECK_LIB($THREADS_LINK, sched_get_priority_max,
|
||||
AC_CHECK_FUNC(pthread_attr_getschedpolicy,
|
||||
AC_CHECK_FUNC(pthread_attr_setschedparam,
|
||||
AC_CHECK_FUNC(sched_get_priority_max,
|
||||
HAVE_PRIOR_FUNCS=1,
|
||||
AC_CHECK_LIB([posix4], sched_get_priority_max,
|
||||
[
|
||||
@ -3234,9 +3294,9 @@ if test "$TOOLKIT" != "MSW"; then
|
||||
AC_MSG_WARN(Setting thread priority will not work)
|
||||
fi
|
||||
|
||||
AC_CHECK_LIB($THREADS_LINK, pthread_cancel,
|
||||
AC_DEFINE(HAVE_PTHREAD_CANCEL),
|
||||
AC_MSG_WARN([wxThread::Kill() will not work properly]))
|
||||
AC_CHECK_FUNC(pthread_cancel,
|
||||
AC_DEFINE(HAVE_PTHREAD_CANCEL),
|
||||
AC_MSG_WARN([wxThread::Kill() will not work properly]))
|
||||
|
||||
AC_CACHE_CHECK([for pthread_cleanup_push/pop], wx_cv_func_pthread_cleanup_push,
|
||||
[
|
||||
@ -3310,16 +3370,6 @@ if test "$TOOLKIT" != "MSW"; then
|
||||
AC_MSG_WARN([wxMutex won't be recursive on this platform])
|
||||
fi
|
||||
fi
|
||||
|
||||
THREADS_LINK=" -l$THREADS_LINK"
|
||||
|
||||
dnl building MT programs under Solaris with the native compiler requires -mt
|
||||
dnl switch
|
||||
if test "$USE_SOLARIS" = "yes" -a "$GCC" != "yes"; then
|
||||
CPPFLAGS="$CFLAGS -mt"
|
||||
CXXFLAGS="$CXXFLAGS -mt"
|
||||
LDFLAGS="$LDFLAGS -mt"
|
||||
fi
|
||||
fi
|
||||
|
||||
dnl from if !MSW
|
||||
@ -3329,7 +3379,7 @@ if test "$wxUSE_THREADS" = "yes"; then
|
||||
AC_DEFINE(wxUSE_THREADS)
|
||||
|
||||
dnl we must define _REENTRANT or something along these lines for MT code
|
||||
TOOLCHAIN_DEFS="$TOOLCHAIN_DEFS $CPP_MT_FLAG"
|
||||
TOOLCHAIN_DEFS="$TOOLCHAIN_DEFS $THREADS_CFLAGS"
|
||||
|
||||
SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS thread"
|
||||
else
|
||||
@ -3396,6 +3446,8 @@ if test "$wxUSE_PROFILE" = "yes" ; then
|
||||
PROFILE=" -pg"
|
||||
fi
|
||||
|
||||
CODE_GEN_FLAGS=
|
||||
CODE_GEN_FLAGS_CXX=
|
||||
if test "$GCC" = "yes" ; then
|
||||
if test "$wxUSE_NO_RTTI" = "yes" ; then
|
||||
CODE_GEN_FLAGS_CXX="$CODE_GEN_FLAGS_CXX -fno-rtti"
|
||||
@ -4678,7 +4730,7 @@ dnl FIXME: should this be covered by the conditional above
|
||||
dnl given the -lm comment there? Or should that comment (and
|
||||
dnl this one) be removed.. [ 7 Nov 2001 ]
|
||||
|
||||
LIBS="$ZLIB_LINK $POSIX4_LINK $INET_LINK $WCHAR_LINK $THREADS_LINK $DL_LINK -lm $LIBS"
|
||||
LIBS="$ZLIB_LINK $POSIX4_LINK $INET_LINK $WCHAR_LINK $DL_LINK -lm $LIBS"
|
||||
|
||||
if test "$wxUSE_GUI" = "yes"; then
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user