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:
Vadim Zeitlin
2002-04-15 20:38:07 +00:00
parent 7e0a413dae
commit 009fead004
2 changed files with 1013 additions and 963 deletions

1734
configure vendored

File diff suppressed because it is too large Load Diff

View File

@@ -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 dnl than checking it during run-time
NEEDS_D_REENTRANT_FOR_R_FUNCS=0 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 the list of all available toolkits
dnl dnl
dnl update NUM_TOOLKITS calculation below when adding a new toolkit here! dnl update NUM_TOOLKITS calculation below when adding a new toolkit here!
@@ -183,7 +180,6 @@ case "${host}" in
*-*-freebsd*) *-*-freebsd*)
USE_BSD=1 USE_BSD=1
USE_FREEBSD=1 USE_FREEBSD=1
CPP_MT_FLAG=-D_THREAD_SAFE
AC_DEFINE(__FREEBSD__) AC_DEFINE(__FREEBSD__)
AC_DEFINE(__BSD__) AC_DEFINE(__BSD__)
DEFAULT_DEFAULT_wxUSE_GTK=1 DEFAULT_DEFAULT_wxUSE_GTK=1
@@ -268,7 +264,6 @@ case "${host}" in
dnl PowerPC Darwin based distributions (including Mac OS X) dnl PowerPC Darwin based distributions (including Mac OS X)
USE_BSD=1 USE_BSD=1
USE_DARWIN=1 USE_DARWIN=1
CPP_MT_FLAG=
SO_SUFFIX=dylib SO_SUFFIX=dylib
AC_DEFINE(__BSD__) AC_DEFINE(__BSD__)
AC_DEFINE(__DARWIN__) AC_DEFINE(__DARWIN__)
@@ -3121,17 +3116,19 @@ dnl thread support for Unix (always available under Win32)
dnl --------------------------------------------------------------------------- dnl ---------------------------------------------------------------------------
dnl under MSW we always have thread support dnl under MSW we always have thread support
CPP_MT_FLAG=
if test "$TOOLKIT" != "MSW"; then if test "$TOOLKIT" != "MSW"; then
dnl the code below: dnl the code below:
dnl defines THREADS_OBJ which contains the object files to build dnl
dnl defines THREADS_LINK which contains the thread library to link with dnl defines THREADS_LINK and THREADS_CFLAGS which are the options
dnl defines wxUSE_THREADS=1 if thread support is activated 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_LINK=
THREADS_OBJ= THREADS_CFLAGS=
CODE_GEN_FLAGS=
CODE_GEN_FLAGS_CXX=
if test "$wxUSE_THREADS" = "yes" ; then if test "$wxUSE_THREADS" = "yes" ; then
if test "$wxUSE_WINE" = 1 ; then if test "$wxUSE_WINE" = 1 ; then
@@ -3145,36 +3142,110 @@ if test "$TOOLKIT" != "MSW"; then
if test "$wxUSE_THREADS" = "yes" ; then if test "$wxUSE_THREADS" = "yes" ; then
dnl find if POSIX threads are available 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! dnl TODO: cache the result
if test "$USE_AIX" = 1; then
THREADS_LIB=pthreads 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 else
THREADS_LIB=pthread 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
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 fi
dnl standard lib name is pthread THREADS_LINK=""
dnl We no longer test for pthread-0.7 as it breaks compilation on some THREADS_CFLAGS=""
dnl glibc2 systems, especially for static linkage. done
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"
])
])
])
if test -z "$THREADS_OBJ" ; then if test "x$THREADS_OK" != "xyes"; then
wxUSE_THREADS=no wxUSE_THREADS=no
AC_MSG_WARN([No thread support on this system... disabled]) 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
fi fi
@@ -3182,30 +3253,19 @@ if test "$TOOLKIT" != "MSW"; then
if test "$wxUSE_THREADS" = "yes" ; then if test "$wxUSE_THREADS" = "yes" ; then
AC_CHECK_FUNCS(thr_setconcurrency) 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_HEADERS(sched.h)
if test "$ac_cv_header_sched_h" = "yes"; then
AC_CHECK_LIB($THREADS_LINK, sched_yield, AC_CHECK_FUNC(sched_yield,
AC_DEFINE(HAVE_SCHED_YIELD), AC_DEFINE(HAVE_SCHED_YIELD),
[AC_CHECK_LIB([posix4], sched_yield, [
AC_CHECK_LIB(posix4,
sched_yield,
[AC_DEFINE(HAVE_SCHED_YIELD) POSIX4_LINK=" -lposix4"], [AC_DEFINE(HAVE_SCHED_YIELD) POSIX4_LINK=" -lposix4"],
AC_MSG_WARN(wxThread::Yield will not work properly) 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 to be able to set the thread priority, we need to have all of the
dnl following functions: 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 (this one can be in either libpthread or libposix4 (under Solaris))
dnl 3. pthread_attr_getschedparam and pthread_attr_setschedparam dnl 3. pthread_attr_getschedparam and pthread_attr_setschedparam
HAVE_PRIOR_FUNCS=0 HAVE_PRIOR_FUNCS=0
AC_CHECK_LIB($THREADS_LINK, pthread_attr_getschedpolicy, AC_CHECK_FUNC(pthread_attr_getschedpolicy,
AC_CHECK_LIB($THREADS_LINK, pthread_attr_setschedparam, AC_CHECK_FUNC(pthread_attr_setschedparam,
AC_CHECK_LIB($THREADS_LINK, sched_get_priority_max, AC_CHECK_FUNC(sched_get_priority_max,
HAVE_PRIOR_FUNCS=1, HAVE_PRIOR_FUNCS=1,
AC_CHECK_LIB([posix4], sched_get_priority_max, AC_CHECK_LIB([posix4], sched_get_priority_max,
[ [
@@ -3234,7 +3294,7 @@ if test "$TOOLKIT" != "MSW"; then
AC_MSG_WARN(Setting thread priority will not work) AC_MSG_WARN(Setting thread priority will not work)
fi fi
AC_CHECK_LIB($THREADS_LINK, pthread_cancel, AC_CHECK_FUNC(pthread_cancel,
AC_DEFINE(HAVE_PTHREAD_CANCEL), AC_DEFINE(HAVE_PTHREAD_CANCEL),
AC_MSG_WARN([wxThread::Kill() will not work properly])) AC_MSG_WARN([wxThread::Kill() will not work properly]))
@@ -3310,16 +3370,6 @@ if test "$TOOLKIT" != "MSW"; then
AC_MSG_WARN([wxMutex won't be recursive on this platform]) AC_MSG_WARN([wxMutex won't be recursive on this platform])
fi fi
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 fi
dnl from if !MSW dnl from if !MSW
@@ -3329,7 +3379,7 @@ if test "$wxUSE_THREADS" = "yes"; then
AC_DEFINE(wxUSE_THREADS) AC_DEFINE(wxUSE_THREADS)
dnl we must define _REENTRANT or something along these lines for MT code 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" SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS thread"
else else
@@ -3396,6 +3446,8 @@ if test "$wxUSE_PROFILE" = "yes" ; then
PROFILE=" -pg" PROFILE=" -pg"
fi fi
CODE_GEN_FLAGS=
CODE_GEN_FLAGS_CXX=
if test "$GCC" = "yes" ; then if test "$GCC" = "yes" ; then
if test "$wxUSE_NO_RTTI" = "yes" ; then if test "$wxUSE_NO_RTTI" = "yes" ; then
CODE_GEN_FLAGS_CXX="$CODE_GEN_FLAGS_CXX -fno-rtti" 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 given the -lm comment there? Or should that comment (and
dnl this one) be removed.. [ 7 Nov 2001 ] 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 if test "$wxUSE_GUI" = "yes"; then