[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

Re: [patch] Configury for pthreads flags

From: Greg Stein <gstein_at_lyra.org>
Date: 2000-08-09 14:34:52 CEST

-1

This is not the right way to handle this.

Two things:

1) apr/apr_common.m4 already has all the macros and config stuff needed to
   check all of this stuff. Add in a little extra magic from hints.m4 and
   you "should be" set.
   (it looks like some stuff in the patch below was copied from
    apr_common.m4 rather than included by reference)

2) SVN isn't really going to be using threads, so it (theoretically)
   shouldn't have to do all this work. The "real answer" is that SVN should
   source apr/APRVARS into ./configure.in (see apache-2.0/src/configure.in)
   Of course, this still has a gotcha: APRVARS does not yet include the
   threading stuff because Apache uses apr_common.m4 to set all the relevant
   pieces.

In any case: removing the explicit -pthread is a Good Thing, but the
provided solution is not quite right.

In fact, for now, I'd say:
*) remove the thread flags
*) configure APR with the --disable-threads option
*) source the resulting APRVARS into configure.in (which implies that
   EXTRA_CFLAGS should be respected in our config/build system)

Cheers,
-g

On Wed, Aug 09, 2000 at 12:19:42AM +0200, Branko Cibej wrote:
> The compiler flag "-pthread" is hard-coded in the makefiles.
> GCC isn't consistent about that on all platforms -- e.g., it uses
> "-pthreads" on Solaris (which is why I noticed), so I borrowed the
> required configury from apr.
>
> This patch:
> - adds an acinclude.m4 with tests for pthreads switches and
> libraries;
> - uses those tests in configure.in;
> - removes explicit "CFLAGS = -pthread" from Makefile.am in
> libsvn_string/tests, libsvn_subr/tests and libsvn_wc/tests.
>
> --
> Branko Cibej <branko.cibej@hermes.si>
> HERMES SoftLab, Litijska 51, 1000 Ljubljana, Slovenia
> voice: (+386 1) 586 53 49 fax: (+386 1) 586 52 70
> Index: configure.in
> ===================================================================
> RCS file: /cvs/subversion/configure.in,v
> retrieving revision 1.14
> diff -u -p -r1.14 configure.in
> --- configure.in 2000/08/08 20:54:54 1.14
> +++ configure.in 2000/08/08 22:13:25
> @@ -62,6 +62,16 @@ dnl AC_PROG_RANLIB
> dnl Check for libtool -- we'll definitely need it for all our shared libs!
> AM_PROG_LIBTOOL
>
> +dnl Check for pthreads flags
> +AC_SUBST(PTHREAD_FLAGS)
> +AC_SUBST(PTHREAD_LIBS)
> +REENTRANCY_FLAGS
> +PTHREADS_CHECK
> +if test "$pthreads_working" = "yes"; then
> + AC_MSG_RESULT($threads_result)
> +else
> + AC_MSG_ERROR($threads_result)
> +fi
>
>
> dnl Check for libraries --------------------
> Index: subversion/libsvn_string/tests/Makefile.am
> ===================================================================
> RCS file: /cvs/subversion/subversion/libsvn_string/tests/Makefile.am,v
> retrieving revision 1.4
> diff -u -p -r1.4 Makefile.am
> --- subversion/libsvn_string/tests/Makefile.am 2000/08/08 18:14:54 1.4
> +++ subversion/libsvn_string/tests/Makefile.am 2000/08/08 22:05:00
> @@ -4,7 +4,6 @@ noinst_PROGRAMS = stringtest
> stringtest_SOURCES = stringtest.c
>
> ## Flags needed when compiling:
> -CFLAGS = -pthread
> INCLUDES = -I../../include -I../../../apr/include
>
> ## Libraries this binary depends upon:
> Index: subversion/libsvn_subr/tests/Makefile.am
> ===================================================================
> RCS file: /cvs/subversion/subversion/libsvn_subr/tests/Makefile.am,v
> retrieving revision 1.3
> diff -u -p -r1.3 Makefile.am
> --- subversion/libsvn_subr/tests/Makefile.am 2000/08/08 18:14:57 1.3
> +++ subversion/libsvn_subr/tests/Makefile.am 2000/08/08 22:05:00
> @@ -4,7 +4,6 @@ noinst_PROGRAMS = hashdump-test
> hashdump_test_SOURCES = hashdump-test.c
>
> ## Flags needed when compiling:
> -CFLAGS = -pthread
> INCLUDES = -I../../include -I../../../apr/include
>
> ## Libraries this binary depends upon:
> Index: subversion/libsvn_wc/tests/Makefile.am
> ===================================================================
> RCS file: /cvs/subversion/subversion/libsvn_wc/tests/Makefile.am,v
> retrieving revision 1.4
> diff -u -p -r1.4 Makefile.am
> --- subversion/libsvn_wc/tests/Makefile.am 2000/08/08 18:15:00 1.4
> +++ subversion/libsvn_wc/tests/Makefile.am 2000/08/08 22:05:00
> @@ -4,7 +4,6 @@ noinst_PROGRAMS = checkout-test
> checkout_test_SOURCES = checkout-test.c
>
> ## Flags needed when compiling:
> -CFLAGS = -pthread
> INCLUDES = -I../../include -I../../../apr/include -I../../../expat-lite
>
> ## Libraries this binary depends upon:
>

