Thread test improvement - Mailing list pgsql-patches
From | Bruce Momjian |
---|---|
Subject | Thread test improvement |
Date | |
Msg-id | 200404271950.i3RJorF02937@candle.pha.pa.us Whole thread Raw |
List | pgsql-patches |
With Peter's help, I have changed the way I do thread testing from configure to be much cleaner. Patch attached and applied. -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 359-1001 + If your life is a hard drive, | 13 Roberts Road + Christ can be your backup. | Newtown Square, Pennsylvania 19073 Index: configure =================================================================== RCS file: /cvsroot/pgsql-server/configure,v retrieving revision 1.348 diff -c -c -r1.348 configure *** configure 26 Apr 2004 19:08:56 -0000 1.348 --- configure 27 Apr 2004 19:46:33 -0000 *************** *** 17876,17881 **** --- 17876,17940 ---- done + # Thread testing + + # We have to run the thread test near the end so we have all our symbols + # defined. Cross compiling throws a warning. + # + if test "$enable_thread_safety" = yes; then + echo "$as_me:$LINENO: checking thread safety of required library functions" >&5 + echo $ECHO_N "checking thread safety of required library functions... $ECHO_C" >&6 + + _CFLAGS="$CFLAGS" + _LIBS="$LIBS" + CFLAGS="$CFLAGS $PTHREAD_CFLAGS -DIN_CONFIGURE" + LIBS="$LIBS $PTHREAD_LIBS" + if test "$cross_compiling" = yes; then + echo "$as_me:$LINENO: result: maybe" >&5 + echo "${ECHO_T}maybe" >&6 + { echo "$as_me:$LINENO: WARNING: + *** Skipping thread test program because of cross-compile build. + *** Run the program in src/tools/thread on the target matchine. + " >&5 + echo "$as_me: WARNING: + *** Skipping thread test program because of cross-compile build. + *** Run the program in src/tools/thread on the target matchine. + " >&2;} + else + cat >conftest.$ac_ext <<_ACEOF + #line $LINENO "configure" + #include "confdefs.h" + #include "src/tools/thread/thread_test.c" + _ACEOF + rm -f 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='./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 + echo "$as_me:$LINENO: result: yes" >&5 + echo "${ECHO_T}yes" >&6 + else + echo "$as_me: program exited with status $ac_status" >&5 + echo "$as_me: failed program was:" >&5 + cat conftest.$ac_ext >&5 + ( exit $ac_status ) + echo "$as_me:$LINENO: result: no" >&5 + echo "${ECHO_T}no" >&6 + { { echo "$as_me:$LINENO: error: Thread test program failed. Your platform is not thread-safe. See 'config.log" >&5 + echo "$as_me: error: Thread test program failed. Your platform is not thread-safe. See 'config.log" >&2;} + { (exit 1); exit 1; }; } + fi + rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext + fi + CFLAGS="$_CFLAGS" + LIBS="$_LIBS" + fi # prepare build tree if outside source tree # Note 1: test -ef might not exist, but it's more reliable than `pwd`. *************** *** 19112,19216 **** $ac_cs_success || { (exit 1); exit 1; } fi - - # Check for gmake. - for ac_prog in gmake make - do - # Extract the first word of "$ac_prog", so it can be a program name with args. - set dummy $ac_prog; ac_word=$2 - echo "$as_me:$LINENO: checking for $ac_word" >&5 - echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 - if test "${ac_cv_prog_MAKE+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else - if test -n "$MAKE"; then - ac_cv_prog_MAKE="$MAKE" # Let the user override the test. - else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR - for as_dir in $PATH - do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_MAKE="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi - done - done - - fi - fi - MAKE=$ac_cv_prog_MAKE - if test -n "$MAKE"; then - echo "$as_me:$LINENO: result: $MAKE" >&5 - echo "${ECHO_T}$MAKE" >&6 - else - echo "$as_me:$LINENO: result: no" >&5 - echo "${ECHO_T}no" >&6 - fi - - test -n "$MAKE" && break - done - - if ! $MAKE -v | grep 'GNU Make' >/dev/null - then rm -f $srcdir/src/Makefile.global - echo "$as_me:$LINENO: checking Can not find GNU Make. It is required." >&5 - echo $ECHO_N "checking Can not find GNU Make. It is required.... $ECHO_C" >&6 - fi - - # Thread testing - - # We have to run the thread test here because it is an external program - # that has to be runable separately for cross-compiling. - # - if test "$enable_thread_safety" = yes; then - if test cross_compiling != yes; then - # - # Clean, compile, run, and clean thread test directory. - # If test fails for any reason, remove Makefile.global so the user can't - # compile (to simulate a configure failure). - # - echo "$as_me:$LINENO: checking thread safety of required library functions" >&5 - echo $ECHO_N "checking thread safety of required library functions... $ECHO_C" >&6 - if ! $MAKE -C src/tools/thread clean >&5 - then rm -f src/Makefile.global - { { echo "$as_me:$LINENO: error: Can not clean thread test directory." >&5 - echo "$as_me: error: Can not clean thread test directory." >&2;} - { (exit 1); exit 1; }; } - fi - if ! $MAKE -C src/tools/thread >&5 - then rm -f src/Makefile.global - { { echo "$as_me:$LINENO: error: Can not build thread test proram." >&5 - echo "$as_me: error: Can not build thread test proram." >&2;} - { (exit 1); exit 1; }; } - fi - if ! src/tools/thread/thread_test >&5 - then rm -f src/Makefile.global - echo "no" - echo - src/tools/thread/thread_test - echo - { { echo "$as_me:$LINENO: error: Thread test program failed. Your platform is not thread-safe." >&5 - echo "$as_me: error: Thread test program failed. Your platform is not thread-safe." >&2;} - { (exit 1); exit 1; }; } - fi - if ! $MAKE -C src/tools/thread clean >&5 - then rm -f src/Makefile.global - { { echo "$as_me:$LINENO: error: Can not clean thread test directory." >&5 - echo "$as_me: error: Can not clean thread test directory." >&2;} - { (exit 1); exit 1; }; } - fi - echo "yes" - else - { echo "$as_me:$LINENO: WARNING: - *** Skipping thread test program because of cross-compile build. - *** Run the program in src/tools/thread on the target matchine. - " >&5 - echo "$as_me: WARNING: - *** Skipping thread test program because of cross-compile build. - *** Run the program in src/tools/thread on the target matchine. - " >&2;} - fi - fi --- 19171,19173 ---- Index: configure.in =================================================================== RCS file: /cvsroot/pgsql-server/configure.in,v retrieving revision 1.336 diff -c -c -r1.336 configure.in *** configure.in 26 Apr 2004 19:08:57 -0000 1.336 --- configure.in 27 Apr 2004 19:46:35 -0000 *************** *** 1176,1181 **** --- 1176,1205 ---- PGAC_PATH_COLLATEINDEX AC_CHECK_PROGS(SGMLSPL, sgmlspl) + # Thread testing + + # We have to run the thread test near the end so we have all our symbols + # defined. Cross compiling throws a warning. + # + if test "$enable_thread_safety" = yes; then + AC_MSG_CHECKING([thread safety of required library functions]) + + _CFLAGS="$CFLAGS" + _LIBS="$LIBS" + CFLAGS="$CFLAGS $PTHREAD_CFLAGS -DIN_CONFIGURE" + LIBS="$LIBS $PTHREAD_LIBS" + AC_TRY_RUN([#include "src/tools/thread/thread_test.c"], + [AC_MSG_RESULT(yes)], + [AC_MSG_RESULT(no) + AC_MSG_ERROR([Thread test program failed. Your platform is not thread-safe. See 'config.log])], + [AC_MSG_RESULT(maybe) + AC_MSG_WARN([ + *** Skipping thread test program because of cross-compile build. + *** Run the program in src/tools/thread on the target matchine. + ])]) + CFLAGS="$_CFLAGS" + LIBS="$_LIBS" + fi # prepare build tree if outside source tree # Note 1: test -ef might not exist, but it's more reliable than `pwd`. *************** *** 1214,1265 **** ]) AC_OUTPUT - - # Check for gmake. - AC_CHECK_PROGS(MAKE, gmake make) - if ! $MAKE -v | grep 'GNU Make' >/dev/null - then rm -f $srcdir/src/Makefile.global - AC_MSG_CHECKING([Can not find GNU Make. It is required.]) - fi - - # Thread testing - - # We have to run the thread test here because it is an external program - # that has to be runable separately for cross-compiling. - # - if test "$enable_thread_safety" = yes; then - if test cross_compiling != yes; then - # - # Clean, compile, run, and clean thread test directory. - # If test fails for any reason, remove Makefile.global so the user can't - # compile (to simulate a configure failure). - # - AC_MSG_CHECKING([thread safety of required library functions]) - if ! $MAKE -C src/tools/thread clean >&5 - then rm -f src/Makefile.global - AC_MSG_ERROR([Can not clean thread test directory.]) - fi - if ! $MAKE -C src/tools/thread >&5 - then rm -f src/Makefile.global - AC_MSG_ERROR([Can not build thread test proram.]) - fi - if ! src/tools/thread/thread_test >&5 - then rm -f src/Makefile.global - echo "no" - echo - src/tools/thread/thread_test - echo - AC_MSG_ERROR([Thread test program failed. Your platform is not thread-safe.]) - fi - if ! $MAKE -C src/tools/thread clean >&5 - then rm -f src/Makefile.global - AC_MSG_ERROR([Can not clean thread test directory.]) - fi - echo "yes" - else - AC_MSG_WARN([ - *** Skipping thread test program because of cross-compile build. - *** Run the program in src/tools/thread on the target matchine. - ]) - fi - fi --- 1238,1240 ---- Index: src/tools/thread/thread_test.c =================================================================== RCS file: /cvsroot/pgsql-server/src/tools/thread/thread_test.c,v retrieving revision 1.28 diff -c -c -r1.28 thread_test.c *** src/tools/thread/thread_test.c 27 Apr 2004 18:40:50 -0000 1.28 --- src/tools/thread/thread_test.c 27 Apr 2004 19:46:42 -0000 *************** *** 20,26 **** --- 20,41 ---- *------------------------------------------------------------------------- */ + #ifndef IN_CONFIGURE #include "postgres.h" + #else + /* From src/include/c.h" */ + #ifndef bool + typedef char bool; + #endif + + #ifndef true + #define true ((bool) 1) + #endif + + #ifndef false + #define false ((bool) 0) + #endif + #endif #include <stdio.h> #include <stdlib.h> *************** *** 32,38 **** #include <fcntl.h> #include <errno.h> ! #ifndef ENABLE_THREAD_SAFETY int main(int argc, char *argv[]) { --- 47,53 ---- #include <fcntl.h> #include <errno.h> ! #if !defined(ENABLE_THREAD_SAFETY) && !defined(IN_CONFIGURE) int main(int argc, char *argv[]) { *************** *** 96,101 **** --- 111,122 ---- return 1; } + #ifdef IN_CONFIGURE + /* Send stdout to 'config.log' */ + close(1); + dup(5); + #endif + /* Make temp filenames, might not have strdup() */ temp_filename_1 = malloc(strlen(TEMP_FILENAME_1) + 1); strcpy(temp_filename_1, TEMP_FILENAME_1); *************** *** 339,343 **** pthread_mutex_lock(&init_mutex); /* wait for parent to test */ pthread_mutex_unlock(&init_mutex); } ! #endif /* !ENABLE_THREAD_SAFETY */ ! --- 360,363 ---- pthread_mutex_lock(&init_mutex); /* wait for parent to test */ pthread_mutex_unlock(&init_mutex); } ! #endif /* !ENABLE_THREAD_SAFETY && !IN_CONFIGURE */
pgsql-patches by date: