Commit 6bfa9cc3 authored by Sam Lantinga's avatar Sam Lantinga

Unified the thread detection code for UNIX platforms

--HG--
extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%40400
parent 35d6bbe9
...@@ -1099,6 +1099,34 @@ CheckInputEvents() ...@@ -1099,6 +1099,34 @@ CheckInputEvents()
fi fi
} }
dnl See if we can use GNU pth library for threads
CheckPTH()
{
dnl Check for pth support
AC_ARG_ENABLE(pth,
[ --enable-pth use GNU pth library for multi-threading [default=yes]],
, enable_pth=yes)
if test x$enable_threads = xyes -a x$enable_pth = xyes; then
AC_PATH_PROG(PTH_CONFIG, pth-config, no)
if test "$PTH_CONFIG" = "no"; then
use_pth=no
else
PTH_CFLAGS=`$PTH_CONFIG --cflags`
PTH_LIBS=`$PTH_CONFIG --libs --all`
SDL_CFLAGS="$SDL_CFLAGS $PTH_CFLAGS"
SDL_LIBS="$SDL_LIBS $PTH_LIBS"
CFLAGS="$CFLAGS -DENABLE_PTH"
use_pth=yes
fi
AC_MSG_CHECKING(pth)
if test "x$use_pth" = xyes; then
AC_MSG_RESULT(yes)
else
AC_MSG_RESULT(no)
fi
fi
}
dnl See what type of thread model to use on Linux and Solaris dnl See what type of thread model to use on Linux and Solaris
CheckPTHREAD() CheckPTHREAD()
{ {
...@@ -1193,6 +1221,9 @@ CheckPTHREAD() ...@@ -1193,6 +1221,9 @@ CheckPTHREAD()
]) ])
# Some systems have broken recursive mutex implementations # Some systems have broken recursive mutex implementations
case "$target" in case "$target" in
*-*-darwin*)
has_recursive_mutexes=no
;;
*-*-solaris*) *-*-solaris*)
has_recursive_mutexes=no has_recursive_mutexes=no
;; ;;
...@@ -1253,45 +1284,80 @@ CheckPTHREAD() ...@@ -1253,45 +1284,80 @@ CheckPTHREAD()
CFLAGS="$CFLAGS -DHAVE_SEMUN" CFLAGS="$CFLAGS -DHAVE_SEMUN"
fi fi
# See if we can use clone() on Linux directly # See if we can use GNU Pth or clone() on Linux directly
use_clone=no
if test x$enable_threads = xyes -a x$use_pthreads != xyes; then if test x$enable_threads = xyes -a x$use_pthreads != xyes; then
CheckPTH
if test x$use_pth != xyes; then
case "$target" in case "$target" in
*-*-linux*) *-*-linux*)
use_clone=yes use_clone=yes
;; ;;
*)
CFLAGS="$CFLAGS -DFORK_HACK"
;;
esac esac
fi fi
fi
} }
dnl See if we can use GNU pth library for threads # Note that we need to have either semaphores or to have mutexes and
CheckPTH() # condition variables to implement all thread synchronization primitives
CopyUnixThreadSource()
{ {
dnl Check for pth support if test x$use_pthreads = xyes -o x$use_clone = xyes; then
AC_ARG_ENABLE(pth, # Basic thread creation functions
[ --enable-pth use GNU pth library for multi-threading [default=yes]], COPY_ARCH_SRC(src/thread, linux, SDL_systhread.c)
, enable_pth=yes) if test x$use_pthreads != xyes; then
if test x$enable_threads = xyes -a x$enable_pth = xyes; then COPY_ARCH_SRC(src/thread, linux, clone.S)
AC_PATH_PROG(PTH_CONFIG, pth-config, no) fi
if test "$PTH_CONFIG" = "no"; then COPY_ARCH_SRC(src/thread, linux, SDL_systhread_c.h)
use_pth=no
# Semaphores
# We can fake these with mutexes and condition variables if necessary
if test x$use_pthreads = xyes -a x$have_pthread_sem != xyes; then
COPY_ARCH_SRC(src/thread, generic, SDL_syssem.c)
else else
PTH_CFLAGS=`$PTH_CONFIG --cflags` COPY_ARCH_SRC(src/thread, linux, SDL_syssem.c)
PTH_LIBS=`$PTH_CONFIG --libs --all`
SDL_CFLAGS="$SDL_CFLAGS $PTH_CFLAGS"
SDL_LIBS="$SDL_LIBS $PTH_LIBS"
CFLAGS="$CFLAGS -DENABLE_PTH"
use_pth=yes
fi fi
AC_MSG_CHECKING(pth) COPY_ARCH_SRC(src/thread, generic, SDL_syssem_c.h)
if test "x$use_pth" = xyes; then
AC_MSG_RESULT(yes) # Mutexes
# We can fake these with semaphores if necessary
case "$target" in
*-*-bsdi*)
COPY_ARCH_SRC(src/thread, bsdi, SDL_syssem.c)
COPY_ARCH_SRC(src/thread, generic, SDL_syssem_c.h)
;;
*)
if test x$glibc20_pthreads = xyes; then
COPY_ARCH_SRC(src/thread, generic, SDL_sysmutex.c)
COPY_ARCH_SRC(src/thread, generic, SDL_sysmutex_c.h)
else else
AC_MSG_RESULT(no) COPY_ARCH_SRC(src/thread, linux, SDL_sysmutex.c)
COPY_ARCH_SRC(src/thread, linux, SDL_sysmutex_c.h)
fi
;;
esac
# Condition variables
# We can fake these with semaphores and mutexes if necessary
if test x$glibc20_pthreads = xyes -o x$has_recursive_mutexes != xyes; then
COPY_ARCH_SRC(src/thread, generic, SDL_syscond.c)
else
COPY_ARCH_SRC(src/thread, linux, SDL_syscond.c)
fi fi
COPY_ARCH_SRC(src/thread, generic, SDL_syscond_c.h)
elif text x$use_pth = xyes; then
COPY_ARCH_SRC(src/thread, pth, SDL_systhread.c)
COPY_ARCH_SRC(src/thread, pth, SDL_systhread_c.h)
COPY_ARCH_SRC(src/thread, pth, SDL_sysmutex.c)
COPY_ARCH_SRC(src/thread, pth, SDL_sysmutex_c.h)
COPY_ARCH_SRC(src/thread, pth, SDL_syscond.c)
COPY_ARCH_SRC(src/thread, pth, SDL_syscond_c.h)
COPY_ARCH_SRC(src/thread, generic, SDL_syssem.c)
COPY_ARCH_SRC(src/thread, generic, SDL_syssem_c.h)
else
AC_MSG_ERROR([
*** No thread support detected
])
fi fi
} }
...@@ -1593,32 +1659,7 @@ case "$target" in ...@@ -1593,32 +1659,7 @@ case "$target" in
fi fi
# Set up files for the thread library # Set up files for the thread library
if test x$enable_threads = xyes; then if test x$enable_threads = xyes; then
if test x$use_pthreads != xyes; then CopyUnixThreadSource
COPY_ARCH_SRC(src/thread, linux, clone.S)
fi
COPY_ARCH_SRC(src/thread, linux, SDL_systhread.c)
COPY_ARCH_SRC(src/thread, linux, SDL_systhread_c.h)
if test x$use_pthreads = xyes -a x$have_pthread_sem != xyes; then
COPY_ARCH_SRC(src/thread, generic, SDL_syssem.c)
else
COPY_ARCH_SRC(src/thread, linux, SDL_syssem.c)
fi
COPY_ARCH_SRC(src/thread, generic, SDL_syssem_c.h)
if test x$glibc20_pthreads = xyes; then
COPY_ARCH_SRC(src/thread, generic, SDL_sysmutex.c)
COPY_ARCH_SRC(src/thread, generic, SDL_sysmutex_c.h)
COPY_ARCH_SRC(src/thread, generic, SDL_syscond.c)
COPY_ARCH_SRC(src/thread, generic, SDL_syscond_c.h)
else
COPY_ARCH_SRC(src/thread, linux, SDL_sysmutex.c)
COPY_ARCH_SRC(src/thread, linux, SDL_sysmutex_c.h)
if test x$has_recursive_mutexes != xyes; then
COPY_ARCH_SRC(src/thread, generic, SDL_syscond.c)
else
COPY_ARCH_SRC(src/thread, linux, SDL_syscond.c)
fi
COPY_ARCH_SRC(src/thread, generic, SDL_syscond_c.h)
fi
fi fi
# Set up files for the timer library # Set up files for the timer library
if test x$enable_timers = xyes; then if test x$enable_timers = xyes; then
...@@ -1663,14 +1704,7 @@ case "$target" in ...@@ -1663,14 +1704,7 @@ case "$target" in
fi fi
# Set up files for the thread library # Set up files for the thread library
if test x$enable_threads = xyes; then if test x$enable_threads = xyes; then
COPY_ARCH_SRC(src/thread, linux, SDL_systhread.c) CopyUnixThreadSource
COPY_ARCH_SRC(src/thread, linux, SDL_systhread_c.h)
COPY_ARCH_SRC(src/thread, linux, SDL_sysmutex.c)
COPY_ARCH_SRC(src/thread, linux, SDL_sysmutex_c.h)
COPY_ARCH_SRC(src/thread, bsdi, SDL_syssem.c)
COPY_ARCH_SRC(src/thread, generic, SDL_syssem_c.h)
COPY_ARCH_SRC(src/thread, linux, SDL_syscond.c)
COPY_ARCH_SRC(src/thread, generic, SDL_syscond_c.h)
fi fi
# Set up files for the timer library # Set up files for the timer library
if test x$enable_timers = xyes; then if test x$enable_timers = xyes; then
...@@ -1711,18 +1745,7 @@ case "$target" in ...@@ -1711,18 +1745,7 @@ case "$target" in
fi fi
# Set up files for the thread library # Set up files for the thread library
if test x$enable_threads = xyes; then if test x$enable_threads = xyes; then
COPY_ARCH_SRC(src/thread, linux, SDL_systhread.c) CopyUnixThreadSource
COPY_ARCH_SRC(src/thread, linux, SDL_systhread_c.h)
COPY_ARCH_SRC(src/thread, linux, SDL_sysmutex.c)
COPY_ARCH_SRC(src/thread, linux, SDL_sysmutex_c.h)
if test x$use_pthreads = xyes -a x$have_pthread_sem != xyes; then
COPY_ARCH_SRC(src/thread, generic, SDL_syssem.c)
else
COPY_ARCH_SRC(src/thread, linux, SDL_syssem.c)
fi
COPY_ARCH_SRC(src/thread, generic, SDL_syssem_c.h)
COPY_ARCH_SRC(src/thread, linux, SDL_syscond.c)
COPY_ARCH_SRC(src/thread, generic, SDL_syscond_c.h)
fi fi
# Set up files for the timer library # Set up files for the timer library
if test x$enable_timers = xyes; then if test x$enable_timers = xyes; then
...@@ -1759,18 +1782,7 @@ case "$target" in ...@@ -1759,18 +1782,7 @@ case "$target" in
fi fi
# Set up files for the thread library # Set up files for the thread library
if test x$enable_threads = xyes; then if test x$enable_threads = xyes; then
COPY_ARCH_SRC(src/thread, linux, SDL_systhread.c) CopyUnixThreadSource
COPY_ARCH_SRC(src/thread, linux, SDL_systhread_c.h)
COPY_ARCH_SRC(src/thread, linux, SDL_sysmutex.c)
COPY_ARCH_SRC(src/thread, linux, SDL_sysmutex_c.h)
if test x$use_pthreads = xyes -a x$have_pthread_sem != xyes; then
COPY_ARCH_SRC(src/thread, generic, SDL_syssem.c)
else
COPY_ARCH_SRC(src/thread, linux, SDL_syssem.c)
fi
COPY_ARCH_SRC(src/thread, generic, SDL_syssem_c.h)
COPY_ARCH_SRC(src/thread, linux, SDL_syscond.c)
COPY_ARCH_SRC(src/thread, generic, SDL_syscond_c.h)
fi fi
# Set up files for the timer library # Set up files for the timer library
if test x$enable_timers = xyes; then if test x$enable_timers = xyes; then
...@@ -1813,18 +1825,7 @@ case "$target" in ...@@ -1813,18 +1825,7 @@ case "$target" in
fi fi
# Set up files for the thread library # Set up files for the thread library
if test x$enable_threads = xyes; then if test x$enable_threads = xyes; then
COPY_ARCH_SRC(src/thread, linux, SDL_systhread.c) CopyUnixThreadSource
COPY_ARCH_SRC(src/thread, linux, SDL_systhread_c.h)
COPY_ARCH_SRC(src/thread, linux, SDL_sysmutex.c)
COPY_ARCH_SRC(src/thread, linux, SDL_sysmutex_c.h)
if test x$use_pthreads = xyes -a x$have_pthread_sem != xyes; then
COPY_ARCH_SRC(src/thread, generic, SDL_syssem.c)
else
COPY_ARCH_SRC(src/thread, linux, SDL_syssem.c)
fi
COPY_ARCH_SRC(src/thread, generic, SDL_syssem_c.h)
COPY_ARCH_SRC(src/thread, linux, SDL_syscond.c)
COPY_ARCH_SRC(src/thread, generic, SDL_syscond_c.h)
fi fi
# Set up files for the timer library # Set up files for the timer library
if test x$enable_timers = xyes; then if test x$enable_timers = xyes; then
...@@ -1868,14 +1869,7 @@ case "$target" in ...@@ -1868,14 +1869,7 @@ case "$target" in
fi fi
# Set up files for the thread library # Set up files for the thread library
if test x$enable_threads = xyes; then if test x$enable_threads = xyes; then
COPY_ARCH_SRC(src/thread, generic, SDL_systhread.c) CopyUnixThreadSource
COPY_ARCH_SRC(src/thread, generic, SDL_systhread_c.h)
COPY_ARCH_SRC(src/thread, generic, SDL_sysmutex.c)
COPY_ARCH_SRC(src/thread, generic, SDL_sysmutex_c.h)
COPY_ARCH_SRC(src/thread, generic, SDL_syssem.c)
COPY_ARCH_SRC(src/thread, generic, SDL_syssem_c.h)
COPY_ARCH_SRC(src/thread, generic, SDL_syscond.c)
COPY_ARCH_SRC(src/thread, generic, SDL_syscond_c.h)
fi fi
# Set up files for the timer library # Set up files for the timer library
if test x$enable_timers = xyes; then if test x$enable_timers = xyes; then
...@@ -1918,14 +1912,7 @@ case "$target" in ...@@ -1918,14 +1912,7 @@ case "$target" in
fi fi
# Set up files for the thread library # Set up files for the thread library
if test x$enable_threads = xyes; then if test x$enable_threads = xyes; then
COPY_ARCH_SRC(src/thread, linux, SDL_systhread.c) CopyUnixThreadSource
COPY_ARCH_SRC(src/thread, linux, SDL_systhread_c.h)
COPY_ARCH_SRC(src/thread, linux, SDL_sysmutex.c)
COPY_ARCH_SRC(src/thread, linux, SDL_sysmutex_c.h)
COPY_ARCH_SRC(src/thread, linux, SDL_syssem.c)
COPY_ARCH_SRC(src/thread, generic, SDL_syssem_c.h)
COPY_ARCH_SRC(src/thread, generic, SDL_syscond.c)
COPY_ARCH_SRC(src/thread, generic, SDL_syscond_c.h)
fi fi
# Set up files for the timer library # Set up files for the timer library
if test x$enable_timers = xyes; then if test x$enable_timers = xyes; then
...@@ -1966,19 +1953,8 @@ case "$target" in ...@@ -1966,19 +1953,8 @@ case "$target" in
fi fi
# Set up files for the thread library # Set up files for the thread library
if test x$enable_threads = xyes; then if test x$enable_threads = xyes; then
if test x$use_pthreads = xyes; then if test x$use_pthreads = xyes -o x$use_pth = xyes; then
COPY_ARCH_SRC(src/thread, linux, SDL_systhread.c) CopyUnixThreadSource
COPY_ARCH_SRC(src/thread, linux, SDL_systhread_c.h)
COPY_ARCH_SRC(src/thread, linux, SDL_sysmutex.c)
COPY_ARCH_SRC(src/thread, linux, SDL_sysmutex_c.h)
if test x$have_pthread_sem != xyes; then
COPY_ARCH_SRC(src/thread, generic, SDL_syssem.c)
else
COPY_ARCH_SRC(src/thread, linux, SDL_syssem.c)
fi
COPY_ARCH_SRC(src/thread, generic, SDL_syssem_c.h)
COPY_ARCH_SRC(src/thread, linux, SDL_syscond.c)
COPY_ARCH_SRC(src/thread, generic, SDL_syscond_c.h)
else else
COPY_ARCH_SRC(src/thread, irix, SDL_systhread.c) COPY_ARCH_SRC(src/thread, irix, SDL_systhread.c)
COPY_ARCH_SRC(src/thread, irix, SDL_systhread_c.h) COPY_ARCH_SRC(src/thread, irix, SDL_systhread_c.h)
...@@ -2029,14 +2005,7 @@ case "$target" in ...@@ -2029,14 +2005,7 @@ case "$target" in
fi fi
# Set up files for the thread library # Set up files for the thread library
if test x$enable_threads = xyes; then if test x$enable_threads = xyes; then
COPY_ARCH_SRC(src/thread, linux, SDL_systhread.c) CopyUnixThreadSource
COPY_ARCH_SRC(src/thread, linux, SDL_systhread_c.h)
COPY_ARCH_SRC(src/thread, linux, SDL_sysmutex.c)
COPY_ARCH_SRC(src/thread, linux, SDL_sysmutex_c.h)
COPY_ARCH_SRC(src/thread, linux, SDL_syssem.c)
COPY_ARCH_SRC(src/thread, generic, SDL_syssem_c.h)
COPY_ARCH_SRC(src/thread, linux, SDL_syscond.c)
COPY_ARCH_SRC(src/thread, generic, SDL_syscond_c.h)
fi fi
# Set up files for the timer library # Set up files for the timer library
if test x$enable_timers = xyes; then if test x$enable_timers = xyes; then
...@@ -2075,14 +2044,7 @@ case "$target" in ...@@ -2075,14 +2044,7 @@ case "$target" in
fi fi
# Set up files for the thread library # Set up files for the thread library
if test x$enable_threads = xyes; then if test x$enable_threads = xyes; then
COPY_ARCH_SRC(src/thread, linux, SDL_systhread.c) CopyUnixThreadSource
COPY_ARCH_SRC(src/thread, linux, SDL_systhread_c.h)
COPY_ARCH_SRC(src/thread, linux, SDL_sysmutex.c)
COPY_ARCH_SRC(src/thread, linux, SDL_sysmutex_c.h)
COPY_ARCH_SRC(src/thread, linux, SDL_syssem.c)
COPY_ARCH_SRC(src/thread, generic, SDL_syssem_c.h)
COPY_ARCH_SRC(src/thread, linux, SDL_syscond.c)
COPY_ARCH_SRC(src/thread, generic, SDL_syscond_c.h)
fi fi
# Set up files for the timer library # Set up files for the timer library
if test x$enable_timers = xyes; then if test x$enable_timers = xyes; then
...@@ -2122,14 +2084,7 @@ case "$target" in ...@@ -2122,14 +2084,7 @@ case "$target" in
fi fi
# Set up files for the thread library # Set up files for the thread library
if test x$enable_threads = xyes; then if test x$enable_threads = xyes; then
COPY_ARCH_SRC(src/thread, linux, SDL_systhread.c) CopyUnixThreadSource
COPY_ARCH_SRC(src/thread, linux, SDL_systhread_c.h)
COPY_ARCH_SRC(src/thread, linux, SDL_sysmutex.c)
COPY_ARCH_SRC(src/thread, linux, SDL_sysmutex_c.h)
COPY_ARCH_SRC(src/thread, generic, SDL_syssem.c)
COPY_ARCH_SRC(src/thread, generic, SDL_syssem_c.h)
COPY_ARCH_SRC(src/thread, linux, SDL_syscond.c)
COPY_ARCH_SRC(src/thread, generic, SDL_syscond_c.h)
fi fi
# Set up files for the timer library # Set up files for the timer library
if test x$enable_timers = xyes; then if test x$enable_timers = xyes; then
...@@ -2168,14 +2123,7 @@ case "$target" in ...@@ -2168,14 +2123,7 @@ case "$target" in
fi fi
# Set up files for the thread library # Set up files for the thread library
if test x$enable_threads = xyes; then if test x$enable_threads = xyes; then
COPY_ARCH_SRC(src/thread, linux, SDL_systhread.c) CopyUnixThreadSource
COPY_ARCH_SRC(src/thread, linux, SDL_systhread_c.h)
COPY_ARCH_SRC(src/thread, linux, SDL_sysmutex.c)
COPY_ARCH_SRC(src/thread, linux, SDL_sysmutex_c.h)
COPY_ARCH_SRC(src/thread, linux, SDL_syssem.c)
COPY_ARCH_SRC(src/thread, generic, SDL_syssem_c.h)
COPY_ARCH_SRC(src/thread, linux, SDL_syscond.c)
COPY_ARCH_SRC(src/thread, generic, SDL_syscond_c.h)
fi fi
# Set up files for the timer library # Set up files for the timer library
if test x$enable_timers = xyes; then if test x$enable_timers = xyes; then
...@@ -2369,18 +2317,7 @@ case "$target" in ...@@ -2369,18 +2317,7 @@ case "$target" in
fi fi
# Set up files for the thread library # Set up files for the thread library
if test x$enable_threads = xyes; then if test x$enable_threads = xyes; then
COPY_ARCH_SRC(src/thread, linux, SDL_systhread.c) CopyUnixThreadSource
COPY_ARCH_SRC(src/thread, linux, SDL_systhread_c.h)
COPY_ARCH_SRC(src/thread, linux, SDL_sysmutex.c)
COPY_ARCH_SRC(src/thread, linux, SDL_sysmutex_c.h)
if test x$use_pthreads = xyes -a x$have_pthread_sem != xyes; then
COPY_ARCH_SRC(src/thread, generic, SDL_syssem.c)
else
COPY_ARCH_SRC(src/thread, linux, SDL_syssem.c)
fi
COPY_ARCH_SRC(src/thread, generic, SDL_syssem_c.h)
COPY_ARCH_SRC(src/thread, generic, SDL_syscond.c)
COPY_ARCH_SRC(src/thread, generic, SDL_syscond_c.h)
fi fi
# Set up files for the timer library # Set up files for the timer library
if test x$enable_timers = xyes; then if test x$enable_timers = xyes; then
...@@ -2422,23 +2359,7 @@ case "$target" in ...@@ -2422,23 +2359,7 @@ case "$target" in
fi fi
# Set up files for the thread library # Set up files for the thread library
if test x$enable_threads = xyes; then if test x$enable_threads = xyes; then
if test x$enable_pth = xyes; then CopyUnixThreadSource
COPY_ARCH_SRC(src/thread, pth, SDL_systhread.c)
COPY_ARCH_SRC(src/thread, pth, SDL_systhread_c.h)
COPY_ARCH_SRC(src/thread, pth, SDL_sysmutex.c)
COPY_ARCH_SRC(src/thread, pth, SDL_sysmutex_c.h)
COPY_ARCH_SRC(src/thread, pth, SDL_syscond.c)
COPY_ARCH_SRC(src/thread, pth, SDL_syscond_c.h)
else
COPY_ARCH_SRC(src/thread, generic, SDL_systhread.c)
COPY_ARCH_SRC(src/thread, generic, SDL_systhread_c.h)
COPY_ARCH_SRC(src/thread, generic, SDL_sysmutex.c)
COPY_ARCH_SRC(src/thread, generic, SDL_sysmutex_c.h)
COPY_ARCH_SRC(src/thread, generic, SDL_syscond.c)
COPY_ARCH_SRC(src/thread, generic, SDL_syscond_c.h)
fi
COPY_ARCH_SRC(src/thread, generic, SDL_syssem.c)
COPY_ARCH_SRC(src/thread, generic, SDL_syssem_c.h)
fi fi
# Set up files for the timer library # Set up files for the timer library
if test x$enable_timers = xyes; then if test x$enable_timers = xyes; then
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment