summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTiziano Müller <dev-zero@gentoo.org>2008-06-14 11:49:55 +0000
committerTiziano Müller <dev-zero@gentoo.org>2008-06-14 11:49:55 +0000
commite32c624a4774bacaf3cfe5e58d18662c0760011a (patch)
treebc3ba47df5de5dd9558f09c0474a15eb1dc56749 /dev-db/postgresql-server
parentBug #226505 - For compatibity with phase execution order in (diff)
downloadhistorical-e32c624a4774bacaf3cfe5e58d18662c0760011a.tar.gz
historical-e32c624a4774bacaf3cfe5e58d18662c0760011a.tar.bz2
historical-e32c624a4774bacaf3cfe5e58d18662c0760011a.zip
Changed home-path for the postgresql from /var/lib to /var/lib/postgresql (bug #177085). Fixed elog for the location of postgresql.conf (bug #194701). Change to not install the html-docs since they're provided by postgresql-docs (bug #225629).
Package-Manager: portage-2.1.5.4
Diffstat (limited to 'dev-db/postgresql-server')
-rw-r--r--dev-db/postgresql-server/ChangeLog21
-rw-r--r--dev-db/postgresql-server/Manifest25
-rw-r--r--dev-db/postgresql-server/files/postgresql-7.4.21-autoconf.patch48
-rw-r--r--dev-db/postgresql-server/files/postgresql-8.0-common.patch2
-rw-r--r--dev-db/postgresql-server/files/postgresql-8.0.15-common.patch76
-rw-r--r--dev-db/postgresql-server/files/postgresql-8.3-server.patch2443
-rw-r--r--dev-db/postgresql-server/files/postgresql-8.3.1-server.patch224
-rw-r--r--dev-db/postgresql-server/postgresql-server-7.4.21.ebuild235
-rw-r--r--dev-db/postgresql-server/postgresql-server-8.0.15.ebuild4
-rw-r--r--dev-db/postgresql-server/postgresql-server-8.0.17.ebuild240
-rw-r--r--dev-db/postgresql-server/postgresql-server-8.1.13.ebuild239
-rw-r--r--dev-db/postgresql-server/postgresql-server-8.2.7.ebuild5
-rw-r--r--dev-db/postgresql-server/postgresql-server-8.2.9.ebuild245
-rw-r--r--dev-db/postgresql-server/postgresql-server-8.3.1.ebuild4
-rw-r--r--dev-db/postgresql-server/postgresql-server-8.3.3.ebuild249
15 files changed, 3936 insertions, 124 deletions
diff --git a/dev-db/postgresql-server/ChangeLog b/dev-db/postgresql-server/ChangeLog
index 9c551674c047..9aec081e51da 100644
--- a/dev-db/postgresql-server/ChangeLog
+++ b/dev-db/postgresql-server/ChangeLog
@@ -1,6 +1,25 @@
# ChangeLog for dev-db/postgresql-server
# Copyright 1999-2008 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/dev-db/postgresql-server/ChangeLog,v 1.7 2008/06/04 21:44:07 dev-zero Exp $
+# $Header: /var/cvsroot/gentoo-x86/dev-db/postgresql-server/ChangeLog,v 1.8 2008/06/14 11:49:54 dev-zero Exp $
+
+*postgresql-server-8.3.3 (14 Jun 2008)
+*postgresql-server-8.2.9 (14 Jun 2008)
+*postgresql-server-8.1.13 (14 Jun 2008)
+*postgresql-server-8.0.17 (14 Jun 2008)
+*postgresql-server-7.4.21 (14 Jun 2008)
+
+ 14 Jun 2008; Tiziano Müller <dev-zero@gentoo.org>
+ +files/postgresql-7.4.21-autoconf.patch,
+ +files/postgresql-8.0.15-common.patch, files/postgresql-8.0-common.patch,
+ +files/postgresql-8.3.1-server.patch, files/postgresql-8.3-server.patch,
+ +postgresql-server-7.4.21.ebuild, postgresql-server-8.0.15.ebuild,
+ +postgresql-server-8.0.17.ebuild, +postgresql-server-8.1.13.ebuild,
+ postgresql-server-8.2.7.ebuild, +postgresql-server-8.2.9.ebuild,
+ postgresql-server-8.3.1.ebuild, +postgresql-server-8.3.3.ebuild:
+ Changed home-path for the postgresql from /var/lib to /var/lib/postgresql
+ (bug #177085). Fixed elog for the location of postgresql.conf (bug
+ #194701). Change to not install the html-docs since they're provided by
+ postgresql-docs (bug #225629).
04 Jun 2008; Tiziano Müller <dev-zero@gentoo.org>
postgresql-server-7.3.21.ebuild, postgresql-server-7.4.19.ebuild,
diff --git a/dev-db/postgresql-server/Manifest b/dev-db/postgresql-server/Manifest
index 777a24f6b711..ed0f6aa7bb9c 100644
--- a/dev-db/postgresql-server/Manifest
+++ b/dev-db/postgresql-server/Manifest
@@ -6,14 +6,17 @@ AUX postgresql-7.4-regress.patch 3337 RMD160 dcd1eef99595c5ae070a6778179a1b46118
AUX postgresql-7.4-server.patch 2811 RMD160 07a11c84497d7ddeaac1266821d2dd4a75f2ea01 SHA1 3d09b0cdffdddd93de0b97b626fc91772342f640 SHA256 d31c37a7821421e289e0dcc57b743e219fe97745053a2750703647f4e2a4bd5c
AUX postgresql-7.4-vacuum-delay.patch 8918 RMD160 dcd4fc4774277b0bf4a2158584c18bae2dc04232 SHA1 fe701fd6ca6cc9519417ab1053ef61a50ca51281 SHA256 7112ea61b84ce5c6974cd74687039f2ef871e0b4b25a34b4394225c2695fc123
AUX postgresql-7.4.19-autoconf.patch 1870 RMD160 92e49d3bc82ebfce6c798b4d56008da5c8f46d33 SHA1 a42d03a9c4d7b5df7a69a3d23c9e527c6d901eba SHA256 dccd9553b9cfdc88ffe98e445e27d1714426b4f1e6f405af438243ba06b93b6e
-AUX postgresql-8.0-common.patch 2294 RMD160 4f0028f6b5e95d74328f2c3981aa558420739181 SHA1 be649bf09bd5082e6e2af58c44cc470456e37780 SHA256 eca25d56bd157a3a7883d4c4305e4e0b7d22b8dd0cbca93da88add24da28b681
+AUX postgresql-7.4.21-autoconf.patch 1870 RMD160 24606231223419721fa9ee6844c685368564f20c SHA1 50577930b75b4690c510132cce00475d4f3a13ab SHA256 e943c4ef9cb14fa064879c273ef5a064b5ce01b1d6af36057f0807d52eec0396
+AUX postgresql-8.0-common.patch 2294 RMD160 bbf24d2f0278618ec8a0eafbcbc1787adf4ff343 SHA1 5e421092c2cb12c1bd1f9639bd1a9bf1120d1ab0 SHA256 53069c1e90fd3ca37704183417e9240eae805aa3ad44533fd83b24640c7765fd
AUX postgresql-8.0-server.patch 6918 RMD160 de96cda82597098fbfb595fac5069164d7e4f30e SHA1 9f5b5e3bff058f75fe5e25e968e96c1c0147cc43 SHA256 5d8ff711ec83eb8660edc129519bd67ae76553fca22ced379439d31938173346
+AUX postgresql-8.0.15-common.patch 2294 RMD160 4f0028f6b5e95d74328f2c3981aa558420739181 SHA1 be649bf09bd5082e6e2af58c44cc470456e37780 SHA256 eca25d56bd157a3a7883d4c4305e4e0b7d22b8dd0cbca93da88add24da28b681
AUX postgresql-8.1-common.patch 2290 RMD160 ba1f803b045a8d3f430231b0c22b8817e2eb8cf6 SHA1 facf27b2c396fe9f2347eb4cec3b2714a8587b70 SHA256 f80c8dd5a31b88df330c15de4331db1600ae078a789650ab28d61620f27056f5
AUX postgresql-8.1-server.patch 6862 RMD160 94dc4c22f1f480bf5844f6e654d8a4e0534059eb SHA1 8fbf5d0b4d24b675f6812ff89465527263f51012 SHA256 97f3b3d889af08aeb92e6583dd970763cdc662621e34e13a5298fe9cd5ad4b4d
AUX postgresql-8.2-common.patch 2640 RMD160 b25ba915d5d6ad9c12c1d51426363c196b830923 SHA1 7b946d57bfed34e2e7e1338c3ab3004341d7ab12 SHA256 36ca9cb4f26424c302fdd704b7c1a268e87612afa3006bf008d4594dabe080f8
AUX postgresql-8.2-server.patch 5319 RMD160 9aae5832defd2e43879246e773fd1aada0680716 SHA1 ea726704fc85118c27f511bfd9324b136ced3eb1 SHA256 2687fa5159a34da59e36af4c894f43b2136e8e88c965a682607cb48acb61d8ee
AUX postgresql-8.3-common.patch 2641 RMD160 0822bf1512457e91d5f32f9d192de6f197db9c55 SHA1 e4bdbd5eee1023e8f0b42ef408b34b57495d1e2b SHA256 e416c26d9c3d266b306ddbc0a2b648054739b7ace35e2b4e449fbdaf094bc197
-AUX postgresql-8.3-server.patch 6823 RMD160 f9dcc246eca1251526b94aa81fc8f3d5a02c3b76 SHA1 7ae8c9764d662364392d98f686060e22da2dfa46 SHA256 0e3684ce6bb03f860501819985a295d72c7579e1e94ddd1239086a38c0f4a105
+AUX postgresql-8.3-server.patch 66296 RMD160 6acd5dec3b411d0439bab47a344406df25c08b7a SHA1 fca417c169d5de6c2ea036ab80a4ce02665ae881 SHA256 74684e07df2ff15f3c10d4f586cd72fba51c996ab9a97b6aee11f79987fc4de6
+AUX postgresql-8.3.1-server.patch 6823 RMD160 f9dcc246eca1251526b94aa81fc8f3d5a02c3b76 SHA1 7ae8c9764d662364392d98f686060e22da2dfa46 SHA256 0e3684ce6bb03f860501819985a295d72c7579e1e94ddd1239086a38c0f4a105
AUX postgresql.conf-7.3 1532 RMD160 fa088eb5742efbce852d6dcff1dba420857aa67e SHA1 22ac6f3632d6baa1a97017f27001951ccf6a224c SHA256 c0e2ae8c22895bde591302234735ceaddcf4c2a4b1e17ed8cee53b66dad32a24
AUX postgresql.conf-7.4 1532 RMD160 8897005145112dc1782174fcac512531a32ce88a SHA1 f7e1e1c6cac39d1c7ecc371c9391214d6a8c8055 SHA256 4084c99ad0fff027876c82375c4d99d1669090398137ef5ed19c8e74cecb6e0c
AUX postgresql.conf-8.0 1532 RMD160 de03805c18ac079b830bcc412c838eb67cbf4f2b SHA1 a7e288d80b0fd24ddf55bdd560f1e8b216b1f540 SHA256 471cd40a0f9100789d238722e5e5efb923dd4f526b564341a5401b3df236721a
@@ -28,15 +31,25 @@ AUX postgresql.init-8.2 2985 RMD160 2da04989bf124326a34a7fd718f06bf9fd9beae9 SHA
AUX postgresql.init-8.3 2985 RMD160 62548136f7c06a419927eeaff2d991f9a1aa6528 SHA1 f1fc6f0dd69fa1fc327197856dde28a813ded024 SHA256 99cf6469c0175713252c4de19ade86deb860062fa91c4c74f9397aedb7851c88
DIST postgresql-7.3.21.tar.bz2 9284558 RMD160 f9de4676b4fbe3d96e6d1462b8bc3c05600d6525 SHA1 bdfa3bddc483c6642cc2ee271d076bfaa4c20c92 SHA256 bf44e0ac259e9f6e14ac102f2977496b6996ecea2fd227fbdcea5fa70e342888
DIST postgresql-7.4.19.tar.bz2 10307396 RMD160 c9a1c7dc8e7bf9ce93c3b4f061af0563b1cc2627 SHA1 19c563d47b0d5deeef03b5ca7707c9f1917853ce SHA256 447ac7070aa0a547f17a307e842734fc27e2716cb4a251fa9a810b178d44c389
+DIST postgresql-7.4.21.tar.bz2 10282778 RMD160 b4868ac2664353b8cef4c67d59770f357293c865 SHA1 813895863832b5512838b90b2ea2300b74b856f5 SHA256 2c62d112a7addd4333d14101e508d2222a639e1698b8e4958ce1b05138f76932
DIST postgresql-8.0.15.tar.bz2 11253897 RMD160 6aff5c63dce73eea609f0b6e013cd043ae8b7a37 SHA1 66a6fef7749afb91471200005511c04fc1ac2706 SHA256 59408a00db1c73e638a11af10438a827507b7a72b53916d58f2d44c477718714
+DIST postgresql-8.0.17.tar.bz2 11234855 RMD160 d22b26b38a91632b8840e9d0b1b96b4ad80eafed SHA1 d1c4530323a81b00a31003dea695875a8f87ff4f SHA256 e425602f60c034ecfd6ffe9b403d863cd99ff6fbc0891a8d59da33258a21a93b
DIST postgresql-8.1.11.tar.bz2 11735420 RMD160 9fb98eadc4f1015205970f26b31b68ea0378bda9 SHA1 73c0f09754fc8e3c7f8d7de49d70244b76927416 SHA256 3e91cdfc1353fa9c6416d9fc8ae9d6ab3171565f00aeb6c882214c2f08a03e2e
+DIST postgresql-8.1.13.tar.bz2 11744780 RMD160 fe9fab1b70fa93b4dc0bd19f63a590f75511e79e SHA1 6d4b771aa4011fa3e8aed726f1521b77cd91772a SHA256 a537734da80f85c51ef72dd2d28bb2f64b73f63a727ef53a90211ccac2dcb1d1
DIST postgresql-8.2.7.tar.bz2 12576126 RMD160 96700e91c3b9e733c686b0fe377c7ba661710942 SHA1 0be0dbaa488810ebcba77ac7246180c5b2a9b669 SHA256 39528d1ba50f5abc51569e8b9bdeb47d0d4650d289a2c2e465621864b1ff3584
+DIST postgresql-8.2.9.tar.bz2 12558265 RMD160 00fe295d928e77a2dff136795ba846ae3ac08569 SHA1 aeaf0487d031c56518af002f76f779c23baf6391 SHA256 95ea81e0fa00184a63dae960007be95200343b24dec6cdea41bc809db29f22c2
DIST postgresql-8.3.1.tar.bz2 13995572 RMD160 075efb67126f2b308d2a5fe4f9097fdbfbe94c89 SHA1 7397e0d8fd3c420ee845d9ae4995ae347bfaea1d SHA256 7ccf1e5c987920e4d6eb98b8589939e29d3a361d285055d5af35ddd8e1a2d992
+DIST postgresql-8.3.3.tar.bz2 14004538 RMD160 8cc31cae862e328c8372245c8f953a1773dcc1f8 SHA1 b933f26a70bef9a5971c0ff2f392e293eed138b2 SHA256 e9406b93794dc4fd15b21e10512d2b694236d79b018d29b9ca86311d5cca2437
EBUILD postgresql-server-7.3.21.ebuild 9021 RMD160 48af14ad1f0f5d9af1ab1bbee786c0c5185f2e1c SHA1 0a594f6bb163070d8a0af2fbd56fdadbaa2ad050 SHA256 52ac83e6038935db6f0edb8c7ee0fae61e68d77061c6b41bc99e155bc2d75321
EBUILD postgresql-server-7.4.19.ebuild 8951 RMD160 eaee743bc8574efe01a8cc30af04c41ed1215628 SHA1 0afad9d1fba84783849f999e17d823a3e3e88906 SHA256 15c7bd6c7d8c404bbd9461262067301dd9606eb0067b065347c03f17c0d9ef09
-EBUILD postgresql-server-8.0.15.ebuild 9147 RMD160 0132314ec71a1a15c260df2ec1286da9ce5f9e93 SHA1 8f84cb5656b52d649e6b593516fa6b36f26d21e7 SHA256 2497b1cc329889158fcd27169f428824ace2d36e16fa59baf0a0222527157eca
+EBUILD postgresql-server-7.4.21.ebuild 8924 RMD160 de1d0e68b8ffaf453a6848c036e173c42cb456c9 SHA1 6b14b0a92cdc4c43f9c446ba52c5154e2c9996d7 SHA256 74ec07c96dce46f8a23d09ff676d583dd6362694deae001c79bfffb2d1bb017f
+EBUILD postgresql-server-8.0.15.ebuild 9150 RMD160 7a732f8c7791976955ec0fcecec06b6b2705482b SHA1 a78f72197c4dc7169ef13e3bb12a6c79a40a46d0 SHA256 597f22ac4c4fe19a9e1fa300c77c7bea56bb6e5630e693a555e5a69df8450cb3
+EBUILD postgresql-server-8.0.17.ebuild 9120 RMD160 2db4b6c9d52685277ba0969ac953d10f557cebd4 SHA1 b8fc088e06554cc351d45d9088497c2e47fc8f98 SHA256 6607f91436dec28b28218cabd21eedc24d46769087ae5d8e629c6848d96ed442
EBUILD postgresql-server-8.1.11.ebuild 9268 RMD160 a1039e8ef27793419e2cfb11cd2fb29264ba7f3a SHA1 391677189aa5074f6b12bb427aa0292c8bafa69b SHA256 fdf24b21f596583c90ffdc4ffe9b4b7e9067aa13418dc3b0a884bedb75ddc690
-EBUILD postgresql-server-8.2.7.ebuild 9496 RMD160 ba02e7178eb65a990bfd14389e06edcbf1bd6040 SHA1 7c553387cc5319d01096e1edda896aec50b07dd6 SHA256 a533b0f4b8665dc21ee2b77819448cd95b8bb6787cdea87d4ce4662e55f4ff35
-EBUILD postgresql-server-8.3.1.ebuild 9727 RMD160 bbd102c646ea682d96c2135ca05b8d9cec73f840 SHA1 80887274991bb58721e3b3e618a3207b6a12e6bf SHA256 277188e7d784ad3d33ff81d31288414dc3fe10f8d9117e2fafabb734ad44d6c9
-MISC ChangeLog 9943 RMD160 e57361954ff4e6724da59bbc944f36758d71aa5f SHA1 4d42ec14c7d69b0f874ade33b3e72b8ed9c86407 SHA256 d7429db246a52e0947f48b1b1a00452ec9e0b7bd7780168abaa0f2c9e45c9588
+EBUILD postgresql-server-8.1.13.ebuild 9206 RMD160 1d4a8bee7bc396d0f45018ad02e14ee5b8ca633c SHA1 069b65dcbdad0a62db127829b1a69a06176ff056 SHA256 c331589472d7e142fb924235cea063b78923dbda797e392d4c872204510360ea
+EBUILD postgresql-server-8.2.7.ebuild 9425 RMD160 28db4996485f7a18561bf6517de6ae619734bf75 SHA1 d46e82da13b7766895c890a0c09e98d53ad0a700 SHA256 701b49087e6632e71d9bcf42ec61df59cd81c692bdc5467c813b39aeca3b2b4d
+EBUILD postgresql-server-8.2.9.ebuild 9505 RMD160 55374d201f8f7fcd5c856652216ca5ee6053b5fc SHA1 5d633cb7725758fc4b96053735952b1287fd388f SHA256 3cab96dae890fe4e47b843b43102f58fa328b5f3df84043bbe03c94974700be8
+EBUILD postgresql-server-8.3.1.ebuild 9729 RMD160 6d1ea7e0702abe3a950c99e12484d5dc8bbcb3d1 SHA1 2fc164f77f34b025c6be78c051c0579ce5722603 SHA256 a04c163a4418c827b29b4c610d407c1bea2eab0dfa58bf6c56e6c52a0db4bdf8
+EBUILD postgresql-server-8.3.3.ebuild 9665 RMD160 c11b3e133aa3f2262eaea9be32523190dc1cd41e SHA1 c81a6700027050723f8be5e4eb7bc36bb9342ed6 SHA256 715dc883693612605971bffff7b3bee607d8b66d8919e972546183e21851e270
+MISC ChangeLog 10915 RMD160 0400edb46365f1d68270e09990e8ca9ed98a0673 SHA1 4b55dd40b100d24f2ae508d2ef0b9e11829df9c3 SHA256 74649f13305e87ba0046e8c0f85c0b1abebda2f8bae644cd1676e5411208357e
MISC metadata.xml 164 RMD160 becfe652663bd65719dd11fa6ffb588b3d5b4ecc SHA1 f67b7ac1c5e6e65ef5a19a589d4759c84918f86c SHA256 7e8e8126bc8701c4a42c7dfed8bb755ac6040fe3d0e3f994d888f8b2b4fa7d8b
diff --git a/dev-db/postgresql-server/files/postgresql-7.4.21-autoconf.patch b/dev-db/postgresql-server/files/postgresql-7.4.21-autoconf.patch
new file mode 100644
index 000000000000..9411a22f9020
--- /dev/null
+++ b/dev-db/postgresql-server/files/postgresql-7.4.21-autoconf.patch
@@ -0,0 +1,48 @@
+diff --git a/config/programs.m4 b/config/programs.m4
+index ae3b91a..6af24d2 100644
+--- a/config/programs.m4
++++ b/config/programs.m4
+@@ -153,13 +153,13 @@ AC_DEFUN([PGAC_CHECK_GETTEXT],
+ dnl FIXME: We should probably check for version >=0.10.36.
+ AC_CHECK_PROGS(XGETTEXT, xgettext)
+
+- # Note: share/locale is always the default, independent of $datadir
+- localedir='${prefix}/share/locale'
+- if test x"$prefix" = x"NONE"; then
+- exp_localedir="$ac_default_prefix/share/locale"
+- else
+- exp_localedir="$prefix/share/locale"
+- fi
++ # Note: share/locale *WAS* always the default, independent of $datadir
++ AC_ARG_WITH([locale-dir],
++ AC_HELP_STRING([--with-locale-dir],[Set path to locale files]),
++ [ localedir="${withval}" ],
++ [ localedir='${prefix}/share/locale' ]
++ )
++ exp_localedir="${localedir}"
+
+ AC_SUBST(localedir)
+ AC_DEFINE_UNQUOTED(LOCALEDIR, ["$exp_localedir"],
+diff --git a/configure.in b/configure.in
+index f7bdec3..c8b5b7e 100644
+--- a/configure.in
++++ b/configure.in
+@@ -19,17 +19,8 @@ m4_pattern_forbid(^PGAC_)dnl to catch undefined macros
+ dnl
+ dnl The GNU folks apparently haven't heard that some people don't use
+ dnl Texinfo. Use this sorcery to use "docdir" instead of "infodir".
+-m4_define([info], [doc])
+-m4_define([infodir], [docdir])
+ AC_INIT([PostgreSQL], [7.4.21], [pgsql-bugs@postgresql.org])
+-m4_undefine([infodir])
+-m4_undefine([info])
+-AC_SUBST(docdir)
+-
+-m4_if(m4_defn([m4_PACKAGE_VERSION]), [2.53], [], [m4_fatal([Autoconf version 2.53 is required.
+-Untested combinations of 'autoconf' and PostgreSQL versions are not
+-recommended. You can remove the check from 'configure.in' but it is then
+-your responsibility whether the result works or not.])])
++
+ AC_COPYRIGHT([Copyright 2004 PostgreSQL Global Development Group])
+ AC_CONFIG_SRCDIR([src/backend/access/common/heaptuple.c])
+ AC_CONFIG_AUX_DIR(config)
diff --git a/dev-db/postgresql-server/files/postgresql-8.0-common.patch b/dev-db/postgresql-server/files/postgresql-8.0-common.patch
index 40932ecf4bc7..30cf06603d21 100644
--- a/dev-db/postgresql-server/files/postgresql-8.0-common.patch
+++ b/dev-db/postgresql-server/files/postgresql-8.0-common.patch
@@ -31,7 +31,7 @@ index c71b175..674036a 100644
AC_INIT([PostgreSQL], [8.0.15], [pgsql-bugs@postgresql.org])
--m4_if(m4_defn([m4_PACKAGE_VERSION]), [2.53], [], [m4_fatal([Autoconf version 2.59 is required.
+-m4_if(m4_defn([m4_PACKAGE_VERSION]), [2.53], [], [m4_fatal([Autoconf version 2.53 is required.
-Untested combinations of 'autoconf' and PostgreSQL versions are not
-recommended. You can remove the check from 'configure.in' but it is then
-your responsibility whether the result works or not.])])
diff --git a/dev-db/postgresql-server/files/postgresql-8.0.15-common.patch b/dev-db/postgresql-server/files/postgresql-8.0.15-common.patch
new file mode 100644
index 000000000000..40932ecf4bc7
--- /dev/null
+++ b/dev-db/postgresql-server/files/postgresql-8.0.15-common.patch
@@ -0,0 +1,76 @@
+diff --git a/config/programs.m4 b/config/programs.m4
+index 3f87396..9c7fbf0 100644
+--- a/config/programs.m4
++++ b/config/programs.m4
+@@ -153,13 +153,13 @@ AC_DEFUN([PGAC_CHECK_GETTEXT],
+ dnl FIXME: We should probably check for version >=0.10.36.
+ AC_CHECK_PROGS(XGETTEXT, xgettext)
+
+- # Note: share/locale is always the default, independent of $datadir
+- localedir='${prefix}/share/locale'
+- if test x"$prefix" = x"NONE"; then
+- exp_localedir="$ac_default_prefix/share/locale"
+- else
+- exp_localedir="$prefix/share/locale"
+- fi
++ # Note: share/locale *WAS* always the default, independent of $datadir
++ AC_ARG_WITH([locale-dir],
++ AC_HELP_STRING([--with-locale-dir],[Set path to locale files]),
++ [ localedir="${withval}" ],
++ [ localedir='${prefix}/share/locale' ]
++ )
++ exp_localedir="${localedir}"
+
+ AC_SUBST(localedir)
+ AC_DEFINE_UNQUOTED(LOCALEDIR, ["$exp_localedir"],
+diff --git a/configure.in b/configure.in
+index c71b175..674036a 100644
+--- a/configure.in
++++ b/configure.in
+@@ -19,10 +19,6 @@ m4_pattern_forbid(^PGAC_)dnl to catch undefined macros
+
+ AC_INIT([PostgreSQL], [8.0.15], [pgsql-bugs@postgresql.org])
+
+-m4_if(m4_defn([m4_PACKAGE_VERSION]), [2.53], [], [m4_fatal([Autoconf version 2.59 is required.
+-Untested combinations of 'autoconf' and PostgreSQL versions are not
+-recommended. You can remove the check from 'configure.in' but it is then
+-your responsibility whether the result works or not.])])
+ AC_COPYRIGHT([Copyright (c) 1996-2005, PostgreSQL Global Development Group])
+ AC_CONFIG_SRCDIR([src/backend/access/common/heaptuple.c])
+ AC_CONFIG_AUX_DIR(config)
+diff --git a/src/include/storage/s_lock.h b/src/include/storage/s_lock.h
+index 0c2dff0..d548d4d 100644
+--- a/src/include/storage/s_lock.h
++++ b/src/include/storage/s_lock.h
+@@ -239,6 +239,31 @@ tas(volatile slock_t *lock)
+ #endif /* __s390__ || __s390x__ */
+
+
++#if defined(__sh__)
++#define HAS_TEST_AND_SET
++
++typedef unsigned char slock_t;
++
++#define TAS(lock) tas(lock)
++
++static __inline__ int
++tas(volatile slock_t *lock)
++{
++ register int _res = 1;
++
++ __asm__ __volatile__(
++ "tas.b @%1\n\t"
++ "movt %0\n\t"
++ "xor #1,%0"
++: "=z"(_res)
++: "r"(lock)
++: "t","memory");
++ return _res;
++}
++
++#endif /* __sh__ */
++
++
+ #if defined(__sparc__)
+ #define HAS_TEST_AND_SET
+
diff --git a/dev-db/postgresql-server/files/postgresql-8.3-server.patch b/dev-db/postgresql-server/files/postgresql-8.3-server.patch
index da1e812e0b3d..270c07887871 100644
--- a/dev-db/postgresql-server/files/postgresql-8.3-server.patch
+++ b/dev-db/postgresql-server/files/postgresql-8.3-server.patch
@@ -1,31 +1,18 @@
-=== GNUmakefile.in
-==================================================================
---- GNUmakefile.in (revision 14)
-+++ GNUmakefile.in (local)
-@@ -11,19 +11,16 @@
- all:
- $(MAKE) -C doc all
- $(MAKE) -C src all
-- $(MAKE) -C config all
- @echo "All of PostgreSQL successfully made. Ready to install."
-
- install:
- $(MAKE) -C doc $@
- $(MAKE) -C src $@
-- $(MAKE) -C config $@
- @echo "PostgreSQL installation complete."
-
- installdirs uninstall:
- $(MAKE) -C doc $@
- $(MAKE) -C src $@
-- $(MAKE) -C config $@
+diff -Naur postgresql-8.3.3.orig/contrib/adminpack/Makefile postgresql-8.3.3/contrib/adminpack/Makefile
+--- postgresql-8.3.3.orig/contrib/adminpack/Makefile 2008-06-14 12:56:41.000000000 +0200
++++ postgresql-8.3.3/contrib/adminpack/Makefile 2008-06-14 12:57:12.000000000 +0200
+@@ -1,7 +1,7 @@
+ # $PostgreSQL: pgsql/contrib/adminpack/Makefile,v 1.6 2007/11/10 23:59:50 momjian Exp $
- distprep:
- $(MAKE) -C doc $@
-=== contrib/Makefile
-==================================================================
---- contrib/Makefile (revision 14)
-+++ contrib/Makefile (local)
+ MODULE_big = adminpack
+-PG_CPPFLAGS = -I$(libpq_srcdir)
++PG_CPPFLAGS = -I$(libpq_srcdir) -I../../src/include/
+ DATA_built = adminpack.sql
+ DATA = uninstall_adminpack.sql
+ OBJS = adminpack.o
+diff -Naur postgresql-8.3.3.orig/contrib/Makefile postgresql-8.3.3/contrib/Makefile
+--- postgresql-8.3.3.orig/contrib/Makefile 2008-06-14 12:56:41.000000000 +0200
++++ postgresql-8.3.3/contrib/Makefile 2008-06-14 12:57:12.000000000 +0200
@@ -20,22 +20,19 @@
isn \
lo \
@@ -50,23 +37,9 @@
ifeq ($(with_openssl),yes)
WANTED_DIRS += sslinfo
-=== contrib/adminpack/Makefile
-==================================================================
---- contrib/adminpack/Makefile (revision 14)
-+++ contrib/adminpack/Makefile (local)
-@@ -1,7 +1,7 @@
- # $PostgreSQL: pgsql/contrib/adminpack/Makefile,v 1.6 2007/11/10 23:59:50 momjian Exp $
-
- MODULE_big = adminpack
--PG_CPPFLAGS = -I$(libpq_srcdir)
-+PG_CPPFLAGS = -I$(libpq_srcdir) -I../../src/include/
- DATA_built = adminpack.sql
- DATA = uninstall_adminpack.sql
- OBJS = adminpack.o
-=== contrib/uuid-ossp/Makefile
-==================================================================
---- contrib/uuid-ossp/Makefile (revision 14)
-+++ contrib/uuid-ossp/Makefile (local)
+diff -Naur postgresql-8.3.3.orig/contrib/uuid-ossp/Makefile postgresql-8.3.3/contrib/uuid-ossp/Makefile
+--- postgresql-8.3.3.orig/contrib/uuid-ossp/Makefile 2008-06-14 12:56:41.000000000 +0200
++++ postgresql-8.3.3/contrib/uuid-ossp/Makefile 2008-06-14 12:57:12.000000000 +0200
@@ -1,11 +1,13 @@
# $PostgreSQL: pgsql/contrib/uuid-ossp/Makefile,v 1.4 2007/11/13 00:13:19 tgl Exp $
@@ -82,10 +55,83 @@
ifdef USE_PGXS
PG_CONFIG = pg_config
-=== src/Makefile
-==================================================================
---- src/Makefile (revision 14)
-+++ src/Makefile (local)
+diff -Naur postgresql-8.3.3.orig/contrib/xml2/Makefile postgresql-8.3.3/contrib/xml2/Makefile
+--- postgresql-8.3.3.orig/contrib/xml2/Makefile 2008-06-14 12:56:41.000000000 +0200
++++ postgresql-8.3.3/contrib/xml2/Makefile 2008-06-14 13:21:32.000000000 +0200
+@@ -4,7 +4,8 @@
+
+ OBJS = $(if $(filter -lxslt, $(LIBS)), xpath.o xslt_proc.o, xpath.o)
+
+-SHLIB_LINK += $(filter -lxslt, $(LIBS)) $(filter -lxml2, $(LIBS))
++PG_CPPFLAGS = $(shell xml2-config --cflags)
++SHLIB_LINK += $(shell xml2-config --libs) $(shell xslt-config --libs)
+
+ DATA_built = pgxml.sql
+ DATA = uninstall_pgxml.sql
+diff -Naur postgresql-8.3.3.orig/GNUmakefile.in postgresql-8.3.3/GNUmakefile.in
+--- postgresql-8.3.3.orig/GNUmakefile.in 2008-06-14 12:56:41.000000000 +0200
++++ postgresql-8.3.3/GNUmakefile.in 2008-06-14 12:57:12.000000000 +0200
+@@ -11,19 +11,16 @@
+ all:
+ $(MAKE) -C doc all
+ $(MAKE) -C src all
+- $(MAKE) -C config all
+ @echo "All of PostgreSQL successfully made. Ready to install."
+
+ install:
+ $(MAKE) -C doc $@
+ $(MAKE) -C src $@
+- $(MAKE) -C config $@
+ @echo "PostgreSQL installation complete."
+
+ installdirs uninstall:
+ $(MAKE) -C doc $@
+ $(MAKE) -C src $@
+- $(MAKE) -C config $@
+
+ distprep:
+ $(MAKE) -C doc $@
+diff -Naur postgresql-8.3.3.orig/src/bin/initdb/Makefile postgresql-8.3.3/src/bin/initdb/Makefile
+--- postgresql-8.3.3.orig/src/bin/initdb/Makefile 2008-06-14 12:56:40.000000000 +0200
++++ postgresql-8.3.3/src/bin/initdb/Makefile 2008-06-14 12:57:12.000000000 +0200
+@@ -14,7 +14,7 @@
+ top_builddir = ../../..
+ include $(top_builddir)/src/Makefile.global
+
+-override CPPFLAGS := -DFRONTEND -I$(libpq_srcdir) $(CPPFLAGS)
++override CPPFLAGS := -DFRONTEND -I$(top_srcdir)/src/interfaces/libpq $(CPPFLAGS)
+
+ OBJS= initdb.o encnames.o pqsignal.o $(WIN32RES)
+
+diff -Naur postgresql-8.3.3.orig/src/bin/Makefile postgresql-8.3.3/src/bin/Makefile
+--- postgresql-8.3.3.orig/src/bin/Makefile 2008-06-14 12:56:40.000000000 +0200
++++ postgresql-8.3.3/src/bin/Makefile 2008-06-14 12:57:12.000000000 +0200
+@@ -13,8 +13,8 @@
+ top_builddir = ../..
+ include $(top_builddir)/src/Makefile.global
+
+-DIRS = initdb ipcclean pg_ctl pg_dump \
+- psql scripts pg_config pg_controldata pg_resetxlog
++DIRS = initdb ipcclean pg_ctl \
++ pg_controldata pg_resetxlog
+ ifeq ($(PORTNAME), win32)
+ DIRS+=pgevent
+ endif
+diff -Naur postgresql-8.3.3.orig/src/include/pg_config_manual.h postgresql-8.3.3/src/include/pg_config_manual.h
+--- postgresql-8.3.3.orig/src/include/pg_config_manual.h 2008-06-14 12:56:41.000000000 +0200
++++ postgresql-8.3.3/src/include/pg_config_manual.h 2008-06-14 12:57:12.000000000 +0200
+@@ -184,7 +184,7 @@
+ * here's where to twiddle it. You can also override this at runtime
+ * with the postmaster's -k switch.
+ */
+-#define DEFAULT_PGSOCKET_DIR "/tmp"
++#define DEFAULT_PGSOCKET_DIR "/var/run/postgresql"
+
+ /*
+ * The random() function is expected to yield values between 0 and
+diff -Naur postgresql-8.3.3.orig/src/Makefile postgresql-8.3.3/src/Makefile
+--- postgresql-8.3.3.orig/src/Makefile 2008-06-14 12:56:40.000000000 +0200
++++ postgresql-8.3.3/src/Makefile 2008-06-14 12:57:12.000000000 +0200
@@ -19,14 +19,11 @@
$(MAKE) -C backend $@
$(MAKE) -C backend/utils/mb/conversion_procs $@
@@ -102,10 +148,9 @@
install-local: installdirs-local
$(INSTALL_DATA) Makefile.global '$(DESTDIR)$(pgxsdir)/$(subdir)/Makefile.global'
-=== src/Makefile.global.in
-==================================================================
---- src/Makefile.global.in (revision 14)
-+++ src/Makefile.global.in (local)
+diff -Naur postgresql-8.3.3.orig/src/Makefile.global.in postgresql-8.3.3/src/Makefile.global.in
+--- postgresql-8.3.3.orig/src/Makefile.global.in 2008-06-14 12:56:41.000000000 +0200
++++ postgresql-8.3.3/src/Makefile.global.in 2008-06-14 12:57:12.000000000 +0200
@@ -373,10 +373,8 @@
@@ -117,61 +162,18 @@
.PHONY: submake-libpq submake-libpgport
-@@ -419,7 +417,9 @@
+@@ -419,6 +417,8 @@
LDFLAGS += $(PROFILE)
endif
+CFLAGS += -I${top_srcdir}/src/include
-
+
+
##########################################################################
#
- # substitute implementations of C library routines (see src/port/)
-=== src/bin/Makefile
-==================================================================
---- src/bin/Makefile (revision 14)
-+++ src/bin/Makefile (local)
-@@ -13,8 +13,8 @@
- top_builddir = ../..
- include $(top_builddir)/src/Makefile.global
-
--DIRS = initdb ipcclean pg_ctl pg_dump \
-- psql scripts pg_config pg_controldata pg_resetxlog
-+DIRS = initdb ipcclean pg_ctl \
-+ pg_controldata pg_resetxlog
- ifeq ($(PORTNAME), win32)
- DIRS+=pgevent
- endif
-=== src/bin/initdb/Makefile
-==================================================================
---- src/bin/initdb/Makefile (revision 14)
-+++ src/bin/initdb/Makefile (local)
-@@ -14,7 +14,7 @@
- top_builddir = ../../..
- include $(top_builddir)/src/Makefile.global
-
--override CPPFLAGS := -DFRONTEND -I$(libpq_srcdir) $(CPPFLAGS)
-+override CPPFLAGS := -DFRONTEND -I$(top_srcdir)/src/interfaces/libpq $(CPPFLAGS)
-
- OBJS= initdb.o encnames.o pqsignal.o $(WIN32RES)
-
-=== src/include/pg_config_manual.h
-==================================================================
---- src/include/pg_config_manual.h (revision 14)
-+++ src/include/pg_config_manual.h (local)
-@@ -184,7 +184,7 @@
- * here's where to twiddle it. You can also override this at runtime
- * with the postmaster's -k switch.
- */
--#define DEFAULT_PGSOCKET_DIR "/tmp"
-+#define DEFAULT_PGSOCKET_DIR "/var/run/postgresql"
-
- /*
- * The random() function is expected to yield values between 0 and
-=== src/port/Makefile
-==================================================================
---- src/port/Makefile (revision 14)
-+++ src/port/Makefile (local)
+diff -Naur postgresql-8.3.3.orig/src/port/Makefile postgresql-8.3.3/src/port/Makefile
+--- postgresql-8.3.3.orig/src/port/Makefile 2008-06-14 12:56:40.000000000 +0200
++++ postgresql-8.3.3/src/port/Makefile 2008-06-14 12:57:12.000000000 +0200
@@ -35,11 +35,10 @@
# foo_srv.o and foo.o are both built from foo.c, but only foo.o has -DFRONTEND
OBJS_SRV = $(OBJS:%.o=%_srv.o)
@@ -186,10 +188,9 @@
installdirs:
$(mkinstalldirs) '$(DESTDIR)$(libdir)'
-=== src/test/regress/GNUmakefile
-==================================================================
---- src/test/regress/GNUmakefile (revision 14)
-+++ src/test/regress/GNUmakefile (local)
+diff -Naur postgresql-8.3.3.orig/src/test/regress/GNUmakefile postgresql-8.3.3/src/test/regress/GNUmakefile
+--- postgresql-8.3.3.orig/src/test/regress/GNUmakefile 2008-06-14 12:56:40.000000000 +0200
++++ postgresql-8.3.3/src/test/regress/GNUmakefile 2008-06-14 12:57:12.000000000 +0200
@@ -141,7 +141,7 @@
##
@@ -199,10 +200,9 @@
installcheck: all
./pg_regress --psqldir=$(PSQLDIR) --schedule=$(srcdir)/serial_schedule --srcdir=$(abs_srcdir) --multibyte=$(MULTIBYTE) --load-language=plpgsql $(NOLOCALE)
-=== src/test/regress/pg_regress.c
-==================================================================
---- src/test/regress/pg_regress.c (revision 14)
-+++ src/test/regress/pg_regress.c (local)
+diff -Naur postgresql-8.3.3.orig/src/test/regress/pg_regress.c postgresql-8.3.3/src/test/regress/pg_regress.c
+--- postgresql-8.3.3.orig/src/test/regress/pg_regress.c 2008-06-14 12:56:40.000000000 +0200
++++ postgresql-8.3.3/src/test/regress/pg_regress.c 2008-06-14 12:57:12.000000000 +0200
@@ -781,9 +781,6 @@
sprintf(tmp, "%s/install/%s", temp_install, datadir);
datadir = tmp;
@@ -213,7 +213,7 @@
/*
* Set up shared library paths to include the temp install.
*
-@@ -2053,7 +2050,7 @@
+@@ -2069,7 +2066,7 @@
*/
snprintf(buf, sizeof(buf),
SYSTEMQUOTE "\"%s/psql\" -X postgres <%s 2>%s" SYSTEMQUOTE,
@@ -222,3 +222,2228 @@
for (i = 0; i < 60; i++)
{
/* Done if psql succeeds */
+diff -Naur postgresql-8.3.3.orig/src/test/regress/pg_regress.c.orig postgresql-8.3.3/src/test/regress/pg_regress.c.orig
+--- postgresql-8.3.3.orig/src/test/regress/pg_regress.c.orig 1970-01-01 01:00:00.000000000 +0100
++++ postgresql-8.3.3/src/test/regress/pg_regress.c.orig 2008-03-31 03:32:01.000000000 +0200
+@@ -0,0 +1,2221 @@
++/*-------------------------------------------------------------------------
++ *
++ * pg_regress --- regression test driver
++ *
++ * This is a C implementation of the previous shell script for running
++ * the regression tests, and should be mostly compatible with it.
++ * Initial author of C translation: Magnus Hagander
++ *
++ * This code is released under the terms of the PostgreSQL License.
++ *
++ * Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group
++ * Portions Copyright (c) 1994, Regents of the University of California
++ *
++ * $PostgreSQL: pgsql/src/test/regress/pg_regress.c,v 1.41.2.2 2008/03/31 01:32:01 tgl Exp $
++ *
++ *-------------------------------------------------------------------------
++ */
++
++#include "pg_regress.h"
++
++#include <ctype.h>
++#include <sys/stat.h>
++#include <sys/wait.h>
++#include <signal.h>
++#include <unistd.h>
++
++#ifdef HAVE_SYS_RESOURCE_H
++#include <sys/time.h>
++#include <sys/resource.h>
++#endif
++
++#include "getopt_long.h"
++#include "pg_config_paths.h"
++
++/* for resultmap we need a list of pairs of strings */
++typedef struct _resultmap
++{
++ char *test;
++ char *type;
++ char *resultfile;
++ struct _resultmap *next;
++} _resultmap;
++
++/*
++ * Values obtained from pg_config_paths.h and Makefile. The PG installation
++ * paths are only used in temp_install mode: we use these strings to find
++ * out where "make install" will put stuff under the temp_install directory.
++ * In non-temp_install mode, the only thing we need is the location of psql,
++ * which we expect to find in psqldir, or in the PATH if psqldir isn't given.
++ */
++char *bindir = PGBINDIR;
++char *libdir = LIBDIR;
++char *datadir = PGSHAREDIR;
++char *host_platform = HOST_TUPLE;
++
++#ifndef WIN32_ONLY_COMPILER
++static char *makeprog = MAKEPROG;
++#endif
++
++#ifndef WIN32 /* not used in WIN32 case */
++static char *shellprog = SHELLPROG;
++#endif
++
++/* currently we can use the same diff switches on all platforms */
++const char *basic_diff_opts = "-w";
++const char *pretty_diff_opts = "-w -C3";
++
++/* options settable from command line */
++_stringlist *dblist = NULL;
++bool debug = false;
++char *inputdir = ".";
++char *outputdir = ".";
++char *psqldir = NULL;
++static _stringlist *loadlanguage = NULL;
++static int max_connections = 0;
++static char *encoding = NULL;
++static _stringlist *schedulelist = NULL;
++static _stringlist *extra_tests = NULL;
++static char *temp_install = NULL;
++static char *temp_config = NULL;
++static char *top_builddir = NULL;
++static int temp_port = 65432;
++static bool nolocale = false;
++static char *hostname = NULL;
++static int port = -1;
++static char *user = NULL;
++static char *srcdir = NULL;
++static _stringlist *extraroles = NULL;
++
++/* internal variables */
++static const char *progname;
++static char *logfilename;
++static FILE *logfile;
++static char *difffilename;
++
++static _resultmap *resultmap = NULL;
++
++static PID_TYPE postmaster_pid = INVALID_PID;
++static bool postmaster_running = false;
++
++static int success_count = 0;
++static int fail_count = 0;
++static int fail_ignore_count = 0;
++
++static bool directory_exists(const char *dir);
++static void make_directory(const char *dir);
++
++static void
++header(const char *fmt,...)
++/* This extension allows gcc to check the format string for consistency with
++ the supplied arguments. */
++__attribute__((format(printf, 1, 2)));
++static void
++status(const char *fmt,...)
++/* This extension allows gcc to check the format string for consistency with
++ the supplied arguments. */
++__attribute__((format(printf, 1, 2)));
++static void
++psql_command(const char *database, const char *query,...)
++/* This extension allows gcc to check the format string for consistency with
++ the supplied arguments. */
++__attribute__((format(printf, 2, 3)));
++
++#ifdef WIN32
++typedef BOOL(WINAPI * __CreateRestrictedToken) (HANDLE, DWORD, DWORD, PSID_AND_ATTRIBUTES, DWORD, PLUID_AND_ATTRIBUTES, DWORD, PSID_AND_ATTRIBUTES, PHANDLE);
++
++/* Windows API define missing from MingW headers */
++#define DISABLE_MAX_PRIVILEGE 0x1
++#endif
++
++/*
++ * allow core files if possible.
++ */
++#if defined(HAVE_GETRLIMIT) && defined(RLIMIT_CORE)
++static void
++unlimit_core_size(void)
++{
++ struct rlimit lim;
++
++ getrlimit(RLIMIT_CORE, &lim);
++ if (lim.rlim_max == 0)
++ {
++ fprintf(stderr,
++ _("%s: cannot set core size,: disallowed by hard limit.\n"),
++ progname);
++ return;
++ }
++ else if (lim.rlim_max == RLIM_INFINITY || lim.rlim_cur < lim.rlim_max)
++ {
++ lim.rlim_cur = lim.rlim_max;
++ setrlimit(RLIMIT_CORE, &lim);
++ }
++}
++#endif
++
++
++/*
++ * Add an item at the end of a stringlist.
++ */
++void
++add_stringlist_item(_stringlist ** listhead, const char *str)
++{
++ _stringlist *newentry = malloc(sizeof(_stringlist));
++ _stringlist *oldentry;
++
++ newentry->str = strdup(str);
++ newentry->next = NULL;
++ if (*listhead == NULL)
++ *listhead = newentry;
++ else
++ {
++ for (oldentry = *listhead; oldentry->next; oldentry = oldentry->next)
++ /* skip */ ;
++ oldentry->next = newentry;
++ }
++}
++
++/*
++ * Free a stringlist.
++ */
++static void
++free_stringlist(_stringlist ** listhead)
++{
++ if (listhead == NULL || *listhead == NULL)
++ return;
++ if ((*listhead)->next != NULL)
++ free_stringlist(&((*listhead)->next));
++ free((*listhead)->str);
++ free(*listhead);
++ *listhead = NULL;
++}
++
++/*
++ * Split a delimited string into a stringlist
++ */
++static void
++split_to_stringlist(const char *s, const char *delim, _stringlist ** listhead)
++{
++ char *sc = strdup(s);
++ char *token = strtok(sc, delim);
++
++ while (token)
++ {
++ add_stringlist_item(listhead, token);
++ token = strtok(NULL, delim);
++ }
++ free(sc);
++}
++
++/*
++ * Print a progress banner on stdout.
++ */
++static void
++header(const char *fmt,...)
++{
++ char tmp[64];
++ va_list ap;
++
++ va_start(ap, fmt);
++ vsnprintf(tmp, sizeof(tmp), fmt, ap);
++ va_end(ap);
++
++ fprintf(stdout, "============== %-38s ==============\n", tmp);
++ fflush(stdout);
++}
++
++/*
++ * Print "doing something ..." --- supplied text should not end with newline
++ */
++static void
++status(const char *fmt,...)
++{
++ va_list ap;
++
++ va_start(ap, fmt);
++ vfprintf(stdout, fmt, ap);
++ fflush(stdout);
++ va_end(ap);
++
++ if (logfile)
++ {
++ va_start(ap, fmt);
++ vfprintf(logfile, fmt, ap);
++ va_end(ap);
++ }
++}
++
++/*
++ * Done "doing something ..."
++ */
++static void
++status_end(void)
++{
++ fprintf(stdout, "\n");
++ fflush(stdout);
++ if (logfile)
++ fprintf(logfile, "\n");
++}
++
++/*
++ * shut down temp postmaster
++ */
++static void
++stop_postmaster(void)
++{
++ if (postmaster_running)
++ {
++ /* We use pg_ctl to issue the kill and wait for stop */
++ char buf[MAXPGPATH * 2];
++
++ /* On Windows, system() seems not to force fflush, so... */
++ fflush(stdout);
++ fflush(stderr);
++
++ snprintf(buf, sizeof(buf),
++ SYSTEMQUOTE "\"%s/pg_ctl\" stop -D \"%s/data\" -s -m fast" SYSTEMQUOTE,
++ bindir, temp_install);
++ system(buf); /* ignore exit status */
++ postmaster_running = false;
++ }
++}
++
++/*
++ * Always exit through here, not through plain exit(), to ensure we make
++ * an effort to shut down a temp postmaster
++ */
++void
++exit_nicely(int code)
++{
++ stop_postmaster();
++ exit(code);
++}
++
++/*
++ * Check whether string matches pattern
++ *
++ * In the original shell script, this function was implemented using expr(1),
++ * which provides basic regular expressions restricted to match starting at
++ * the string start (in conventional regex terms, there's an implicit "^"
++ * at the start of the pattern --- but no implicit "$" at the end).
++ *
++ * For now, we only support "." and ".*" as non-literal metacharacters,
++ * because that's all that anyone has found use for in resultmap. This
++ * code could be extended if more functionality is needed.
++ */
++static bool
++string_matches_pattern(const char *str, const char *pattern)
++{
++ while (*str && *pattern)
++ {
++ if (*pattern == '.' && pattern[1] == '*')
++ {
++ pattern += 2;
++ /* Trailing .* matches everything. */
++ if (*pattern == '\0')
++ return true;
++
++ /*
++ * Otherwise, scan for a text position at which we can match the
++ * rest of the pattern.
++ */
++ while (*str)
++ {
++ /*
++ * Optimization to prevent most recursion: don't recurse
++ * unless first pattern char might match this text char.
++ */
++ if (*str == *pattern || *pattern == '.')
++ {
++ if (string_matches_pattern(str, pattern))
++ return true;
++ }
++
++ str++;
++ }
++
++ /*
++ * End of text with no match.
++ */
++ return false;
++ }
++ else if (*pattern != '.' && *str != *pattern)
++ {
++ /*
++ * Not the single-character wildcard and no explicit match? Then
++ * time to quit...
++ */
++ return false;
++ }
++
++ str++;
++ pattern++;
++ }
++
++ if (*pattern == '\0')
++ return true; /* end of pattern, so declare match */
++
++ /* End of input string. Do we have matching pattern remaining? */
++ while (*pattern == '.' && pattern[1] == '*')
++ pattern += 2;
++ if (*pattern == '\0')
++ return true; /* end of pattern, so declare match */
++
++ return false;
++}
++
++/*
++ * Replace all occurances of a string in a string with a different string.
++ * NOTE: Assumes there is enough room in the target buffer!
++ */
++void
++replace_string(char *string, char *replace, char *replacement)
++{
++ char *ptr;
++
++ while ((ptr = strstr(string, replace)) != NULL)
++ {
++ char *dup = strdup(string);
++
++ strlcpy(string, dup, ptr - string + 1);
++ strcat(string, replacement);
++ strcat(string, dup + (ptr - string) + strlen(replace));
++ free(dup);
++ }
++}
++
++/*
++ * Convert *.source found in the "source" directory, replacing certain tokens
++ * in the file contents with their intended values, and put the resulting files
++ * in the "dest" directory, replacing the ".source" prefix in their names with
++ * the given suffix.
++ */
++static void
++convert_sourcefiles_in(char *source, char *dest, char *suffix)
++{
++ char abs_srcdir[MAXPGPATH];
++ char abs_builddir[MAXPGPATH];
++ char testtablespace[MAXPGPATH];
++ char indir[MAXPGPATH];
++ struct stat st;
++ int ret;
++ char **name;
++ char **names;
++ int count = 0;
++
++#ifdef WIN32
++ char *c;
++#endif
++
++ if (!getcwd(abs_builddir, sizeof(abs_builddir)))
++ {
++ fprintf(stderr, _("%s: could not get current directory: %s\n"),
++ progname, strerror(errno));
++ exit_nicely(2);
++ }
++
++ /*
++ * in a VPATH build, use the provided source directory; otherwise, use the
++ * current directory.
++ */
++ if (srcdir)
++ strlcpy(abs_srcdir, srcdir, MAXPGPATH);
++ else
++ strlcpy(abs_srcdir, abs_builddir, MAXPGPATH);
++
++ snprintf(indir, MAXPGPATH, "%s/%s", abs_srcdir, source);
++
++ /* Check that indir actually exists and is a directory */
++ ret = stat(indir, &st);
++ if (ret != 0 || !S_ISDIR(st.st_mode))
++ {
++ /*
++ * No warning, to avoid noise in tests that do not have
++ * these directories; for example, ecpg, contrib and src/pl.
++ */
++ return;
++ }
++
++ names = pgfnames(indir);
++ if (!names)
++ /* Error logged in pgfnames */
++ exit_nicely(2);
++
++#ifdef WIN32
++ /* in Win32, replace backslashes with forward slashes */
++ for (c = abs_builddir; *c; c++)
++ if (*c == '\\')
++ *c = '/';
++ for (c = abs_srcdir; *c; c++)
++ if (*c == '\\')
++ *c = '/';
++#endif
++
++ snprintf(testtablespace, MAXPGPATH, "%s/testtablespace", abs_builddir);
++
++#ifdef WIN32
++ /*
++ * On Windows only, clean out the test tablespace dir, or create it if it
++ * doesn't exist. On other platforms we expect the Makefile to take
++ * care of that. (We don't migrate that functionality in here because
++ * it'd be harder to cope with platform-specific issues such as SELinux.)
++ *
++ * XXX it would be better if pg_regress.c had nothing at all to do with
++ * testtablespace, and this were handled by a .BAT file or similar on
++ * Windows. See pgsql-hackers discussion of 2008-01-18.
++ */
++ if (directory_exists(testtablespace))
++ rmtree(testtablespace, true);
++ make_directory(testtablespace);
++#endif
++
++ /* finally loop on each file and do the replacement */
++ for (name = names; *name; name++)
++ {
++ char srcfile[MAXPGPATH];
++ char destfile[MAXPGPATH];
++ char prefix[MAXPGPATH];
++ FILE *infile,
++ *outfile;
++ char line[1024];
++
++ /* reject filenames not finishing in ".source" */
++ if (strlen(*name) < 8)
++ continue;
++ if (strcmp(*name + strlen(*name) - 7, ".source") != 0)
++ continue;
++
++ count++;
++
++ /* build the full actual paths to open */
++ snprintf(prefix, strlen(*name) - 6, "%s", *name);
++ snprintf(srcfile, MAXPGPATH, "%s/%s", indir, *name);
++ snprintf(destfile, MAXPGPATH, "%s/%s.%s", dest, prefix, suffix);
++
++ infile = fopen(srcfile, "r");
++ if (!infile)
++ {
++ fprintf(stderr, _("%s: could not open file \"%s\" for reading: %s\n"),
++ progname, srcfile, strerror(errno));
++ exit_nicely(2);
++ }
++ outfile = fopen(destfile, "w");
++ if (!outfile)
++ {
++ fprintf(stderr, _("%s: could not open file \"%s\" for writing: %s\n"),
++ progname, destfile, strerror(errno));
++ exit_nicely(2);
++ }
++ while (fgets(line, sizeof(line), infile))
++ {
++ replace_string(line, "@abs_srcdir@", abs_srcdir);
++ replace_string(line, "@abs_builddir@", abs_builddir);
++ replace_string(line, "@testtablespace@", testtablespace);
++ replace_string(line, "@DLSUFFIX@", DLSUFFIX);
++ fputs(line, outfile);
++ }
++ fclose(infile);
++ fclose(outfile);
++ }
++
++ /*
++ * If we didn't process any files, complain because it probably means
++ * somebody neglected to pass the needed --srcdir argument.
++ */
++ if (count <= 0)
++ {
++ fprintf(stderr, _("%s: no *.source files found in %s\n"),
++ progname, indir);
++ exit_nicely(2);
++ }
++
++ pgfnames_cleanup(names);
++}
++
++/* Create the .sql and .out files from the .source files, if any */
++static void
++convert_sourcefiles(void)
++{
++ convert_sourcefiles_in("input", "sql", "sql");
++ convert_sourcefiles_in("output", "expected", "out");
++}
++
++/*
++ * Scan resultmap file to find which platform-specific expected files to use.
++ *
++ * The format of each line of the file is
++ * testname/hostplatformpattern=substitutefile
++ * where the hostplatformpattern is evaluated per the rules of expr(1),
++ * namely, it is a standard regular expression with an implicit ^ at the start.
++ * (We currently support only a very limited subset of regular expressions,
++ * see string_matches_pattern() above.) What hostplatformpattern will be
++ * matched against is the config.guess output. (In the shell-script version,
++ * we also provided an indication of whether gcc or another compiler was in
++ * use, but that facility isn't used anymore.)
++ */
++static void
++load_resultmap(void)
++{
++ char buf[MAXPGPATH];
++ FILE *f;
++
++ /* scan the file ... */
++ snprintf(buf, sizeof(buf), "%s/resultmap", inputdir);
++ f = fopen(buf, "r");
++ if (!f)
++ {
++ /* OK if it doesn't exist, else complain */
++ if (errno == ENOENT)
++ return;
++ fprintf(stderr, _("%s: could not open file \"%s\" for reading: %s\n"),
++ progname, buf, strerror(errno));
++ exit_nicely(2);
++ }
++
++ while (fgets(buf, sizeof(buf), f))
++ {
++ char *platform;
++ char *file_type;
++ char *expected;
++ int i;
++
++ /* strip trailing whitespace, especially the newline */
++ i = strlen(buf);
++ while (i > 0 && isspace((unsigned char) buf[i - 1]))
++ buf[--i] = '\0';
++
++ /* parse out the line fields */
++ file_type = strchr(buf, ':');
++ if (!file_type)
++ {
++ fprintf(stderr, _("incorrectly formatted resultmap entry: %s\n"),
++ buf);
++ exit_nicely(2);
++ }
++ *file_type++ = '\0';
++
++ platform = strchr(file_type, ':');
++ if (!platform)
++ {
++ fprintf(stderr, _("incorrectly formatted resultmap entry: %s\n"),
++ buf);
++ exit_nicely(2);
++ }
++ *platform++ = '\0';
++ expected = strchr(platform, '=');
++ if (!expected)
++ {
++ fprintf(stderr, _("incorrectly formatted resultmap entry: %s\n"),
++ buf);
++ exit_nicely(2);
++ }
++ *expected++ = '\0';
++
++ /*
++ * if it's for current platform, save it in resultmap list. Note: by
++ * adding at the front of the list, we ensure that in ambiguous cases,
++ * the last match in the resultmap file is used. This mimics the
++ * behavior of the old shell script.
++ */
++ if (string_matches_pattern(host_platform, platform))
++ {
++ _resultmap *entry = malloc(sizeof(_resultmap));
++
++ entry->test = strdup(buf);
++ entry->type = strdup(file_type);
++ entry->resultfile = strdup(expected);
++ entry->next = resultmap;
++ resultmap = entry;
++ }
++ }
++ fclose(f);
++}
++
++/*
++ * Check in resultmap if we should be looking at a different file
++ */
++static
++const char *
++get_expectfile(const char *testname, const char *file)
++{
++ char *file_type;
++ _resultmap *rm;
++
++ /*
++ * Determine the file type from the file name. This is just what is
++ * following the last dot in the file name.
++ */
++ if (!file || !(file_type = strrchr(file, '.')))
++ return NULL;
++
++ file_type++;
++
++ for (rm = resultmap; rm != NULL; rm = rm->next)
++ {
++ if (strcmp(testname, rm->test) == 0 && strcmp(file_type, rm->type) == 0)
++ {
++ return rm->resultfile;
++ }
++ }
++
++ return NULL;
++}
++
++/*
++ * Handy subroutine for setting an environment variable "var" to "val"
++ */
++static void
++doputenv(const char *var, const char *val)
++{
++ char *s = malloc(strlen(var) + strlen(val) + 2);
++
++ sprintf(s, "%s=%s", var, val);
++ putenv(s);
++}
++
++/*
++ * Set the environment variable "pathname", prepending "addval" to its
++ * old value (if any).
++ */
++static void
++add_to_path(const char *pathname, char separator, const char *addval)
++{
++ char *oldval = getenv(pathname);
++ char *newval;
++
++ if (!oldval || !oldval[0])
++ {
++ /* no previous value */
++ newval = malloc(strlen(pathname) + strlen(addval) + 2);
++ sprintf(newval, "%s=%s", pathname, addval);
++ }
++ else
++ {
++ newval = malloc(strlen(pathname) + strlen(addval) + strlen(oldval) + 3);
++ sprintf(newval, "%s=%s%c%s", pathname, addval, separator, oldval);
++ }
++ putenv(newval);
++}
++
++/*
++ * Prepare environment variables for running regression tests
++ */
++static void
++initialize_environment(void)
++{
++ char *tmp;
++
++ /*
++ * Clear out any non-C locale settings
++ */
++ unsetenv("LC_COLLATE");
++ unsetenv("LC_CTYPE");
++ unsetenv("LC_MONETARY");
++ unsetenv("LC_MESSAGES");
++ unsetenv("LC_NUMERIC");
++ unsetenv("LC_TIME");
++ unsetenv("LC_ALL");
++ unsetenv("LANG");
++ unsetenv("LANGUAGE");
++ /* On Windows the default locale cannot be English, so force it */
++#if defined(WIN32) || defined(__CYGWIN__)
++ putenv("LANG=en");
++#endif
++
++ /*
++ * Set multibyte as requested
++ */
++ if (encoding)
++ doputenv("PGCLIENTENCODING", encoding);
++ else
++ unsetenv("PGCLIENTENCODING");
++
++ /*
++ * Set timezone and datestyle for datetime-related tests
++ */
++ putenv("PGTZ=PST8PDT");
++ putenv("PGDATESTYLE=Postgres, MDY");
++
++ if (temp_install)
++ {
++ /*
++ * Clear out any environment vars that might cause psql to connect to
++ * the wrong postmaster, or otherwise behave in nondefault ways. (Note
++ * we also use psql's -X switch consistently, so that ~/.psqlrc files
++ * won't mess things up.) Also, set PGPORT to the temp port, and set
++ * or unset PGHOST depending on whether we are using TCP or Unix
++ * sockets.
++ */
++ unsetenv("PGDATABASE");
++ unsetenv("PGUSER");
++ unsetenv("PGSERVICE");
++ unsetenv("PGSSLMODE");
++ unsetenv("PGREQUIRESSL");
++ unsetenv("PGCONNECT_TIMEOUT");
++ unsetenv("PGDATA");
++ if (hostname != NULL)
++ doputenv("PGHOST", hostname);
++ else
++ unsetenv("PGHOST");
++ unsetenv("PGHOSTADDR");
++ if (port != -1)
++ {
++ char s[16];
++
++ sprintf(s, "%d", port);
++ doputenv("PGPORT", s);
++ }
++
++ /*
++ * Adjust path variables to point into the temp-install tree
++ */
++ tmp = malloc(strlen(temp_install) + 32 + strlen(bindir));
++ sprintf(tmp, "%s/install/%s", temp_install, bindir);
++ bindir = tmp;
++
++ tmp = malloc(strlen(temp_install) + 32 + strlen(libdir));
++ sprintf(tmp, "%s/install/%s", temp_install, libdir);
++ libdir = tmp;
++
++ tmp = malloc(strlen(temp_install) + 32 + strlen(datadir));
++ sprintf(tmp, "%s/install/%s", temp_install, datadir);
++ datadir = tmp;
++
++ /* psql will be installed into temp-install bindir */
++ psqldir = bindir;
++
++ /*
++ * Set up shared library paths to include the temp install.
++ *
++ * LD_LIBRARY_PATH covers many platforms. DYLD_LIBRARY_PATH works on
++ * Darwin, and maybe other Mach-based systems. LIBPATH is for AIX.
++ * Windows needs shared libraries in PATH (only those linked into
++ * executables, not dlopen'ed ones). Feel free to account for others
++ * as well.
++ */
++ add_to_path("LD_LIBRARY_PATH", ':', libdir);
++ add_to_path("DYLD_LIBRARY_PATH", ':', libdir);
++ add_to_path("LIBPATH", ':', libdir);
++#if defined(WIN32) || defined(__CYGWIN__)
++ add_to_path("PATH", ';', libdir);
++#endif
++ }
++ else
++ {
++ const char *pghost;
++ const char *pgport;
++
++ /*
++ * When testing an existing install, we honor existing environment
++ * variables, except if they're overridden by command line options.
++ */
++ if (hostname != NULL)
++ {
++ doputenv("PGHOST", hostname);
++ unsetenv("PGHOSTADDR");
++ }
++ if (port != -1)
++ {
++ char s[16];
++
++ sprintf(s, "%d", port);
++ doputenv("PGPORT", s);
++ }
++ if (user != NULL)
++ doputenv("PGUSER", user);
++
++ /*
++ * Report what we're connecting to
++ */
++ pghost = getenv("PGHOST");
++ pgport = getenv("PGPORT");
++#ifndef HAVE_UNIX_SOCKETS
++ if (!pghost)
++ pghost = "localhost";
++#endif
++
++ if (pghost && pgport)
++ printf(_("(using postmaster on %s, port %s)\n"), pghost, pgport);
++ if (pghost && !pgport)
++ printf(_("(using postmaster on %s, default port)\n"), pghost);
++ if (!pghost && pgport)
++ printf(_("(using postmaster on Unix socket, port %s)\n"), pgport);
++ if (!pghost && !pgport)
++ printf(_("(using postmaster on Unix socket, default port)\n"));
++ }
++
++ convert_sourcefiles();
++ load_resultmap();
++}
++
++/*
++ * Issue a command via psql, connecting to the specified database
++ *
++ * Since we use system(), this doesn't return until the operation finishes
++ */
++static void
++psql_command(const char *database, const char *query,...)
++{
++ char query_formatted[1024];
++ char query_escaped[2048];
++ char psql_cmd[MAXPGPATH + 2048];
++ va_list args;
++ char *s;
++ char *d;
++
++ /* Generate the query with insertion of sprintf arguments */
++ va_start(args, query);
++ vsnprintf(query_formatted, sizeof(query_formatted), query, args);
++ va_end(args);
++
++ /* Now escape any shell double-quote metacharacters */
++ d = query_escaped;
++ for (s = query_formatted; *s; s++)
++ {
++ if (strchr("\\\"$`", *s))
++ *d++ = '\\';
++ *d++ = *s;
++ }
++ *d = '\0';
++
++ /* And now we can build and execute the shell command */
++ snprintf(psql_cmd, sizeof(psql_cmd),
++ SYSTEMQUOTE "\"%s%spsql\" -X -c \"%s\" \"%s\"" SYSTEMQUOTE,
++ psqldir ? psqldir : "",
++ psqldir ? "/" : "",
++ query_escaped,
++ database);
++
++ if (system(psql_cmd) != 0)
++ {
++ /* psql probably already reported the error */
++ fprintf(stderr, _("command failed: %s\n"), psql_cmd);
++ exit_nicely(2);
++ }
++}
++
++/*
++ * Spawn a process to execute the given shell command; don't wait for it
++ *
++ * Returns the process ID (or HANDLE) so we can wait for it later
++ */
++PID_TYPE
++spawn_process(const char *cmdline)
++{
++#ifndef WIN32
++ pid_t pid;
++
++ /*
++ * Must flush I/O buffers before fork. Ideally we'd use fflush(NULL) here
++ * ... does anyone still care about systems where that doesn't work?
++ */
++ fflush(stdout);
++ fflush(stderr);
++ if (logfile)
++ fflush(logfile);
++
++ pid = fork();
++ if (pid == -1)
++ {
++ fprintf(stderr, _("%s: could not fork: %s\n"),
++ progname, strerror(errno));
++ exit_nicely(2);
++ }
++ if (pid == 0)
++ {
++ /*
++ * In child
++ *
++ * Instead of using system(), exec the shell directly, and tell it to
++ * "exec" the command too. This saves two useless processes per
++ * parallel test case.
++ */
++ char *cmdline2 = malloc(strlen(cmdline) + 6);
++
++ sprintf(cmdline2, "exec %s", cmdline);
++ execl(shellprog, shellprog, "-c", cmdline2, (char *) NULL);
++ fprintf(stderr, _("%s: could not exec \"%s\": %s\n"),
++ progname, shellprog, strerror(errno));
++ exit(1); /* not exit_nicely here... */
++ }
++ /* in parent */
++ return pid;
++#else
++ char *cmdline2;
++ BOOL b;
++ STARTUPINFO si;
++ PROCESS_INFORMATION pi;
++ HANDLE origToken;
++ HANDLE restrictedToken;
++ SID_IDENTIFIER_AUTHORITY NtAuthority = {SECURITY_NT_AUTHORITY};
++ SID_AND_ATTRIBUTES dropSids[2];
++ __CreateRestrictedToken _CreateRestrictedToken = NULL;
++ HANDLE Advapi32Handle;
++
++ ZeroMemory(&si, sizeof(si));
++ si.cb = sizeof(si);
++
++ Advapi32Handle = LoadLibrary("ADVAPI32.DLL");
++ if (Advapi32Handle != NULL)
++ {
++ _CreateRestrictedToken = (__CreateRestrictedToken) GetProcAddress(Advapi32Handle, "CreateRestrictedToken");
++ }
++
++ if (_CreateRestrictedToken == NULL)
++ {
++ if (Advapi32Handle != NULL)
++ FreeLibrary(Advapi32Handle);
++ fprintf(stderr, "ERROR: cannot create restricted tokens on this platform\n");
++ exit_nicely(2);
++ }
++
++ /* Open the current token to use as base for the restricted one */
++ if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, &origToken))
++ {
++ fprintf(stderr, "could not open process token: %lu\n", GetLastError());
++ exit_nicely(2);
++ }
++
++ /* Allocate list of SIDs to remove */
++ ZeroMemory(&dropSids, sizeof(dropSids));
++ if (!AllocateAndInitializeSid(&NtAuthority, 2,
++ SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, &dropSids[0].Sid) ||
++ !AllocateAndInitializeSid(&NtAuthority, 2,
++ SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_POWER_USERS, 0, 0, 0, 0, 0, 0, &dropSids[1].Sid))
++ {
++ fprintf(stderr, "could not allocate SIDs: %lu\n", GetLastError());
++ exit_nicely(2);
++ }
++
++ b = _CreateRestrictedToken(origToken,
++ DISABLE_MAX_PRIVILEGE,
++ sizeof(dropSids) / sizeof(dropSids[0]),
++ dropSids,
++ 0, NULL,
++ 0, NULL,
++ &restrictedToken);
++
++ FreeSid(dropSids[1].Sid);
++ FreeSid(dropSids[0].Sid);
++ CloseHandle(origToken);
++ FreeLibrary(Advapi32Handle);
++
++ if (!b)
++ {
++ fprintf(stderr, "could not create restricted token: %lu\n", GetLastError());
++ exit_nicely(2);
++ }
++
++ cmdline2 = malloc(strlen(cmdline) + 8);
++ sprintf(cmdline2, "cmd /c %s", cmdline);
++
++ if (!CreateProcessAsUser(restrictedToken,
++ NULL,
++ cmdline2,
++ NULL,
++ NULL,
++ TRUE,
++ CREATE_SUSPENDED,
++ NULL,
++ NULL,
++ &si,
++ &pi))
++ {
++ fprintf(stderr, _("could not start process for \"%s\": %lu\n"),
++ cmdline2, GetLastError());
++ exit_nicely(2);
++ }
++
++#ifndef __CYGWIN__
++ AddUserToDacl(pi.hProcess);
++#endif
++
++ free(cmdline2);
++
++ ResumeThread(pi.hThread);
++ CloseHandle(pi.hThread);
++ return pi.hProcess;
++#endif
++}
++
++/*
++ * Count bytes in file
++ */
++static long
++file_size(const char *file)
++{
++ long r;
++ FILE *f = fopen(file, "r");
++
++ if (!f)
++ {
++ fprintf(stderr, _("%s: could not open file \"%s\" for reading: %s\n"),
++ progname, file, strerror(errno));
++ return -1;
++ }
++ fseek(f, 0, SEEK_END);
++ r = ftell(f);
++ fclose(f);
++ return r;
++}
++
++/*
++ * Count lines in file
++ */
++static int
++file_line_count(const char *file)
++{
++ int c;
++ int l = 0;
++ FILE *f = fopen(file, "r");
++
++ if (!f)
++ {
++ fprintf(stderr, _("%s: could not open file \"%s\" for reading: %s\n"),
++ progname, file, strerror(errno));
++ return -1;
++ }
++ while ((c = fgetc(f)) != EOF)
++ {
++ if (c == '\n')
++ l++;
++ }
++ fclose(f);
++ return l;
++}
++
++static bool
++file_exists(const char *file)
++{
++ FILE *f = fopen(file, "r");
++
++ if (!f)
++ return false;
++ fclose(f);
++ return true;
++}
++
++static bool
++directory_exists(const char *dir)
++{
++ struct stat st;
++
++ if (stat(dir, &st) != 0)
++ return false;
++ if (S_ISDIR(st.st_mode))
++ return true;
++ return false;
++}
++
++/* Create a directory */
++static void
++make_directory(const char *dir)
++{
++ if (mkdir(dir, S_IRWXU | S_IRWXG | S_IRWXO) < 0)
++ {
++ fprintf(stderr, _("%s: could not create directory \"%s\": %s\n"),
++ progname, dir, strerror(errno));
++ exit_nicely(2);
++ }
++}
++
++/*
++ * In: filename.ext, Return: filename_i.ext, where 0 < i <= 9
++ */
++static char *
++get_alternative_expectfile(const char *expectfile, int i)
++{
++ char *last_dot;
++ int ssize = strlen(expectfile) + 2 + 1;
++ char *tmp = (char *) malloc(ssize);
++ char *s = (char *) malloc(ssize);
++
++ strcpy(tmp, expectfile);
++ last_dot = strrchr(tmp, '.');
++ if (!last_dot)
++ return NULL;
++ *last_dot = '\0';
++ snprintf(s, ssize, "%s_%d.%s", tmp, i, last_dot + 1);
++ free(tmp);
++ return s;
++}
++
++/*
++ * Run a "diff" command and also check that it didn't crash
++ */
++static int
++run_diff(const char *cmd, const char *filename)
++{
++ int r;
++
++ r = system(cmd);
++ if (!WIFEXITED(r) || WEXITSTATUS(r) > 1)
++ {
++ fprintf(stderr, _("diff command failed with status %d: %s\n"), r, cmd);
++ exit_nicely(2);
++ }
++#ifdef WIN32
++
++ /*
++ * On WIN32, if the 'diff' command cannot be found, system() returns 1,
++ * but produces nothing to stdout, so we check for that here.
++ */
++ if (WEXITSTATUS(r) == 1 && file_size(filename) <= 0)
++ {
++ fprintf(stderr, _("diff command not found: %s\n"), cmd);
++ exit_nicely(2);
++ }
++#endif
++
++ return WEXITSTATUS(r);
++}
++
++/*
++ * Check the actual result file for the given test against expected results
++ *
++ * Returns true if different (failure), false if correct match found.
++ * In the true case, the diff is appended to the diffs file.
++ */
++static bool
++results_differ(const char *testname, const char *resultsfile, const char *default_expectfile)
++{
++ char expectfile[MAXPGPATH];
++ char diff[MAXPGPATH];
++ char cmd[MAXPGPATH * 3];
++ char best_expect_file[MAXPGPATH];
++ FILE *difffile;
++ int best_line_count;
++ int i;
++ int l;
++ const char *platform_expectfile;
++
++ /*
++ * We can pass either the resultsfile or the expectfile, they should have
++ * the same type (filename.type) anyway.
++ */
++ platform_expectfile = get_expectfile(testname, resultsfile);
++
++ strcpy(expectfile, default_expectfile);
++ if (platform_expectfile)
++ {
++ /*
++ * Replace everything afer the last slash in expectfile with what the
++ * platform_expectfile contains.
++ */
++ char *p = strrchr(expectfile, '/');
++
++ if (p)
++ strcpy(++p, platform_expectfile);
++ }
++
++ /* Name to use for temporary diff file */
++ snprintf(diff, sizeof(diff), "%s.diff", resultsfile);
++
++ /* OK, run the diff */
++ snprintf(cmd, sizeof(cmd),
++ SYSTEMQUOTE "diff %s \"%s\" \"%s\" > \"%s\"" SYSTEMQUOTE,
++ basic_diff_opts, expectfile, resultsfile, diff);
++
++ /* Is the diff file empty? */
++ if (run_diff(cmd, diff) == 0)
++ {
++ unlink(diff);
++ return false;
++ }
++
++ /* There may be secondary comparison files that match better */
++ best_line_count = file_line_count(diff);
++ strcpy(best_expect_file, expectfile);
++
++ for (i = 0; i <= 9; i++)
++ {
++ char *alt_expectfile;
++
++ alt_expectfile = get_alternative_expectfile(expectfile, i);
++ if (!file_exists(alt_expectfile))
++ continue;
++
++ snprintf(cmd, sizeof(cmd),
++ SYSTEMQUOTE "diff %s \"%s\" \"%s\" > \"%s\"" SYSTEMQUOTE,
++ basic_diff_opts, alt_expectfile, resultsfile, diff);
++
++ if (run_diff(cmd, diff) == 0)
++ {
++ unlink(diff);
++ return false;
++ }
++
++ l = file_line_count(diff);
++ if (l < best_line_count)
++ {
++ /* This diff was a better match than the last one */
++ best_line_count = l;
++ strcpy(best_expect_file, alt_expectfile);
++ }
++ free(alt_expectfile);
++ }
++
++ /*
++ * fall back on the canonical results file if we haven't tried it yet and
++ * haven't found a complete match yet.
++ */
++
++ if (platform_expectfile)
++ {
++ snprintf(cmd, sizeof(cmd),
++ SYSTEMQUOTE "diff %s \"%s\" \"%s\" > \"%s\"" SYSTEMQUOTE,
++ basic_diff_opts, default_expectfile, resultsfile, diff);
++
++ if (run_diff(cmd, diff) == 0)
++ {
++ /* No diff = no changes = good */
++ unlink(diff);
++ return false;
++ }
++
++ l = file_line_count(diff);
++ if (l < best_line_count)
++ {
++ /* This diff was a better match than the last one */
++ best_line_count = l;
++ strcpy(best_expect_file, default_expectfile);
++ }
++ }
++
++ /*
++ * Use the best comparison file to generate the "pretty" diff, which we
++ * append to the diffs summary file.
++ */
++ snprintf(cmd, sizeof(cmd),
++ SYSTEMQUOTE "diff %s \"%s\" \"%s\" >> \"%s\"" SYSTEMQUOTE,
++ pretty_diff_opts, best_expect_file, resultsfile, difffilename);
++ run_diff(cmd, difffilename);
++
++ /* And append a separator */
++ difffile = fopen(difffilename, "a");
++ if (difffile)
++ {
++ fprintf(difffile,
++ "\n======================================================================\n\n");
++ fclose(difffile);
++ }
++
++ unlink(diff);
++ return true;
++}
++
++/*
++ * Wait for specified subprocesses to finish
++ *
++ * If names isn't NULL, report each subprocess as it finishes
++ *
++ * Note: it's OK to scribble on the pids array, but not on the names array
++ */
++static void
++wait_for_tests(PID_TYPE * pids, char **names, int num_tests)
++{
++ int tests_left;
++ int i;
++
++#ifdef WIN32
++ PID_TYPE *active_pids = malloc(num_tests * sizeof(PID_TYPE));
++
++ memcpy(active_pids, pids, num_tests * sizeof(PID_TYPE));
++#endif
++
++ tests_left = num_tests;
++ while (tests_left > 0)
++ {
++ PID_TYPE p;
++
++#ifndef WIN32
++ p = wait(NULL);
++
++ if (p == INVALID_PID)
++ {
++ fprintf(stderr, _("failed to wait for subprocesses: %s\n"),
++ strerror(errno));
++ exit_nicely(2);
++ }
++#else
++ int r;
++
++ r = WaitForMultipleObjects(tests_left, active_pids, FALSE, INFINITE);
++ if (r < WAIT_OBJECT_0 || r >= WAIT_OBJECT_0 + tests_left)
++ {
++ fprintf(stderr, _("failed to wait for subprocesses: %lu\n"),
++ GetLastError());
++ exit_nicely(2);
++ }
++ p = active_pids[r - WAIT_OBJECT_0];
++ /* compact the active_pids array */
++ active_pids[r - WAIT_OBJECT_0] = active_pids[tests_left - 1];
++#endif /* WIN32 */
++
++ for (i = 0; i < num_tests; i++)
++ {
++ if (p == pids[i])
++ {
++#ifdef WIN32
++ CloseHandle(pids[i]);
++#endif
++ pids[i] = INVALID_PID;
++ if (names)
++ status(" %s", names[i]);
++ tests_left--;
++ break;
++ }
++ }
++ }
++
++#ifdef WIN32
++ free(active_pids);
++#endif
++}
++
++/*
++ * Run all the tests specified in one schedule file
++ */
++static void
++run_schedule(const char *schedule, test_function tfunc)
++{
++#define MAX_PARALLEL_TESTS 100
++ char *tests[MAX_PARALLEL_TESTS];
++ _stringlist *resultfiles[MAX_PARALLEL_TESTS];
++ _stringlist *expectfiles[MAX_PARALLEL_TESTS];
++ _stringlist *tags[MAX_PARALLEL_TESTS];
++ PID_TYPE pids[MAX_PARALLEL_TESTS];
++ _stringlist *ignorelist = NULL;
++ char scbuf[1024];
++ FILE *scf;
++ int line_num = 0;
++
++ memset(resultfiles, 0, sizeof(_stringlist *) * MAX_PARALLEL_TESTS);
++ memset(expectfiles, 0, sizeof(_stringlist *) * MAX_PARALLEL_TESTS);
++ memset(tags, 0, sizeof(_stringlist *) * MAX_PARALLEL_TESTS);
++
++ scf = fopen(schedule, "r");
++ if (!scf)
++ {
++ fprintf(stderr, _("%s: could not open file \"%s\" for reading: %s\n"),
++ progname, schedule, strerror(errno));
++ exit_nicely(2);
++ }
++
++ while (fgets(scbuf, sizeof(scbuf), scf))
++ {
++ char *test = NULL;
++ char *c;
++ int num_tests;
++ bool inword;
++ int i;
++
++ line_num++;
++
++ for (i = 0; i < MAX_PARALLEL_TESTS; i++)
++ {
++ if (resultfiles[i] == NULL)
++ break;
++ free_stringlist(&resultfiles[i]);
++ free_stringlist(&expectfiles[i]);
++ free_stringlist(&tags[i]);
++ }
++
++ /* strip trailing whitespace, especially the newline */
++ i = strlen(scbuf);
++ while (i > 0 && isspace((unsigned char) scbuf[i - 1]))
++ scbuf[--i] = '\0';
++
++ if (scbuf[0] == '\0' || scbuf[0] == '#')
++ continue;
++ if (strncmp(scbuf, "test: ", 6) == 0)
++ test = scbuf + 6;
++ else if (strncmp(scbuf, "ignore: ", 8) == 0)
++ {
++ c = scbuf + 8;
++ while (*c && isspace((unsigned char) *c))
++ c++;
++ add_stringlist_item(&ignorelist, c);
++
++ /*
++ * Note: ignore: lines do not run the test, they just say that
++ * failure of this test when run later on is to be ignored. A bit
++ * odd but that's how the shell-script version did it.
++ */
++ continue;
++ }
++ else
++ {
++ fprintf(stderr, _("syntax error in schedule file \"%s\" line %d: %s\n"),
++ schedule, line_num, scbuf);
++ exit_nicely(2);
++ }
++
++ num_tests = 0;
++ inword = false;
++ for (c = test; *c; c++)
++ {
++ if (isspace((unsigned char) *c))
++ {
++ *c = '\0';
++ inword = false;
++ }
++ else if (!inword)
++ {
++ if (num_tests >= MAX_PARALLEL_TESTS)
++ {
++ /* can't print scbuf here, it's already been trashed */
++ fprintf(stderr, _("too many parallel tests in schedule file \"%s\", line %d\n"),
++ schedule, line_num);
++ exit_nicely(2);
++ }
++ tests[num_tests] = c;
++ num_tests++;
++ inword = true;
++ }
++ }
++
++ if (num_tests == 0)
++ {
++ fprintf(stderr, _("syntax error in schedule file \"%s\" line %d: %s\n"),
++ schedule, line_num, scbuf);
++ exit_nicely(2);
++ }
++
++ if (num_tests == 1)
++ {
++ status(_("test %-20s ... "), tests[0]);
++ pids[0] = (tfunc) (tests[0], &resultfiles[0], &expectfiles[0], &tags[0]);
++ wait_for_tests(pids, NULL, 1);
++ /* status line is finished below */
++ }
++ else if (max_connections > 0 && max_connections < num_tests)
++ {
++ int oldest = 0;
++
++ status(_("parallel group (%d tests, in groups of %d): "),
++ num_tests, max_connections);
++ for (i = 0; i < num_tests; i++)
++ {
++ if (i - oldest >= max_connections)
++ {
++ wait_for_tests(pids + oldest, tests + oldest, i - oldest);
++ oldest = i;
++ }
++ pids[i] = (tfunc) (tests[i], &resultfiles[i], &expectfiles[i], &tags[i]);
++ }
++ wait_for_tests(pids + oldest, tests + oldest, i - oldest);
++ status_end();
++ }
++ else
++ {
++ status(_("parallel group (%d tests): "), num_tests);
++ for (i = 0; i < num_tests; i++)
++ {
++ pids[i] = (tfunc) (tests[i], &resultfiles[i], &expectfiles[i], &tags[i]);
++ }
++ wait_for_tests(pids, tests, num_tests);
++ status_end();
++ }
++
++ /* Check results for all tests */
++ for (i = 0; i < num_tests; i++)
++ {
++ _stringlist *rl,
++ *el,
++ *tl;
++ bool differ = false;
++
++ if (num_tests > 1)
++ status(_(" %-20s ... "), tests[i]);
++
++ /*
++ * Advance over all three lists simultaneously.
++ *
++ * Compare resultfiles[j] with expectfiles[j] always. Tags are
++ * optional but if there are tags, the tag list has the same
++ * length as the other two lists.
++ */
++ for (rl = resultfiles[i], el = expectfiles[i], tl = tags[i];
++ rl != NULL; /* rl and el have the same length */
++ rl = rl->next, el = el->next)
++ {
++ bool newdiff;
++
++ if (tl)
++ tl = tl->next; /* tl has the same lengt has rl and el
++ * if it exists */
++
++ newdiff = results_differ(tests[i], rl->str, el->str);
++ if (newdiff && tl)
++ {
++ printf("%s ", tl->str);
++ }
++ differ |= newdiff;
++ }
++
++ if (differ)
++ {
++ bool ignore = false;
++ _stringlist *sl;
++
++ for (sl = ignorelist; sl != NULL; sl = sl->next)
++ {
++ if (strcmp(tests[i], sl->str) == 0)
++ {
++ ignore = true;
++ break;
++ }
++ }
++ if (ignore)
++ {
++ status(_("failed (ignored)"));
++ fail_ignore_count++;
++ }
++ else
++ {
++ status(_("FAILED"));
++ fail_count++;
++ }
++ }
++ else
++ {
++ status(_("ok"));
++ success_count++;
++ }
++
++ status_end();
++ }
++ }
++
++ fclose(scf);
++}
++
++/*
++ * Run a single test
++ */
++static void
++run_single_test(const char *test, test_function tfunc)
++{
++ PID_TYPE pid;
++ _stringlist *resultfiles = NULL;
++ _stringlist *expectfiles = NULL;
++ _stringlist *tags = NULL;
++ _stringlist *rl,
++ *el,
++ *tl;
++ bool differ = false;
++
++ status(_("test %-20s ... "), test);
++ pid = (tfunc) (test, &resultfiles, &expectfiles, &tags);
++ wait_for_tests(&pid, NULL, 1);
++
++ /*
++ * Advance over all three lists simultaneously.
++ *
++ * Compare resultfiles[j] with expectfiles[j] always. Tags are optional
++ * but if there are tags, the tag list has the same length as the other
++ * two lists.
++ */
++ for (rl = resultfiles, el = expectfiles, tl = tags;
++ rl != NULL; /* rl and el have the same length */
++ rl = rl->next, el = el->next)
++ {
++ bool newdiff;
++
++ if (tl)
++ tl = tl->next; /* tl has the same lengt has rl and el if it
++ * exists */
++
++ newdiff = results_differ(test, rl->str, el->str);
++ if (newdiff && tl)
++ {
++ printf("%s ", tl->str);
++ }
++ differ |= newdiff;
++ }
++
++ if (differ)
++ {
++ status(_("FAILED"));
++ fail_count++;
++ }
++ else
++ {
++ status(_("ok"));
++ success_count++;
++ }
++ status_end();
++}
++
++/*
++ * Create the summary-output files (making them empty if already existing)
++ */
++static void
++open_result_files(void)
++{
++ char file[MAXPGPATH];
++ FILE *difffile;
++
++ /* create the log file (copy of running status output) */
++ snprintf(file, sizeof(file), "%s/regression.out", outputdir);
++ logfilename = strdup(file);
++ logfile = fopen(logfilename, "w");
++ if (!logfile)
++ {
++ fprintf(stderr, _("%s: could not open file \"%s\" for writing: %s\n"),
++ progname, logfilename, strerror(errno));
++ exit_nicely(2);
++ }
++
++ /* create the diffs file as empty */
++ snprintf(file, sizeof(file), "%s/regression.diffs", outputdir);
++ difffilename = strdup(file);
++ difffile = fopen(difffilename, "w");
++ if (!difffile)
++ {
++ fprintf(stderr, _("%s: could not open file \"%s\" for writing: %s\n"),
++ progname, difffilename, strerror(errno));
++ exit_nicely(2);
++ }
++ /* we don't keep the diffs file open continuously */
++ fclose(difffile);
++
++ /* also create the output directory if not present */
++ snprintf(file, sizeof(file), "%s/results", outputdir);
++ if (!directory_exists(file))
++ make_directory(file);
++}
++
++static void
++drop_database_if_exists(const char *dbname)
++{
++ header(_("dropping database \"%s\""), dbname);
++ psql_command("postgres", "DROP DATABASE IF EXISTS \"%s\"", dbname);
++}
++
++static void
++create_database(const char *dbname)
++{
++ _stringlist *sl;
++
++ /*
++ * We use template0 so that any installation-local cruft in template1 will
++ * not mess up the tests.
++ */
++ header(_("creating database \"%s\""), dbname);
++ if (encoding)
++ psql_command("postgres", "CREATE DATABASE \"%s\" TEMPLATE=template0 ENCODING='%s'", dbname, encoding);
++ else
++ psql_command("postgres", "CREATE DATABASE \"%s\" TEMPLATE=template0", dbname);
++ psql_command(dbname,
++ "ALTER DATABASE \"%s\" SET lc_messages TO 'C';"
++ "ALTER DATABASE \"%s\" SET lc_monetary TO 'C';"
++ "ALTER DATABASE \"%s\" SET lc_numeric TO 'C';"
++ "ALTER DATABASE \"%s\" SET lc_time TO 'C';"
++ "ALTER DATABASE \"%s\" SET timezone_abbreviations TO 'Default';",
++ dbname, dbname, dbname, dbname, dbname);
++
++ /*
++ * Install any requested procedural languages
++ */
++ for (sl = loadlanguage; sl != NULL; sl = sl->next)
++ {
++ header(_("installing %s"), sl->str);
++ psql_command(dbname, "CREATE LANGUAGE \"%s\"", sl->str);
++ }
++}
++
++static void
++drop_role_if_exists(const char *rolename)
++{
++ header(_("dropping role \"%s\""), rolename);
++ psql_command("postgres", "DROP ROLE IF EXISTS \"%s\"", rolename);
++}
++
++static void
++create_role(const char *rolename, const _stringlist * granted_dbs)
++{
++ header(_("creating role \"%s\""), rolename);
++ psql_command("postgres", "CREATE ROLE \"%s\" WITH LOGIN", rolename);
++ for (; granted_dbs != NULL; granted_dbs = granted_dbs->next)
++ {
++ psql_command("postgres", "GRANT ALL ON DATABASE \"%s\" TO \"%s\"",
++ granted_dbs->str, rolename);
++ }
++}
++
++static void
++help(void)
++{
++ printf(_("PostgreSQL regression test driver\n"));
++ printf(_("\n"));
++ printf(_("Usage: %s [options...] [extra tests...]\n"), progname);
++ printf(_("\n"));
++ printf(_("Options:\n"));
++ printf(_(" --dbname=DB use database DB (default \"regression\")\n"));
++ printf(_(" --debug turn on debug mode in programs that are run\n"));
++ printf(_(" --inputdir=DIR take input files from DIR (default \".\")\n"));
++ printf(_(" --load-language=lang load the named language before running the\n"));
++ printf(_(" tests; can appear multiple times\n"));
++ printf(_(" --create-role=ROLE create the specified role before testing\n"));
++ printf(_(" --max-connections=N maximum number of concurrent connections\n"));
++ printf(_(" (default is 0 meaning unlimited)\n"));
++ printf(_(" --multibyte=ENCODING use ENCODING as the multibyte encoding\n"));
++ printf(_(" --outputdir=DIR place output files in DIR (default \".\")\n"));
++ printf(_(" --schedule=FILE use test ordering schedule from FILE\n"));
++ printf(_(" (can be used multiple times to concatenate)\n"));
++ printf(_(" --srcdir=DIR absolute path to source directory (for VPATH builds)\n"));
++ printf(_(" --temp-install=DIR create a temporary installation in DIR\n"));
++ printf(_("\n"));
++ printf(_("Options for \"temp-install\" mode:\n"));
++ printf(_(" --no-locale use C locale\n"));
++ printf(_(" --top-builddir=DIR (relative) path to top level build directory\n"));
++ printf(_(" --temp-port=PORT port number to start temp postmaster on\n"));
++ printf(_(" --temp-config=PATH append contents of PATH to temporary config\n"));
++ printf(_("\n"));
++ printf(_("Options for using an existing installation:\n"));
++ printf(_(" --host=HOST use postmaster running on HOST\n"));
++ printf(_(" --port=PORT use postmaster running at PORT\n"));
++ printf(_(" --user=USER connect as USER\n"));
++ printf(_(" --psqldir=DIR use psql in DIR (default: find in PATH)\n"));
++ printf(_("\n"));
++ printf(_("The exit status is 0 if all tests passed, 1 if some tests failed, and 2\n"));
++ printf(_("if the tests could not be run for some reason.\n"));
++ printf(_("\n"));
++ printf(_("Report bugs to <pgsql-bugs@postgresql.org>.\n"));
++}
++
++int
++regression_main(int argc, char *argv[], init_function ifunc, test_function tfunc)
++{
++ _stringlist *sl;
++ int c;
++ int i;
++ int option_index;
++ char buf[MAXPGPATH * 4];
++
++ static struct option long_options[] = {
++ {"help", no_argument, NULL, 'h'},
++ {"version", no_argument, NULL, 'V'},
++ {"dbname", required_argument, NULL, 1},
++ {"debug", no_argument, NULL, 2},
++ {"inputdir", required_argument, NULL, 3},
++ {"load-language", required_argument, NULL, 4},
++ {"max-connections", required_argument, NULL, 5},
++ {"multibyte", required_argument, NULL, 6},
++ {"outputdir", required_argument, NULL, 7},
++ {"schedule", required_argument, NULL, 8},
++ {"temp-install", required_argument, NULL, 9},
++ {"no-locale", no_argument, NULL, 10},
++ {"top-builddir", required_argument, NULL, 11},
++ {"temp-port", required_argument, NULL, 12},
++ {"host", required_argument, NULL, 13},
++ {"port", required_argument, NULL, 14},
++ {"user", required_argument, NULL, 15},
++ {"psqldir", required_argument, NULL, 16},
++ {"srcdir", required_argument, NULL, 17},
++ {"create-role", required_argument, NULL, 18},
++ {"temp-config", required_argument, NULL, 19},
++ {NULL, 0, NULL, 0}
++ };
++
++ progname = get_progname(argv[0]);
++ set_pglocale_pgservice(argv[0], "pg_regress");
++
++#ifndef HAVE_UNIX_SOCKETS
++ /* no unix domain sockets available, so change default */
++ hostname = "localhost";
++#endif
++
++ /*
++ * We call the initialization function here because that way we can set
++ * default parameters and let them be overwritten by the commandline.
++ */
++ ifunc();
++
++ while ((c = getopt_long(argc, argv, "hV", long_options, &option_index)) != -1)
++ {
++ switch (c)
++ {
++ case 'h':
++ help();
++ exit_nicely(0);
++ case 'V':
++ printf("pg_regress (PostgreSQL %s)\n", PG_VERSION);
++ exit_nicely(0);
++ case 1:
++
++ /*
++ * If a default database was specified, we need to remove it
++ * before we add the specified one.
++ */
++ free_stringlist(&dblist);
++ split_to_stringlist(strdup(optarg), ", ", &dblist);
++ break;
++ case 2:
++ debug = true;
++ break;
++ case 3:
++ inputdir = strdup(optarg);
++ break;
++ case 4:
++ add_stringlist_item(&loadlanguage, optarg);
++ break;
++ case 5:
++ max_connections = atoi(optarg);
++ break;
++ case 6:
++ encoding = strdup(optarg);
++ break;
++ case 7:
++ outputdir = strdup(optarg);
++ break;
++ case 8:
++ add_stringlist_item(&schedulelist, optarg);
++ break;
++ case 9:
++ /* temp_install must be absolute path */
++ if (is_absolute_path(optarg))
++ temp_install = strdup(optarg);
++ else
++ {
++ char cwdbuf[MAXPGPATH];
++
++ if (!getcwd(cwdbuf, sizeof(cwdbuf)))
++ {
++ fprintf(stderr, _("could not get current working directory: %s\n"), strerror(errno));
++ exit_nicely(2);
++ }
++ temp_install = malloc(strlen(cwdbuf) + strlen(optarg) + 2);
++ sprintf(temp_install, "%s/%s", cwdbuf, optarg);
++ }
++ canonicalize_path(temp_install);
++ break;
++ case 10:
++ nolocale = true;
++ break;
++ case 11:
++ top_builddir = strdup(optarg);
++ break;
++ case 12:
++ {
++ int p = atoi(optarg);
++
++ /* Since Makefile isn't very bright, check port range */
++ if (p >= 1024 && p <= 65535)
++ temp_port = p;
++ }
++ break;
++ case 13:
++ hostname = strdup(optarg);
++ break;
++ case 14:
++ port = atoi(optarg);
++ break;
++ case 15:
++ user = strdup(optarg);
++ break;
++ case 16:
++ /* "--psqldir=" should mean to use PATH */
++ if (strlen(optarg))
++ psqldir = strdup(optarg);
++ break;
++ case 17:
++ srcdir = strdup(optarg);
++ break;
++ case 18:
++ split_to_stringlist(strdup(optarg), ", ", &extraroles);
++ break;
++ case 19:
++ temp_config = strdup(optarg);
++ break;
++ default:
++ /* getopt_long already emitted a complaint */
++ fprintf(stderr, _("\nTry \"%s -h\" for more information.\n"),
++ progname);
++ exit_nicely(2);
++ }
++ }
++
++ /*
++ * if we still have arguments, they are extra tests to run
++ */
++ while (argc - optind >= 1)
++ {
++ add_stringlist_item(&extra_tests, argv[optind]);
++ optind++;
++ }
++
++ if (temp_install)
++ port = temp_port;
++
++ /*
++ * Initialization
++ */
++ open_result_files();
++
++ initialize_environment();
++
++#if defined(HAVE_GETRLIMIT) && defined(RLIMIT_CORE)
++ unlimit_core_size();
++#endif
++
++ if (temp_install)
++ {
++ /*
++ * Prepare the temp installation
++ */
++ if (!top_builddir)
++ {
++ fprintf(stderr, _("--top-builddir must be specified when using --temp-install\n"));
++ exit_nicely(2);
++ }
++
++ if (directory_exists(temp_install))
++ {
++ header(_("removing existing temp installation"));
++ rmtree(temp_install, true);
++ }
++
++ header(_("creating temporary installation"));
++
++ /* make the temp install top directory */
++ make_directory(temp_install);
++
++ /* and a directory for log files */
++ snprintf(buf, sizeof(buf), "%s/log", outputdir);
++ if (!directory_exists(buf))
++ make_directory(buf);
++
++ /* "make install" */
++#ifndef WIN32_ONLY_COMPILER
++ snprintf(buf, sizeof(buf),
++ SYSTEMQUOTE "\"%s\" -C \"%s\" DESTDIR=\"%s/install\" install with_perl=no with_python=no > \"%s/log/install.log\" 2>&1" SYSTEMQUOTE,
++ makeprog, top_builddir, temp_install, outputdir);
++#else
++ snprintf(buf, sizeof(buf),
++ SYSTEMQUOTE "perl \"%s/src/tools/msvc/install.pl\" \"%s/install\" >\"%s/log/install.log\" 2>&1" SYSTEMQUOTE,
++ top_builddir, temp_install, outputdir);
++#endif
++ if (system(buf))
++ {
++ fprintf(stderr, _("\n%s: installation failed\nExamine %s/log/install.log for the reason.\nCommand was: %s\n"), progname, outputdir, buf);
++ exit_nicely(2);
++ }
++
++ /* initdb */
++ header(_("initializing database system"));
++ snprintf(buf, sizeof(buf),
++ SYSTEMQUOTE "\"%s/initdb\" -D \"%s/data\" -L \"%s\" --noclean%s%s > \"%s/log/initdb.log\" 2>&1" SYSTEMQUOTE,
++ bindir, temp_install, datadir,
++ debug ? " --debug" : "",
++ nolocale ? " --no-locale" : "",
++ outputdir);
++ if (system(buf))
++ {
++ fprintf(stderr, _("\n%s: initdb failed\nExamine %s/log/initdb.log for the reason.\nCommand was: %s\n"), progname, outputdir, buf);
++ exit_nicely(2);
++ }
++
++ /* add any extra config specified to the postgresql.conf */
++ if (temp_config != NULL)
++ {
++ FILE *extra_conf;
++ FILE *pg_conf;
++ char line_buf[1024];
++
++ snprintf(buf, sizeof(buf), "%s/data/postgresql.conf", temp_install);
++ pg_conf = fopen(buf, "a");
++ if (pg_conf == NULL)
++ {
++ fprintf(stderr, _("\n%s: could not open %s for adding extra config:\nError was %s\n"), progname, buf, strerror(errno));
++ exit_nicely(2);
++ }
++ extra_conf = fopen(temp_config, "r");
++ if (extra_conf == NULL)
++ {
++ fprintf(stderr, _("\n%s: could not open %s to read extra config:\nError was %s\n"), progname, buf, strerror(errno));
++ exit_nicely(2);
++ }
++ while (fgets(line_buf, sizeof(line_buf), extra_conf) != NULL)
++ fputs(line_buf, pg_conf);
++ fclose(extra_conf);
++ fclose(pg_conf);
++ }
++
++ /*
++ * Start the temp postmaster
++ */
++ header(_("starting postmaster"));
++ snprintf(buf, sizeof(buf),
++ SYSTEMQUOTE "\"%s/postgres\" -D \"%s/data\" -F%s -c \"listen_addresses=%s\" > \"%s/log/postmaster.log\" 2>&1" SYSTEMQUOTE,
++ bindir, temp_install,
++ debug ? " -d 5" : "",
++ hostname ? hostname : "",
++ outputdir);
++ postmaster_pid = spawn_process(buf);
++ if (postmaster_pid == INVALID_PID)
++ {
++ fprintf(stderr, _("\n%s: could not spawn postmaster: %s\n"),
++ progname, strerror(errno));
++ exit_nicely(2);
++ }
++
++ /*
++ * Wait till postmaster is able to accept connections (normally only a
++ * second or so, but Cygwin is reportedly *much* slower). Don't wait
++ * forever, however.
++ */
++ snprintf(buf, sizeof(buf),
++ SYSTEMQUOTE "\"%s/psql\" -X postgres <%s 2>%s" SYSTEMQUOTE,
++ bindir, DEVNULL, DEVNULL);
++ for (i = 0; i < 60; i++)
++ {
++ /* Done if psql succeeds */
++ if (system(buf) == 0)
++ break;
++
++ /*
++ * Fail immediately if postmaster has exited
++ */
++#ifndef WIN32
++ if (kill(postmaster_pid, 0) != 0)
++#else
++ if (WaitForSingleObject(postmaster_pid, 0) == WAIT_OBJECT_0)
++#endif
++ {
++ fprintf(stderr, _("\n%s: postmaster failed\nExamine %s/log/postmaster.log for the reason\n"), progname, outputdir);
++ exit_nicely(2);
++ }
++
++ pg_usleep(1000000L);
++ }
++ if (i >= 60)
++ {
++ fprintf(stderr, _("\n%s: postmaster did not respond within 60 seconds\nExamine %s/log/postmaster.log for the reason\n"), progname, outputdir);
++
++ /*
++ * If we get here, the postmaster is probably wedged somewhere in
++ * startup. Try to kill it ungracefully rather than leaving a
++ * stuck postmaster that might interfere with subsequent test
++ * attempts.
++ */
++#ifndef WIN32
++ if (kill(postmaster_pid, SIGKILL) != 0 &&
++ errno != ESRCH)
++ fprintf(stderr, _("\n%s: could not kill failed postmaster: %s\n"),
++ progname, strerror(errno));
++#else
++ if (TerminateProcess(postmaster_pid, 255) == 0)
++ fprintf(stderr, _("\n%s: could not kill failed postmaster: %lu\n"),
++ progname, GetLastError());
++#endif
++
++ exit_nicely(2);
++ }
++
++ postmaster_running = true;
++
++ printf(_("running on port %d with pid %lu\n"),
++ temp_port, (unsigned long) postmaster_pid);
++ }
++ else
++ {
++ /*
++ * Using an existing installation, so may need to get rid of
++ * pre-existing database(s) and role(s)
++ */
++ for (sl = dblist; sl; sl = sl->next)
++ drop_database_if_exists(sl->str);
++ for (sl = extraroles; sl; sl = sl->next)
++ drop_role_if_exists(sl->str);
++ }
++
++ /*
++ * Create the test database(s) and role(s)
++ */
++ for (sl = dblist; sl; sl = sl->next)
++ create_database(sl->str);
++ for (sl = extraroles; sl; sl = sl->next)
++ create_role(sl->str, dblist);
++
++ /*
++ * Ready to run the tests
++ */
++ header(_("running regression test queries"));
++
++ for (sl = schedulelist; sl != NULL; sl = sl->next)
++ {
++ run_schedule(sl->str, tfunc);
++ }
++
++ for (sl = extra_tests; sl != NULL; sl = sl->next)
++ {
++ run_single_test(sl->str, tfunc);
++ }
++
++ /*
++ * Shut down temp installation's postmaster
++ */
++ if (temp_install)
++ {
++ header(_("shutting down postmaster"));
++ stop_postmaster();
++ }
++
++ fclose(logfile);
++
++ /*
++ * Emit nice-looking summary message
++ */
++ if (fail_count == 0 && fail_ignore_count == 0)
++ snprintf(buf, sizeof(buf),
++ _(" All %d tests passed. "),
++ success_count);
++ else if (fail_count == 0) /* fail_count=0, fail_ignore_count>0 */
++ snprintf(buf, sizeof(buf),
++ _(" %d of %d tests passed, %d failed test(s) ignored. "),
++ success_count,
++ success_count + fail_ignore_count,
++ fail_ignore_count);
++ else if (fail_ignore_count == 0) /* fail_count>0 && fail_ignore_count=0 */
++ snprintf(buf, sizeof(buf),
++ _(" %d of %d tests failed. "),
++ fail_count,
++ success_count + fail_count);
++ else
++ /* fail_count>0 && fail_ignore_count>0 */
++ snprintf(buf, sizeof(buf),
++ _(" %d of %d tests failed, %d of these failures ignored. "),
++ fail_count + fail_ignore_count,
++ success_count + fail_count + fail_ignore_count,
++ fail_ignore_count);
++
++ putchar('\n');
++ for (i = strlen(buf); i > 0; i--)
++ putchar('=');
++ printf("\n%s\n", buf);
++ for (i = strlen(buf); i > 0; i--)
++ putchar('=');
++ putchar('\n');
++ putchar('\n');
++
++ if (file_size(difffilename) > 0)
++ {
++ printf(_("The differences that caused some tests to fail can be viewed in the\n"
++ "file \"%s\". A copy of the test summary that you see\n"
++ "above is saved in the file \"%s\".\n\n"),
++ difffilename, logfilename);
++ }
++ else
++ {
++ unlink(difffilename);
++ unlink(logfilename);
++ }
++
++ if (fail_count != 0)
++ exit_nicely(1);
++
++ return 0;
++}
diff --git a/dev-db/postgresql-server/files/postgresql-8.3.1-server.patch b/dev-db/postgresql-server/files/postgresql-8.3.1-server.patch
new file mode 100644
index 000000000000..da1e812e0b3d
--- /dev/null
+++ b/dev-db/postgresql-server/files/postgresql-8.3.1-server.patch
@@ -0,0 +1,224 @@
+=== GNUmakefile.in
+==================================================================
+--- GNUmakefile.in (revision 14)
++++ GNUmakefile.in (local)
+@@ -11,19 +11,16 @@
+ all:
+ $(MAKE) -C doc all
+ $(MAKE) -C src all
+- $(MAKE) -C config all
+ @echo "All of PostgreSQL successfully made. Ready to install."
+
+ install:
+ $(MAKE) -C doc $@
+ $(MAKE) -C src $@
+- $(MAKE) -C config $@
+ @echo "PostgreSQL installation complete."
+
+ installdirs uninstall:
+ $(MAKE) -C doc $@
+ $(MAKE) -C src $@
+- $(MAKE) -C config $@
+
+ distprep:
+ $(MAKE) -C doc $@
+=== contrib/Makefile
+==================================================================
+--- contrib/Makefile (revision 14)
++++ contrib/Makefile (local)
+@@ -20,22 +20,19 @@
+ isn \
+ lo \
+ ltree \
+- oid2name \
+ pageinspect \
+ pg_buffercache \
+ pg_freespacemap \
+ pg_standby \
+ pg_trgm \
+- pgbench \
+ pgcrypto \
+ pgrowlocks \
+ pgstattuple \
+ seg \
+ spi \
+ tablefunc \
+- test_parser \
+ tsearch2 \
+- vacuumlo
++ test_parser
+
+ ifeq ($(with_openssl),yes)
+ WANTED_DIRS += sslinfo
+=== contrib/adminpack/Makefile
+==================================================================
+--- contrib/adminpack/Makefile (revision 14)
++++ contrib/adminpack/Makefile (local)
+@@ -1,7 +1,7 @@
+ # $PostgreSQL: pgsql/contrib/adminpack/Makefile,v 1.6 2007/11/10 23:59:50 momjian Exp $
+
+ MODULE_big = adminpack
+-PG_CPPFLAGS = -I$(libpq_srcdir)
++PG_CPPFLAGS = -I$(libpq_srcdir) -I../../src/include/
+ DATA_built = adminpack.sql
+ DATA = uninstall_adminpack.sql
+ OBJS = adminpack.o
+=== contrib/uuid-ossp/Makefile
+==================================================================
+--- contrib/uuid-ossp/Makefile (revision 14)
++++ contrib/uuid-ossp/Makefile (local)
+@@ -1,11 +1,13 @@
+ # $PostgreSQL: pgsql/contrib/uuid-ossp/Makefile,v 1.4 2007/11/13 00:13:19 tgl Exp $
+
++PG_CPPFLAGS += "-DHAVE_OSSP_UUID_H"
++
+ MODULE_big = uuid-ossp
+ OBJS = uuid-ossp.o
+ DATA_built = uuid-ossp.sql
+ DATA = uninstall_uuid-ossp.sql
+
+-SHLIB_LINK += $(OSSP_UUID_LIBS)
++SHLIB_LINK += -lossp-uuid
+
+ ifdef USE_PGXS
+ PG_CONFIG = pg_config
+=== src/Makefile
+==================================================================
+--- src/Makefile (revision 14)
++++ src/Makefile (local)
+@@ -19,14 +19,11 @@
+ $(MAKE) -C backend $@
+ $(MAKE) -C backend/utils/mb/conversion_procs $@
+ $(MAKE) -C backend/snowball $@
+- $(MAKE) -C include $@
+- $(MAKE) -C interfaces $@
+ $(MAKE) -C bin $@
+ $(MAKE) -C pl $@
+- $(MAKE) -C makefiles $@
+ $(MAKE) -C test/regress $@
+
+-install: install-local
++install:
+
+ install-local: installdirs-local
+ $(INSTALL_DATA) Makefile.global '$(DESTDIR)$(pgxsdir)/$(subdir)/Makefile.global'
+=== src/Makefile.global.in
+==================================================================
+--- src/Makefile.global.in (revision 14)
++++ src/Makefile.global.in (local)
+@@ -373,10 +373,8 @@
+
+
+ submake-libpq:
+- $(MAKE) -C $(libpq_builddir) all
+
+ submake-libpgport:
+- $(MAKE) -C $(top_builddir)/src/port all
+
+ .PHONY: submake-libpq submake-libpgport
+
+@@ -419,7 +417,9 @@
+ LDFLAGS += $(PROFILE)
+ endif
+
++CFLAGS += -I${top_srcdir}/src/include
+
++
+ ##########################################################################
+ #
+ # substitute implementations of C library routines (see src/port/)
+=== src/bin/Makefile
+==================================================================
+--- src/bin/Makefile (revision 14)
++++ src/bin/Makefile (local)
+@@ -13,8 +13,8 @@
+ top_builddir = ../..
+ include $(top_builddir)/src/Makefile.global
+
+-DIRS = initdb ipcclean pg_ctl pg_dump \
+- psql scripts pg_config pg_controldata pg_resetxlog
++DIRS = initdb ipcclean pg_ctl \
++ pg_controldata pg_resetxlog
+ ifeq ($(PORTNAME), win32)
+ DIRS+=pgevent
+ endif
+=== src/bin/initdb/Makefile
+==================================================================
+--- src/bin/initdb/Makefile (revision 14)
++++ src/bin/initdb/Makefile (local)
+@@ -14,7 +14,7 @@
+ top_builddir = ../../..
+ include $(top_builddir)/src/Makefile.global
+
+-override CPPFLAGS := -DFRONTEND -I$(libpq_srcdir) $(CPPFLAGS)
++override CPPFLAGS := -DFRONTEND -I$(top_srcdir)/src/interfaces/libpq $(CPPFLAGS)
+
+ OBJS= initdb.o encnames.o pqsignal.o $(WIN32RES)
+
+=== src/include/pg_config_manual.h
+==================================================================
+--- src/include/pg_config_manual.h (revision 14)
++++ src/include/pg_config_manual.h (local)
+@@ -184,7 +184,7 @@
+ * here's where to twiddle it. You can also override this at runtime
+ * with the postmaster's -k switch.
+ */
+-#define DEFAULT_PGSOCKET_DIR "/tmp"
++#define DEFAULT_PGSOCKET_DIR "/var/run/postgresql"
+
+ /*
+ * The random() function is expected to yield values between 0 and
+=== src/port/Makefile
+==================================================================
+--- src/port/Makefile (revision 14)
++++ src/port/Makefile (local)
+@@ -35,11 +35,10 @@
+ # foo_srv.o and foo.o are both built from foo.c, but only foo.o has -DFRONTEND
+ OBJS_SRV = $(OBJS:%.o=%_srv.o)
+
+-all: libpgport.a libpgport_srv.a
++all: libpgport_srv.a
+
+ # libpgport is needed by some contrib
+-install: all installdirs
+- $(INSTALL_STLIB) libpgport.a '$(DESTDIR)$(libdir)/libpgport.a'
++install:
+
+ installdirs:
+ $(mkinstalldirs) '$(DESTDIR)$(libdir)'
+=== src/test/regress/GNUmakefile
+==================================================================
+--- src/test/regress/GNUmakefile (revision 14)
++++ src/test/regress/GNUmakefile (local)
+@@ -141,7 +141,7 @@
+ ##
+
+ check: all
+- ./pg_regress --temp-install=./tmp_check --top-builddir=$(top_builddir) --srcdir=$(abs_srcdir) --temp-port=$(TEMP_PORT) --schedule=$(srcdir)/parallel_schedule --multibyte=$(MULTIBYTE) --load-language=plpgsql $(MAXCONNOPT) $(NOLOCALE) $(TEMP_CONF)
++ ./pg_regress --temp-install=./tmp_check --top-builddir=$(top_builddir) --srcdir=$(abs_srcdir) --temp-port=$(TEMP_PORT) --schedule=$(srcdir)/parallel_schedule --multibyte=$(MULTIBYTE) --load-language=plpgsql $(MAXCONNOPT) $(NOLOCALE) $(TEMP_CONF) --psqldir=/usr/lib/postgresql-${SLOT}/bin/
+
+ installcheck: all
+ ./pg_regress --psqldir=$(PSQLDIR) --schedule=$(srcdir)/serial_schedule --srcdir=$(abs_srcdir) --multibyte=$(MULTIBYTE) --load-language=plpgsql $(NOLOCALE)
+=== src/test/regress/pg_regress.c
+==================================================================
+--- src/test/regress/pg_regress.c (revision 14)
++++ src/test/regress/pg_regress.c (local)
+@@ -781,9 +781,6 @@
+ sprintf(tmp, "%s/install/%s", temp_install, datadir);
+ datadir = tmp;
+
+- /* psql will be installed into temp-install bindir */
+- psqldir = bindir;
+-
+ /*
+ * Set up shared library paths to include the temp install.
+ *
+@@ -2053,7 +2050,7 @@
+ */
+ snprintf(buf, sizeof(buf),
+ SYSTEMQUOTE "\"%s/psql\" -X postgres <%s 2>%s" SYSTEMQUOTE,
+- bindir, DEVNULL, DEVNULL);
++ psqldir, DEVNULL, DEVNULL);
+ for (i = 0; i < 60; i++)
+ {
+ /* Done if psql succeeds */
diff --git a/dev-db/postgresql-server/postgresql-server-7.4.21.ebuild b/dev-db/postgresql-server/postgresql-server-7.4.21.ebuild
new file mode 100644
index 000000000000..ddce09eff9eb
--- /dev/null
+++ b/dev-db/postgresql-server/postgresql-server-7.4.21.ebuild
@@ -0,0 +1,235 @@
+# Copyright 1999-2008 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/dev-db/postgresql-server/postgresql-server-7.4.21.ebuild,v 1.1 2008/06/14 11:49:54 dev-zero Exp $
+
+EAPI="1"
+
+WANT_AUTOCONF="latest"
+WANT_AUTOMAKE="none"
+inherit eutils multilib toolchain-funcs versionator autotools
+
+KEYWORDS="~amd64 ~x86"
+
+DESCRIPTION="PostgreSQL server"
+HOMEPAGE="http://www.postgresql.org/"
+SRC_URI="mirror://postgresql/source/v${PV}/postgresql-${PV}.tar.bz2"
+LICENSE="POSTGRESQL"
+SLOT="$(get_version_component_range 1-2)"
+IUSE_LINGUAS="
+ linguas_cs linguas_de linguas_es linguas_fr linguas_hr linguas_hu
+ linguas_it linguas_nb linguas_pt_BR linguas_ru linguas_sl linguas_sv
+ linguas_tr linguas_zh_CN linguas_zh_TW"
+IUSE="doc perl python selinux tcl xml nls kernel_linux ${IUSE_LINGUAS}"
+
+wanted_languages() {
+ for u in ${IUSE_LINGUAS} ; do
+ use $u && echo -n "${u#linguas_} "
+ done
+}
+
+RDEPEND="~dev-db/postgresql-base-${PV}:${SLOT}
+ perl? ( >=dev-lang/perl-5.6.1-r2 )
+ python? ( >=dev-lang/python-2.2 dev-python/egenix-mx-base )
+ selinux? ( sec-policy/selinux-postgresql )
+ tcl? ( >=dev-lang/tcl-8 )
+ xml? ( dev-libs/libxml2 dev-libs/libxslt )"
+DEPEND="${RDEPEND}
+ sys-devel/flex
+ xml? ( dev-util/pkgconfig )"
+PDEPEND="doc? ( dev-db/postgresql-docs:${SLOT} )"
+
+S="${WORKDIR}/postgresql-${PV}"
+
+pkg_setup() {
+ enewgroup postgres 70
+ enewuser postgres 70 /bin/bash /var/lib/postgresql postgres
+}
+
+src_unpack() {
+ unpack ${A}
+ cd "${S}"
+
+ epatch "${FILESDIR}/postgresql-${PV}-autoconf.patch" \
+ "${FILESDIR}/postgresql-${SLOT}-vacuum-delay.patch" \
+ "${FILESDIR}/postgresql-${SLOT}-server.patch"
+
+ if hasq test ${FEATURES}; then
+ epatch "${FILESDIR}/postgresql-${SLOT}-regress.patch"
+ fi
+
+ eautoreconf
+}
+
+src_compile() {
+
+ # eval is needed to get along with pg_config quotation of space-rich entities.
+ eval econf "$(/usr/$(get_libdir)/postgresql-${SLOT}/bin/pg_config --configure)" \
+ $(use_with perl) \
+ $(use_with python) \
+ $(use_with tcl) \
+ --with-includes="/usr/include/postgresql-${SLOT}/" \
+ --with-libs="/usr/$(get_libdir)/postgresql-${SLOT}/$(get_libdir)/" \
+ "$(built_with_use ~dev-db/postgresql-base-${PV} nls && use_enable nls nls "$(wanted_languages)")" \
+ "CFLAGS='${CFLAGS} $(use xml && pkg-config --cflags libxml-2.0)'" \
+ "LIBS='${LIBS} -lpq $(use xml && pkg-config --libs libxml-2.0) -L/usr/$(get_libdir)/postgresql-${SLOT}/$(get_libdir)'" \
+ || die "configure failed"
+
+ for bd in . contrib $(use xml && echo contrib/xml) ; do
+ PATH="/usr/$(get_libdir)/postgresql-${SLOT}/bin:${PATH}" \
+ emake -C $bd -j1 LD="$(tc-getLD) $(get_abi_LDFLAGS)" \
+ docdir=/usr/share/doc/${PF} SLOT=${SLOT} || die "emake in $bd failed"
+ done
+}
+
+src_install() {
+ if use perl ; then
+ mv -f "${S}/src/pl/plperl/GNUmakefile" "${S}/src/pl/plperl/GNUmakefile_orig"
+ sed -e "s:\$(DESTDIR)\$(plperl_installdir):\$(plperl_installdir):" \
+ "${S}/src/pl/plperl/GNUmakefile_orig" > "${S}/src/pl/plperl/GNUmakefile"
+ fi
+
+ for bd in . contrib $(use xml && echo contrib/xml) ; do
+ PATH="/usr/$(get_libdir)/postgresql-${SLOT}/bin:${PATH}" \
+ emake install -C $bd -j1 DESTDIR="${D}" \
+ docdir=/usr/share/doc/${PF} SLOT=${SLOT} || die "emake install in $bd failed"
+ done
+
+ rm -rf "${D}/usr/share/postgresql-${SLOT}/man/man7/" "${D}/usr/share/doc/${PF}/html"
+ rm "${D}"/usr/share/postgresql-${SLOT}/man/man1/{clusterdb,create{db,lang,user},drop{db,lang,user},ecpg,pg_{config,dump,dumpall,restore},psql,vacuumdb,pgtksh,pgtclsh}.1
+
+ dodoc README HISTORY doc/{README.*,TODO,bug.template}
+
+ dodir /etc/eselect/postgresql/slots/${SLOT}
+ cat >"${D}/etc/eselect/postgresql/slots/${SLOT}/service" <<-__EOF__
+ postgres_ebuilds="\${postgres_ebuilds} ${PF}"
+ postgres_service="postgresql-${SLOT}"
+ __EOF__
+
+ newinitd "${FILESDIR}/postgresql.init-${SLOT}" postgresql-${SLOT} || die "Inserting init.d-file failed"
+ newconfd "${FILESDIR}/postgresql.conf-${SLOT}" postgresql-${SLOT} || die "Inserting conf.d-file failed"
+
+ keepdir /var/run/postgresql
+ fperms 0770 /var/run/postgresql
+ fowners postgres:postgres /var/run/postgresql
+}
+
+pkg_postinst() {
+ eselect postgresql update
+ [[ "$(eselect postgresql show)" = "(none)" ]] && eselect postgresql set ${SLOT}
+ [[ "$(eselect postgresql show-service)" = "(none)" ]] && eselect postgresql set-service ${SLOT}
+
+ ewarn "Please note that the standard location of the socket has changed from /tmp"
+ ewarn "to /var/run/postgresql and you have to be in the 'postgres' group to access"
+ ewarn "the socket."
+ ewarn "This can break applications which have the standard location hard-coded."
+ ewarn "If such an application links against the libpq, please re-emerge it,"
+ ewarn "if that doesn't help or the application accesses the socket without using libpq,"
+ ewarn "please file a bug-report."
+ ewarn "You can set PGOPTS='-k /tmp' in /etc/conf.d/postgresql-${SLOT} to restore the original location."
+
+ elog "Execute the following command to setup the initial database environment:"
+ elog
+ elog "emerge --config =${CATEGORY}/${PF}"
+ elog
+}
+
+pkg_postrm() {
+ eselect postgresql update
+}
+
+pkg_config() {
+ [[ -z "${PGDATA}" ]] && PGDATA="/var/lib/postgresql/${SLOT}/data"
+
+ einfo "You can pass options to initdb by setting the PG_INITDB_OPTS variable."
+ einfo "More information can be found here:"
+ einfo " http://www.postgresql.org/docs/${SLOT}/static/creating-cluster.html"
+ einfo " http://www.postgresql.org/docs/${SLOT}/static/app-initdb.html"
+ einfo "Simply add the options you would have added to initdb to the PG_INITDB_OPTS variable."
+ einfo
+ einfo "You can change the directory where the database cluster is being created by setting"
+ einfo "the PGDATA variable."
+ einfo
+ einfo "PG_INITDB_OPTS is currently set to:"
+ einfo " \"${PG_INITDB_OPTS}\""
+ einfo "and the database cluster will be created in:"
+ einfo " \"${PGDATA}\""
+ einfo "Are you ready to continue? (Y/n)"
+ read answer
+ [ -z $answer ] && answer=Y
+ [ "$answer" == "Y" ] || [ "$answer" == "y" ] || die "aborted"
+
+ if [[ -f "${PGDATA}/PG_VERSION" ]] ; then
+ eerror "The given directory \"${PGDATA}\" already contains a database cluster."
+ die "cluster already exists"
+ fi
+
+ [ -z "${PG_MAX_CONNECTIONS}" ] && PG_MAX_CONNECTIONS="128"
+ einfo "Checking system parameters..."
+
+ if ! use kernel_linux ; then
+ SKIP_SYSTEM_TESTS=yes
+ einfo " Tests not supported on this OS (yet)"
+ fi
+
+ if [ -z ${SKIP_SYSTEM_TESTS} ] ; then
+ einfo "Checking whether your system supports at least ${PG_MAX_CONNECTIONS} connections..."
+
+ local SEMMSL=$(sysctl -n kernel.sem | cut -f1)
+ local SEMMNS=$(sysctl -n kernel.sem | cut -f2)
+ local SEMMNI=$(sysctl -n kernel.sem | cut -f4)
+ local SHMMAX=$(sysctl -n kernel.shmmax)
+
+ local SEMMSL_MIN=17
+ local SEMMNS_MIN=$(( ( ${PG_MAX_CONNECTIONS}/16 ) * 17 ))
+ local SEMMNI_MIN=$(( ( ${PG_MAX_CONNECTIONS}+15 ) / 16 ))
+ local SHMMAX_MIN=$(( 500000 + ( 30600 * ${PG_MAX_CONNECTIONS} ) ))
+
+ for p in SEMMSL SEMMNS SEMMNI SHMMAX ; do
+ if [ $(eval echo \$$p) -lt $(eval echo \$${p}_MIN) ] ; then
+ eerror "The value for ${p} $(eval echo \$$p) is below the recommended value $(eval echo \$${p}_MIN)"
+ eerror "You have now several options:"
+ eerror " - Change the mentioned system parameter"
+ eerror " - Lower the number of max.connections by setting PG_MAX_CONNECTIONS to a value lower than ${PG_MAX_CONNECTIONS}"
+ eerror " - Set SKIP_SYSTEM_TESTS in case you want to ignore this test completely"
+ eerror "More information can be found here:"
+ eerror " http://www.postgresql.org/docs/${SLOT}/static/kernel-resources.html"
+ die "system test failed"
+ fi
+ done
+ einfo "Passed."
+ else
+ einfo "Skipped."
+ fi
+
+ einfo "Creating the data directory ..."
+ mkdir -p "${PGDATA}"
+ chown -Rf postgres:postgres "${PGDATA}"
+ chmod 0700 "${PGDATA}"
+
+ einfo "Initializing the database ..."
+
+ su postgres -c "/usr/$(get_libdir)/postgresql-${SLOT}/bin/initdb --pgdata \"${PGDATA}\" ${PG_INITDB_OPTS}"
+
+ einfo
+ einfo "You can use the '${ROOT}/etc/init.d/postgresql-${SLOT}' script to run PostgreSQL instead of 'pg_ctl'."
+ einfo
+
+ if [ "${PGDATA}" != "/var/lib/postgresql/${SLOT}/data" ] ; then
+ ewarn "You didn't install the database cluster in the standard location, please make sure that you set"
+ ewarn "PGDATA=\"${PGDATA}\" in the appropriate conf.d file (probably /etc/conf.d/postgresql-${SLOT})"
+ fi
+}
+
+src_test() {
+ einfo ">>> Test phase [check]: ${CATEGORY}/${PF}"
+ PATH="/usr/$(get_libdir)/postgresql-${SLOT}/bin:${PATH}" \
+ emake -j1 check \
+ PGXS=$(/usr/$(get_libdir)/postgresql-${SLOT}/bin/pg_config --pgxs) \
+ NO_PGXS=0 USE_PGXS=1 SLOT=${SLOT} || die "Make check failed. See above for details."
+
+ einfo "Yes, there are other tests which could be run."
+ einfo "... and no, we don't plan to add/support them."
+ einfo "For now, the main regressions tests will suffice."
+ einfo "If you think other tests are necessary, please submit a"
+ einfo "bug including a patch for this ebuild to enable them."
+}
diff --git a/dev-db/postgresql-server/postgresql-server-8.0.15.ebuild b/dev-db/postgresql-server/postgresql-server-8.0.15.ebuild
index 56a5c2df5ab3..58ab757535af 100644
--- a/dev-db/postgresql-server/postgresql-server-8.0.15.ebuild
+++ b/dev-db/postgresql-server/postgresql-server-8.0.15.ebuild
@@ -1,6 +1,6 @@
# Copyright 1999-2008 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo-x86/dev-db/postgresql-server/postgresql-server-8.0.15.ebuild,v 1.3 2008/06/04 21:44:07 dev-zero Exp $
+# $Header: /var/cvsroot/gentoo-x86/dev-db/postgresql-server/postgresql-server-8.0.15.ebuild,v 1.4 2008/06/14 11:49:54 dev-zero Exp $
EAPI="1"
@@ -50,7 +50,7 @@ src_unpack() {
unpack ${A}
cd "${S}"
- epatch "${FILESDIR}/postgresql-${SLOT}-common.patch" \
+ epatch "${FILESDIR}/postgresql-${SLOT}.15-common.patch" \
"${FILESDIR}/postgresql-${SLOT}-server.patch"
if hasq test ${FEATURES}; then
diff --git a/dev-db/postgresql-server/postgresql-server-8.0.17.ebuild b/dev-db/postgresql-server/postgresql-server-8.0.17.ebuild
new file mode 100644
index 000000000000..0b4b1f71218f
--- /dev/null
+++ b/dev-db/postgresql-server/postgresql-server-8.0.17.ebuild
@@ -0,0 +1,240 @@
+# Copyright 1999-2008 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/dev-db/postgresql-server/postgresql-server-8.0.17.ebuild,v 1.1 2008/06/14 11:49:54 dev-zero Exp $
+
+EAPI="1"
+
+WANT_AUTOCONF="latest"
+WANT_AUTOMAKE="none"
+inherit eutils multilib toolchain-funcs versionator autotools
+
+KEYWORDS="~amd64 ~x86"
+
+DESCRIPTION="PostgreSQL server"
+HOMEPAGE="http://www.postgresql.org/"
+SRC_URI="mirror://postgresql/source/v${PV}/postgresql-${PV}.tar.bz2"
+LICENSE="POSTGRESQL"
+SLOT="$(get_version_component_range 1-2)"
+IUSE_LINGUAS="
+ linguas_af linguas_cs linguas_de linguas_es linguas_fa linguas_fr
+ linguas_hr linguas_hu linguas_it linguas_ko linguas_nb linguas_pl
+ linguas_pt_BR linguas_ro linguas_ru linguas_sk linguas_sl linguas_sv
+ linguas_tr linguas_zh_CN linguas_zh_TW"
+IUSE="doc perl python selinux tcl xml nls kernel_linux ${IUSE_LINGUAS}"
+
+wanted_languages() {
+ for u in ${IUSE_LINGUAS} ; do
+ use $u && echo -n "${u#linguas_} "
+ done
+}
+
+RDEPEND="~dev-db/postgresql-base-${PV}:${SLOT}
+ perl? ( >=dev-lang/perl-5.6.1-r2 )
+ python? ( >=dev-lang/python-2.2 dev-python/egenix-mx-base )
+ selinux? ( sec-policy/selinux-postgresql )
+ tcl? ( >=dev-lang/tcl-8 )
+ xml? ( dev-libs/libxml2 dev-libs/libxslt )"
+DEPEND="${RDEPEND}
+ sys-devel/flex
+ xml? ( dev-util/pkgconfig )"
+PDEPEND="doc? ( dev-db/postgresql-docs:${SLOT} )"
+
+S="${WORKDIR}/postgresql-${PV}"
+
+pkg_setup() {
+ enewgroup postgres 70
+ enewuser postgres 70 /bin/bash /var/lib/postgresql postgres
+}
+
+src_unpack() {
+ unpack ${A}
+ cd "${S}"
+
+ epatch "${FILESDIR}/postgresql-${SLOT}-common.patch" \
+ "${FILESDIR}/postgresql-${SLOT}-server.patch"
+
+ if hasq test ${FEATURES}; then
+ sed -e "s|/no/such/location|${S}/src/test/regress/tmp_check/no/such/location|g" -i src/test/regress/{input,output}/tablespace.source
+ fi
+
+ eautoconf
+}
+
+src_compile() {
+ # TODO: test if PPC really cannot work with other CFLAGS settings
+ # use ppc && CFLAGS="-pipe -fsigned-char"
+
+ # eval is needed to get along with pg_config quotation of space-rich entities.
+ eval econf "$(/usr/$(get_libdir)/postgresql-${SLOT}/bin/pg_config --configure)" \
+ $(use_with perl) \
+ $(use_with python) \
+ $(use_with tcl) \
+ --with-includes="/usr/include/postgresql-${SLOT}/" \
+ "$(built_with_use ~dev-db/postgresql-base-${PV} nls && use_enable nls nls "$(wanted_languages)")" \
+ || die "configure failed"
+
+ for bd in . contrib $(use xml && echo contrib/xml2) ; do
+ PATH="/usr/$(get_libdir)/postgresql-${SLOT}/bin:${PATH}" \
+ emake -C $bd -j1 LD="$(tc-getLD) $(get_abi_LDFLAGS)" \
+ PGXS=$(/usr/$(get_libdir)/postgresql-${SLOT}/bin/pg_config --pgxs) \
+ NO_PGXS=0 USE_PGXS=1 docdir=/usr/share/doc/${PF} || die "emake in $bd failed"
+ done
+}
+
+src_install() {
+ if use perl ; then
+ mv -f "${S}/src/pl/plperl/GNUmakefile" "${S}/src/pl/plperl/GNUmakefile_orig"
+ sed -e "s:\$(DESTDIR)\$(plperl_installdir):\$(plperl_installdir):" \
+ "${S}/src/pl/plperl/GNUmakefile_orig" > "${S}/src/pl/plperl/GNUmakefile"
+ fi
+
+ for bd in . contrib $(use xml && echo contrib/xml2) ; do
+ PATH="/usr/$(get_libdir)/postgresql-${SLOT}/bin:${PATH}" \
+ emake install -C $bd -j1 DESTDIR="${D}" \
+ PGXS=$(/usr/$(get_libdir)/postgresql-${SLOT}/bin/pg_config --pgxs) \
+ NO_PGXS=0 USE_PGXS=1 docdir=/usr/share/doc/${PF} || die "emake install in $bd failed"
+ done
+
+ rm -rf "${D}/usr/share/postgresql-${SLOT}/man/man7/" "${D}/usr/share/doc/${PF}/html"
+ rm "${D}"/usr/share/postgresql-${SLOT}/man/man1/{clusterdb,create{db,lang,user},drop{db,lang,user},ecpg,pg_{config,dump,dumpall,restore},psql,vacuumdb}.1
+
+ dodoc README HISTORY doc/{README.*,TODO,bug.template}
+
+ dodir /etc/eselect/postgresql/slots/${SLOT}
+ cat >"${D}/etc/eselect/postgresql/slots/${SLOT}/service" <<-__EOF__
+ postgres_ebuilds="\${postgres_ebuilds} ${PF}"
+ postgres_service="postgresql-${SLOT}"
+ __EOF__
+
+ newinitd "${FILESDIR}/postgresql.init-${SLOT}" postgresql-${SLOT} || die "Inserting init.d-file failed"
+ newconfd "${FILESDIR}/postgresql.conf-${SLOT}" postgresql-${SLOT} || die "Inserting conf.d-file failed"
+
+ keepdir /var/run/postgresql
+ fperms 0770 /var/run/postgresql
+ fowners postgres:postgres /var/run/postgresql
+}
+
+pkg_postinst() {
+ eselect postgresql update
+ [[ "$(eselect postgresql show)" = "(none)" ]] && eselect postgresql set ${SLOT}
+ [[ "$(eselect postgresql show-service)" = "(none)" ]] && eselect postgresql set-service ${SLOT}
+
+ ewarn "Please note that the standard location of the socket has changed from /tmp"
+ ewarn "to /var/run/postgresql and you have to be in the 'postgres' group to access"
+ ewarn "the socket."
+ ewarn "This can break applications which have the standard location hard-coded."
+ ewarn "If such an application links against the libpq, please re-emerge it,"
+ ewarn "if that doesn't help or the application accesses the socket without using libpq,"
+ ewarn "please file a bug-report."
+ ewarn "You can set PGOPTS='-k /tmp' in /etc/conf.d/postgresql-${SLOT} to restore the original location."
+
+ elog "Execute the following command to setup the initial database environment:"
+ elog
+ elog "emerge --config =${CATEGORY}/${PF}"
+ elog
+}
+
+pkg_postrm() {
+ eselect postgresql update
+}
+
+pkg_config() {
+ [[ -z "${PGDATA}" ]] && PGDATA="/var/lib/postgresql/${SLOT}/data"
+
+ einfo "You can pass options to initdb by setting the PG_INITDB_OPTS variable."
+ einfo "More information can be found here:"
+ einfo " http://www.postgresql.org/docs/${SLOT}/static/creating-cluster.html"
+ einfo " http://www.postgresql.org/docs/${SLOT}/static/app-initdb.html"
+ einfo "Simply add the options you would have added to initdb to the PG_INITDB_OPTS variable."
+ einfo
+ einfo "You can change the directory where the database cluster is being created by setting"
+ einfo "the PGDATA variable."
+ einfo
+ einfo "PG_INITDB_OPTS is currently set to:"
+ einfo " \"${PG_INITDB_OPTS}\""
+ einfo "and the database cluster will be created in:"
+ einfo " \"${PGDATA}\""
+ einfo "Are you ready to continue? (Y/n)"
+ read answer
+ [ -z $answer ] && answer=Y
+ [ "$answer" == "Y" ] || [ "$answer" == "y" ] || die "aborted"
+
+ if [[ -f "${PGDATA}/PG_VERSION" ]] ; then
+ eerror "The given directory \"${PGDATA}\" already contains a database cluster."
+ die "cluster already exists"
+ fi
+
+ [ -z "${PG_MAX_CONNECTIONS}" ] && PG_MAX_CONNECTIONS="128"
+ einfo "Checking system parameters..."
+
+ if ! use kernel_linux ; then
+ SKIP_SYSTEM_TESTS=yes
+ einfo " Tests not supported on this OS (yet)"
+ fi
+
+ if [ -z ${SKIP_SYSTEM_TESTS} ] ; then
+ einfo "Checking whether your system supports at least ${PG_MAX_CONNECTIONS} connections..."
+
+ local SEMMSL=$(sysctl -n kernel.sem | cut -f1)
+ local SEMMNS=$(sysctl -n kernel.sem | cut -f2)
+ local SEMMNI=$(sysctl -n kernel.sem | cut -f4)
+ local SHMMAX=$(sysctl -n kernel.shmmax)
+
+ local SEMMSL_MIN=17
+ local SEMMNS_MIN=$(( ( ${PG_MAX_CONNECTIONS}/16 ) * 17 ))
+ local SEMMNI_MIN=$(( ( ${PG_MAX_CONNECTIONS}+15 ) / 16 ))
+ local SHMMAX_MIN=$(( 500000 + ( 30600 * ${PG_MAX_CONNECTIONS} ) ))
+
+ for p in SEMMSL SEMMNS SEMMNI SHMMAX ; do
+ if [ $(eval echo \$$p) -lt $(eval echo \$${p}_MIN) ] ; then
+ eerror "The value for ${p} $(eval echo \$$p) is below the recommended value $(eval echo \$${p}_MIN)"
+ eerror "You have now several options:"
+ eerror " - Change the mentioned system parameter"
+ eerror " - Lower the number of max.connections by setting PG_MAX_CONNECTIONS to a value lower than ${PG_MAX_CONNECTIONS}"
+ eerror " - Set SKIP_SYSTEM_TESTS in case you want to ignore this test completely"
+ eerror "More information can be found here:"
+ eerror " http://www.postgresql.org/docs/${SLOT}/static/kernel-resources.html"
+ die "system test failed"
+ fi
+ done
+ einfo "Passed."
+ else
+ einfo "Skipped."
+ fi
+
+ einfo "Creating the data directory ..."
+ mkdir -p "${PGDATA}"
+ chown -Rf postgres:postgres "${PGDATA}"
+ chmod 0700 "${PGDATA}"
+
+ einfo "Initializing the database ..."
+
+ su postgres -c "/usr/$(get_libdir)/postgresql-${SLOT}/bin/initdb --pgdata \"${PGDATA}\" ${PG_INITDB_OPTS}"
+
+ einfo
+ einfo "You can use the '${ROOT}/etc/init.d/postgresql-${SLOT}' script to run PostgreSQL instead of 'pg_ctl'."
+ einfo
+
+ if [ "${PGDATA}" != "/var/lib/postgresql/${SLOT}/data" ] ; then
+ ewarn "You didn't install the database cluster in the standard location, please make sure that you set"
+ ewarn "PGDATA=\"${PGDATA}\" in the appropriate conf.d file (probably /etc/conf.d/postgresql-${SLOT})"
+ fi
+}
+
+src_test() {
+ sed -i \
+ -e '/test: horology/d' \
+ src/test/regress/{parallel_schedule,serial_schedule} || die "sed failed"
+
+ einfo ">>> Test phase [check]: ${CATEGORY}/${PF}"
+ PATH="/usr/$(get_libdir)/postgresql-${SLOT}/bin:${PATH}" \
+ emake -j1 check \
+ PGXS=$(/usr/$(get_libdir)/postgresql-${SLOT}/bin/pg_config --pgxs) \
+ NO_PGXS=0 USE_PGXS=1 SLOT=${SLOT} || die "Make check failed. See above for details."
+
+ einfo "Yes, there are other tests which could be run."
+ einfo "... and no, we don't plan to add/support them."
+ einfo "For now, the main regressions tests will suffice."
+ einfo "If you think other tests are necessary, please submit a"
+ einfo "bug including a patch for this ebuild to enable them."
+}
diff --git a/dev-db/postgresql-server/postgresql-server-8.1.13.ebuild b/dev-db/postgresql-server/postgresql-server-8.1.13.ebuild
new file mode 100644
index 000000000000..8e4f4a3e6ac6
--- /dev/null
+++ b/dev-db/postgresql-server/postgresql-server-8.1.13.ebuild
@@ -0,0 +1,239 @@
+# Copyright 1999-2008 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/dev-db/postgresql-server/postgresql-server-8.1.13.ebuild,v 1.1 2008/06/14 11:49:54 dev-zero Exp $
+
+EAPI="1"
+
+WANT_AUTOCONF="latest"
+WANT_AUTOMAKE="none"
+inherit eutils multilib toolchain-funcs versionator autotools
+
+KEYWORDS="~amd64 ~x86"
+
+DESCRIPTION="PostgreSQL server"
+HOMEPAGE="http://www.postgresql.org/"
+SRC_URI="mirror://postgresql/source/v${PV}/postgresql-${PV}.tar.bz2"
+LICENSE="POSTGRESQL"
+SLOT="$(get_version_component_range 1-2)"
+IUSE_LINGUAS="
+ linguas_af linguas_cs linguas_de linguas_es linguas_fa linguas_fr
+ linguas_hr linguas_hu linguas_it linguas_ko linguas_nb linguas_pl
+ linguas_pt_BR linguas_ro linguas_ru linguas_sk linguas_sl linguas_sv
+ linguas_tr linguas_zh_CN linguas_zh_TW"
+IUSE="doc perl python selinux tcl xml nls kernel_linux ${IUSE_LINGUAS}"
+
+wanted_languages() {
+ for u in ${IUSE_LINGUAS} ; do
+ use $u && echo -n "${u#linguas_} "
+ done
+}
+
+RDEPEND="~dev-db/postgresql-base-${PV}:${SLOT}
+ perl? ( >=dev-lang/perl-5.6.1-r2 )
+ python? ( >=dev-lang/python-2.2 dev-python/egenix-mx-base )
+ selinux? ( sec-policy/selinux-postgresql )
+ tcl? ( >=dev-lang/tcl-8 )
+ xml? ( dev-libs/libxml2 dev-libs/libxslt )"
+DEPEND="${RDEPEND}
+ sys-devel/flex
+ xml? ( dev-util/pkgconfig )"
+PDEPEND="doc? ( dev-db/postgresql-docs:${SLOT} )"
+
+S="${WORKDIR}/postgresql-${PV}"
+
+pkg_setup() {
+ enewgroup postgres 70
+ enewuser postgres 70 /bin/bash /var/lib/postgresql postgres
+}
+
+src_unpack() {
+ unpack ${A}
+ cd "${S}"
+
+ epatch "${FILESDIR}/postgresql-${SLOT}-common.patch" \
+ "${FILESDIR}/postgresql-${SLOT}-server.patch"
+
+ if hasq test ${FEATURES}; then
+ sed -e "s|/no/such/location|${S}/src/test/regress/tmp_check/no/such/location|g" -i src/test/regress/{input,output}/tablespace.source
+ fi
+
+ eautoconf
+}
+
+src_compile() {
+ # TODO: test if PPC really cannot work with other CFLAGS settings
+ # use ppc && CFLAGS="-pipe -fsigned-char"
+
+ # eval is needed to get along with pg_config quotation of space-rich entities.
+ eval econf "$(/usr/$(get_libdir)/postgresql-${SLOT}/bin/pg_config --configure)" \
+ $(use_with perl) \
+ $(use_with python) \
+ $(use_with tcl) \
+ --with-includes="/usr/include/postgresql-${SLOT}/" \
+ "$(built_with_use ~dev-db/postgresql-base-${PV} nls && use_enable nls nls "$(wanted_languages)")" \
+ || die "configure failed"
+
+ for bd in . contrib $(use xml && echo contrib/xml2) ; do
+ PATH="/usr/$(get_libdir)/postgresql-${SLOT}/bin:${PATH}" \
+ emake -C $bd -j1 LD="$(tc-getLD) $(get_abi_LDFLAGS)" \
+ PGXS=$(/usr/$(get_libdir)/postgresql-${SLOT}/bin/pg_config --pgxs) \
+ NO_PGXS=0 USE_PGXS=1 docdir=/usr/share/doc/${PF} || die "emake in $bd failed"
+ done
+}
+
+src_install() {
+ if use perl ; then
+ mv -f "${S}/src/pl/plperl/GNUmakefile" "${S}/src/pl/plperl/GNUmakefile_orig"
+ sed -e "s:\$(DESTDIR)\$(plperl_installdir):\$(plperl_installdir):" \
+ "${S}/src/pl/plperl/GNUmakefile_orig" > "${S}/src/pl/plperl/GNUmakefile"
+ fi
+
+ for bd in . contrib $(use xml && echo contrib/xml2) ; do
+ PATH="/usr/$(get_libdir)/postgresql-${SLOT}/bin:${PATH}" \
+ emake install -C $bd -j1 DESTDIR="${D}" \
+ PGXS=$(/usr/$(get_libdir)/postgresql-${SLOT}/bin/pg_config --pgxs) \
+ NO_PGXS=0 USE_PGXS=1 docdir=/usr/share/doc/${PF} || die "emake install in $bd failed"
+ done
+
+ rm -rf "${D}/usr/share/postgresql-${SLOT}/man/man7/" "${D}/usr/share/doc/${PF}/html"
+ rm "${D}"/usr/share/postgresql-${SLOT}/man/man1/{clusterdb,create{db,lang,user},drop{db,lang,user},ecpg,pg_{config,dump,dumpall,restore},psql,reindexdb,vacuumdb}.1
+
+ dodoc README HISTORY doc/{README.*,TODO,bug.template}
+
+ dodir /etc/eselect/postgresql/slots/${SLOT}
+ cat >"${D}/etc/eselect/postgresql/slots/${SLOT}/service" <<-__EOF__
+ postgres_ebuilds="\${postgres_ebuilds} ${PF}"
+ postgres_service="postgresql-${SLOT}"
+ __EOF__
+
+ newinitd "${FILESDIR}/postgresql.init-${SLOT}" postgresql-${SLOT} || die "Inserting init.d-file failed"
+ newconfd "${FILESDIR}/postgresql.conf-${SLOT}" postgresql-${SLOT} || die "Inserting conf.d-file failed"
+
+ keepdir /var/run/postgresql
+ fperms 0770 /var/run/postgresql
+ fowners postgres:postgres /var/run/postgresql
+}
+
+pkg_postinst() {
+ eselect postgresql update
+ [[ "$(eselect postgresql show)" = "(none)" ]] && eselect postgresql set ${SLOT}
+ [[ "$(eselect postgresql show-service)" = "(none)" ]] && eselect postgresql set-service ${SLOT}
+
+ ewarn "Please note that the standard location of the socket has changed from /tmp"
+ ewarn "to /var/run/postgresql and you have to be in the 'postgres' group to access"
+ ewarn "the socket."
+ ewarn "This can break applications which have the standard location hard-coded."
+ ewarn "If such an application links against the libpq, please re-emerge it,"
+ ewarn "if that doesn't help or the application accesses the socket without using libpq,"
+ ewarn "please file a bug-report."
+ ewarn "You can set PGOPTS='-k /tmp' in /etc/conf.d/postgresql-${SLOT} to restore the original location."
+
+ elog "Execute the following command to setup the initial database environment:"
+ elog
+ elog "emerge --config =${CATEGORY}/${PF}"
+ elog
+ elog "The autovacuum function, which was in contrib, has been moved to the main"
+ elog "PostgreSQL functions starting with 8.1."
+ elog "You can enable it in the clusters postgresql.conf."
+}
+
+pkg_postrm() {
+ eselect postgresql update
+}
+
+pkg_config() {
+ [[ -z "${PGDATA}" ]] && PGDATA="/var/lib/postgresql/${SLOT}/data"
+
+ einfo "You can pass options to initdb by setting the PG_INITDB_OPTS variable."
+ einfo "More information can be found here:"
+ einfo " http://www.postgresql.org/docs/${SLOT}/static/creating-cluster.html"
+ einfo " http://www.postgresql.org/docs/${SLOT}/static/app-initdb.html"
+ einfo "Simply add the options you would have added to initdb to the PG_INITDB_OPTS variable."
+ einfo
+ einfo "You can change the directory where the database cluster is being created by setting"
+ einfo "the PGDATA variable."
+ einfo
+ einfo "PG_INITDB_OPTS is currently set to:"
+ einfo " \"${PG_INITDB_OPTS}\""
+ einfo "and the database cluster will be created in:"
+ einfo " \"${PGDATA}\""
+ einfo "Are you ready to continue? (Y/n)"
+ read answer
+ [ -z $answer ] && answer=Y
+ [ "$answer" == "Y" ] || [ "$answer" == "y" ] || die "aborted"
+
+ if [[ -f "${PGDATA}/PG_VERSION" ]] ; then
+ eerror "The given directory \"${PGDATA}\" already contains a database cluster."
+ die "cluster already exists"
+ fi
+
+ [ -z "${PG_MAX_CONNECTIONS}" ] && PG_MAX_CONNECTIONS="128"
+ einfo "Checking system parameters..."
+
+ if ! use kernel_linux ; then
+ SKIP_SYSTEM_TESTS=yes
+ einfo " Tests not supported on this OS (yet)"
+ fi
+
+ if [ -z ${SKIP_SYSTEM_TESTS} ] ; then
+ einfo "Checking whether your system supports at least ${PG_MAX_CONNECTIONS} connections..."
+
+ local SEMMSL=$(sysctl -n kernel.sem | cut -f1)
+ local SEMMNS=$(sysctl -n kernel.sem | cut -f2)
+ local SEMMNI=$(sysctl -n kernel.sem | cut -f4)
+ local SHMMAX=$(sysctl -n kernel.shmmax)
+
+ local SEMMSL_MIN=17
+ local SEMMNS_MIN=$(( ( ${PG_MAX_CONNECTIONS}/16 ) * 17 ))
+ local SEMMNI_MIN=$(( ( ${PG_MAX_CONNECTIONS}+15 ) / 16 ))
+ local SHMMAX_MIN=$(( 500000 + ( 30600 * ${PG_MAX_CONNECTIONS} ) ))
+
+ for p in SEMMSL SEMMNS SEMMNI SHMMAX ; do
+ if [ $(eval echo \$$p) -lt $(eval echo \$${p}_MIN) ] ; then
+ eerror "The value for ${p} $(eval echo \$$p) is below the recommended value $(eval echo \$${p}_MIN)"
+ eerror "You have now several options:"
+ eerror " - Change the mentioned system parameter"
+ eerror " - Lower the number of max.connections by setting PG_MAX_CONNECTIONS to a value lower than ${PG_MAX_CONNECTIONS}"
+ eerror " - Set SKIP_SYSTEM_TESTS in case you want to ignore this test completely"
+ eerror "More information can be found here:"
+ eerror " http://www.postgresql.org/docs/${SLOT}/static/kernel-resources.html"
+ die "system test failed"
+ fi
+ done
+ einfo "Passed."
+ else
+ einfo "Skipped."
+ fi
+
+ einfo "Creating the data directory ..."
+ mkdir -p "${PGDATA}"
+ chown -Rf postgres:postgres "${PGDATA}"
+ chmod 0700 "${PGDATA}"
+
+ einfo "Initializing the database ..."
+
+ su postgres -c "/usr/$(get_libdir)/postgresql-${SLOT}/bin/initdb --pgdata \"${PGDATA}\" ${PG_INITDB_OPTS}"
+
+ einfo
+ einfo "You can use the '${ROOT}/etc/init.d/postgresql-${SLOT}' script to run PostgreSQL instead of 'pg_ctl'."
+ einfo
+
+ if [ "${PGDATA}" != "/var/lib/postgresql/${SLOT}/data" ] ; then
+ ewarn "You didn't install the database cluster in the standard location, please make sure that you set"
+ ewarn "PGDATA=\"${PGDATA}\" in the appropriate conf.d file (probably /etc/conf.d/postgresql-${SLOT})"
+ fi
+}
+
+src_test() {
+ einfo ">>> Test phase [check]: ${CATEGORY}/${PF}"
+ PATH="/usr/$(get_libdir)/postgresql-${SLOT}/bin:${PATH}" \
+ emake -j1 check \
+ PGXS=$(/usr/$(get_libdir)/postgresql-${SLOT}/bin/pg_config --pgxs) \
+ NO_PGXS=0 USE_PGXS=1 SLOT=${SLOT} || die "Make check failed. See above for details."
+
+ einfo "Yes, there are other tests which could be run."
+ einfo "... and no, we don't plan to add/support them."
+ einfo "For now, the main regressions tests will suffice."
+ einfo "If you think other tests are necessary, please submit a"
+ einfo "bug including a patch for this ebuild to enable them."
+}
diff --git a/dev-db/postgresql-server/postgresql-server-8.2.7.ebuild b/dev-db/postgresql-server/postgresql-server-8.2.7.ebuild
index c72519b78ee3..bb1c12c8cc78 100644
--- a/dev-db/postgresql-server/postgresql-server-8.2.7.ebuild
+++ b/dev-db/postgresql-server/postgresql-server-8.2.7.ebuild
@@ -1,6 +1,6 @@
# Copyright 1999-2008 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo-x86/dev-db/postgresql-server/postgresql-server-8.2.7.ebuild,v 1.3 2008/06/04 21:44:07 dev-zero Exp $
+# $Header: /var/cvsroot/gentoo-x86/dev-db/postgresql-server/postgresql-server-8.2.7.ebuild,v 1.4 2008/06/14 11:49:54 dev-zero Exp $
EAPI="1"
@@ -113,8 +113,7 @@ src_install() {
newinitd "${FILESDIR}/postgresql.init-${SLOT}" postgresql-${SLOT} || die "Inserting init.d-file failed"
newconfd "${FILESDIR}/postgresql.conf-${SLOT}" postgresql-${SLOT} || die "Inserting conf.d-file failed"
- # Workaround for paludis
- [ -f "${ROOT}/var/run/postgresql/.keep" ] || keepdir /var/run/postgresql
+ keepdir /var/run/postgresql
fperms 0770 /var/run/postgresql
fowners postgres:postgres /var/run/postgresql
}
diff --git a/dev-db/postgresql-server/postgresql-server-8.2.9.ebuild b/dev-db/postgresql-server/postgresql-server-8.2.9.ebuild
new file mode 100644
index 000000000000..3665f98b0d9c
--- /dev/null
+++ b/dev-db/postgresql-server/postgresql-server-8.2.9.ebuild
@@ -0,0 +1,245 @@
+# Copyright 1999-2008 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/dev-db/postgresql-server/postgresql-server-8.2.9.ebuild,v 1.1 2008/06/14 11:49:54 dev-zero Exp $
+
+EAPI="1"
+
+WANT_AUTOCONF="latest"
+WANT_AUTOMAKE="none"
+inherit eutils multilib toolchain-funcs versionator autotools
+
+KEYWORDS="~amd64 ~x86"
+
+DESCRIPTION="PostgreSQL server"
+HOMEPAGE="http://www.postgresql.org/"
+SRC_URI="mirror://postgresql/source/v${PV}/postgresql-${PV}.tar.bz2"
+LICENSE="POSTGRESQL"
+SLOT="$(get_version_component_range 1-2)"
+IUSE_LINGUAS="
+ linguas_af linguas_cs linguas_de linguas_es linguas_fa linguas_fr
+ linguas_hr linguas_hu linguas_it linguas_ko linguas_nb linguas_pl
+ linguas_pt_BR linguas_ro linguas_ru linguas_sk linguas_sl linguas_sv
+ linguas_tr linguas_zh_CN linguas_zh_TW"
+IUSE="doc perl python selinux tcl xml nls kernel_linux ${IUSE_LINGUAS}"
+
+wanted_languages() {
+ for u in ${IUSE_LINGUAS} ; do
+ use $u && echo -n "${u#linguas_} "
+ done
+}
+
+RDEPEND="~dev-db/postgresql-base-${PV}:${SLOT}
+ perl? ( >=dev-lang/perl-5.6.1-r2 )
+ python? ( >=dev-lang/python-2.2 dev-python/egenix-mx-base )
+ selinux? ( sec-policy/selinux-postgresql )
+ tcl? ( >=dev-lang/tcl-8 )
+ xml? ( dev-libs/libxml2 dev-libs/libxslt )"
+DEPEND="${RDEPEND}
+ sys-devel/flex
+ xml? ( dev-util/pkgconfig )"
+PDEPEND="doc? ( dev-db/postgresql-docs:${SLOT} )"
+
+S="${WORKDIR}/postgresql-${PV}"
+
+pkg_setup() {
+ enewgroup postgres 70
+ enewuser postgres 70 /bin/bash /var/lib/postgresql postgres
+}
+
+src_unpack() {
+ unpack ${A}
+ cd "${S}"
+
+ epatch "${FILESDIR}/postgresql-${SLOT}-common.patch" \
+ "${FILESDIR}/postgresql-${SLOT}-server.patch"
+
+ if hasq test ${FEATURES}; then
+ sed -e "s|/no/such/location|${S}/src/test/regress/tmp_check/no/such/location|g" -i src/test/regress/{input,output}/tablespace.source
+ else
+ echo "all install:" > "${S}/src/test/regress/GNUmakefile"
+ fi
+
+ eautoconf
+}
+
+src_compile() {
+ # TODO: test if PPC really cannot work with other CFLAGS settings
+ # use ppc && CFLAGS="-pipe -fsigned-char"
+
+ # eval is needed to get along with pg_config quotation of space-rich entities.
+ eval econf "$(/usr/$(get_libdir)/postgresql-${SLOT}/bin/pg_config --configure)" \
+ --disable-thread-safety \
+ $(use_with perl) \
+ $(use_with python) \
+ $(use_with tcl) \
+ --with-includes="/usr/include/postgresql-${SLOT}/" \
+ "$(built_with_use ~dev-db/postgresql-base-${PV} nls && use_enable nls nls "$(wanted_languages)")" \
+ || die "configure failed"
+
+ for bd in . contrib $(use xml && echo contrib/xml2); do
+ PATH="/usr/$(get_libdir)/postgresql-${SLOT}/bin:${PATH}" \
+ emake -C $bd -j1 LD="$(tc-getLD) $(get_abi_LDFLAGS)" \
+ PGXS=$(/usr/$(get_libdir)/postgresql-${SLOT}/bin/pg_config --pgxs) \
+ PGXS_IN_SERVER=1 PGXS_WITH_SERVER="${S}/src/backend/postgres" \
+ NO_PGXS=0 USE_PGXS=1 docdir=/usr/share/doc/${PF} || die "emake in $bd failed"
+ done
+}
+
+src_install() {
+ if use perl ; then
+ mv -f "${S}/src/pl/plperl/GNUmakefile" "${S}/src/pl/plperl/GNUmakefile_orig"
+ sed -e "s:\$(DESTDIR)\$(plperl_installdir):\$(plperl_installdir):" \
+ "${S}/src/pl/plperl/GNUmakefile_orig" > "${S}/src/pl/plperl/GNUmakefile"
+ fi
+
+ for bd in . contrib $(use xml && echo contrib/xml2) ; do
+ PATH="/usr/$(get_libdir)/postgresql-${SLOT}/bin:${PATH}" \
+ emake install -C $bd -j1 DESTDIR="${D}" \
+ PGXS_IN_SERVER=1 PGXS_WITH_SERVER="${S}/src/backend/postgres" \
+ PGXS=$(/usr/$(get_libdir)/postgresql-${SLOT}/bin/pg_config --pgxs) \
+ NO_PGXS=0 USE_PGXS=1 docdir=/usr/share/doc/${PF} || die "emake install in $bd failed"
+ done
+
+ rm -rf "${D}/usr/share/postgresql-${SLOT}/man/man7/" "${D}/usr/share/doc/${PF}/html"
+ rm "${D}"/usr/share/postgresql-${SLOT}/man/man1/{clusterdb,create{db,lang,user},drop{db,lang,user},ecpg,pg_{config,dump,dumpall,restore},psql,reindexdb,vacuumdb}.1
+
+ dodoc README HISTORY doc/{README.*,TODO,bug.template}
+
+ dodir /etc/eselect/postgresql/slots/${SLOT}
+ cat >"${D}/etc/eselect/postgresql/slots/${SLOT}/service" <<-__EOF__
+ postgres_ebuilds="\${postgres_ebuilds} ${PF}"
+ postgres_service="postgresql-${SLOT}"
+ __EOF__
+
+ newinitd "${FILESDIR}/postgresql.init-${SLOT}" postgresql-${SLOT} || die "Inserting init.d-file failed"
+ newconfd "${FILESDIR}/postgresql.conf-${SLOT}" postgresql-${SLOT} || die "Inserting conf.d-file failed"
+
+ # Workaround for paludis
+ [ -f "${ROOT}/var/run/postgresql/.keep" ] || keepdir /var/run/postgresql
+ fperms 0770 /var/run/postgresql
+ fowners postgres:postgres /var/run/postgresql
+}
+
+pkg_postinst() {
+ eselect postgresql update
+ [[ "$(eselect postgresql show)" = "(none)" ]] && eselect postgresql set ${SLOT}
+ [[ "$(eselect postgresql show-service)" = "(none)" ]] && eselect postgresql set-service ${SLOT}
+
+ ewarn "Please note that the standard location of the socket has changed from /tmp"
+ ewarn "to /var/run/postgresql and you have to be in the 'postgres' group to access"
+ ewarn "the socket."
+ ewarn "This can break applications which have the standard location hard-coded."
+ ewarn "If such an application links against the libpq, please re-emerge it,"
+ ewarn "if that doesn't help or the application accesses the socket without using libpq,"
+ ewarn "please file a bug-report."
+ ewarn "You can set PGOPTS='-k /tmp' in /etc/conf.d/postgresql-${SLOT} to restore the original location."
+
+ elog "Execute the following command to setup the initial database environment:"
+ elog
+ elog "emerge --config =${CATEGORY}/${PF}"
+ elog
+ elog "The autovacuum function, which was in contrib, has been moved to the main"
+ elog "PostgreSQL functions starting with 8.1."
+ elog "You can enable it in the clusters postgresql.conf."
+}
+
+pkg_postrm() {
+ eselect postgresql update
+}
+
+pkg_config() {
+ [[ -z "${PGDATA}" ]] && PGDATA="/var/lib/postgresql/${SLOT}/data"
+
+ einfo "You can pass options to initdb by setting the PG_INITDB_OPTS variable."
+ einfo "More information can be found here:"
+ einfo " http://www.postgresql.org/docs/${SLOT}/static/creating-cluster.html"
+ einfo " http://www.postgresql.org/docs/${SLOT}/static/app-initdb.html"
+ einfo "Simply add the options you would have added to initdb to the PG_INITDB_OPTS variable."
+ einfo
+ einfo "You can change the directory where the database cluster is being created by setting"
+ einfo "the PGDATA variable."
+ einfo
+ einfo "PG_INITDB_OPTS is currently set to:"
+ einfo " \"${PG_INITDB_OPTS}\""
+ einfo "and the database cluster will be created in:"
+ einfo " \"${PGDATA}\""
+ einfo "Are you ready to continue? (Y/n)"
+ read answer
+ [ -z $answer ] && answer=Y
+ [ "$answer" == "Y" ] || [ "$answer" == "y" ] || die "aborted"
+
+ if [[ -f "${PGDATA}/PG_VERSION" ]] ; then
+ eerror "The given directory \"${PGDATA}\" already contains a database cluster."
+ die "cluster already exists"
+ fi
+
+ [ -z "${PG_MAX_CONNECTIONS}" ] && PG_MAX_CONNECTIONS="128"
+ einfo "Checking system parameters..."
+
+ if ! use kernel_linux ; then
+ SKIP_SYSTEM_TESTS=yes
+ einfo " Tests not supported on this OS (yet)"
+ fi
+
+ if [ -z ${SKIP_SYSTEM_TESTS} ] ; then
+ einfo "Checking whether your system supports at least ${PG_MAX_CONNECTIONS} connections..."
+
+ local SEMMSL=$(sysctl -n kernel.sem | cut -f1)
+ local SEMMNS=$(sysctl -n kernel.sem | cut -f2)
+ local SEMMNI=$(sysctl -n kernel.sem | cut -f4)
+ local SHMMAX=$(sysctl -n kernel.shmmax)
+
+ local SEMMSL_MIN=17
+ local SEMMNS_MIN=$(( ( ${PG_MAX_CONNECTIONS}/16 ) * 17 ))
+ local SEMMNI_MIN=$(( ( ${PG_MAX_CONNECTIONS}+15 ) / 16 ))
+ local SHMMAX_MIN=$(( 500000 + ( 30600 * ${PG_MAX_CONNECTIONS} ) ))
+
+ for p in SEMMSL SEMMNS SEMMNI SHMMAX ; do
+ if [ $(eval echo \$$p) -lt $(eval echo \$${p}_MIN) ] ; then
+ eerror "The value for ${p} $(eval echo \$$p) is below the recommended value $(eval echo \$${p}_MIN)"
+ eerror "You have now several options:"
+ eerror " - Change the mentioned system parameter"
+ eerror " - Lower the number of max.connections by setting PG_MAX_CONNECTIONS to a value lower than ${PG_MAX_CONNECTIONS}"
+ eerror " - Set SKIP_SYSTEM_TESTS in case you want to ignore this test completely"
+ eerror "More information can be found here:"
+ eerror " http://www.postgresql.org/docs/${SLOT}/static/kernel-resources.html"
+ die "system test failed"
+ fi
+ done
+ einfo "Passed."
+ else
+ einfo "Skipped."
+ fi
+
+ einfo "Creating the data directory ..."
+ mkdir -p "${PGDATA}"
+ chown -Rf postgres:postgres "${PGDATA}"
+ chmod 0700 "${PGDATA}"
+
+ einfo "Initializing the database ..."
+
+ su postgres -c "/usr/$(get_libdir)/postgresql-${SLOT}/bin/initdb --pgdata \"${PGDATA}\" ${PG_INITDB_OPTS}"
+
+ einfo
+ einfo "You can use the '${ROOT}/etc/init.d/postgresql-${SLOT}' script to run PostgreSQL instead of 'pg_ctl'."
+ einfo
+
+ if [ "${PGDATA}" != "/var/lib/postgresql/${SLOT}/data" ] ; then
+ ewarn "You didn't install the database cluster in the standard location, please make sure that you set"
+ ewarn "PGDATA=\"${PGDATA}\" in the appropriate conf.d file (probably /etc/conf.d/postgresql-${SLOT})"
+ fi
+}
+
+src_test() {
+ einfo ">>> Test phase [check]: ${CATEGORY}/${PF}"
+ PATH="/usr/$(get_libdir)/postgresql-${SLOT}/bin:${PATH}" \
+ emake -j1 check \
+ PGXS=$(/usr/$(get_libdir)/postgresql-${SLOT}/bin/pg_config --pgxs) \
+ NO_PGXS=0 USE_PGXS=1 SLOT=${SLOT} || die "Make check failed. See above for details."
+
+ einfo "Yes, there are other tests which could be run."
+ einfo "... and no, we don't plan to add/support them."
+ einfo "For now, the main regressions tests will suffice."
+ einfo "If you think other tests are necessary, please submit a"
+ einfo "bug including a patch for this ebuild to enable them."
+}
diff --git a/dev-db/postgresql-server/postgresql-server-8.3.1.ebuild b/dev-db/postgresql-server/postgresql-server-8.3.1.ebuild
index ce48f96ad431..c3bcbaf98b7e 100644
--- a/dev-db/postgresql-server/postgresql-server-8.3.1.ebuild
+++ b/dev-db/postgresql-server/postgresql-server-8.3.1.ebuild
@@ -1,6 +1,6 @@
# Copyright 1999-2008 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo-x86/dev-db/postgresql-server/postgresql-server-8.3.1.ebuild,v 1.4 2008/06/04 21:44:07 dev-zero Exp $
+# $Header: /var/cvsroot/gentoo-x86/dev-db/postgresql-server/postgresql-server-8.3.1.ebuild,v 1.5 2008/06/14 11:49:54 dev-zero Exp $
EAPI="1"
@@ -52,7 +52,7 @@ src_unpack() {
cd "${S}"
epatch "${FILESDIR}/postgresql-${SLOT}-common.patch" \
- "${FILESDIR}/postgresql-${SLOT}-server.patch"
+ "${FILESDIR}/postgresql-${SLOT}.1-server.patch"
if hasq test ${FEATURES}; then
sed -e "s|/no/such/location|${S}/src/test/regress/tmp_check/no/such/location|g" -i src/test/regress/{input,output}/tablespace.source
diff --git a/dev-db/postgresql-server/postgresql-server-8.3.3.ebuild b/dev-db/postgresql-server/postgresql-server-8.3.3.ebuild
new file mode 100644
index 000000000000..add04bd25a48
--- /dev/null
+++ b/dev-db/postgresql-server/postgresql-server-8.3.3.ebuild
@@ -0,0 +1,249 @@
+# Copyright 1999-2008 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/dev-db/postgresql-server/postgresql-server-8.3.3.ebuild,v 1.1 2008/06/14 11:49:54 dev-zero Exp $
+
+EAPI="1"
+
+WANT_AUTOCONF="latest"
+WANT_AUTOMAKE="none"
+inherit eutils multilib toolchain-funcs versionator autotools
+
+KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~mips ~ppc ~ppc64 ~sh ~sparc ~x86 ~x86-fbsd"
+
+DESCRIPTION="PostgreSQL server"
+HOMEPAGE="http://www.postgresql.org/"
+SRC_URI="mirror://postgresql/source/v${PV}/postgresql-${PV}.tar.bz2"
+LICENSE="POSTGRESQL"
+SLOT="$(get_version_component_range 1-2)"
+IUSE_LINGUAS="
+ linguas_af linguas_cs linguas_de linguas_es linguas_fa linguas_fr
+ linguas_hr linguas_hu linguas_it linguas_ko linguas_nb linguas_pl
+ linguas_pt_BR linguas_ro linguas_ru linguas_sk linguas_sl linguas_sv
+ linguas_tr linguas_zh_CN linguas_zh_TW"
+IUSE="doc perl python selinux tcl uuid xml nls kernel_linux ${IUSE_LINGUAS}"
+
+wanted_languages() {
+ for u in ${IUSE_LINGUAS} ; do
+ use $u && echo -n "${u#linguas_} "
+ done
+}
+
+RDEPEND="~dev-db/postgresql-base-${PV}:${SLOT}
+ perl? ( >=dev-lang/perl-5.6.1-r2 )
+ python? ( >=dev-lang/python-2.2 dev-python/egenix-mx-base )
+ selinux? ( sec-policy/selinux-postgresql )
+ tcl? ( >=dev-lang/tcl-8 )
+ uuid? ( dev-libs/ossp-uuid )
+ xml? ( dev-libs/libxml2 dev-libs/libxslt )"
+DEPEND="${RDEPEND}
+ sys-devel/flex
+ xml? ( dev-util/pkgconfig )"
+PDEPEND="doc? ( dev-db/postgresql-docs:${SLOT} )"
+
+S="${WORKDIR}/postgresql-${PV}"
+
+pkg_setup() {
+ enewgroup postgres 70
+ enewuser postgres 70 /bin/bash /var/lib/postgresql postgres
+}
+
+src_unpack() {
+ unpack ${A}
+ cd "${S}"
+
+ epatch "${FILESDIR}/postgresql-${SLOT}-common.patch" \
+ "${FILESDIR}/postgresql-${SLOT}-server.patch"
+
+ if hasq test ${FEATURES}; then
+ sed -e "s|/no/such/location|${S}/src/test/regress/tmp_check/no/such/location|g" -i src/test/regress/{input,output}/tablespace.source
+ else
+ echo "all install:" > "${S}/src/test/regress/GNUmakefile"
+ fi
+
+ eautoconf
+}
+
+src_compile() {
+ # TODO: test if PPC really cannot work with other CFLAGS settings
+ # use ppc && CFLAGS="-pipe -fsigned-char"
+
+ # eval is needed to get along with pg_config quotation of space-rich entities.
+ eval econf "$(/usr/$(get_libdir)/postgresql-${SLOT}/bin/pg_config --configure)" \
+ --disable-thread-safety \
+ $(use_with perl) \
+ $(use_with python) \
+ $(use_with tcl) \
+ $(use_with xml libxml) \
+ $(use_with xml libxslt) \
+ $(use_with uuid ossp-uuid) \
+ --with-system-tzdata="/usr/share/zoneinfo" \
+ --with-includes="/usr/include/postgresql-${SLOT}/" \
+ "$(built_with_use ~dev-db/postgresql-base-${PV} nls && use_enable nls nls "$(wanted_languages)")" \
+ || die "configure failed"
+
+ for bd in . contrib $(use xml && echo contrib/xml2); do
+ PATH="/usr/$(get_libdir)/postgresql-${SLOT}/bin:${PATH}" \
+ emake -C $bd -j1 LD="$(tc-getLD) $(get_abi_LDFLAGS)" \
+ PGXS=$(/usr/$(get_libdir)/postgresql-${SLOT}/bin/pg_config --pgxs) \
+ PGXS_IN_SERVER=1 PGXS_WITH_SERVER="${S}/src/backend/postgres" \
+ NO_PGXS=0 USE_PGXS=1 docdir=/usr/share/doc/${PF} || die "emake in $bd failed"
+ done
+}
+
+src_install() {
+ if use perl ; then
+ mv -f "${S}/src/pl/plperl/GNUmakefile" "${S}/src/pl/plperl/GNUmakefile_orig"
+ sed -e "s:\$(DESTDIR)\$(plperl_installdir):\$(plperl_installdir):" \
+ "${S}/src/pl/plperl/GNUmakefile_orig" > "${S}/src/pl/plperl/GNUmakefile"
+ fi
+
+ for bd in . contrib $(use xml && echo contrib/xml2) ; do
+ PATH="/usr/$(get_libdir)/postgresql-${SLOT}/bin:${PATH}" \
+ emake install -C $bd -j1 DESTDIR="${D}" \
+ PGXS_IN_SERVER=1 PGXS_WITH_SERVER="${S}/src/backend/postgres" \
+ PGXS=$(/usr/$(get_libdir)/postgresql-${SLOT}/bin/pg_config --pgxs) \
+ NO_PGXS=0 USE_PGXS=1 docdir=/usr/share/doc/${PF} || die "emake install in $bd failed"
+ done
+
+ rm -rf "${D}/usr/share/postgresql-${SLOT}/man/man7/" "${D}/usr/share/doc/${PF}/html"
+ rm "${D}"/usr/share/postgresql-${SLOT}/man/man1/{clusterdb,create{db,lang,user},drop{db,lang,user},ecpg,pg_{config,dump,dumpall,restore},psql,reindexdb,vacuumdb}.1
+
+ dodoc README HISTORY doc/{README.*,TODO,bug.template}
+
+ dodir /etc/eselect/postgresql/slots/${SLOT}
+ cat >"${D}/etc/eselect/postgresql/slots/${SLOT}/service" <<-__EOF__
+ postgres_ebuilds="\${postgres_ebuilds} ${PF}"
+ postgres_service="postgresql-${SLOT}"
+ __EOF__
+
+ newinitd "${FILESDIR}/postgresql.init-${SLOT}" postgresql-${SLOT} || die "Inserting init.d-file failed"
+ newconfd "${FILESDIR}/postgresql.conf-${SLOT}" postgresql-${SLOT} || die "Inserting conf.d-file failed"
+
+ keepdir /var/run/postgresql
+ fperms 0770 /var/run/postgresql
+ fowners postgres:postgres /var/run/postgresql
+}
+
+pkg_postinst() {
+ eselect postgresql update
+ [[ "$(eselect postgresql show)" = "(none)" ]] && eselect postgresql set ${SLOT}
+ [[ "$(eselect postgresql show-service)" = "(none)" ]] && eselect postgresql set-service ${SLOT}
+
+ ewarn "Please note that the standard location of the socket has changed from /tmp"
+ ewarn "to /var/run/postgresql and you have to be in the 'postgres' group to access"
+ ewarn "the socket."
+ ewarn "This can break applications which have the standard location hard-coded."
+ ewarn "If such an application links against the libpq, please re-emerge it,"
+ ewarn "if that doesn't help or the application accesses the socket without using libpq,"
+ ewarn "please file a bug-report."
+ ewarn "You can set PGOPTS='-k /tmp' in /etc/conf.d/postgresql-${SLOT} to restore the original location."
+
+ elog "Execute the following command to setup the initial database environment:"
+ elog
+ elog "emerge --config =${CATEGORY}/${PF}"
+ elog
+ elog "The autovacuum function, which was in contrib, has been moved to the main"
+ elog "PostgreSQL functions starting with 8.1."
+ elog "You can enable it in the clusters postgresql.conf."
+}
+
+pkg_postrm() {
+ eselect postgresql update
+}
+
+pkg_config() {
+ [[ -z "${PGDATA}" ]] && PGDATA="/var/lib/postgresql/${SLOT}/data"
+
+ einfo "You can pass options to initdb by setting the PG_INITDB_OPTS variable."
+ einfo "More information can be found here:"
+ einfo " http://www.postgresql.org/docs/${SLOT}/static/creating-cluster.html"
+ einfo " http://www.postgresql.org/docs/${SLOT}/static/app-initdb.html"
+ einfo "Simply add the options you would have added to initdb to the PG_INITDB_OPTS variable."
+ einfo
+ einfo "You can change the directory where the database cluster is being created by setting"
+ einfo "the PGDATA variable."
+ einfo
+ einfo "PG_INITDB_OPTS is currently set to:"
+ einfo " \"${PG_INITDB_OPTS}\""
+ einfo "and the database cluster will be created in:"
+ einfo " \"${PGDATA}\""
+ einfo "Are you ready to continue? (Y/n)"
+ read answer
+ [ -z $answer ] && answer=Y
+ [ "$answer" == "Y" ] || [ "$answer" == "y" ] || die "aborted"
+
+ if [[ -f "${PGDATA}/PG_VERSION" ]] ; then
+ eerror "The given directory \"${PGDATA}\" already contains a database cluster."
+ die "cluster already exists"
+ fi
+
+ [ -z "${PG_MAX_CONNECTIONS}" ] && PG_MAX_CONNECTIONS="128"
+ einfo "Checking system parameters..."
+
+ if ! use kernel_linux ; then
+ SKIP_SYSTEM_TESTS=yes
+ einfo " Tests not supported on this OS (yet)"
+ fi
+
+ if [ -z ${SKIP_SYSTEM_TESTS} ] ; then
+ einfo "Checking whether your system supports at least ${PG_MAX_CONNECTIONS} connections..."
+
+ local SEMMSL=$(sysctl -n kernel.sem | cut -f1)
+ local SEMMNS=$(sysctl -n kernel.sem | cut -f2)
+ local SEMMNI=$(sysctl -n kernel.sem | cut -f4)
+ local SHMMAX=$(sysctl -n kernel.shmmax)
+
+ local SEMMSL_MIN=17
+ local SEMMNS_MIN=$(( ( ${PG_MAX_CONNECTIONS}/16 ) * 17 ))
+ local SEMMNI_MIN=$(( ( ${PG_MAX_CONNECTIONS}+15 ) / 16 ))
+ local SHMMAX_MIN=$(( 500000 + ( 30600 * ${PG_MAX_CONNECTIONS} ) ))
+
+ for p in SEMMSL SEMMNS SEMMNI SHMMAX ; do
+ if [ $(eval echo \$$p) -lt $(eval echo \$${p}_MIN) ] ; then
+ eerror "The value for ${p} $(eval echo \$$p) is below the recommended value $(eval echo \$${p}_MIN)"
+ eerror "You have now several options:"
+ eerror " - Change the mentioned system parameter"
+ eerror " - Lower the number of max.connections by setting PG_MAX_CONNECTIONS to a value lower than ${PG_MAX_CONNECTIONS}"
+ eerror " - Set SKIP_SYSTEM_TESTS in case you want to ignore this test completely"
+ eerror "More information can be found here:"
+ eerror " http://www.postgresql.org/docs/${SLOT}/static/kernel-resources.html"
+ die "system test failed"
+ fi
+ done
+ einfo "Passed."
+ else
+ einfo "Skipped."
+ fi
+
+ einfo "Creating the data directory ..."
+ mkdir -p "${PGDATA}"
+ chown -Rf postgres:postgres "${PGDATA}"
+ chmod 0700 "${PGDATA}"
+
+ einfo "Initializing the database ..."
+
+ su postgres -c "/usr/$(get_libdir)/postgresql-${SLOT}/bin/initdb --pgdata \"${PGDATA}\" ${PG_INITDB_OPTS}"
+
+ einfo
+ einfo "You can use the '${ROOT}/etc/init.d/postgresql-${SLOT}' script to run PostgreSQL instead of 'pg_ctl'."
+ einfo
+
+ if [ "${PGDATA}" != "/var/lib/postgresql/${SLOT}/data" ] ; then
+ ewarn "You didn't install the database cluster in the standard location, please make sure that you set"
+ ewarn "PGDATA=\"${PGDATA}\" in the appropriate conf.d file (probably /etc/conf.d/postgresql-${SLOT})"
+ fi
+}
+
+src_test() {
+ einfo ">>> Test phase [check]: ${CATEGORY}/${PF}"
+ PATH="/usr/$(get_libdir)/postgresql-${SLOT}/bin:${PATH}" \
+ emake -j1 check \
+ PGXS=$(/usr/$(get_libdir)/postgresql-${SLOT}/bin/pg_config --pgxs) \
+ NO_PGXS=0 USE_PGXS=1 SLOT=${SLOT} || die "Make check failed. See above for details."
+
+ einfo "Yes, there are other tests which could be run."
+ einfo "... and no, we don't plan to add/support them."
+ einfo "For now, the main regressions tests will suffice."
+ einfo "If you think other tests are necessary, please submit a"
+ einfo "bug including a patch for this ebuild to enable them."
+}