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()
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
CheckPTHREAD()
{
......@@ -1193,6 +1221,9 @@ CheckPTHREAD()
])
# Some systems have broken recursive mutex implementations
case "$target" in
*-*-darwin*)
has_recursive_mutexes=no
;;
*-*-solaris*)
has_recursive_mutexes=no
;;
......@@ -1253,45 +1284,80 @@ CheckPTHREAD()
CFLAGS="$CFLAGS -DHAVE_SEMUN"
fi
# See if we can use clone() on Linux directly
use_clone=no
# See if we can use GNU Pth or clone() on Linux directly
if test x$enable_threads = xyes -a x$use_pthreads != xyes; then
CheckPTH
if test x$use_pth != xyes; then
case "$target" in
*-*-linux*)
use_clone=yes
;;
*)
CFLAGS="$CFLAGS -DFORK_HACK"
;;
esac
fi
fi
}
dnl See if we can use GNU pth library for threads
CheckPTH()
# Note that we need to have either semaphores or to have mutexes and
# condition variables to implement all thread synchronization primitives
CopyUnixThreadSource()
{
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
if test x$use_pthreads = xyes -o x$use_clone = xyes; then
# Basic thread creation functions
COPY_ARCH_SRC(src/thread, linux, SDL_systhread.c)
if test x$use_pthreads != xyes; then
COPY_ARCH_SRC(src/thread, linux, clone.S)
fi
COPY_ARCH_SRC(src/thread, linux, SDL_systhread_c.h)
# 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
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
COPY_ARCH_SRC(src/thread, linux, SDL_syssem.c)
fi
AC_MSG_CHECKING(pth)
if test "x$use_pth" = xyes; then
AC_MSG_RESULT(yes)
COPY_ARCH_SRC(src/thread, generic, SDL_syssem_c.h)
# 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
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
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
}
......@@ -1593,32 +1659,7 @@ case "$target" in
fi
# Set up files for the thread library
if test x$enable_threads = xyes; then
if test x$use_pthreads != xyes; then
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
CopyUnixThreadSource
fi
# Set up files for the timer library
if test x$enable_timers = xyes; then
......@@ -1663,14 +1704,7 @@ case "$target" in
fi
# Set up files for the thread library
if test x$enable_threads = xyes; then
COPY_ARCH_SRC(src/thread, linux, SDL_systhread.c)
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)
CopyUnixThreadSource
fi
# Set up files for the timer library
if test x$enable_timers = xyes; then
......@@ -1711,18 +1745,7 @@ case "$target" in
fi
# Set up files for the thread library
if test x$enable_threads = xyes; then
COPY_ARCH_SRC(src/thread, linux, SDL_systhread.c)
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)
CopyUnixThreadSource
fi
# Set up files for the timer library
if test x$enable_timers = xyes; then
......@@ -1759,18 +1782,7 @@ case "$target" in
fi
# Set up files for the thread library
if test x$enable_threads = xyes; then
COPY_ARCH_SRC(src/thread, linux, SDL_systhread.c)
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)
CopyUnixThreadSource
fi
# Set up files for the timer library
if test x$enable_timers = xyes; then
......@@ -1813,18 +1825,7 @@ case "$target" in
fi
# Set up files for the thread library
if test x$enable_threads = xyes; then
COPY_ARCH_SRC(src/thread, linux, SDL_systhread.c)
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)
CopyUnixThreadSource
fi
# Set up files for the timer library
if test x$enable_timers = xyes; then
......@@ -1868,14 +1869,7 @@ case "$target" in
fi
# Set up files for the thread library
if test x$enable_threads = xyes; then
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_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)
CopyUnixThreadSource
fi
# Set up files for the timer library
if test x$enable_timers = xyes; then
......@@ -1918,14 +1912,7 @@ case "$target" in
fi
# Set up files for the thread library
if test x$enable_threads = xyes; then
COPY_ARCH_SRC(src/thread, linux, SDL_systhread.c)
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)
CopyUnixThreadSource
fi
# Set up files for the timer library
if test x$enable_timers = xyes; then
......@@ -1966,19 +1953,8 @@ case "$target" in
fi
# Set up files for the thread library
if test x$enable_threads = xyes; then
if test x$use_pthreads = xyes; then
COPY_ARCH_SRC(src/thread, linux, SDL_systhread.c)
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)
if test x$use_pthreads = xyes -o x$use_pth = xyes; then
CopyUnixThreadSource
else
COPY_ARCH_SRC(src/thread, irix, SDL_systhread.c)
COPY_ARCH_SRC(src/thread, irix, SDL_systhread_c.h)
......@@ -2029,14 +2005,7 @@ case "$target" in
fi
# Set up files for the thread library
if test x$enable_threads = xyes; then
COPY_ARCH_SRC(src/thread, linux, SDL_systhread.c)
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)
CopyUnixThreadSource
fi
# Set up files for the timer library
if test x$enable_timers = xyes; then
......@@ -2075,14 +2044,7 @@ case "$target" in
fi
# Set up files for the thread library
if test x$enable_threads = xyes; then
COPY_ARCH_SRC(src/thread, linux, SDL_systhread.c)
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)
CopyUnixThreadSource
fi
# Set up files for the timer library
if test x$enable_timers = xyes; then
......@@ -2122,14 +2084,7 @@ case "$target" in
fi
# Set up files for the thread library
if test x$enable_threads = xyes; then
COPY_ARCH_SRC(src/thread, linux, SDL_systhread.c)
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)
CopyUnixThreadSource
fi
# Set up files for the timer library
if test x$enable_timers = xyes; then
......@@ -2168,14 +2123,7 @@ case "$target" in
fi
# Set up files for the thread library
if test x$enable_threads = xyes; then
COPY_ARCH_SRC(src/thread, linux, SDL_systhread.c)
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)
CopyUnixThreadSource
fi
# Set up files for the timer library
if test x$enable_timers = xyes; then
......@@ -2369,18 +2317,7 @@ case "$target" in
fi
# Set up files for the thread library
if test x$enable_threads = xyes; then
COPY_ARCH_SRC(src/thread, linux, SDL_systhread.c)
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)
CopyUnixThreadSource
fi
# Set up files for the timer library
if test x$enable_timers = xyes; then
......@@ -2422,23 +2359,7 @@ case "$target" in
fi
# Set up files for the thread library
if test x$enable_threads = xyes; then
if test x$enable_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)
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)
CopyUnixThreadSource
fi
# Set up files for the timer library
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