Re: Threading fix for AIX - Mailing list pgsql-patches

From Bruce Momjian
Subject Re: Threading fix for AIX
Date
Msg-id 200412142001.iBEK1J827288@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:
> > attached is a reworked patch that works on aix 4.3.2 and 5.2, please check the configure part,
> > cause I don't have autoconf.
>
> I modified my patch to fix the problems you reported.  Please report
> back.
>

Sorry, patch now attached.

--
  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    14 Dec 2004 19:57:53 -0000
***************
*** 14611,14617 ****
--- 14611,14621 ----
  int
  main ()
  {
+ #ifndef _AIX
  int strerror_r(int, char *, size_t);
+ #else
+ int strerror_r(int, char *, int);
+ #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 */
--- 14765,14784 ----
    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 */
--- 14879,14898 ----
    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;
--- 15011,15028 ----
  #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    14 Dec 2004 19:57:53 -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    14 Dec 2004 19:57:54 -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,118 ----
  [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
! int strerror_r(int, char *, int);
! #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;
--- 229,246 ----
  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    14 Dec 2004 19:57:58 -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    14 Dec 2004 19:58:05 -0000
***************
*** 33,37 ****

  # Unixware needs threads for everything that uses libpq
  CFLAGS += $(PTHREAD_CFLAGS)
-
-
--- 33,35 ----

pgsql-patches by date:

Previous
From: Bruce Momjian
Date:
Subject: Re: Threading fix for AIX
Next
From: Marko Kreen
Date:
Subject: fix entab compile with gcc 3.3.5