Commit eab2f10a authored by unknown's avatar unknown

Step 3 of the switch to support configuration with NPTL:

Change "configure.in".

The branches for Tru64 (ex: OSF/1) and Linux are separated,
and for Linux 'getconf GNU_LIBPTHREAD_VERSION' is used to tell between Linuxthreads and NPTL.


configure.in:
  Step 3 of the switch to support configuration with NPTL:
  Change "configure.in".
  
  1) Separate the branches checking for thread libraries on OSF/1 (now: Tru64) and on Linux,
     as these are different things. In the Tru64 branch, remove the obsolete part for OSF/1 3.2,
     because that is gone since long (about a decade?); we are at 5 now. Adapt the comment.
  
  2) For Linux, the thread libraries are "Linuxthreads" (older) and "NPTL" (newer).
     Until now, we cared only about "Linuxthreads", and we did so by checking a comment in 
     the header file '/usr/include/pthread.h'.
     With NPTL as an alternative or only thread package, this is not secure any more,
     there are distributions where the header file still contains that comment but the lib is NPTL.
     For all current distributions, the way to check is the 'getconf' command.
  
     On old distributions, 'getconf' exists but does not understand the 'GNU_LIBPTHREAD_VERSION'
     parameter. It is unlikely that such an old system should have NPTL, so the header file check is
     sufficient if the getconf inquiry fails.
  
     For both Linuxthreads and NPTL, '-lpthread' is the linker option to use.
  
  3) To detect problems as early as possible, on Linux a link test using '-lpthread' is done.
     The code is copied from a later check where the thread functions are searched in '-lc',
     '-lpthread', and '-lpthreads', but this later search would not be executed after the lib
     was already determined. So if the test is not done here, it will be detected only during
     the real build. This is too late.