> dnl
> dnl Check for flags required to activate pthreads.
> dnl This bit is borrowed from apr/apr_common.m4, for now.
> dnl
> dnl
> dnl REENTRANCY_FLAGS
> dnl
> dnl Set some magic defines
> dnl
> AC_DEFUN(REENTRANCY_FLAGS,[
> case "$host_alias" in
> *solaris*)
> PTHREAD_FLAGS="-D_POSIX_PTHREAD_SEMANTICS -D_REENTRANT";;
> *freebsd*)
> PTHREAD_FLAGS="-D_REENTRANT -D_THREAD_SAFE";;
> *openbsd*)
> PTHREAD_FLAGS="-D_POSIX_THREADS";;
> *linux*)
> PTHREAD_FLAGS="-D_REENTRANT";;
> *aix*)
> PTHREAD_FLAGS="-D_THREAD_SAFE";;
> *irix*)
> PTHREAD_FLAGS="-D_POSIX_THREAD_SAFE_FUNCTIONS";;
> *hpux*)
> PTHREAD_FLAGS="-D_REENTRANT";;
> *sco*)
> PTHREAD_FLAGS="-D_REENTRANT";;
> dnl Solves sigwait() problem, creates problems with u_long etc.
> dnl PTHREAD_FLAGS="-D_REENTRANT -D_XOPEN_SOURCE=500 -D_POSIX_C_SOURCE=199506 -D_XOPEN_SOURCE_EXTENDED=1";;
> esac
>
> if test -n "$PTHREAD_FLAGS"; then
> CPPFLAGS="$CPPFLAGS $PTHREAD_FLAGS"
> fi
> ])dnl
>
> dnl
> dnl PTHREADS_CHECK_COMPILE
> dnl
> dnl Check whether the current setup can use POSIX threads calls
> dnl
> AC_DEFUN(PTHREADS_CHECK_COMPILE, [
> AC_TRY_RUN( [
> #include <pthread.h>
> #include <stddef.h>
>
> void *thread_routine(void *data) {
> return data;
> }
>
> int main() {
> pthread_t thd;
> pthread_mutexattr_t mattr;
> int data = 1;
> pthread_mutexattr_init(&mattr);
> return pthread_create(&thd, NULL, thread_routine, &data);
> } ], [
> pthreads_working="yes"
> ], [
> pthreads_working="no"
> ], pthreads_working="no" ) ] )dnl
> dnl
> dnl PTHREADS_CHECK()
> dnl
> dnl Try to find a way to enable POSIX threads
> dnl
> AC_DEFUN(PTHREADS_CHECK,[
> if test -n "$ac_cv_pthreads_lib"; then
> LIBS="$LIBS -l$ac_cv_pthreads_lib"
> fi
>
> if test -n "$ac_cv_pthreads_cflags"; then
> CFLAGS="$CFLAGS $ac_cv_pthreads_cflags"
> fi
>
> PTHREADS_CHECK_COMPILE
>
> AC_CACHE_CHECK(for pthreads_cflags,ac_cv_pthreads_cflags,[
> ac_cv_pthreads_cflags=""
> if test "$pthreads_working" != "yes"; then
> for flag in -kthread -pthread -pthreads -mthreads -Kthread -threads -mt; do
> ac_save="$CFLAGS"
> CFLAGS="$CFLAGS $flag"
> PTHREADS_CHECK_COMPILE
> if test "$pthreads_working" = "yes"; then
> ac_cv_pthreads_cflags="$flag"
> break
> fi
> CFLAGS="$ac_save"
> done
> fi
> ])
>
> AC_CACHE_CHECK(for pthreads_lib, ac_cv_pthreads_lib,[
> ac_cv_pthreads_lib=""
> if test "$pthreads_working" != "yes"; then
> for lib in pthread pthreads c_r; do
> ac_save="$LIBS"
> LIBS="$LIBS -l$lib"
> PTHREADS_CHECK_COMPILE
> if test "$pthreads_working" = "yes"; then
> ac_cv_pthreads_lib="$lib"
> break
> fi
> LIBS="$ac_save"
> done
> fi
> ])
>
> if test "$pthreads_working" = "yes"; then
> threads_result="POSIX Threads found"
> else
> threads_result="POSIX Threads not found"
> fi
> ])dnl
>

-- 
Greg Stein, http://www.lyra.org/
Received on Sat Oct 21 14:36:06 2006

This is an archived mail posted to the Subversion Dev mailing list.

This site is subject to the Apache Privacy Policy and the Apache Public Forum Archive Policy.