diff --git a/configure b/configure index 2ba5879468f..662eaabc27a 100755 --- a/configure +++ b/configure @@ -13102,6 +13102,7 @@ fi # # For each platform, we need to know about any special compile and link # libraries, and whether the normal C function names are thread-safe. +# See the comment at the top of src/port/thread.c for more information. # if test "$enable_thread_safety" = yes; then if test "${ac_cv_header_pthread_h+set}" = set; then @@ -13208,8 +13209,8 @@ fi if test $ac_cv_header_pthread_h = yes; then : else - { { echo "$as_me:$LINENO: error: pthread.h not found, required for --with-threads" >&5 -echo "$as_me: error: pthread.h not found, required for --with-threads" >&2;} + { { echo "$as_me:$LINENO: error: pthread.h not found, required for --enable-thread-safetys" >&5 +echo "$as_me: error: pthread.h not found, required for --enable-thread-safetys" >&2;} { (exit 1); exit 1; }; } fi @@ -13221,12 +13222,14 @@ Cannot enable threads on your platform. Please report your platform threading info to the PostgreSQL mailing lists so it can be added to the next release. Report all compile flags, link flags, functions, or libraries required for threading support. +See the comment at the top of src/port/thread.c for more information. " >&5 echo "$as_me: error: Cannot enable threads on your platform. Please report your platform threading info to the PostgreSQL mailing lists so it can be added to the next release. Report all compile flags, link flags, functions, or libraries required for threading support. +See the comment at the top of src/port/thread.c for more information. " >&2;} { (exit 1); exit 1; }; } fi @@ -13254,22 +13257,16 @@ _CFLAGS="$CFLAGS" _LIBS="$LIBS" CFLAGS="$CFLAGS $THREAD_CFLAGS" LIBS="$LIBS $THREAD_LIBS" - - - -for ac_func in strerror_r getpwuid_r gethostbyname_r -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 -if eval "test \"\${$as_ac_var+set}\" = set"; then +echo "$as_me:$LINENO: checking for strerror_r" >&5 +echo $ECHO_N "checking for strerror_r... $ECHO_C" >&6 +if test "${ac_cv_func_strerror_r+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. */ + which can conflict with char strerror_r (); below. */ #include /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus @@ -13277,7 +13274,7 @@ extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ -char $ac_func (); +char strerror_r (); char (*f) (); #ifdef F77_DUMMY_MAIN @@ -13292,10 +13289,10 @@ main () /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +#if defined (__stub_strerror_r) || defined (__stub___strerror_r) choke me #else -f = $ac_func; +f = strerror_r; #endif ; @@ -13314,23 +13311,167 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then - eval "$as_ac_var=yes" + ac_cv_func_strerror_r=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 -eval "$as_ac_var=no" +ac_cv_func_strerror_r=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - +echo "$as_me:$LINENO: result: $ac_cv_func_strerror_r" >&5 +echo "${ECHO_T}$ac_cv_func_strerror_r" >&6 +if test $ac_cv_func_strerror_r = yes; then + : +else + { { echo "$as_me:$LINENO: error: strerror_r not found, required on this platform for --enable-thread-safety" >&5 +echo "$as_me: error: strerror_r not found, required on this platform for --enable-thread-safety" >&2;} + { (exit 1); exit 1; }; } +fi + +echo "$as_me:$LINENO: checking for getpwuid_r" >&5 +echo $ECHO_N "checking for getpwuid_r... $ECHO_C" >&6 +if test "${ac_cv_func_getpwuid_r+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +#include "confdefs.h" +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char getpwuid_r (); below. */ +#include +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char getpwuid_r (); +char (*f) (); + +#ifdef F77_DUMMY_MAIN +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } +#endif +int +main () +{ +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_getpwuid_r) || defined (__stub___getpwuid_r) +choke me +#else +f = getpwuid_r; +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_getpwuid_r=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_cv_func_getpwuid_r=no +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_func_getpwuid_r" >&5 +echo "${ECHO_T}$ac_cv_func_getpwuid_r" >&6 +if test $ac_cv_func_getpwuid_r = yes; then + : +else + { { echo "$as_me:$LINENO: error: getpwuid_r not found, required on this platform for --enable-thread-safety" >&5 +echo "$as_me: error: getpwuid_r not found, required on this platform for --enable-thread-safety" >&2;} + { (exit 1); exit 1; }; } +fi + +echo "$as_me:$LINENO: checking for gethostbyname_r" >&5 +echo $ECHO_N "checking for gethostbyname_r... $ECHO_C" >&6 +if test "${ac_cv_func_gethostbyname_r+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +#include "confdefs.h" +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char gethostbyname_r (); below. */ +#include +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char gethostbyname_r (); +char (*f) (); + +#ifdef F77_DUMMY_MAIN +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } +#endif +int +main () +{ +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_gethostbyname_r) || defined (__stub___gethostbyname_r) +choke me +#else +f = gethostbyname_r; +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_gethostbyname_r=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_cv_func_gethostbyname_r=no +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_func_gethostbyname_r" >&5 +echo "${ECHO_T}$ac_cv_func_gethostbyname_r" >&6 +if test $ac_cv_func_gethostbyname_r = yes; then + : +else + { { echo "$as_me:$LINENO: error: gethostbyname_r not found, required on this platform for --enable-thread-safety" >&5 +echo "$as_me: error: gethostbyname_r not found, required on this platform for --enable-thread-safety" >&2;} + { (exit 1); exit 1; }; } fi -done CFLAGS="$_CFLAGS" LIBS="$_LIBS" diff --git a/configure.in b/configure.in index fcd50520b3f..58d84db9d05 100644 --- a/configure.in +++ b/configure.in @@ -1,5 +1,5 @@ dnl Process this file with autoconf to produce a configure script. -dnl $Header: /cvsroot/pgsql/configure.in,v 1.280 2003/08/11 18:07:38 tgl Exp $ +dnl $Header: /cvsroot/pgsql/configure.in,v 1.281 2003/08/16 15:35:51 momjian Exp $ dnl dnl Developers, please strive to achieve this order: dnl @@ -978,9 +978,10 @@ AC_FUNC_FSEEKO # # For each platform, we need to know about any special compile and link # libraries, and whether the normal C function names are thread-safe. +# See the comment at the top of src/port/thread.c for more information. # if test "$enable_thread_safety" = yes; then -AC_CHECK_HEADER(pthread.h, [], [AC_MSG_ERROR([pthread.h not found, required for --with-threads])]) +AC_CHECK_HEADER(pthread.h, [], [AC_MSG_ERROR([pthread.h not found, required for --enable-thread-safetys])]) if test "$SUPPORTS_THREADS" != yes; then AC_MSG_ERROR([ @@ -988,6 +989,7 @@ Cannot enable threads on your platform. Please report your platform threading info to the PostgreSQL mailing lists so it can be added to the next release. Report all compile flags, link flags, functions, or libraries required for threading support. +See the comment at the top of src/port/thread.c for more information. ]) fi else @@ -1014,7 +1016,12 @@ _CFLAGS="$CFLAGS" _LIBS="$LIBS" CFLAGS="$CFLAGS $THREAD_CFLAGS" LIBS="$LIBS $THREAD_LIBS" -AC_CHECK_FUNCS([strerror_r getpwuid_r gethostbyname_r]) +AC_CHECK_FUNC(strerror_r, + [], [AC_MSG_ERROR([strerror_r not found, required on this platform for --enable-thread-safety])]) +AC_CHECK_FUNC(getpwuid_r, + [], [AC_MSG_ERROR([getpwuid_r not found, required on this platform for --enable-thread-safety])]) +AC_CHECK_FUNC(gethostbyname_r, + [], [AC_MSG_ERROR([gethostbyname_r not found, required on this platform for --enable-thread-safety])]) CFLAGS="$_CFLAGS" LIBS="$_LIBS" fi diff --git a/src/include/pg_config.h.in b/src/include/pg_config.h.in index acb140b856b..2aa62ea8dc5 100644 --- a/src/include/pg_config.h.in +++ b/src/include/pg_config.h.in @@ -118,9 +118,6 @@ /* Define to 1 if you have the `getaddrinfo' function. */ #undef HAVE_GETADDRINFO -/* Define to 1 if you have the `gethostbyname_r' function. */ -#undef HAVE_GETHOSTBYNAME_R - /* Define to 1 if you have the `gethostname' function. */ #undef HAVE_GETHOSTNAME @@ -136,9 +133,6 @@ /* Define to 1 if you have the `getpeereid' function. */ #undef HAVE_GETPEEREID -/* Define to 1 if you have the `getpwuid_r' function. */ -#undef HAVE_GETPWUID_R - /* Define to 1 if you have the `getrusage' function. */ #undef HAVE_GETRUSAGE @@ -378,9 +372,6 @@ /* Define to 1 if you have the `strerror' function. */ #undef HAVE_STRERROR -/* Define to 1 if you have the `strerror_r' function. */ -#undef HAVE_STRERROR_R - /* Define to 1 if cpp supports the ANSI # stringizing operator. */ #undef HAVE_STRINGIZE diff --git a/src/port/thread.c b/src/port/thread.c index df06f118c6f..80af433e4ac 100644 --- a/src/port/thread.c +++ b/src/port/thread.c @@ -7,7 +7,7 @@ * * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group * - * $Id: thread.c,v 1.3 2003/08/14 05:27:18 momjian Exp $ + * $Id: thread.c,v 1.4 2003/08/16 15:35:51 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -49,7 +49,7 @@ char * pqStrerror(int errnum, char *strerrbuf, size_t buflen) { -#if defined(USE_THREADS) && defined(HAVE_STRERROR_R) +#if defined(USE_THREADS) && defined(NEED_REENTRANT_FUNC_NAMES) /* reentrant strerror_r is available */ /* some early standards had strerror_r returning char * */ strerror_r(errnum, strerrbuf, buflen); @@ -68,7 +68,7 @@ int pqGetpwuid(uid_t uid, struct passwd *resultbuf, char *buffer, size_t buflen, struct passwd **result) { -#if defined(USE_THREADS) && defined(HAVE_GETPWUID_R) +#if defined(USE_THREADS) && defined(NEED_REENTRANT_FUNC_NAMES) /* * Early POSIX draft of getpwuid_r() returns 'struct passwd *'. * getpwuid_r(uid, resultbuf, buffer, buflen) @@ -94,8 +94,7 @@ pqGethostbyname(const char *name, struct hostent **result, int *herrno) { -#if defined(USE_THREADS) && defined(HAVE_GETHOSTBYNAME_R) - +#if defined(USE_THREADS) && defined(NEED_REENTRANT_FUNC_NAMES) /* * broken (well early POSIX draft) gethostbyname_r() which returns * 'struct hostent *' diff --git a/src/template/bsdi b/src/template/bsdi index ec73bc60d07..ab6e92f2f1a 100644 --- a/src/template/bsdi +++ b/src/template/bsdi @@ -12,4 +12,3 @@ esac SUPPORTS_THREADS=yes NEED_REENTRANT_FUNC_NAMES=no - diff --git a/src/template/freebsd b/src/template/freebsd index f35b76a9993..e96e5c2fa55 100644 --- a/src/template/freebsd +++ b/src/template/freebsd @@ -5,13 +5,13 @@ case $host_cpu in esac SUPPORTS_THREADS=yes +NEED_REENTRANT_FUNC_NAMES=no + case $host_os in freebsd2*|freebsd3*|freebsd4*) THREAD_CFLAGS="-pthread" - NEED_REENTRANT_FUNC_NAMES=yes ;; *) THREAD_LIBS="-lc_r" - NEED_REENTRANT_FUNC_NAMES=yes ;; esac diff --git a/src/template/linux b/src/template/linux index fc5c874d844..070e260a276 100644 --- a/src/template/linux +++ b/src/template/linux @@ -1,7 +1,7 @@ CFLAGS=-O2 SUPPORTS_THREADS=yes +NEED_REENTRANT_FUNC_NAMES=yes THREAD_CFLAGS="-D_REENTRANT -D_THREAD_SAFE -D_POSIX_PTHREAD_SEMANTICS" THREAD_LIBS="-lpthread" -NEED_REENTRANT_FUNC_NAMES=yes diff --git a/src/template/netbsd b/src/template/netbsd index c18fccb9bea..9a3869dfe77 100644 --- a/src/template/netbsd +++ b/src/template/netbsd @@ -2,4 +2,3 @@ CFLAGS='-O2 -pipe' SUPPORTS_THREADS=yes NEED_REENTRANT_FUNC_NAMES=no - diff --git a/src/template/osf b/src/template/osf index 8a65f114c55..a930bf4e08e 100644 --- a/src/template/osf +++ b/src/template/osf @@ -4,6 +4,7 @@ else CC="$CC -std" CFLAGS='-O4 -Olimit 2000' fi -SUPPORTS_THREADS=yes -THREAD_CFLAGS="-pthread" +SUPPORTS_THREADS=yes +NEED_REENTRANT_FUNC_NAMES=no +THREAD_CFLAGS="-pthread" diff --git a/src/template/unixware b/src/template/unixware index a948761596b..d86e346d8d2 100644 --- a/src/template/unixware +++ b/src/template/unixware @@ -10,5 +10,5 @@ else fi SUPPORTS_THREADS=yes -THREAD_CFLAGS += -D_REENTRANT NEED_REENTRANT_FUNC_NAMES=yes +THREAD_CFLAGS += -D_REENTRANT