parent d7e04620
...@@ -411,12 +411,12 @@ if expr "$target_os" : "[[Ll]]inux.*" > /dev/null ...@@ -411,12 +411,12 @@ if expr "$target_os" : "[[Ll]]inux.*" > /dev/null
then then
MYSQLD_DEFAULT_SWITCHES="--skip-locking" MYSQLD_DEFAULT_SWITCHES="--skip-locking"
TARGET_LINUX="true" TARGET_LINUX="true"
AC_MSG_RESULT("yes"); AC_MSG_RESULT("yes")
AC_DEFINE([TARGET_OS_LINUX], [1], [Whether we build for Linux]) AC_DEFINE([TARGET_OS_LINUX], [1], [Whether we build for Linux])
else else
MYSQLD_DEFAULT_SWITCHES="" MYSQLD_DEFAULT_SWITCHES=""
TARGET_LINUX="false" TARGET_LINUX="false"
AC_MSG_RESULT("no"); AC_MSG_RESULT("no")
fi fi
AC_SUBST(MYSQLD_DEFAULT_SWITCHES) AC_SUBST(MYSQLD_DEFAULT_SWITCHES)
AC_SUBST(TARGET_LINUX) AC_SUBST(TARGET_LINUX)
...@@ -1267,11 +1267,36 @@ esac ...@@ -1267,11 +1267,36 @@ esac
# We have to check libc last because else it fails on Solaris 2.6 # We have to check libc last because else it fails on Solaris 2.6
with_posix_threads="no" with_posix_threads="no"
# Hack for DEC-UNIX (OSF1) # Search thread lib on Linux
if test "$with_named_thread" = "no" -a "$with_mit_threads" = "no" if test "$with_named_thread" = "no" -a "$with_mit_threads" = "no"
then then
AC_MSG_CHECKING("Linux threads")
if test "$TARGET_LINUX" = "true"
then
AC_MSG_RESULT("starting")
# use getconf to check glibc contents
AC_MSG_CHECKING("getconf GNU_LIBPTHREAD_VERSION")
case `getconf GNU_LIBPTHREAD_VERSION | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ` in
NPTL* )
AC_MSG_RESULT("NPTL")
AC_DEFINE([HAVE_NPTL], [1], [NPTL threads implementation])
with_named_thread="-lpthread"
;;
LINUXTHREADS* )
AC_MSG_RESULT("Linuxthreads")
AC_DEFINE([HAVE_LINUXTHREADS], [1],
[Whether we are using Xavier Leroy's LinuxThreads])
with_named_thread="-lpthread"
;;
* )
AC_MSG_RESULT("unknown")
;;
esac
if test "$with_named_thread" = "no"
then
# old method, check headers
# Look for LinuxThreads. # Look for LinuxThreads.
AC_MSG_CHECKING("LinuxThreads") AC_MSG_CHECKING("LinuxThreads in header file comment")
res=`grep Linuxthreads /usr/include/pthread.h 2>/dev/null | wc -l` res=`grep Linuxthreads /usr/include/pthread.h 2>/dev/null | wc -l`
if test "$res" -gt 0 if test "$res" -gt 0
then then
...@@ -1287,41 +1312,48 @@ then ...@@ -1287,41 +1312,48 @@ then
else else
AC_MSG_RESULT("Not found") AC_MSG_RESULT("Not found")
# If this is a linux machine we should barf # If this is a linux machine we should barf
if test "$TARGET_LINUX" = "true" AC_MSG_ERROR([This is a Linux system without a working getconf,
then and Linuxthreads was not found. Please install it (or a new glibc) and try again.
AC_MSG_ERROR([This is a linux system and Linuxthreads was not See the Installation chapter in the Reference Manual for more information.])
found. On linux Linuxthreads should be used. Please install Linuxthreads fi
(or a new glibc) and try again. See the Installation chapter in the else
Reference Manual for more information.]) AC_MSG_RESULT("no need to check headers")
fi
AC_MSG_CHECKING("for pthread_create in -lpthread");
ac_save_LIBS="$LIBS"
LIBS="$LIBS -lpthread"
AC_TRY_LINK( [#include <pthread.h>],
[ (void) pthread_create((pthread_t*) 0,(pthread_attr_t*) 0, 0, 0); ],
AC_MSG_RESULT("yes"),
[ AC_MSG_RESULT("no")
AC_MSG_ERROR([
This is a Linux system claiming to support threads, either Linuxthreads or NPTL, but linking a test program failed.
Please install one of these (or a new glibc) and try again.
See the Installation chapter in the Reference Manual for more information.]) ]
)
LIBS="$ac_save_LIBS"
else else
AC_MSG_CHECKING("DEC threads") AC_MSG_RESULT("no")
fi # "$TARGET_LINUX"
fi # "$with_named_thread" = "no" -a "$with_mit_threads" = "no"
# Hack for DEC-UNIX (OSF1 -> Tru64)
if test "$with_named_thread" = "no" -a "$with_mit_threads" = "no"
then
AC_MSG_CHECKING("DEC threads post OSF/1 3.2")
if test -f /usr/shlib/libpthread.so -a -f /usr/lib/libmach.a -a -f /usr/ccs/lib/cmplrs/cc/libexc.a if test -f /usr/shlib/libpthread.so -a -f /usr/lib/libmach.a -a -f /usr/ccs/lib/cmplrs/cc/libexc.a
then then
with_named_thread="-lpthread -lmach -lexc" with_named_thread="-lpthread -lmach -lexc"
CFLAGS="$CFLAGS -D_REENTRANT" CFLAGS="$CFLAGS -D_REENTRANT"
CXXFLAGS="$CXXFLAGS -D_REENTRANT" CXXFLAGS="$CXXFLAGS -D_REENTRANT"
AC_DEFINE(HAVE_DEC_THREADS, [1], AC_DEFINE(HAVE_DEC_THREADS, [1], [Whether we are using DEC threads])
[Whether we are using DEC threads])
AC_MSG_RESULT("yes")
else
AC_MSG_RESULT("no")
AC_MSG_CHECKING("DEC 3.2 threads")
if test -f /usr/shlib/libpthreads.so -a -f /usr/lib/libmach.a -a -f /usr/ccs/lib/cmplrs/cc/libexc.a
then
with_named_thread="-lpthreads -lmach -lc_r"
AC_DEFINE(HAVE_DEC_THREADS, [1])
AC_DEFINE([HAVE_DEC_3_2_THREADS], [1],
[Whether we are using OSF1 DEC threads on 3.2])
with_osf32_threads="yes"
MYSQLD_DEFAULT_SWITCHES="--skip-thread-priority"
AC_MSG_RESULT("yes") AC_MSG_RESULT("yes")
else else
AC_MSG_RESULT("no") AC_MSG_RESULT("no")
fi fi # DEC threads
fi fi # "$with_named_thread" = "no" -a "$with_mit_threads" = "no"
fi
fi
fi
dnl This is needed because -lsocket has to come after the thread dnl This is needed because -lsocket has to come after the thread
......
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