pkgsrc-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[pkgsrc/trunk]: pkgsrc/databases databases/postgresql91(-client): Fix build f...



details:   https://anonhg.NetBSD.org/pkgsrc/rev/d746248213f5
branches:  trunk
changeset: 609611:d746248213f5
user:      marino <marino%pkgsrc.org@localhost>
date:      Sun Oct 07 10:24:54 2012 +0000

description:
databases/postgresql91(-client): Fix build for gcc46 and gcc47

Postgresql91 uses non-constant array sizes in record definitions which
gcc enforces starting with 4.6.  These index sizes are defined as macros
using functions such as offsetof.  These patches introduce enums where
the macros become constant expressions which gcc 4.6+ will accept.

GCC 4.7 also introduces the unused-but-set-variable warning which is
popping up all over the place in pgsql91, so silence these warnings -
they are harmless and get optimized out anyway.

No revbump because functionality won't change on binaries generated with
gcc4.5 and below.

diffstat:

 databases/postgresql91-client/Makefile                                  |   5 +-
 databases/postgresql91/distinfo                                         |   5 +-
 databases/postgresql91/patches/patch-src_backend_access_gist_gistutil.c |  22 ++++
 databases/postgresql91/patches/patch-src_include_access_htup.h          |  53 ++++++++++
 databases/postgresql91/patches/patch-src_include_access_itup.h          |  26 ++++
 5 files changed, 109 insertions(+), 2 deletions(-)

diffs (151 lines):

diff -r a2d915ae93e7 -r d746248213f5 databases/postgresql91-client/Makefile
--- a/databases/postgresql91-client/Makefile    Sun Oct 07 10:24:13 2012 +0000
+++ b/databases/postgresql91-client/Makefile    Sun Oct 07 10:24:54 2012 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.8 2012/10/02 21:25:46 asau Exp $
+# $NetBSD: Makefile,v 1.9 2012/10/07 10:24:54 marino Exp $
 
 PKGNAME=       ${DISTNAME:C/-/91-client-/}
 COMMENT=       PostgreSQL database client programs
@@ -42,6 +42,9 @@
 # XXX work around core dumps with the native libedit
 USE_GNU_READLINE=      yes
 
+# Silence unused but set variable warnings from GCC4.7
+CFLAGS+=       -Wno-unused-but-set-variable
+
 .include "../../devel/readline/buildlink3.mk"
 .include "../../devel/zlib/buildlink3.mk"
 .include "../../security/openssl/buildlink3.mk"
diff -r a2d915ae93e7 -r d746248213f5 databases/postgresql91/distinfo
--- a/databases/postgresql91/distinfo   Sun Oct 07 10:24:13 2012 +0000
+++ b/databases/postgresql91/distinfo   Sun Oct 07 10:24:54 2012 +0000
@@ -1,4 +1,4 @@
-$NetBSD: distinfo,v 1.9 2012/10/05 22:15:36 adam Exp $
+$NetBSD: distinfo,v 1.10 2012/10/07 10:24:54 marino Exp $
 
 SHA1 (postgresql-9.1.6.tar.bz2) = a24b7c002463572ee7371f055e566b69e39cda3e
 RMD160 (postgresql-9.1.6.tar.bz2) = 83ef4c516658c18c1e2937eee89b05a938aa8620
@@ -9,6 +9,9 @@
 SHA1 (patch-contrib_dblink_dblink.c) = 4d7c40d107d4c13c63ef2908d9a02be319863657
 SHA1 (patch-src_Makefile.shlib) = 2370e3c4260ba7f947b0c15b9bdc43e4820e01a4
 SHA1 (patch-src_backend_Makefile) = 76ddd3015d93b19cdd6000eaffc4f53cbd4965b5
+SHA1 (patch-src_backend_access_gist_gistutil.c) = 915f545f3cec156cc20b356feb5dd2fdd849dafc
+SHA1 (patch-src_include_access_htup.h) = 5c057067a55f19af280e500f676583e5b653225e
+SHA1 (patch-src_include_access_itup.h) = 140981895f4ec05cc0073cd4538721ab43602380
 SHA1 (patch-src_makefiles_Makefile.solaris) = 0168f5bc105ffc89d5db40907a08966d8465f5a0
 SHA1 (patch-src_pl_plperl_GNUmakefile) = 2b7448d6dd8550e2ea61f40728a2780068b93d07
 SHA1 (patch-src_pl_plperl_plperl.h) = bd663fa80a47f7b82ce689060750fa6e631fbc61
