Re: Threading fix for AIX - Mailing list pgsql-patches
From | Bruce Momjian |
---|---|
Subject | Re: Threading fix for AIX |
Date | |
Msg-id | 200412151755.iBFHt6O27961@candle.pha.pa.us Whole thread Raw |
In response to | Re: Threading fix for AIX (Bruce Momjian <pgman@candle.pha.pa.us>) |
List | pgsql-patches |
Bruce Momjian wrote: > Zeugswetter Andreas DAZ SD wrote: > > > > >> 1. the snprintf long long int check that uses int64 as variable name which is > > >> a typedef in sys/inttypes.h > > > > > > I changed it to ac_int64. Does that help? > > > > One more is needed in c-library.m4. > > OK, done. > > > >> 2. whether strerror_r returns int check fails with a redefine of named function > > >> from string.h > > > > > > I see. Our test is: > > > int strerror_r(int, char *, size_t); > > > but AIX is: > > > int strerror_r(int, char *, int); > > > OK, I added an #ifndef _AIX to use 'int' for the 3rd arg for AIX. > > > > The wrong define is only on older AIX versions :-( > > And the patch produces wrong code asis (missing # and #endif). > > Since AIX always has the int returning function, how about no test on AIX: > > #ifndef_AIX > > int strerror_r(int, char *, size_t); > > #endif OK, improved patch. You mentioned only older versions of AIX have an 'int' for the 3rd strerror_r argument so we will just test for the return value on AIX and not the args: int strerror(); If there are other platforms that have this we could use it on all platforms but at this point we will do just AIX. -- 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/configure,v retrieving revision 1.415 diff -c -c -r1.415 configure *** configure 14 Dec 2004 14:53:52 -0000 1.415 --- configure 15 Dec 2004 17:53:04 -0000 *************** *** 14611,14617 **** --- 14611,14622 ---- int main () { + #ifndef _AIX int strerror_r(int, char *, size_t); + #else + /* Older AIX has 'int' for the third argument so we don't test the args. */ + int strerror_r(); + #endif ; return 0; } *************** *** 14761,14780 **** cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" #include "confdefs.h" ! typedef long int int64; /* * These are globals to discourage the compiler from folding all the * arithmetic tests down to compile-time constants. */ ! int64 a = 20000001; ! int64 b = 40000005; int does_int64_work() { ! int64 c,d; ! if (sizeof(int64) != 8) return 0; /* definitely not the right size */ /* Do perfunctory checks to see if 64-bit arithmetic seems to work */ --- 14766,14785 ---- cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" #include "confdefs.h" ! typedef long int ac_int64; /* * These are globals to discourage the compiler from folding all the * arithmetic tests down to compile-time constants. */ ! ac_int64 a = 20000001; ! ac_int64 b = 40000005; int does_int64_work() { ! ac_int64 c,d; ! if (sizeof(ac_int64) != 8) return 0; /* definitely not the right size */ /* Do perfunctory checks to see if 64-bit arithmetic seems to work */ *************** *** 14875,14894 **** cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" #include "confdefs.h" ! typedef long long int int64; /* * These are globals to discourage the compiler from folding all the * arithmetic tests down to compile-time constants. */ ! int64 a = 20000001; ! int64 b = 40000005; int does_int64_work() { ! int64 c,d; ! if (sizeof(int64) != 8) return 0; /* definitely not the right size */ /* Do perfunctory checks to see if 64-bit arithmetic seems to work */ --- 14880,14899 ---- cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" #include "confdefs.h" ! typedef long long int ac_int64; /* * These are globals to discourage the compiler from folding all the * arithmetic tests down to compile-time constants. */ ! ac_int64 a = 20000001; ! ac_int64 b = 40000005; int does_int64_work() { ! ac_int64 c,d; ! if (sizeof(ac_int64) != 8) return 0; /* definitely not the right size */ /* Do perfunctory checks to see if 64-bit arithmetic seems to work */ *************** *** 15007,15024 **** #line $LINENO "configure" #include "confdefs.h" #include <stdio.h> ! typedef long long int int64; #define INT64_FORMAT "$pgac_format" ! int64 a = 20000001; ! int64 b = 40000005; int does_int64_snprintf_work() { ! int64 c; char buf[100]; ! if (sizeof(int64) != 8) return 0; /* doesn't look like the right size */ c = a * b; --- 15012,15029 ---- #line $LINENO "configure" #include "confdefs.h" #include <stdio.h> ! typedef long long int ac_int64; #define INT64_FORMAT "$pgac_format" ! ac_int64 a = 20000001; ! ac_int64 b = 40000005; int does_int64_snprintf_work() { ! ac_int64 c; char buf[100]; ! if (sizeof(ac_int64) != 8) return 0; /* doesn't look like the right size */ c = a * b; Index: config/c-compiler.m4 =================================================================== RCS file: /cvsroot/pgsql/config/c-compiler.m4,v retrieving revision 1.13 diff -c -c -r1.13 c-compiler.m4 *** config/c-compiler.m4 20 Oct 2004 02:12:07 -0000 1.13 --- config/c-compiler.m4 15 Dec 2004 17:53:04 -0000 *************** *** 26,45 **** define([Ac_cachevar], [translit([pgac_cv_type_$1_64], [ *], [_p])])dnl AC_CACHE_CHECK([whether $1 is 64 bits], [Ac_cachevar], [AC_TRY_RUN( ! [typedef $1 int64; /* * These are globals to discourage the compiler from folding all the * arithmetic tests down to compile-time constants. */ ! int64 a = 20000001; ! int64 b = 40000005; int does_int64_work() { ! int64 c,d; ! if (sizeof(int64) != 8) return 0; /* definitely not the right size */ /* Do perfunctory checks to see if 64-bit arithmetic seems to work */ --- 26,45 ---- define([Ac_cachevar], [translit([pgac_cv_type_$1_64], [ *], [_p])])dnl AC_CACHE_CHECK([whether $1 is 64 bits], [Ac_cachevar], [AC_TRY_RUN( ! [typedef $1 ac_int64; /* * These are globals to discourage the compiler from folding all the * arithmetic tests down to compile-time constants. */ ! ac_int64 a = 20000001; ! ac_int64 b = 40000005; int does_int64_work() { ! ac_int64 c,d; ! if (sizeof(ac_int64) != 8) return 0; /* definitely not the right size */ /* Do perfunctory checks to see if 64-bit arithmetic seems to work */ Index: config/c-library.m4 =================================================================== RCS file: /cvsroot/pgsql/config/c-library.m4,v retrieving revision 1.28 diff -c -c -r1.28 c-library.m4 *** config/c-library.m4 4 Oct 2004 18:14:18 -0000 1.28 --- config/c-library.m4 15 Dec 2004 17:53:04 -0000 *************** *** 108,114 **** [AC_CACHE_CHECK(whether strerror_r returns int, pgac_func_strerror_r_int, [AC_TRY_COMPILE([#include <string.h>], ! [int strerror_r(int, char *, size_t);], [pgac_func_strerror_r_int=yes], [pgac_func_strerror_r_int=no])]) if test x"$pgac_func_strerror_r_int" = xyes ; then --- 108,119 ---- [AC_CACHE_CHECK(whether strerror_r returns int, pgac_func_strerror_r_int, [AC_TRY_COMPILE([#include <string.h>], ! [#ifndef _AIX ! int strerror_r(int, char *, size_t); ! #else ! /* Older AIX has 'int' for the third argument so we don't test the args. */ ! int strerror_r(); ! #endif], [pgac_func_strerror_r_int=yes], [pgac_func_strerror_r_int=no])]) if test x"$pgac_func_strerror_r_int" = xyes ; then *************** *** 225,242 **** AC_CACHE_VAL(pgac_cv_snprintf_long_long_int_format, [for pgac_format in '%lld' '%qd' '%I64d'; do AC_TRY_RUN([#include <stdio.h> ! typedef long long int int64; #define INT64_FORMAT "$pgac_format" ! int64 a = 20000001; ! int64 b = 40000005; int does_int64_snprintf_work() { ! int64 c; char buf[100]; ! if (sizeof(int64) != 8) return 0; /* doesn't look like the right size */ c = a * b; --- 230,247 ---- AC_CACHE_VAL(pgac_cv_snprintf_long_long_int_format, [for pgac_format in '%lld' '%qd' '%I64d'; do AC_TRY_RUN([#include <stdio.h> ! typedef long long int ac_int64; #define INT64_FORMAT "$pgac_format" ! ac_int64 a = 20000001; ! ac_int64 b = 40000005; int does_int64_snprintf_work() { ! ac_int64 c; char buf[100]; ! if (sizeof(ac_int64) != 8) return 0; /* doesn't look like the right size */ c = a * b; Index: src/Makefile.global.in =================================================================== RCS file: /cvsroot/pgsql/src/Makefile.global.in,v retrieving revision 1.205 diff -c -c -r1.205 Makefile.global.in *** src/Makefile.global.in 19 Nov 2004 00:41:38 -0000 1.205 --- src/Makefile.global.in 15 Dec 2004 17:53:08 -0000 *************** *** 308,313 **** --- 308,319 ---- libpq = -L$(libpq_builddir) -lpq + # AIX libraries do not remember their required libs so we have to force + # thread dependent libraires in the link + ifeq ($(PORTNAME), aix) + libpq += $(PTHREAD_LIBS) + endif + submake-libpq: $(MAKE) -C $(libpq_builddir) all *************** *** 346,358 **** endif ifdef COPT ! CFLAGS+= $(COPT) ! LDFLAGS+= $(COPT) endif ifdef PROFILE ! CFLAGS+= $(PROFILE) ! LDFLAGS+= $(PROFILE) endif --- 352,364 ---- endif ifdef COPT ! CFLAGS += $(COPT) ! LDFLAGS += $(COPT) endif ifdef PROFILE ! CFLAGS += $(PROFILE) ! LDFLAGS += $(PROFILE) endif Index: src/makefiles/Makefile.unixware =================================================================== RCS file: /cvsroot/pgsql/src/makefiles/Makefile.unixware,v retrieving revision 1.20 diff -c -c -r1.20 Makefile.unixware *** src/makefiles/Makefile.unixware 19 Nov 2004 00:41:39 -0000 1.20 --- src/makefiles/Makefile.unixware 15 Dec 2004 17:53:12 -0000 *************** *** 33,37 **** # Unixware needs threads for everything that uses libpq CFLAGS += $(PTHREAD_CFLAGS) - - --- 33,35 ----
pgsql-patches by date: