diff options
author | marino <marino@pkgsrc.org> | 2012-10-07 10:24:54 +0000 |
---|---|---|
committer | marino <marino@pkgsrc.org> | 2012-10-07 10:24:54 +0000 |
commit | 677bdca1d4a06dd01c71e3b673a6dcf085035e83 (patch) | |
tree | 92a4413ab94a2bfe32c405a088ddc21c620f0867 /databases | |
parent | fb659bb313fea1f3177ff0f88adc645a21961a4e (diff) | |
download | pkgsrc-677bdca1d4a06dd01c71e3b673a6dcf085035e83.tar.gz |
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 (limited to 'databases')
5 files changed, 109 insertions, 2 deletions
diff --git a/databases/postgresql91-client/Makefile b/databases/postgresql91-client/Makefile index 196d3a3e686..44a2e555ad0 100644 --- a/databases/postgresql91-client/Makefile +++ b/databases/postgresql91-client/Makefile @@ -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 @@ CONF_FILES+= share/postgresql/${f}.sample ${PKG_SYSCONFDIR}/${f} # 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 --git a/databases/postgresql91/distinfo b/databases/postgresql91/distinfo index 58b3c16af78..e496ee9e5e5 100644 --- a/databases/postgresql91/distinfo +++ b/databases/postgresql91/distinfo @@ -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_Makefile) = 4960ad57d42465fae203870548e4c53f8a32ce04 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 --git a/databases/postgresql91/patches/patch-src_backend_access_gist_gistutil.c b/databases/postgresql91/patches/patch-src_backend_access_gist_gistutil.c new file mode 100644 index 00000000000..b42c72146a7 --- /dev/null +++ b/databases/postgresql91/patches/patch-src_backend_access_gist_gistutil.c @@ -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 --git a/databases/postgresql91/patches/patch-src_include_access_htup.h b/databases/postgresql91/patches/patch-src_include_access_htup.h new file mode 100644 index 00000000000..99520a69f0a --- /dev/null +++ b/databases/postgresql91/patches/patch-src_include_access_htup.h @@ -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 --git a/databases/postgresql91/patches/patch-src_include_access_itup.h b/databases/postgresql91/patches/patch-src_include_access_itup.h new file mode 100644 index 00000000000..9707d06e3cc --- /dev/null +++ b/databases/postgresql91/patches/patch-src_include_access_itup.h @@ -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, |