diff -r a2d915ae93e7 -r d746248213f5 databases/postgresql91/patches/patch-src_backend_access_gist_gistutil.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/databases/postgresql91/patches/patch-src_backend_access_gist_gistutil.c   Sun Oct 07 10:24:54 2012 +0000
@@ -0,0 +1,22 @@
+$NetBSD: patch-src_backend_access_gist_gistutil.c,v 1.1 2012/10/07 10:24:54 marino Exp $
+
+GCC 4.6 and GCC 4.7 do not consider the storage array has having a constant
+size due to the macro definition of GEVHDRSZ found in gist.h
+"gistutil.c:248:14: error: storage size of `storage` isn't constant"
+Using an enumeration satisfies these compilers.
+
+--- src/backend/access/gist/gistutil.c.orig    2012-09-19 21:50:31.000000000 +0000
++++ src/backend/access/gist/gistutil.c
+@@ -244,8 +244,11 @@ gistMakeUnionKey(GISTSTATE *giststate, i
+ {
+ 
+       int                     dstsize;
++      enum {
++              GEV_STORAGE_SIZE = 2 * sizeof(GISTENTRY) + GEVHDRSZ
++      };
+ 
+-      static char storage[2 * sizeof(GISTENTRY) + GEVHDRSZ];
++      static char storage[GEV_STORAGE_SIZE];
+       GistEntryVector *evec = (GistEntryVector *) storage;
+ 
+       evec->n = 2;
diff -r a2d915ae93e7 -r d746248213f5 databases/postgresql91/patches/patch-src_include_access_htup.h
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/databases/postgresql91/patches/patch-src_include_access_htup.h    Sun Oct 07 10:24:54 2012 +0000
@@ -0,0 +1,53 @@
+$NetBSD: patch-src_include_access_htup.h,v 1.1 2012/10/07 10:24:54 marino Exp $
+
+Fixes GCC 4.7 warning and error
+Also see comments about similar problems in patch-src_include_access_ihup.h
+htup.h:464:2: warning: variably modified 'mt_padding' at file scope
+       [enabled by default]
+relscan.h:51:15: error: variably modified 'rs_vistuples' at file scope
+
+The relscan.h error is caused by the MaxHeapTuplesPerPage definition found
+in htup.h.  Use enum method to satisfy gcc.
+
+--- src/include/access/htup.h.orig     2012-09-19 21:50:31.000000000 +0000
++++ src/include/access/htup.h
+@@ -16,6 +16,7 @@
+ 
+ #include "access/tupdesc.h"
+ #include "access/tupmacs.h"
++#include "storage/bufpage.h"
+ #include "storage/itemptr.h"
+ #include "storage/relfilenode.h"
+ 
+@@ -405,9 +406,10 @@ do { \
+  * pointers to this anyway, to avoid excessive line-pointer bloat and not
+  * require increases in the size of work arrays.
+  */
+-#define MaxHeapTuplesPerPage  \
+-      ((int) ((BLCKSZ - SizeOfPageHeaderData) / \
+-                      (MAXALIGN(offsetof(HeapTupleHeaderData, t_bits)) + sizeof(ItemIdData))))
++#define MaxHeapTuplesPerPageInt \
++      (BLCKSZ - SizeOfPageHeaderData) / \
++              (MAXALIGN(offsetof(HeapTupleHeaderData, t_bits)) + \
++              sizeof(ItemIdData))
+ 
+ /*
+  * MaxAttrSize is a somewhat arbitrary upper limit on the declared size of
+@@ -452,11 +454,16 @@ do { \
+  */
+ #define MINIMAL_TUPLE_OFFSET \
+       ((offsetof(HeapTupleHeaderData, t_infomask2) - sizeof(uint32)) / MAXIMUM_ALIGNOF * MAXIMUM_ALIGNOF)
+-#define MINIMAL_TUPLE_PADDING \
++#define MINIMAL_TUPLE_PADDING_MACRO \
+       ((offsetof(HeapTupleHeaderData, t_infomask2) - sizeof(uint32)) % MAXIMUM_ALIGNOF)
+ #define MINIMAL_TUPLE_DATA_OFFSET \
+       offsetof(MinimalTupleData, t_infomask2)
+ 
++enum {
++      MINIMAL_TUPLE_PADDING = MINIMAL_TUPLE_PADDING_MACRO,
++      MaxHeapTuplesPerPage = MaxHeapTuplesPerPageInt
++};
++
+ typedef struct MinimalTupleData
+ {
+       uint32          t_len;                  /* actual length of minimal tuple */
diff -r a2d915ae93e7 -r d746248213f5 databases/postgresql91/patches/patch-src_include_access_itup.h
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/databases/postgresql91/patches/patch-src_include_access_itup.h    Sun Oct 07 10:24:54 2012 +0000
@@ -0,0 +1,26 @@
+$NetBSD: patch-src_include_access_itup.h,v 1.1 2012/10/07 10:24:54 marino Exp $
+
+GCC 4.7 fails on nbtree.h:509:16 with this message:
+error: variably modified 'items' at file scope
+It does like defining records with "variable" array lengths
+Use the enum trick to convertMaxIndexTuplesPerPage into a constant
+
+--- src/include/access/itup.h.orig     2012-09-19 21:50:31.000000000 +0000
++++ src/include/access/itup.h
+@@ -133,10 +133,13 @@ typedef IndexAttributeBitMapData *IndexA
+  * IndexTupleData struct.  We arrive at the divisor because each tuple
+  * must be maxaligned, and it must have an associated item pointer.
+  */
+-#define MaxIndexTuplesPerPage \
+-      ((int) ((BLCKSZ - SizeOfPageHeaderData) / \
+-                      (MAXALIGN(sizeof(IndexTupleData) + 1) + sizeof(ItemIdData))))
++#define MaxIndexTuplesPerPageInt \
++      (BLCKSZ - SizeOfPageHeaderData) / \
++                (MAXALIGN(sizeof(IndexTupleData) + 1) + sizeof(ItemIdData))
+ 
++enum {
++      MaxIndexTuplesPerPage = MaxIndexTuplesPerPageInt
++};
+ 
+ /* routines in indextuple.c */
+ extern IndexTuple index_form_tuple(TupleDesc tupleDescriptor,



Home | Main Index | Thread Index | Old Index