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:

Previous
From: Peter Eisentraut
Date:
Subject: Re: misc new korean po files
Next
From: Alvaro Herrera
Date:
Subject: [WIP] The shared dependency patch