commit:     12c6f169164eec7bcf5595a95a7ba14d1d795699
Author:     Patrick Lauer <patrick <AT> gentoo <DOT> org>
AuthorDate: Thu May 11 20:12:43 2017 +0000
Commit:     Patrick Lauer <patrick <AT> gentoo <DOT> org>
CommitDate: Thu May 11 20:12:43 2017 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=12c6f169

dev-db/postgresql: Bump

Package-Manager: Portage-2.3.5, Repoman-2.3.2

 dev-db/postgresql/Manifest                 |   5 +
 dev-db/postgresql/postgresql-9.2.21.ebuild | 435 ++++++++++++++++++++++++++
 dev-db/postgresql/postgresql-9.3.17.ebuild | 440 ++++++++++++++++++++++++++
 dev-db/postgresql/postgresql-9.4.12.ebuild | 472 ++++++++++++++++++++++++++++
 dev-db/postgresql/postgresql-9.5.7.ebuild  | 478 +++++++++++++++++++++++++++++
 dev-db/postgresql/postgresql-9.6.3.ebuild  | 475 ++++++++++++++++++++++++++++
 6 files changed, 2305 insertions(+)

diff --git a/dev-db/postgresql/Manifest b/dev-db/postgresql/Manifest
index ababa014e64..2058e113e42 100644
--- a/dev-db/postgresql/Manifest
+++ b/dev-db/postgresql/Manifest
@@ -1,11 +1,16 @@
 DIST postgresql-9.1.24.tar.bz2 15863767 SHA256 
de0d84e9f32af145fcd66d8d324f6ef1a0b17944ea344b7bbe9d99fff68ae5d3 SHA512 
a9ad0d62846598afee317eeda83406b5f85a658bfe7eb78aff6c59c904223dd165adbd5870598b74aa0e012878489f0c285e6ac7b07ebddf3cf8d81ba70bea7e
 WHIRLPOOL 
f58d79df5562c3fc22dae96ba064e19a4c83f42358911575f854cb2e062457f9331547cb19f9970003a2e15b7e8c609b9aab2a1e17099a446c89786581ccb13b
 DIST postgresql-9.2.19.tar.bz2 16466698 SHA256 
1d29d73a4f590fcc348280f13ac2ff6a0f72c94908c54e3c20b7ab1560e8dbad SHA512 
d3b4c5578bf6d6580028e775bff81a921258cb53b6b06567d96a352d14f3b63063adb480b2f5e2029baf8a034e14b5cd75eebc04f1ed7b16c849e1a5ec1f4867
 WHIRLPOOL 
c13b45fd7aee08ea472557c9f40d79c45abd572fefcc215002b562b8046b1937bf522f6f7f6e280ff1e434c9698734cda9f1c3dacd3c8fee5f33dad0da21f75f
 DIST postgresql-9.2.20.tar.bz2 16480653 SHA256 
0b8abdae8400cabea5587a726003c9dd71c73c049bdae523abc35f9312dd8f26 SHA512 
16f7861e0372481dbc5c69ac977bab46f592045f32951a245f3677121261640fcc169a75e730d592e36c15c9a120e7d06755550bdabf121ad89d76a17535d0f9
 WHIRLPOOL 
af5005564056185fa240fd97bec862738f9951bb57082485beba3eacf5d8bf709c58d01f8bde656a391eee173d592d9cf792be87de04a09869aa3d82c8719320
+DIST postgresql-9.2.21.tar.bz2 16508040 SHA256 
0697e843523ee60c563f987f9c65bc4201294b18525d6e5e4b2c50c6d4058ef9 SHA512 
c548cd1ba34ad71dd3f1acde5775ba2e71121f004324fac44dbe123a91d599ced0f1b8be675ed07b77712e8c23f376ff6221349385c19a88c4edbbb186f17861
 WHIRLPOOL 
c46fd4909e2d534b98c8a97f0f5410ab40285c118517a36ee73d0e1234483144d1f58785a59df53fdbfab7c2876a60d000bf574dff0be3030f8c909509b1bfe6
 DIST postgresql-9.3.15.tar.bz2 17059932 SHA256 
a9fcba1446a93aa95e3e1b6535756f0472d10b0f267a0845f8b2b29f89de5c4f SHA512 
35c30cdb5599f99c94ab921f9f5e7671a8c0b7bca8fe3b616630ae13d6eda8d329e77e7e802da6a83cb09c3c9ca10fa8ce0de8a184e6fff471130e1cd68ce762
 WHIRLPOOL 
7a627b2da1dc3671df7edfe58420f81ce24202c1251225054674d79e431bc36e1a70c84aaacb76c59e9eefb26429cbbb9ea80c45a989e3564b69e334d3dd4d84
 DIST postgresql-9.3.16.tar.bz2 17108969 SHA256 
845f5e4ac8cf026b6a77c5a180a2fe869f51e9d06acf8d0365b05505a2c66873 SHA512 
2e379aca5db79ab5795e6f1e4ff8b21b1aa284cfb0d34655430d8b959cebac7982ee6eda66833a1fb208a36a51251c946565982cd5dff619ab334603ded530e7
 WHIRLPOOL 
fea45fb6563fc4c56a1853baf83bbdd59991871176aa00a4fcdda5e95a9277d187ddd2fc5d0c3c76f090e7a359d2d5af140e8af3f6a964897beb41ef8435483e
+DIST postgresql-9.3.17.tar.bz2 17158802 SHA256 
9c03e5f280cfe9bd202fa01af773eb146abd8ab3065f7279d574c568f6948dbe SHA512 
4b6fc079c2bb728b13b72eb2f7d92183ffb1a9b32110d99dfce674032ac499963b75a021265ba08dc95c34ae35a7edac65ef1e658e66ee2da41c1ce646a702dc
 WHIRLPOOL 
f573aaa6acf6d542ed647f392bdb42cd60f650e66174c603f0344d64e2962f2fbb46f0233226188ee9a3a75b2de6532738aac28876bd097556eb4f6c0de21667
 DIST postgresql-9.4.10.tar.bz2 17802812 SHA256 
7061678bed1981c681ce54c76b98b6ec17743f090a9775104a45e7e1a8826ecf SHA512 
2fcf47769b22c69bc82c9d6edc317e18dfcb4a96534e012bae4355e5088afa83da98b21e08a07766794f0a166888acbd16705a806464ea11711ed97c3b4012fb
 WHIRLPOOL 
e6ed3c209043cbbacb0698e1be367f20028d649d4cff62b5d6edd162c6ad629a3ec5f55854bd12334a3d3165462fecb34188bd62cd398cfc242a3579810b5b85
 DIST postgresql-9.4.11.tar.bz2 17832915 SHA256 
e3eb51d045c180b03d2de1f0c3af9356e10be49448e966ca01dfc2c6d1cc9d23 SHA512 
a3ed866d82ab4b90c2a7ec2abec0308015845947f42b76e420cce8f268e1c374806a9fab00ba0563d742a53014a30fa0eaa90804a09fd162b76fcbfbeff6b70f
 WHIRLPOOL 
cb53a9e1ee518b43c8be135e3b09005314c8dd108eacd37e6a5be45b2391b31a4acf8427c7aac86524f0ef0e264b46329c97aa5b01e6c4d0b63cd6f7e081697c
+DIST postgresql-9.4.12.tar.bz2 17833119 SHA256 
fca055481875d1c49e31c28443f56472a1474b3fbe25b7ae64440c6118f82e64 SHA512 
69951f9e66069aad1049a0ea9fdcd7bf2f84b42e7c6e0f761d78ab22131a39cf56448ef0ddc28170b66970bf53edf2d2355530fcfc0a2dca92b66d69686b7ecb
 WHIRLPOOL 
ca023aab29d7993e236c52df58d6fae6f9bd1649cf20f1e1b118ff232dc41674001d3dc9bc945e3f9dd61779dde27cb93265b89d3615e47f49ea46751d8e97c3
 DIST postgresql-9.5.5.tar.bz2 18525082 SHA256 
02c65290be74de6604c3fed87c9fd3e6b32e949f0ab8105a75bd7ed5aa71f394 SHA512 
727ab57796cd393ec3755e9aabf515ebbdc3152b4062c20e64511e866a7e7038ba5c5e2843f13f3a79e2263296451f0e93108346b6f638611fba2449394e338e
 WHIRLPOOL 
ec5262fd8cecea20fd12bcec8e6e015817ae8181d9e9ff6d8aca6ed43cadedac1bd5006c3d04262b99b9a79aa02c409920ab3392136f3ff3dc480fe1155cade8
 DIST postgresql-9.5.6.tar.bz2 18598551 SHA256 
bb9e5f6d34e20783e96e10c1d6c0c09c31749e802aaa46b793ce2522725ae12f SHA512 
fabaeb2d4841ca2f2fd7b0f9c90368debc91f569ade5ad4dc9250c27d790a97ed58a670319f0fe59404fce7e986e8dafb1408edbe6fc149531bdb230b1b913fe
 WHIRLPOOL 
257aa2d2a71b12b13da958563197b9bd0acc6c4a0d3b96787ad2d202414d074629f4b39c8291cae4770b2d867a4b331214f404eaef84a37278d3aa90147d14de
+DIST postgresql-9.5.7.tar.bz2 18639775 SHA256 
8b1e936f82109325decc0f5575e846b93fb4fd384e8c4bde83ff5e7f87fc6cad SHA512 
0f879a8d7587739aa9a696d60f909f819d567c67dff7c730d5e856639ed78ebc35beeb3cdaf782573d7e62c7056560a934f64cf11ccac6e309f58bb82d1ca78f
 WHIRLPOOL 
d58fb5bc378a58efaf2be8d689bd6d511170c3de18e5300ed46be51e272654d52807fd9a783b6a3ec30a022a44577edb19d6627e5153b5e14259de5571ba15bb
 DIST postgresql-9.6.1.tar.bz2 19260568 SHA256 
e5101e0a49141fc12a7018c6dad594694d3a3325f5ab71e93e0e51bd94e51fcd SHA512 
f27af67f9a96f6327150330bf091a803e10eabbac4e488cf5e4d72907e2eb1dbde7282fe0b89fd75711fd8bdcdb3688b5a9eac1e4d6871f4e8681c9c8b0e7c45
 WHIRLPOOL 
1ea7933817895ec4ddd531b60eead2c0c3324b90fe48224bd49748d11e76313bb7699670edaf5c8f41b8424026bed59d29aab69208c5ced5161196a4827c78f8
 DIST postgresql-9.6.2.tar.bz2 19478040 SHA256 
0187b5184be1c09034e74e44761505e52357248451b0c854dddec6c231fe50c9 SHA512 
7c9d61a591408e29d7dc70d6b28ecdf06edf7f8fbf4e014e60a1e4f841fd5734c74a820094f6153e10ef633d48ea73f2a85194f6d2cd519a8f7087a261e9e02b
 WHIRLPOOL 
0d3981d2990186967ad61c84a02cadf680015e4dc41ff6bb9bb0ed0936979abe6561f2a730ef000173ee8635a6859361b6ce174afbda837defb50300e1cfc909
+DIST postgresql-9.6.3.tar.bz2 19534323 SHA256 
1645b3736901f6d854e695a937389e68ff2066ce0cde9d73919d6ab7c995b9c6 SHA512 
97141972e154e6b0e756ee6a4e20f26e82022a9fd4c56305314a3a5567a79ece638e4ac3d513b46138737ae6bd27a098f30013a94767db151181aac9c01290a1
 WHIRLPOOL 
774146faf5795796812e541d3c7a2ad9ce8125afdc64c0bfa599a733904f4efd3c73dfb907dbb66b6482b2d6efdbd9f2c0dcedffcc4e23bd6030e968a51db658

diff --git a/dev-db/postgresql/postgresql-9.2.21.ebuild 
b/dev-db/postgresql/postgresql-9.2.21.ebuild
new file mode 100644
index 00000000000..63786e00878
--- /dev/null
+++ b/dev-db/postgresql/postgresql-9.2.21.ebuild
@@ -0,0 +1,435 @@
+# Copyright 1999-2017 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI="5"
+
+PYTHON_COMPAT=( python{2_7,3_4} )
+
+inherit eutils flag-o-matic linux-info multilib pam prefix python-single-r1 \
+               systemd user versionator
+
+KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc 
~x86 ~amd64-fbsd ~sparc-fbsd ~x86-fbsd ~ppc-macos ~x86-solaris"
+
+SLOT="$(get_version_component_range 1-2)"
+
+SRC_URI="mirror://postgresql/source/v${PV}/postgresql-${PV}.tar.bz2"
+
+LICENSE="POSTGRESQL GPL-2"
+DESCRIPTION="PostgreSQL RDBMS"
+HOMEPAGE="http://www.postgresql.org/";
+
+LINGUAS="af cs de en es fa fr hr hu it ko nb pl pt_BR ro ru sk sl sv tr
+                zh_CN zh_TW"
+IUSE="doc kerberos kernel_linux ldap libressl nls pam perl -pg_legacytimestamp 
python
+         +readline selinux +server ssl static-libs tcl threads uuid xml zlib"
+
+for lingua in ${LINGUAS}; do
+       IUSE+=" linguas_${lingua}"
+done
+REQUIRED_USE="python? ( ${PYTHON_REQUIRED_USE} )"
+
+wanted_languages() {
+       local enable_langs
+
+       for lingua in ${LINGUAS} ; do
+               use linguas_${lingua} && enable_langs+="${lingua} "
+       done
+
+       echo -n ${enable_langs}
+}
+
+CDEPEND="
+>=app-eselect/eselect-postgresql-2.0
+sys-apps/less
+virtual/libintl
+kerberos? ( virtual/krb5 )
+ldap? ( net-nds/openldap )
+pam? ( virtual/pam )
+perl? ( >=dev-lang/perl-5.8:= )
+python? ( ${PYTHON_DEPS} )
+readline? ( sys-libs/readline:0= )
+ssl? (
+       !libressl? ( >=dev-libs/openssl-0.9.6-r1:0= )
+       libressl? ( dev-libs/libressl:= )
+)
+tcl? ( >=dev-lang/tcl-8:0= )
+uuid? ( dev-libs/ossp-uuid )
+xml? ( dev-libs/libxml2 dev-libs/libxslt )
+zlib? ( sys-libs/zlib )
+"
+
+DEPEND="${CDEPEND}
+!!<sys-apps/sandbox-2.0
+sys-devel/bison
+sys-devel/flex
+nls? ( sys-devel/gettext )
+xml? ( virtual/pkgconfig )
+"
+
+RDEPEND="${CDEPEND}
+!dev-db/postgresql-docs:${SLOT}
+!dev-db/postgresql-base:${SLOT}
+!dev-db/postgresql-server:${SLOT}
+selinux? ( sec-policy/selinux-postgresql )
+"
+
+pkg_setup() {
+       use server && CONFIG_CHECK="~SYSVIPC" linux-info_pkg_setup
+
+       enewgroup postgres 70
+       enewuser postgres 70 /bin/sh /var/lib/postgresql postgres
+
+       use python && python-single-r1_pkg_setup
+}
+
+src_prepare() {
+       # Work around PPC{,64} compilation bug where bool is already defined
+       sed '/#ifndef __cplusplus/a #undef bool' -i src/include/c.h || die
+
+       # Set proper run directory
+       sed "s|\(PGSOCKET_DIR\s\+\)\"/tmp\"|\1\"${EPREFIX}/run/postgresql\"|" \
+               -i src/include/pg_config_manual.h || die
+
+       use server || epatch "${FILESDIR}/${PN}-${SLOT}-no-server.patch"
+
+       # Fix bug 486556 where the server would crash at start up because of
+       # an infinite loop caused by a self-referencing symlink.
+       epatch "${FILESDIR}/postgresql-9.2-9.4-tz-dir-overflow.patch"
+
+       if use pam ; then
+               sed -e "s/\(#define PGSQL_PAM_SERVICE 
\"postgresql\)/\1-${SLOT}/" \
+                       -i src/backend/libpq/auth.c || \
+                       die 'PGSQL_PAM_SERVICE rename failed.'
+       fi
+
+       epatch_user
+}
+
+src_configure() {
+       case ${CHOST} in
+               *-darwin*|*-solaris*)
+                       use nls && append-libs intl
+                       ;;
+       esac
+
+       export LDFLAGS_SL="${LDFLAGS}"
+       export LDFLAGS_EX="${LDFLAGS}"
+
+       local PO="${EPREFIX%/}"
+
+       econf \
+               --prefix="${PO}/usr/$(get_libdir)/postgresql-${SLOT}" \
+               --datadir="${PO}/usr/share/postgresql-${SLOT}" \
+               --docdir="${PO}/usr/share/doc/${PF}" \
+               --includedir="${PO}/usr/include/postgresql-${SLOT}" \
+               --mandir="${PO}/usr/share/postgresql-${SLOT}/man" \
+               --sysconfdir="${PO}/etc/postgresql-${SLOT}" \
+               --with-system-tzdata="${PO}/usr/share/zoneinfo" \
+               $(use_enable !pg_legacytimestamp integer-datetimes) \
+               $(use_enable threads thread-safety) \
+               $(use_with kerberos gssapi) \
+               $(use_with kerberos krb5) \
+               $(use_with ldap) \
+               $(use_with pam) \
+               $(use_with perl) \
+               $(use_with python) \
+               $(use_with readline) \
+               $(use_with ssl openssl) \
+               $(use_with tcl) \
+               $(use_with uuid ossp-uuid) \
+               $(use_with xml libxml) \
+               $(use_with xml libxslt) \
+               $(use_with zlib) \
+               "$(use_enable nls nls "$(wanted_languages)")"
+}
+
+src_compile() {
+       emake
+       emake -C contrib
+}
+
+src_install() {
+       emake DESTDIR="${D}" install
+       emake DESTDIR="${D}" install -C contrib
+
+       dodoc README HISTORY doc/{TODO,bug.template}
+
+       # man pages are already built, but if we have the target make them,
+       # they'll be generated from source before being installed so we
+       # manually install man pages.
+       # We use ${SLOT} instead of doman for postgresql.eselect
+       insinto /usr/share/postgresql-${SLOT}/man/
+       doins -r doc/src/sgml/man{1,3,7}
+       if ! use server; then
+               # Remove man pages for non-existent binaries
+               for m in 
{initdb,pg_{controldata,ctl,resetxlog},post{gres,master}}; do
+                       rm "${ED}/usr/share/postgresql-${SLOT}/man/man1/${m}.1"
+               done
+       fi
+       docompress /usr/share/postgresql-${SLOT}/man/man{1,3,7}
+
+       insinto /etc/postgresql-${SLOT}
+       newins src/bin/psql/psqlrc.sample psqlrc
+
+       use static-libs || find "${ED}" -name '*.a' -delete
+
+       local f bn
+       for f in $(find "${ED}/usr/$(get_libdir)/postgresql-${SLOT}/bin" \
+                                       -mindepth 1 -maxdepth 1)
+       do
+               bn=$(basename "${f}")
+               # Temporarily tack on tmp to workaround a file collision
+               # issue. This is only necessary for 9.7 and earlier. 10 never
+               # had this issue.
+               dosym "../$(get_libdir)/postgresql-${SLOT}/bin/${bn}" \
+                         "/usr/bin/${bn}${SLOT/.}tmp"
+       done
+
+       local linkname mansec
+       for mansec in {1,3,7} ; do
+               for f in 
"${ED}"/usr/share/postgresql-${SLOT}/man/man${mansec}/* ; do
+                       bn=$(basename "${f}")
+                       linkname=${bn/%.${mansec}/${SLOT/.}.${mansec}}
+                       dosym ../../postgresql-${SLOT}/man/man${mansec}/$bn \
+                                 /usr/share/man/man${mansec}/${linkname}
+               done
+       done
+
+       if use doc ; then
+               docinto html
+               dodoc doc/src/sgml/html/*
+
+               docinto sgml
+               dodoc doc/src/sgml/*.{sgml,dsl}
+       fi
+
+       if use server; then
+               sed -e "s|@SLOT@|${SLOT}|g" -e "s|@LIBDIR@|$(get_libdir)|g" \
+                       "${FILESDIR}/${PN}.confd-9.2" | newconfd - ${PN}-${SLOT}
+
+               sed -e "s|@SLOT@|${SLOT}|g" -e "s|@LIBDIR@|$(get_libdir)|g" \
+                       "${FILESDIR}/${PN}.init-9.2" | newinitd - ${PN}-${SLOT}
+
+               sed -e "s|@SLOT@|${SLOT}|g" -e "s|@LIBDIR@|$(get_libdir)|g" \
+                       "${FILESDIR}/${PN}.service" | \
+                       systemd_newunit - ${PN}-${SLOT}.service
+
+               newbin "${FILESDIR}"/${PN}-check-db-dir 
${PN}-${SLOT}-check-db-dir
+
+               use pam && pamd_mimic system-auth ${PN}-${SLOT} auth account 
session
+
+               if use prefix ; then
+                       keepdir /run/postgresql
+                       fperms 0775 /run/postgresql
+               fi
+       fi
+}
+
+pkg_preinst() {
+       # Find all of the slot-specific symlinks, if any, in /usr/bin (e.g.,
+       # /usr/bin/psql96). They may have been created by the
+       # postgresql.eselect module, but they're handled within this ebuild
+       # now. It's alright if we momentarily delete /usr/bin/psql as it
+       # will be recreated by the eselect module in pkg_ppostinst(). This
+       # is only necessary for 9.7 and earlier. 10 and later were never
+       # handled in this manner.
+       local canonicalise
+       if type -p realpath > /dev/null; then
+               canonicalise=realpath
+       elif type -p readlink > /dev/null; then
+               canonicalise='readlink -f'
+       else
+               # can't die, subshell
+               die "No readlink nor realpath found, cannot canonicalise"
+       fi
+
+       local l
+       # First remove any symlinks in /usr/bin that may have been created
+       # by the old eselect
+       for l in $(find "${ROOT%/}/usr/bin" -mindepth 1 -maxdepth 1 -type l) ; 
do
+               if [[ $(${canonicalise} "${l}") == *postgresql-${SLOT}* ]] ; 
then
+                       rm "${l}" || ewarn "Couldn't remove ${l}"
+               fi
+       done
+
+       # Then move the symlinks created by the ebuild to their proper place.
+       for l in "${ED}"/usr/bin/*tmp ; do
+               mv "${l}" "${l%tmp}" \
+                       || ewarn "Couldn't rename $(basename ${l}) to 
$(basename ${l%tmp})"
+       done
+}
+
+pkg_postinst() {
+       postgresql-config update
+
+       elog "If you need a global psqlrc-file, you can place it in:"
+       elog "    ${EROOT%/}/etc/postgresql-${SLOT}/"
+
+       if use server ; then
+               elog
+               elog "Gentoo specific documentation:"
+               elog "https://wiki.gentoo.org/wiki/PostgreSQL";
+               elog
+               elog "Official documentation:"
+               elog "http://www.postgresql.org/docs/${SLOT}/static/index.html";
+               elog
+               elog "The default location of the Unix-domain socket is:"
+               elog "    ${EROOT%/}/run/postgresql/"
+               elog
+               elog "Before initializing the database, you may want to edit 
PG_INITDB_OPTS"
+               elog "so that it contains your preferred locale in:"
+               elog "    ${EROOT%/}/etc/conf.d/postgresql-${SLOT}"
+               elog
+               elog "Then, execute the following command to setup the initial 
database"
+               elog "environment:"
+               elog "    emerge --config =${CATEGORY}/${PF}"
+       fi
+}
+
+pkg_prerm() {
+       if use server && [[ -z ${REPLACED_BY_VERSION} ]] ; then
+               ewarn "Have you dumped and/or migrated the ${SLOT} database 
cluster?"
+               ewarn 
"\thttps://wiki.gentoo.org/wiki/PostgreSQL/QuickStart#Migrating_PostgreSQL";
+
+               ebegin "Resuming removal in 10 seconds (Control-C to cancel)"
+               sleep 10
+               eend 0
+       fi
+}
+
+pkg_postrm() {
+       postgresql-config update
+}
+
+pkg_config() {
+       use server || die "USE flag 'server' not enabled. Nothing to configure."
+
+       [[ -f "${EROOT%/}/etc/conf.d/postgresql-${SLOT}" ]] \
+               && source "${EROOT%/}/etc/conf.d/postgresql-${SLOT}"
+       [[ -z "${PGDATA}" ]] && PGDATA="${EROOT%/}/etc/postgresql-${SLOT}/"
+       [[ -z "${DATA_DIR}" ]] \
+               && DATA_DIR="${EROOT%/}/var/lib/postgresql/${SLOT}/data"
+
+       # environment.bz2 may not contain the same locale as the current system
+       # locale. Unset and source from the current system locale.
+       if [ -f "${EROOT%/}/etc/env.d/02locale" ]; then
+               unset LANG
+               unset LC_CTYPE
+               unset LC_NUMERIC
+               unset LC_TIME
+               unset LC_COLLATE
+               unset LC_MONETARY
+               unset LC_MESSAGES
+               unset LC_ALL
+               source "${EROOT%/}/etc/env.d/02locale"
+               [ -n "${LANG}" ] && export LANG
+               [ -n "${LC_CTYPE}" ] && export LC_CTYPE
+               [ -n "${LC_NUMERIC}" ] && export LC_NUMERIC
+               [ -n "${LC_TIME}" ] && export LC_TIME
+               [ -n "${LC_COLLATE}" ] && export LC_COLLATE
+               [ -n "${LC_MONETARY}" ] && export LC_MONETARY
+               [ -n "${LC_MESSAGES}" ] && export LC_MESSAGES
+               [ -n "${LC_ALL}" ] && export LC_ALL
+       fi
+
+       einfo "You can modify the paths and options passed to initdb by 
editing:"
+       einfo "    ${EROOT%/}/etc/conf.d/postgresql-${SLOT}"
+       einfo
+       einfo "Information on options that can be passed to initdb are found 
at:"
+       einfo "    
http://www.postgresql.org/docs/${SLOT}/static/creating-cluster.html";
+       einfo "    
http://www.postgresql.org/docs/${SLOT}/static/app-initdb.html";
+       einfo
+       einfo "PG_INITDB_OPTS is currently set to:"
+       if [[ -z "${PG_INITDB_OPTS}" ]] ; then
+               einfo "    (none)"
+       else
+               einfo "    ${PG_INITDB_OPTS}"
+       fi
+       einfo
+       einfo "Configuration files will be installed to:"
+       einfo "    ${PGDATA}"
+       einfo
+       einfo "The database cluster will be created in:"
+       einfo "    ${DATA_DIR}"
+       einfo
+
+       ebegin "Continuing initialization in 5 seconds (Control-C to cancel)"
+       sleep 5
+       eend 0
+
+       if [ -n "$(ls -A ${DATA_DIR} 2> /dev/null)" ] ; then
+               eerror "The given directory, '${DATA_DIR}', is not empty."
+               eerror "Modify DATA_DIR to point to an empty directory."
+               die "${DATA_DIR} is not empty."
+       fi
+
+       einfo "Creating the data directory ..."
+       if [[ ${EUID} == 0 ]] ; then
+               mkdir -p "${DATA_DIR}"
+               chown -Rf postgres:postgres "${DATA_DIR}"
+               chmod 0700 "${DATA_DIR}"
+       fi
+
+       einfo "Initializing the database ..."
+
+       if [[ ${EUID} == 0 ]] ; then
+               su postgres -c 
"${EROOT%/}/usr/$(get_libdir)/postgresql-${SLOT}/bin/initdb -D \"${DATA_DIR}\" 
${PG_INITDB_OPTS}"
+       else
+               "${EROOT%/}"/usr/$(get_libdir)/postgresql-${SLOT}/bin/initdb -U 
postgres -D "${DATA_DIR}" ${PG_INITDB_OPTS}
+       fi
+
+       if [[ "${DATA_DIR%/}" != "${PGDATA%/}" ]] ; then
+               mv "${DATA_DIR%/}"/{pg_{hba,ident},postgresql}.conf "${PGDATA}"
+               ln -s "${PGDATA%/}"/{pg_{hba,ident},postgresql}.conf 
"${DATA_DIR%/}"
+       fi
+
+       # unix_socket_directory has no effect in postgresql.conf as it's
+       # overridden in the initscript
+       sed '/^#unix_socket_directory/d' -i "${PGDATA%/}"/postgresql.conf
+
+       cat <<- EOF >> "${PGDATA%/}"/postgresql.conf
+               # This is here because of 
https://bugs.gentoo.org/show_bug.cgi?id=518522
+               # On the off-chance that you might need to work with UTF-8 
encoded
+               # characters in PL/Perl
+               plperl.on_init = 'use utf8; use re; package utf8; require 
"utf8_heavy.pl";'
+       EOF
+
+       einfo "The autovacuum function, which was in contrib, has been moved to 
the main"
+       einfo "PostgreSQL functions starting with 8.1, and starting with 8.4 is 
now enabled"
+       einfo "by default. You can disable it in the cluster's:"
+       einfo "    ${PGDATA%/}/postgresql.conf"
+       einfo
+       einfo "The PostgreSQL server, by default, will log events to:"
+       einfo "    ${DATA_DIR%/}/postmaster.log"
+       einfo
+       if use prefix ; then
+               einfo "The location of the configuration files have moved to:"
+               einfo "    ${PGDATA}"
+               einfo "To start the server:"
+               einfo "    pg_ctl start -D ${DATA_DIR} -o '-D ${PGDATA} 
--data-directory=${DATA_DIR}'"
+               einfo "To stop:"
+               einfo "    pg_ctl stop -D ${DATA_DIR}"
+               einfo
+               einfo "Or move the configuration files back:"
+               einfo "mv ${PGDATA}*.conf ${DATA_DIR}"
+       else
+               einfo "You should use the 
'${EROOT%/}/etc/init.d/postgresql-${SLOT}' script to run PostgreSQL"
+               einfo "instead of 'pg_ctl'."
+       fi
+}
+
+src_test() {
+       if use server && [[ ${UID} -ne 0 ]] ; then
+               emake check
+
+               einfo "If you think other tests besides the regression tests 
are necessary, please"
+               einfo "submit a bug including a patch for this ebuild to enable 
them."
+       else
+               use server || \
+                       ewarn 'Tests cannot be run without the "server" use 
flag enabled.'
+               [[ ${UID} -eq 0 ]] || \
+                       ewarn 'Tests cannot be run as root. Enable "userpriv" 
in FEATURES.'
+
+               ewarn 'Skipping.'
+       fi
+}

diff --git a/dev-db/postgresql/postgresql-9.3.17.ebuild 
b/dev-db/postgresql/postgresql-9.3.17.ebuild
new file mode 100644
index 00000000000..bf27a126ce0
--- /dev/null
+++ b/dev-db/postgresql/postgresql-9.3.17.ebuild
@@ -0,0 +1,440 @@
+# Copyright 1999-2017 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI="5"
+
+PYTHON_COMPAT=( python{2_7,3_4} )
+
+inherit eutils flag-o-matic linux-info multilib pam prefix python-single-r1 \
+               systemd user versionator
+
+KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc 
~x86 ~amd64-fbsd ~sparc-fbsd ~x86-fbsd ~ppc-macos ~x86-solaris"
+
+SLOT="$(get_version_component_range 1-2)"
+
+SRC_URI="mirror://postgresql/source/v${PV}/postgresql-${PV}.tar.bz2"
+
+LICENSE="POSTGRESQL GPL-2"
+DESCRIPTION="PostgreSQL RDBMS"
+HOMEPAGE="http://www.postgresql.org/";
+
+LINGUAS="af cs de en es fa fr hr hu it ko nb pl pt_BR ro ru sk sl sv tr
+                zh_CN zh_TW"
+IUSE="doc kerberos kernel_linux ldap libressl nls pam perl -pg_legacytimestamp 
python
+         +readline selinux +server ssl static-libs tcl threads uuid xml zlib"
+
+for lingua in ${LINGUAS}; do
+       IUSE+=" linguas_${lingua}"
+done
+REQUIRED_USE="python? ( ${PYTHON_REQUIRED_USE} )"
+
+wanted_languages() {
+       local enable_langs
+
+       for lingua in ${LINGUAS} ; do
+               use linguas_${lingua} && enable_langs+="${lingua} "
+       done
+
+       echo -n ${enable_langs}
+}
+
+CDEPEND="
+>=app-eselect/eselect-postgresql-2.0
+sys-apps/less
+virtual/libintl
+kerberos? ( virtual/krb5 )
+ldap? ( net-nds/openldap )
+pam? ( virtual/pam )
+perl? ( >=dev-lang/perl-5.8:= )
+python? ( ${PYTHON_DEPS} )
+readline? ( sys-libs/readline:0= )
+ssl? (
+       !libressl? ( >=dev-libs/openssl-0.9.6-r1:0= )
+       libressl? ( dev-libs/libressl:= )
+)
+tcl? ( >=dev-lang/tcl-8:0= )
+uuid? ( dev-libs/ossp-uuid )
+xml? ( dev-libs/libxml2 dev-libs/libxslt )
+zlib? ( sys-libs/zlib )
+"
+
+DEPEND="${CDEPEND}
+!!<sys-apps/sandbox-2.0
+sys-devel/bison
+sys-devel/flex
+nls? ( sys-devel/gettext )
+xml? ( virtual/pkgconfig )
+"
+
+RDEPEND="${CDEPEND}
+!dev-db/postgresql-docs:${SLOT}
+!dev-db/postgresql-base:${SLOT}
+!dev-db/postgresql-server:${SLOT}
+selinux? ( sec-policy/selinux-postgresql )
+"
+
+pkg_setup() {
+       use server && CONFIG_CHECK="~SYSVIPC" linux-info_pkg_setup
+
+       enewgroup postgres 70
+       enewuser postgres 70 /bin/sh /var/lib/postgresql postgres
+
+       use python && python-single-r1_pkg_setup
+}
+
+src_prepare() {
+       # Work around PPC{,64} compilation bug where bool is already defined
+       sed '/#ifndef __cplusplus/a #undef bool' -i src/include/c.h || die
+
+       # Set proper run directory
+       sed "s|\(PGSOCKET_DIR\s\+\)\"/tmp\"|\1\"${EPREFIX}/run/postgresql\"|" \
+               -i src/include/pg_config_manual.h || die
+
+       # Rely on $PATH being in the proper order so that the correct
+       # install program is used for modules utilizing PGXS in both
+       # hardened and non-hardened environments. (Bug #528786)
+       sed 's/@install_bin@/install -c/' -i src/Makefile.global.in || die
+
+       use server || epatch "${FILESDIR}/${PN}-${SLOT}-no-server.patch"
+
+       # Fix bug 486556 where the server would crash at start up because of
+       # an infinite loop caused by a self-referencing symlink.
+       epatch "${FILESDIR}/postgresql-9.2-9.4-tz-dir-overflow.patch"
+
+       if use pam ; then
+               sed -e "s/\(#define PGSQL_PAM_SERVICE 
\"postgresql\)/\1-${SLOT}/" \
+                       -i src/backend/libpq/auth.c || \
+                       die 'PGSQL_PAM_SERVICE rename failed.'
+       fi
+
+       epatch_user
+}
+
+src_configure() {
+       case ${CHOST} in
+               *-darwin*|*-solaris*)
+                       use nls && append-libs intl
+                       ;;
+       esac
+
+       export LDFLAGS_SL="${LDFLAGS}"
+       export LDFLAGS_EX="${LDFLAGS}"
+
+       local PO="${EPREFIX%/}"
+
+       econf \
+               --prefix="${PO}/usr/$(get_libdir)/postgresql-${SLOT}" \
+               --datadir="${PO}/usr/share/postgresql-${SLOT}" \
+               --docdir="${PO}/usr/share/doc/${PF}" \
+               --includedir="${PO}/usr/include/postgresql-${SLOT}" \
+               --mandir="${PO}/usr/share/postgresql-${SLOT}/man" \
+               --sysconfdir="${PO}/etc/postgresql-${SLOT}" \
+               --with-system-tzdata="${PO}/usr/share/zoneinfo" \
+               $(use_enable !pg_legacytimestamp integer-datetimes) \
+               $(use_enable threads thread-safety) \
+               $(use_with kerberos gssapi) \
+               $(use_with kerberos krb5) \
+               $(use_with ldap) \
+               $(use_with pam) \
+               $(use_with perl) \
+               $(use_with python) \
+               $(use_with readline) \
+               $(use_with ssl openssl) \
+               $(use_with tcl) \
+               $(use_with uuid ossp-uuid) \
+               $(use_with xml libxml) \
+               $(use_with xml libxslt) \
+               $(use_with zlib) \
+               "$(use_enable nls nls "$(wanted_languages)")"
+}
+
+src_compile() {
+       emake
+       emake -C contrib
+}
+
+src_install() {
+       emake DESTDIR="${D}" install
+       emake DESTDIR="${D}" install -C contrib
+
+       dodoc README HISTORY doc/{TODO,bug.template}
+
+       # man pages are already built, but if we have the target make them,
+       # they'll be generated from source before being installed so we
+       # manually install man pages.
+       # We use ${SLOT} instead of doman for postgresql.eselect
+       insinto /usr/share/postgresql-${SLOT}/man/
+       doins -r doc/src/sgml/man{1,3,7}
+       if ! use server; then
+               # Remove man pages for non-existent binaries
+               for m in 
{initdb,pg_{controldata,ctl,resetxlog},post{gres,master}}; do
+                       rm "${ED}/usr/share/postgresql-${SLOT}/man/man1/${m}.1"
+               done
+       fi
+       docompress /usr/share/postgresql-${SLOT}/man/man{1,3,7}
+
+       insinto /etc/postgresql-${SLOT}
+       newins src/bin/psql/psqlrc.sample psqlrc
+
+       use static-libs || find "${ED}" -name '*.a' -delete
+
+       local f bn
+       for f in $(find "${ED}/usr/$(get_libdir)/postgresql-${SLOT}/bin" \
+                                       -mindepth 1 -maxdepth 1)
+       do
+               bn=$(basename "${f}")
+               # Temporarily tack on tmp to workaround a file collision
+               # issue. This is only necessary for 9.7 and earlier. 10 never
+               # had this issue.
+               dosym "../$(get_libdir)/postgresql-${SLOT}/bin/${bn}" \
+                         "/usr/bin/${bn}${SLOT/.}tmp"
+       done
+
+       local linkname mansec
+       for mansec in {1,3,7} ; do
+               for f in 
"${ED}"/usr/share/postgresql-${SLOT}/man/man${mansec}/* ; do
+                       bn=$(basename "${f}")
+                       linkname=${bn/%.${mansec}/${SLOT/.}.${mansec}}
+                       dosym ../../postgresql-${SLOT}/man/man${mansec}/$bn \
+                                 /usr/share/man/man${mansec}/${linkname}
+               done
+       done
+
+       if use doc ; then
+               docinto html
+               dodoc doc/src/sgml/html/*
+
+               docinto sgml
+               dodoc doc/src/sgml/*.{sgml,dsl}
+       fi
+
+       if use server; then
+               sed -e "s|@SLOT@|${SLOT}|g" -e "s|@LIBDIR@|$(get_libdir)|g" \
+                       "${FILESDIR}/${PN}.confd-9.3" | newconfd - ${PN}-${SLOT}
+
+               sed -e "s|@SLOT@|${SLOT}|g" -e "s|@LIBDIR@|$(get_libdir)|g" \
+                       "${FILESDIR}/${PN}.init-9.3-r1" | newinitd - 
${PN}-${SLOT}
+
+               sed -e "s|@SLOT@|${SLOT}|g" -e "s|@LIBDIR@|$(get_libdir)|g" \
+                       "${FILESDIR}/${PN}.service" | \
+                       systemd_newunit - ${PN}-${SLOT}.service
+
+               newbin "${FILESDIR}"/${PN}-check-db-dir 
${PN}-${SLOT}-check-db-dir
+
+               use pam && pamd_mimic system-auth ${PN}-${SLOT} auth account 
session
+
+               if use prefix ; then
+                       keepdir /run/postgresql
+                       fperms 0775 /run/postgresql
+               fi
+       fi
+}
+
+pkg_preinst() {
+       # Find all of the slot-specific symlinks, if any, in /usr/bin (e.g.,
+       # /usr/bin/psql96). They may have been created by the
+       # postgresql.eselect module, but they're handled within this ebuild
+       # now. It's alright if we momentarily delete /usr/bin/psql as it
+       # will be recreated by the eselect module in pkg_ppostinst(). This
+       # is only necessary for 9.7 and earlier. 10 and later were never
+       # handled in this manner.
+       local canonicalise
+       if type -p realpath > /dev/null; then
+               canonicalise=realpath
+       elif type -p readlink > /dev/null; then
+               canonicalise='readlink -f'
+       else
+               # can't die, subshell
+               die "No readlink nor realpath found, cannot canonicalise"
+       fi
+
+       local l
+       # First remove any symlinks in /usr/bin that may have been created
+       # by the old eselect
+       for l in $(find "${ROOT%/}/usr/bin" -mindepth 1 -maxdepth 1 -type l) ; 
do
+               if [[ $(${canonicalise} "${l}") == *postgresql-${SLOT}* ]] ; 
then
+                       rm "${l}" || ewarn "Couldn't remove ${l}"
+               fi
+       done
+
+       # Then move the symlinks created by the ebuild to their proper place.
+       for l in "${ED}"/usr/bin/*tmp ; do
+               mv "${l}" "${l%tmp}" \
+                       || ewarn "Couldn't rename $(basename ${l}) to 
$(basename ${l%tmp})"
+       done
+}
+
+pkg_postinst() {
+       postgresql-config update
+
+       elog "If you need a global psqlrc-file, you can place it in:"
+       elog "    ${EROOT%/}/etc/postgresql-${SLOT}/"
+
+       if use server ; then
+               elog
+               elog "Gentoo specific documentation:"
+               elog "https://wiki.gentoo.org/wiki/PostgreSQL";
+               elog
+               elog "Official documentation:"
+               elog "http://www.postgresql.org/docs/${SLOT}/static/index.html";
+               elog
+               elog "The default location of the Unix-domain socket is:"
+               elog "    ${EROOT%/}/run/postgresql/"
+               elog
+               elog "Before initializing the database, you may want to edit 
PG_INITDB_OPTS"
+               elog "so that it contains your preferred locale in:"
+               elog "    ${EROOT%/}/etc/conf.d/postgresql-${SLOT}"
+               elog
+               elog "Then, execute the following command to setup the initial 
database"
+               elog "environment:"
+               elog "    emerge --config =${CATEGORY}/${PF}"
+       fi
+}
+
+pkg_prerm() {
+       if use server && [[ -z ${REPLACED_BY_VERSION} ]] ; then
+               ewarn "Have you dumped and/or migrated the ${SLOT} database 
cluster?"
+               ewarn 
"\thttps://wiki.gentoo.org/wiki/PostgreSQL/QuickStart#Migrating_PostgreSQL";
+
+               ebegin "Resuming removal in 10 seconds (Control-C to cancel)"
+               sleep 10
+               eend 0
+       fi
+}
+
+pkg_postrm() {
+       postgresql-config update
+}
+
+pkg_config() {
+       use server || die "USE flag 'server' not enabled. Nothing to configure."
+
+       [[ -f "${EROOT%/}/etc/conf.d/postgresql-${SLOT}" ]] \
+               && source "${EROOT%/}/etc/conf.d/postgresql-${SLOT}"
+       [[ -z "${PGDATA}" ]] && PGDATA="${EROOT%/}/etc/postgresql-${SLOT}/"
+       [[ -z "${DATA_DIR}" ]] \
+               && DATA_DIR="${EROOT%/}/var/lib/postgresql/${SLOT}/data"
+
+       # environment.bz2 may not contain the same locale as the current system
+       # locale. Unset and source from the current system locale.
+       if [ -f "${EROOT%/}/etc/env.d/02locale" ]; then
+               unset LANG
+               unset LC_CTYPE
+               unset LC_NUMERIC
+               unset LC_TIME
+               unset LC_COLLATE
+               unset LC_MONETARY
+               unset LC_MESSAGES
+               unset LC_ALL
+               source "${EROOT%/}/etc/env.d/02locale"
+               [ -n "${LANG}" ] && export LANG
+               [ -n "${LC_CTYPE}" ] && export LC_CTYPE
+               [ -n "${LC_NUMERIC}" ] && export LC_NUMERIC
+               [ -n "${LC_TIME}" ] && export LC_TIME
+               [ -n "${LC_COLLATE}" ] && export LC_COLLATE
+               [ -n "${LC_MONETARY}" ] && export LC_MONETARY
+               [ -n "${LC_MESSAGES}" ] && export LC_MESSAGES
+               [ -n "${LC_ALL}" ] && export LC_ALL
+       fi
+
+       einfo "You can modify the paths and options passed to initdb by 
editing:"
+       einfo "    ${EROOT%/}/etc/conf.d/postgresql-${SLOT}"
+       einfo
+       einfo "Information on options that can be passed to initdb are found 
at:"
+       einfo "    
http://www.postgresql.org/docs/${SLOT}/static/creating-cluster.html";
+       einfo "    
http://www.postgresql.org/docs/${SLOT}/static/app-initdb.html";
+       einfo
+       einfo "PG_INITDB_OPTS is currently set to:"
+       if [[ -z "${PG_INITDB_OPTS}" ]] ; then
+               einfo "    (none)"
+       else
+               einfo "    ${PG_INITDB_OPTS}"
+       fi
+       einfo
+       einfo "Configuration files will be installed to:"
+       einfo "    ${PGDATA}"
+       einfo
+       einfo "The database cluster will be created in:"
+       einfo "    ${DATA_DIR}"
+       einfo
+
+       ebegin "Continuing initialization in 5 seconds (Control-C to cancel)"
+       sleep 5
+       eend 0
+
+       if [ -n "$(ls -A ${DATA_DIR} 2> /dev/null)" ] ; then
+               eerror "The given directory, '${DATA_DIR}', is not empty."
+               eerror "Modify DATA_DIR to point to an empty directory."
+               die "${DATA_DIR} is not empty."
+       fi
+
+       einfo "Creating the data directory ..."
+       if [[ ${EUID} == 0 ]] ; then
+               mkdir -p "${DATA_DIR}"
+               chown -Rf postgres:postgres "${DATA_DIR}"
+               chmod 0700 "${DATA_DIR}"
+       fi
+
+       einfo "Initializing the database ..."
+
+       if [[ ${EUID} == 0 ]] ; then
+               su postgres -c 
"${EROOT%/}/usr/$(get_libdir)/postgresql-${SLOT}/bin/initdb -D \"${DATA_DIR}\" 
${PG_INITDB_OPTS}"
+       else
+               "${EROOT%/}"/usr/$(get_libdir)/postgresql-${SLOT}/bin/initdb -U 
postgres -D "${DATA_DIR}" ${PG_INITDB_OPTS}
+       fi
+
+       if [[ "${DATA_DIR%/}" != "${PGDATA%/}" ]] ; then
+               mv "${DATA_DIR%/}"/{pg_{hba,ident},postgresql}.conf "${PGDATA}"
+               ln -s "${PGDATA%/}"/{pg_{hba,ident},postgresql}.conf 
"${DATA_DIR%/}"
+       fi
+
+       # unix_socket_directory has no effect in postgresql.conf as it's
+       # overridden in the initscript
+       sed '/^#unix_socket_directories/,+1d' -i "${PGDATA%/}"/postgresql.conf
+
+       cat <<- EOF >> "${PGDATA%/}"/postgresql.conf
+               # This is here because of 
https://bugs.gentoo.org/show_bug.cgi?id=518522
+               # On the off-chance that you might need to work with UTF-8 
encoded
+               # characters in PL/Perl
+               plperl.on_init = 'use utf8; use re; package utf8; require 
"utf8_heavy.pl";'
+       EOF
+
+       einfo "The autovacuum function, which was in contrib, has been moved to 
the main"
+       einfo "PostgreSQL functions starting with 8.1, and starting with 8.4 is 
now enabled"
+       einfo "by default. You can disable it in the cluster's:"
+       einfo "    ${PGDATA%/}/postgresql.conf"
+       einfo
+       einfo "The PostgreSQL server, by default, will log events to:"
+       einfo "    ${DATA_DIR%/}/postmaster.log"
+       einfo
+       if use prefix ; then
+               einfo "The location of the configuration files have moved to:"
+               einfo "    ${PGDATA}"
+               einfo "To start the server:"
+               einfo "    pg_ctl start -D ${DATA_DIR} -o '-D ${PGDATA} 
--data-directory=${DATA_DIR}'"
+               einfo "To stop:"
+               einfo "    pg_ctl stop -D ${DATA_DIR}"
+               einfo
+               einfo "Or move the configuration files back:"
+               einfo "mv ${PGDATA}*.conf ${DATA_DIR}"
+       else
+               einfo "You should use the 
'${EROOT%/}/etc/init.d/postgresql-${SLOT}' script to run PostgreSQL"
+               einfo "instead of 'pg_ctl'."
+       fi
+}
+
+src_test() {
+       if use server && [[ ${UID} -ne 0 ]] ; then
+               emake check
+
+               einfo "If you think other tests besides the regression tests 
are necessary, please"
+               einfo "submit a bug including a patch for this ebuild to enable 
them."
+       else
+               use server || \
+                       ewarn 'Tests cannot be run without the "server" use 
flag enabled.'
+               [[ ${UID} -eq 0 ]] || \
+                       ewarn 'Tests cannot be run as root. Enable "userpriv" 
in FEATURES.'
+
+               ewarn 'Skipping.'
+       fi
+}

diff --git a/dev-db/postgresql/postgresql-9.4.12.ebuild 
b/dev-db/postgresql/postgresql-9.4.12.ebuild
new file mode 100644
index 00000000000..c59e32ab3ae
--- /dev/null
+++ b/dev-db/postgresql/postgresql-9.4.12.ebuild
@@ -0,0 +1,472 @@
+# Copyright 1999-2017 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI="5"
+
+PYTHON_COMPAT=( python{2_7,3_4} )
+
+inherit eutils flag-o-matic linux-info multilib pam prefix python-single-r1 \
+               systemd user versionator
+
+KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc 
~x86 ~amd64-fbsd ~sparc-fbsd ~x86-fbsd ~ppc-macos ~x86-solaris"
+
+SLOT="$(get_version_component_range 1-2)"
+
+SRC_URI="mirror://postgresql/source/v${PV}/postgresql-${PV}.tar.bz2"
+
+LICENSE="POSTGRESQL GPL-2"
+DESCRIPTION="PostgreSQL RDBMS"
+HOMEPAGE="http://www.postgresql.org/";
+
+LINGUAS="af cs de en es fa fr hr hu it ko nb pl pt_BR ro ru sk sl sv tr
+                zh_CN zh_TW"
+IUSE="doc kerberos kernel_linux ldap libressl nls pam perl -pg_legacytimestamp 
python
+         +readline selinux +server ssl static-libs tcl threads uuid xml zlib"
+
+for lingua in ${LINGUAS}; do
+       IUSE+=" linguas_${lingua}"
+done
+REQUIRED_USE="python? ( ${PYTHON_REQUIRED_USE} )"
+
+wanted_languages() {
+       local enable_langs
+
+       for lingua in ${LINGUAS} ; do
+               use linguas_${lingua} && enable_langs+="${lingua} "
+       done
+
+       echo -n ${enable_langs}
+}
+
+CDEPEND="
+>=app-eselect/eselect-postgresql-2.0
+sys-apps/less
+virtual/libintl
+kerberos? ( virtual/krb5 )
+ldap? ( net-nds/openldap )
+pam? ( virtual/pam )
+perl? ( >=dev-lang/perl-5.8:= )
+python? ( ${PYTHON_DEPS} )
+readline? ( sys-libs/readline:0= )
+ssl? (
+       !libressl? ( >=dev-libs/openssl-0.9.6-r1:0= )
+       libressl? ( dev-libs/libressl:= )
+)
+tcl? ( >=dev-lang/tcl-8:0= )
+xml? ( dev-libs/libxml2 dev-libs/libxslt )
+zlib? ( sys-libs/zlib )
+"
+
+# uuid flags -- depend on sys-apps/util-linux for Linux libcs, or if no
+# supported libc in use depend on dev-libs/ossp-uuid. For BSD systems,
+# the libc includes UUID functions.
+UTIL_LINUX_LIBC=( elibc_{glibc,uclibc,musl} )
+BSD_LIBC=( elibc_{Free,Net,Open}BSD )
+
+nest_usedep() {
+       local front back
+       while [[ ${#} -gt 1 ]]; do
+               front+="${1}? ( "
+               back+=" )"
+               shift
+       done
+       echo "${front}${1}${back}"
+}
+
+IUSE+=" ${UTIL_LINUX_LIBC[@]} ${BSD_LIBC[@]}"
+CDEPEND+="
+uuid? (
+       ${UTIL_LINUX_LIBC[@]/%/? ( sys-apps/util-linux )}
+       $(nest_usedep ${UTIL_LINUX_LIBC[@]/#/!} ${BSD_LIBC[@]/#/!} 
dev-libs/ossp-uuid)
+)"
+
+DEPEND="${CDEPEND}
+!!<sys-apps/sandbox-2.0
+sys-devel/bison
+sys-devel/flex
+nls? ( sys-devel/gettext )
+xml? ( virtual/pkgconfig )
+"
+
+RDEPEND="${CDEPEND}
+!dev-db/postgresql-docs:${SLOT}
+!dev-db/postgresql-base:${SLOT}
+!dev-db/postgresql-server:${SLOT}
+selinux? ( sec-policy/selinux-postgresql )
+"
+
+pkg_setup() {
+       use server && CONFIG_CHECK="~SYSVIPC" linux-info_pkg_setup
+
+       enewgroup postgres 70
+       enewuser postgres 70 /bin/sh /var/lib/postgresql postgres
+
+       use python && python-single-r1_pkg_setup
+}
+
+src_prepare() {
+       # Work around PPC{,64} compilation bug where bool is already defined
+       sed '/#ifndef __cplusplus/a #undef bool' -i src/include/c.h || die
+
+       # Set proper run directory
+       sed "s|\(PGSOCKET_DIR\s\+\)\"/tmp\"|\1\"${EPREFIX}/run/postgresql\"|" \
+               -i src/include/pg_config_manual.h || die
+
+       # Rely on $PATH being in the proper order so that the correct
+       # install program is used for modules utilizing PGXS in both
+       # hardened and non-hardened environments. (Bug #528786)
+       sed 's/@install_bin@/install -c/' -i src/Makefile.global.in || die
+
+       use server || epatch "${FILESDIR}/${PN}-9.4.10-no-server.patch"
+
+       # Fix bug 486556 where the server would crash at start up because of
+       # an infinite loop caused by a self-referencing symlink.
+       epatch "${FILESDIR}/postgresql-9.2-9.4-tz-dir-overflow.patch"
+
+       if use pam ; then
+               sed -e "s/\(#define PGSQL_PAM_SERVICE 
\"postgresql\)/\1-${SLOT}/" \
+                       -i src/backend/libpq/auth.c || \
+                       die 'PGSQL_PAM_SERVICE rename failed.'
+       fi
+
+       epatch_user
+}
+
+src_configure() {
+       case ${CHOST} in
+               *-darwin*|*-solaris*)
+                       use nls && append-libs intl
+                       ;;
+       esac
+
+       export LDFLAGS_SL="${LDFLAGS}"
+       export LDFLAGS_EX="${LDFLAGS}"
+
+       local PO="${EPREFIX%/}"
+
+       local i uuid_config=""
+       if use uuid; then
+               for i in ${UTIL_LINUX_LIBC[@]}; do
+                       use ${i} && uuid_config="--with-uuid=e2fs"
+               done
+               for i in ${BSD_LIBC[@]}; do
+                       use ${i} && uuid_config="--with-uuid=bsd"
+               done
+               [[ -z $uuid_config ]] && uuid_config="--with-uuid=ossp"
+       fi
+
+       econf \
+               --prefix="${PO}/usr/$(get_libdir)/postgresql-${SLOT}" \
+               --datadir="${PO}/usr/share/postgresql-${SLOT}" \
+               --docdir="${PO}/usr/share/doc/${PF}" \
+               --includedir="${PO}/usr/include/postgresql-${SLOT}" \
+               --mandir="${PO}/usr/share/postgresql-${SLOT}/man" \
+               --sysconfdir="${PO}/etc/postgresql-${SLOT}" \
+               --with-system-tzdata="${PO}/usr/share/zoneinfo" \
+               $(use_enable !pg_legacytimestamp integer-datetimes) \
+               $(use_enable threads thread-safety) \
+               $(use_with kerberos gssapi) \
+               $(use_with ldap) \
+               $(use_with pam) \
+               $(use_with perl) \
+               $(use_with python) \
+               $(use_with readline) \
+               $(use_with ssl openssl) \
+               $(use_with tcl) \
+               ${uuid_config} \
+               $(use_with xml libxml) \
+               $(use_with xml libxslt) \
+               $(use_with zlib) \
+               "$(use_enable nls nls "$(wanted_languages)")"
+}
+
+src_compile() {
+       emake
+       emake -C contrib
+}
+
+src_install() {
+       emake DESTDIR="${D}" install
+       emake DESTDIR="${D}" install -C contrib
+
+       dodoc README HISTORY doc/{TODO,bug.template}
+
+       # man pages are already built, but if we have the target make them,
+       # they'll be generated from source before being installed so we
+       # manually install man pages.
+       # We use ${SLOT} instead of doman for postgresql.eselect
+       insinto /usr/share/postgresql-${SLOT}/man/
+       doins -r doc/src/sgml/man{1,3,7}
+       if ! use server; then
+               # Remove man pages for non-existent binaries
+               for m in 
{initdb,pg_{controldata,ctl,resetxlog},post{gres,master}}; do
+                       rm "${ED}/usr/share/postgresql-${SLOT}/man/man1/${m}.1"
+               done
+       fi
+       docompress /usr/share/postgresql-${SLOT}/man/man{1,3,7}
+
+       insinto /etc/postgresql-${SLOT}
+       newins src/bin/psql/psqlrc.sample psqlrc
+
+       use static-libs || find "${ED}" -name '*.a' -delete
+
+       local f bn
+       for f in $(find "${ED}/usr/$(get_libdir)/postgresql-${SLOT}/bin" \
+                                       -mindepth 1 -maxdepth 1)
+       do
+               bn=$(basename "${f}")
+               # Temporarily tack on tmp to workaround a file collision
+               # issue. This is only necessary for 9.7 and earlier. 10 never
+               # had this issue.
+               dosym "../$(get_libdir)/postgresql-${SLOT}/bin/${bn}" \
+                         "/usr/bin/${bn}${SLOT/.}tmp"
+       done
+
+       local linkname mansec
+       for mansec in {1,3,7} ; do
+               for f in 
"${ED}"/usr/share/postgresql-${SLOT}/man/man${mansec}/* ; do
+                       bn=$(basename "${f}")
+                       linkname=${bn/%.${mansec}/${SLOT/.}.${mansec}}
+                       dosym ../../postgresql-${SLOT}/man/man${mansec}/$bn \
+                                 /usr/share/man/man${mansec}/${linkname}
+               done
+       done
+
+       if use doc ; then
+               docinto html
+               dodoc doc/src/sgml/html/*
+
+               docinto sgml
+               dodoc doc/src/sgml/*.{sgml,dsl}
+       fi
+
+       if use server; then
+               sed -e "s|@SLOT@|${SLOT}|g" -e "s|@LIBDIR@|$(get_libdir)|g" \
+                       "${FILESDIR}/${PN}.confd-9.3" | newconfd - ${PN}-${SLOT}
+
+               sed -e "s|@SLOT@|${SLOT}|g" -e "s|@LIBDIR@|$(get_libdir)|g" \
+                       "${FILESDIR}/${PN}.init-9.3-r1" | newinitd - 
${PN}-${SLOT}
+
+               sed -e "s|@SLOT@|${SLOT}|g" -e "s|@LIBDIR@|$(get_libdir)|g" \
+                       "${FILESDIR}/${PN}.service" | \
+                       systemd_newunit - ${PN}-${SLOT}.service
+
+               newbin "${FILESDIR}"/${PN}-check-db-dir 
${PN}-${SLOT}-check-db-dir
+
+               use pam && pamd_mimic system-auth ${PN}-${SLOT} auth account 
session
+
+               if use prefix ; then
+                       keepdir /run/postgresql
+                       fperms 0775 /run/postgresql
+               fi
+       fi
+}
+
+pkg_preinst() {
+       # Find all of the slot-specific symlinks, if any, in /usr/bin (e.g.,
+       # /usr/bin/psql96). They may have been created by the
+       # postgresql.eselect module, but they're handled within this ebuild
+       # now. It's alright if we momentarily delete /usr/bin/psql as it
+       # will be recreated by the eselect module in pkg_ppostinst(). This
+       # is only necessary for 9.7 and earlier. 10 and later were never
+       # handled in this manner.
+       local canonicalise
+       if type -p realpath > /dev/null; then
+               canonicalise=realpath
+       elif type -p readlink > /dev/null; then
+               canonicalise='readlink -f'
+       else
+               # can't die, subshell
+               die "No readlink nor realpath found, cannot canonicalise"
+       fi
+
+       local l
+       # First remove any symlinks in /usr/bin that may have been created
+       # by the old eselect
+       for l in $(find "${ROOT%/}/usr/bin" -mindepth 1 -maxdepth 1 -type l) ; 
do
+               if [[ $(${canonicalise} "${l}") == *postgresql-${SLOT}* ]] ; 
then
+                       rm "${l}" || ewarn "Couldn't remove ${l}"
+               fi
+       done
+
+       # Then move the symlinks created by the ebuild to their proper place.
+       for l in "${ED}"/usr/bin/*tmp ; do
+               mv "${l}" "${l%tmp}" \
+                       || ewarn "Couldn't rename $(basename ${l}) to 
$(basename ${l%tmp})"
+       done
+}
+
+pkg_postinst() {
+       postgresql-config update
+
+       elog "If you need a global psqlrc-file, you can place it in:"
+       elog "    ${EROOT%/}/etc/postgresql-${SLOT}/"
+
+       if use server ; then
+               elog
+               elog "Gentoo specific documentation:"
+               elog "https://wiki.gentoo.org/wiki/PostgreSQL";
+               elog
+               elog "Official documentation:"
+               elog "http://www.postgresql.org/docs/${SLOT}/static/index.html";
+               elog
+               elog "The default location of the Unix-domain socket is:"
+               elog "    ${EROOT%/}/run/postgresql/"
+               elog
+               elog "Before initializing the database, you may want to edit 
PG_INITDB_OPTS"
+               elog "so that it contains your preferred locale in:"
+               elog "    ${EROOT%/}/etc/conf.d/postgresql-${SLOT}"
+               elog
+               elog "Then, execute the following command to setup the initial 
database"
+               elog "environment:"
+               elog "    emerge --config =${CATEGORY}/${PF}"
+       fi
+}
+
+pkg_prerm() {
+       if use server && [[ -z ${REPLACED_BY_VERSION} ]] ; then
+               ewarn "Have you dumped and/or migrated the ${SLOT} database 
cluster?"
+               ewarn 
"\thttps://wiki.gentoo.org/wiki/PostgreSQL/QuickStart#Migrating_PostgreSQL";
+
+               ebegin "Resuming removal in 10 seconds (Control-C to cancel)"
+               sleep 10
+               eend 0
+       fi
+}
+
+pkg_postrm() {
+       postgresql-config update
+}
+
+pkg_config() {
+       use server || die "USE flag 'server' not enabled. Nothing to configure."
+
+       [[ -f "${EROOT%/}/etc/conf.d/postgresql-${SLOT}" ]] \
+               && source "${EROOT%/}/etc/conf.d/postgresql-${SLOT}"
+       [[ -z "${PGDATA}" ]] && PGDATA="${EROOT%/}/etc/postgresql-${SLOT}/"
+       [[ -z "${DATA_DIR}" ]] \
+               && DATA_DIR="${EROOT%/}/var/lib/postgresql/${SLOT}/data"
+
+       # environment.bz2 may not contain the same locale as the current system
+       # locale. Unset and source from the current system locale.
+       if [ -f "${EROOT%/}/etc/env.d/02locale" ]; then
+               unset LANG
+               unset LC_CTYPE
+               unset LC_NUMERIC
+               unset LC_TIME
+               unset LC_COLLATE
+               unset LC_MONETARY
+               unset LC_MESSAGES
+               unset LC_ALL
+               source "${EROOT%/}/etc/env.d/02locale"
+               [ -n "${LANG}" ] && export LANG
+               [ -n "${LC_CTYPE}" ] && export LC_CTYPE
+               [ -n "${LC_NUMERIC}" ] && export LC_NUMERIC
+               [ -n "${LC_TIME}" ] && export LC_TIME
+               [ -n "${LC_COLLATE}" ] && export LC_COLLATE
+               [ -n "${LC_MONETARY}" ] && export LC_MONETARY
+               [ -n "${LC_MESSAGES}" ] && export LC_MESSAGES
+               [ -n "${LC_ALL}" ] && export LC_ALL
+       fi
+
+       einfo "You can modify the paths and options passed to initdb by 
editing:"
+       einfo "    ${EROOT%/}/etc/conf.d/postgresql-${SLOT}"
+       einfo
+       einfo "Information on options that can be passed to initdb are found 
at:"
+       einfo "    
http://www.postgresql.org/docs/${SLOT}/static/creating-cluster.html";
+       einfo "    
http://www.postgresql.org/docs/${SLOT}/static/app-initdb.html";
+       einfo
+       einfo "PG_INITDB_OPTS is currently set to:"
+       if [[ -z "${PG_INITDB_OPTS}" ]] ; then
+               einfo "    (none)"
+       else
+               einfo "    ${PG_INITDB_OPTS}"
+       fi
+       einfo
+       einfo "Configuration files will be installed to:"
+       einfo "    ${PGDATA}"
+       einfo
+       einfo "The database cluster will be created in:"
+       einfo "    ${DATA_DIR}"
+       einfo
+
+       ebegin "Continuing initialization in 5 seconds (Control-C to cancel)"
+       sleep 5
+       eend 0
+
+       if [ -n "$(ls -A ${DATA_DIR} 2> /dev/null)" ] ; then
+               eerror "The given directory, '${DATA_DIR}', is not empty."
+               eerror "Modify DATA_DIR to point to an empty directory."
+               die "${DATA_DIR} is not empty."
+       fi
+
+       einfo "Creating the data directory ..."
+       if [[ ${EUID} == 0 ]] ; then
+               mkdir -p "${DATA_DIR}"
+               chown -Rf postgres:postgres "${DATA_DIR}"
+               chmod 0700 "${DATA_DIR}"
+       fi
+
+       einfo "Initializing the database ..."
+
+       if [[ ${EUID} == 0 ]] ; then
+               su postgres -c 
"${EROOT%/}/usr/$(get_libdir)/postgresql-${SLOT}/bin/initdb -D \"${DATA_DIR}\" 
${PG_INITDB_OPTS}"
+       else
+               "${EROOT%/}"/usr/$(get_libdir)/postgresql-${SLOT}/bin/initdb -U 
postgres -D "${DATA_DIR}" ${PG_INITDB_OPTS}
+       fi
+
+       if [[ "${DATA_DIR%/}" != "${PGDATA%/}" ]] ; then
+               mv "${DATA_DIR%/}"/{pg_{hba,ident},postgresql}.conf "${PGDATA}"
+               ln -s "${PGDATA%/}"/{pg_{hba,ident},postgresql}.conf 
"${DATA_DIR%/}"
+       fi
+
+       # unix_socket_directory has no effect in postgresql.conf as it's
+       # overridden in the initscript
+       sed '/^#unix_socket_directories/,+1d' -i "${PGDATA%/}"/postgresql.conf
+
+       cat <<- EOF >> "${PGDATA%/}"/postgresql.conf
+               # This is here because of 
https://bugs.gentoo.org/show_bug.cgi?id=518522
+               # On the off-chance that you might need to work with UTF-8 
encoded
+               # characters in PL/Perl
+               plperl.on_init = 'use utf8; use re; package utf8; require 
"utf8_heavy.pl";'
+       EOF
+
+       einfo "The autovacuum function, which was in contrib, has been moved to 
the main"
+       einfo "PostgreSQL functions starting with 8.1, and starting with 8.4 is 
now enabled"
+       einfo "by default. You can disable it in the cluster's:"
+       einfo "    ${PGDATA%/}/postgresql.conf"
+       einfo
+       einfo "The PostgreSQL server, by default, will log events to:"
+       einfo "    ${DATA_DIR%/}/postmaster.log"
+       einfo
+       if use prefix ; then
+               einfo "The location of the configuration files have moved to:"
+               einfo "    ${PGDATA}"
+               einfo "To start the server:"
+               einfo "    pg_ctl start -D ${DATA_DIR} -o '-D ${PGDATA} 
--data-directory=${DATA_DIR}'"
+               einfo "To stop:"
+               einfo "    pg_ctl stop -D ${DATA_DIR}"
+               einfo
+               einfo "Or move the configuration files back:"
+               einfo "mv ${PGDATA}*.conf ${DATA_DIR}"
+       else
+               einfo "You should use the 
'${EROOT%/}/etc/init.d/postgresql-${SLOT}' script to run PostgreSQL"
+               einfo "instead of 'pg_ctl'."
+       fi
+}
+
+src_test() {
+       if use server && [[ ${UID} -ne 0 ]] ; then
+               emake check
+
+               einfo "If you think other tests besides the regression tests 
are necessary, please"
+               einfo "submit a bug including a patch for this ebuild to enable 
them."
+       else
+               use server || \
+                       ewarn 'Tests cannot be run without the "server" use 
flag enabled.'
+               [[ ${UID} -eq 0 ]] || \
+                       ewarn 'Tests cannot be run as root. Enable "userpriv" 
in FEATURES.'
+
+               ewarn 'Skipping.'
+       fi
+}

diff --git a/dev-db/postgresql/postgresql-9.5.7.ebuild 
b/dev-db/postgresql/postgresql-9.5.7.ebuild
new file mode 100644
index 00000000000..71af0ab2c5a
--- /dev/null
+++ b/dev-db/postgresql/postgresql-9.5.7.ebuild
@@ -0,0 +1,478 @@
+# Copyright 1999-2017 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI="5"
+
+PYTHON_COMPAT=( python2_7 python3_{4,5,6} )
+
+inherit eutils flag-o-matic linux-info multilib pam prefix python-single-r1 \
+               systemd user versionator
+
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~mips ~ppc ~ppc64 ~s390 ~sh 
~sparc ~x86 ~amd64-fbsd ~sparc-fbsd ~x86-fbsd ~ppc-macos ~x86-solaris"
+
+SLOT="$(get_version_component_range 1-2)"
+
+SRC_URI="mirror://postgresql/source/v${PV}/postgresql-${PV}.tar.bz2"
+
+LICENSE="POSTGRESQL GPL-2"
+DESCRIPTION="PostgreSQL RDBMS"
+HOMEPAGE="http://www.postgresql.org/";
+
+LINGUAS="af cs de en es fa fr hr hu it ko nb pl pt_BR ro ru sk sl sv tr
+                zh_CN zh_TW"
+IUSE="doc kerberos kernel_linux ldap libressl nls pam perl -pg_legacytimestamp 
python
+         +readline selinux +server ssl static-libs tcl threads uuid xml zlib"
+
+for lingua in ${LINGUAS}; do
+       IUSE+=" linguas_${lingua}"
+done
+REQUIRED_USE="python? ( ${PYTHON_REQUIRED_USE} )"
+
+wanted_languages() {
+       local enable_langs
+
+       for lingua in ${LINGUAS} ; do
+               use linguas_${lingua} && enable_langs+="${lingua} "
+       done
+
+       echo -n ${enable_langs}
+}
+
+CDEPEND="
+>=app-eselect/eselect-postgresql-2.0
+sys-apps/less
+virtual/libintl
+kerberos? ( virtual/krb5 )
+ldap? ( net-nds/openldap )
+pam? ( virtual/pam )
+perl? ( >=dev-lang/perl-5.8:= )
+python? ( ${PYTHON_DEPS} )
+readline? ( sys-libs/readline:0= )
+ssl? (
+       !libressl? ( >=dev-libs/openssl-0.9.6-r1:0= )
+       libressl? ( dev-libs/libressl:= )
+)
+tcl? ( >=dev-lang/tcl-8:0= )
+xml? ( dev-libs/libxml2 dev-libs/libxslt )
+zlib? ( sys-libs/zlib )
+"
+
+# uuid flags -- depend on sys-apps/util-linux for Linux libcs, or if no
+# supported libc in use depend on dev-libs/ossp-uuid. For BSD systems,
+# the libc includes UUID functions.
+UTIL_LINUX_LIBC=( elibc_{glibc,uclibc,musl} )
+BSD_LIBC=( elibc_{Free,Net,Open}BSD )
+
+nest_usedep() {
+       local front back
+       while [[ ${#} -gt 1 ]]; do
+               front+="${1}? ( "
+               back+=" )"
+               shift
+       done
+       echo "${front}${1}${back}"
+}
+
+IUSE+=" ${UTIL_LINUX_LIBC[@]} ${BSD_LIBC[@]}"
+CDEPEND+="
+uuid? (
+       ${UTIL_LINUX_LIBC[@]/%/? ( sys-apps/util-linux )}
+       $(nest_usedep ${UTIL_LINUX_LIBC[@]/#/!} ${BSD_LIBC[@]/#/!} 
dev-libs/ossp-uuid)
+)"
+
+DEPEND="${CDEPEND}
+!!<sys-apps/sandbox-2.0
+sys-devel/bison
+sys-devel/flex
+nls? ( sys-devel/gettext )
+xml? ( virtual/pkgconfig )
+"
+
+RDEPEND="${CDEPEND}
+!dev-db/postgresql-docs:${SLOT}
+!dev-db/postgresql-base:${SLOT}
+!dev-db/postgresql-server:${SLOT}
+selinux? ( sec-policy/selinux-postgresql )
+"
+
+pkg_setup() {
+       use server && CONFIG_CHECK="~SYSVIPC" linux-info_pkg_setup
+
+       enewgroup postgres 70
+       enewuser postgres 70 /bin/sh /var/lib/postgresql postgres
+
+       use python && python-single-r1_pkg_setup
+}
+
+src_prepare() {
+       # Work around PPC{,64} compilation bug where bool is already defined
+       sed '/#ifndef __cplusplus/a #undef bool' -i src/include/c.h || die
+
+       # Set proper run directory
+       sed "s|\(PGSOCKET_DIR\s\+\)\"/tmp\"|\1\"${EPREFIX}/run/postgresql\"|" \
+               -i src/include/pg_config_manual.h || die
+
+       # Rely on $PATH being in the proper order so that the correct
+       # install program is used for modules utilizing PGXS in both
+       # hardened and non-hardened environments. (Bug #528786)
+       sed 's/@install_bin@/install -c/' -i src/Makefile.global.in || die
+
+       use server || epatch "${FILESDIR}/${PN}-9.5.5-no-server.patch"
+
+       # Fix bug 486556 where the server would crash at start up because of
+       # an infinite loop caused by a self-referencing symlink.
+       epatch "${FILESDIR}/postgresql-9.2-9.4-tz-dir-overflow.patch"
+
+       if use pam ; then
+               sed -e "s/\(#define PGSQL_PAM_SERVICE 
\"postgresql\)/\1-${SLOT}/" \
+                       -i src/backend/libpq/auth.c || \
+                       die 'PGSQL_PAM_SERVICE rename failed.'
+       fi
+
+       epatch_user
+}
+
+src_configure() {
+       case ${CHOST} in
+               *-darwin*|*-solaris*)
+                       use nls && append-libs intl
+                       ;;
+       esac
+
+       export LDFLAGS_SL="${LDFLAGS}"
+       export LDFLAGS_EX="${LDFLAGS}"
+
+       local PO="${EPREFIX%/}"
+
+       local i uuid_config=""
+       if use uuid; then
+               for i in ${UTIL_LINUX_LIBC[@]}; do
+                       use ${i} && uuid_config="--with-uuid=e2fs"
+               done
+               for i in ${BSD_LIBC[@]}; do
+                       use ${i} && uuid_config="--with-uuid=bsd"
+               done
+               [[ -z $uuid_config ]] && uuid_config="--with-uuid=ossp"
+       fi
+
+       econf \
+               --prefix="${PO}/usr/$(get_libdir)/postgresql-${SLOT}" \
+               --datadir="${PO}/usr/share/postgresql-${SLOT}" \
+               --docdir="${PO}/usr/share/doc/${PF}" \
+               --includedir="${PO}/usr/include/postgresql-${SLOT}" \
+               --mandir="${PO}/usr/share/postgresql-${SLOT}/man" \
+               --sysconfdir="${PO}/etc/postgresql-${SLOT}" \
+               --with-system-tzdata="${PO}/usr/share/zoneinfo" \
+               $(use_enable !alpha spinlocks) \
+               $(use_enable !pg_legacytimestamp integer-datetimes) \
+               $(use_enable threads thread-safety) \
+               $(use_with kerberos gssapi) \
+               $(use_with ldap) \
+               $(use_with pam) \
+               $(use_with perl) \
+               $(use_with python) \
+               $(use_with readline) \
+               $(use_with ssl openssl) \
+               $(use_with tcl) \
+               ${uuid_config} \
+               $(use_with xml libxml) \
+               $(use_with xml libxslt) \
+               $(use_with zlib) \
+               "$(use_enable nls nls "$(wanted_languages)")"
+}
+
+src_compile() {
+       emake
+       emake -C contrib
+}
+
+src_install() {
+       emake DESTDIR="${D}" install
+       emake DESTDIR="${D}" install -C contrib
+
+       dodoc README HISTORY doc/{TODO,bug.template}
+
+       # man pages are already built, but if we have the target make them,
+       # they'll be generated from source before being installed so we
+       # manually install man pages.
+       # We use ${SLOT} instead of doman for postgresql.eselect
+       insinto /usr/share/postgresql-${SLOT}/man/
+       doins -r doc/src/sgml/man{1,3,7}
+       if ! use server; then
+               # Remove man pages for non-existent binaries
+               for m in 
{initdb,pg_{controldata,ctl,resetxlog},post{gres,master}}; do
+                       rm "${ED}/usr/share/postgresql-${SLOT}/man/man1/${m}.1"
+               done
+       fi
+       docompress /usr/share/postgresql-${SLOT}/man/man{1,3,7}
+
+       insinto /etc/postgresql-${SLOT}
+       newins src/bin/psql/psqlrc.sample psqlrc
+
+       use static-libs || find "${ED}" -name '*.a' -delete
+
+       local f bn
+       for f in $(find "${ED}/usr/$(get_libdir)/postgresql-${SLOT}/bin" \
+                                       -mindepth 1 -maxdepth 1)
+       do
+               bn=$(basename "${f}")
+               # Temporarily tack on tmp to workaround a file collision
+               # issue. This is only necessary for 9.7 and earlier. 10 never
+               # had this issue.
+               dosym "../$(get_libdir)/postgresql-${SLOT}/bin/${bn}" \
+                         "/usr/bin/${bn}${SLOT/.}tmp"
+       done
+
+       local linkname mansec
+       for mansec in {1,3,7} ; do
+               for f in 
"${ED}"/usr/share/postgresql-${SLOT}/man/man${mansec}/* ; do
+                       bn=$(basename "${f}")
+                       linkname=${bn/%.${mansec}/${SLOT/.}.${mansec}}
+                       dosym ../../postgresql-${SLOT}/man/man${mansec}/$bn \
+                                 /usr/share/man/man${mansec}/${linkname}
+               done
+       done
+
+       if use doc ; then
+               docinto html
+               dodoc doc/src/sgml/html/*
+
+               docinto sgml
+               dodoc doc/src/sgml/*.{sgml,dsl}
+       fi
+
+       if use server; then
+               sed -e "s|@SLOT@|${SLOT}|g" -e "s|@LIBDIR@|$(get_libdir)|g" \
+                       "${FILESDIR}/${PN}.confd-9.3" | newconfd - ${PN}-${SLOT}
+
+               sed -e "s|@SLOT@|${SLOT}|g" -e "s|@LIBDIR@|$(get_libdir)|g" \
+                       "${FILESDIR}/${PN}.init-9.3-r1" | newinitd - 
${PN}-${SLOT}
+
+               sed -e "s|@SLOT@|${SLOT}|g" -e "s|@LIBDIR@|$(get_libdir)|g" \
+                       "${FILESDIR}/${PN}.service" | \
+                       systemd_newunit - ${PN}-${SLOT}.service
+
+               newbin "${FILESDIR}"/${PN}-check-db-dir 
${PN}-${SLOT}-check-db-dir
+
+               use pam && pamd_mimic system-auth ${PN}-${SLOT} auth account 
session
+
+               if use prefix ; then
+                       keepdir /run/postgresql
+                       fperms 0775 /run/postgresql
+               fi
+       fi
+}
+
+pkg_preinst() {
+       # Find all of the slot-specific symlinks, if any, in /usr/bin (e.g.,
+       # /usr/bin/psql96). They may have been created by the
+       # postgresql.eselect module, but they're handled within this ebuild
+       # now. It's alright if we momentarily delete /usr/bin/psql as it
+       # will be recreated by the eselect module in pkg_ppostinst(). This
+       # is only necessary for 9.7 and earlier. 10 and later were never
+       # handled in this manner.
+       local canonicalise
+       if type -p realpath > /dev/null; then
+               canonicalise=realpath
+       elif type -p readlink > /dev/null; then
+               canonicalise='readlink -f'
+       else
+               # can't die, subshell
+               die "No readlink nor realpath found, cannot canonicalise"
+       fi
+
+       local l
+       # First remove any symlinks in /usr/bin that may have been created
+       # by the old eselect
+       for l in $(find "${ROOT%/}/usr/bin" -mindepth 1 -maxdepth 1 -type l) ; 
do
+               if [[ $(${canonicalise} "${l}") == *postgresql-${SLOT}* ]] ; 
then
+                       rm "${l}" || ewarn "Couldn't remove ${l}"
+               fi
+       done
+
+       # Then move the symlinks created by the ebuild to their proper place.
+       for l in "${ED}"/usr/bin/*tmp ; do
+               mv "${l}" "${l%tmp}" \
+                       || ewarn "Couldn't rename $(basename ${l}) to 
$(basename ${l%tmp})"
+       done
+}
+
+pkg_postinst() {
+       postgresql-config update
+
+       if use alpha && use server ; then
+               ewarn "PostgreSQL 9.5+ no longer has native spinlock support on 
Alpha platforms."
+               ewarn "As a result, performance will be extremely degraded."
+       fi
+
+       elog "If you need a global psqlrc-file, you can place it in:"
+       elog "    ${EROOT%/}/etc/postgresql-${SLOT}/"
+
+       if use server ; then
+               elog
+               elog "Gentoo specific documentation:"
+               elog "https://wiki.gentoo.org/wiki/PostgreSQL";
+               elog
+               elog "Official documentation:"
+               elog "http://www.postgresql.org/docs/${SLOT}/static/index.html";
+               elog
+               elog "The default location of the Unix-domain socket is:"
+               elog "    ${EROOT%/}/run/postgresql/"
+               elog
+               elog "Before initializing the database, you may want to edit 
PG_INITDB_OPTS"
+               elog "so that it contains your preferred locale in:"
+               elog "    ${EROOT%/}/etc/conf.d/postgresql-${SLOT}"
+               elog
+               elog "Then, execute the following command to setup the initial 
database"
+               elog "environment:"
+               elog "    emerge --config =${CATEGORY}/${PF}"
+       fi
+}
+
+pkg_prerm() {
+       if use server && [[ -z ${REPLACED_BY_VERSION} ]] ; then
+               ewarn "Have you dumped and/or migrated the ${SLOT} database 
cluster?"
+               ewarn 
"\thttps://wiki.gentoo.org/wiki/PostgreSQL/QuickStart#Migrating_PostgreSQL";
+
+               ebegin "Resuming removal in 10 seconds (Control-C to cancel)"
+               sleep 10
+               eend 0
+       fi
+}
+
+pkg_postrm() {
+       postgresql-config update
+}
+
+pkg_config() {
+       use server || die "USE flag 'server' not enabled. Nothing to configure."
+
+       [[ -f "${EROOT%/}/etc/conf.d/postgresql-${SLOT}" ]] \
+               && source "${EROOT%/}/etc/conf.d/postgresql-${SLOT}"
+       [[ -z "${PGDATA}" ]] && PGDATA="${EROOT%/}/etc/postgresql-${SLOT}/"
+       [[ -z "${DATA_DIR}" ]] \
+               && DATA_DIR="${EROOT%/}/var/lib/postgresql/${SLOT}/data"
+
+       # environment.bz2 may not contain the same locale as the current system
+       # locale. Unset and source from the current system locale.
+       if [ -f "${EROOT%/}/etc/env.d/02locale" ]; then
+               unset LANG
+               unset LC_CTYPE
+               unset LC_NUMERIC
+               unset LC_TIME
+               unset LC_COLLATE
+               unset LC_MONETARY
+               unset LC_MESSAGES
+               unset LC_ALL
+               source "${EROOT%/}/etc/env.d/02locale"
+               [ -n "${LANG}" ] && export LANG
+               [ -n "${LC_CTYPE}" ] && export LC_CTYPE
+               [ -n "${LC_NUMERIC}" ] && export LC_NUMERIC
+               [ -n "${LC_TIME}" ] && export LC_TIME
+               [ -n "${LC_COLLATE}" ] && export LC_COLLATE
+               [ -n "${LC_MONETARY}" ] && export LC_MONETARY
+               [ -n "${LC_MESSAGES}" ] && export LC_MESSAGES
+               [ -n "${LC_ALL}" ] && export LC_ALL
+       fi
+
+       einfo "You can modify the paths and options passed to initdb by 
editing:"
+       einfo "    ${EROOT%/}/etc/conf.d/postgresql-${SLOT}"
+       einfo
+       einfo "Information on options that can be passed to initdb are found 
at:"
+       einfo "    
http://www.postgresql.org/docs/${SLOT}/static/creating-cluster.html";
+       einfo "    
http://www.postgresql.org/docs/${SLOT}/static/app-initdb.html";
+       einfo
+       einfo "PG_INITDB_OPTS is currently set to:"
+       if [[ -z "${PG_INITDB_OPTS}" ]] ; then
+               einfo "    (none)"
+       else
+               einfo "    ${PG_INITDB_OPTS}"
+       fi
+       einfo
+       einfo "Configuration files will be installed to:"
+       einfo "    ${PGDATA}"
+       einfo
+       einfo "The database cluster will be created in:"
+       einfo "    ${DATA_DIR}"
+       einfo
+
+       ebegin "Continuing initialization in 5 seconds (Control-C to cancel)"
+       sleep 5
+       eend 0
+
+       if [ -n "$(ls -A ${DATA_DIR} 2> /dev/null)" ] ; then
+               eerror "The given directory, '${DATA_DIR}', is not empty."
+               eerror "Modify DATA_DIR to point to an empty directory."
+               die "${DATA_DIR} is not empty."
+       fi
+
+       einfo "Creating the data directory ..."
+       if [[ ${EUID} == 0 ]] ; then
+               mkdir -p "${DATA_DIR}"
+               chown -Rf postgres:postgres "${DATA_DIR}"
+               chmod 0700 "${DATA_DIR}"
+       fi
+
+       einfo "Initializing the database ..."
+
+       if [[ ${EUID} == 0 ]] ; then
+               su postgres -c 
"${EROOT%/}/usr/$(get_libdir)/postgresql-${SLOT}/bin/initdb -D \"${DATA_DIR}\" 
${PG_INITDB_OPTS}"
+       else
+               "${EROOT%/}"/usr/$(get_libdir)/postgresql-${SLOT}/bin/initdb -U 
postgres -D "${DATA_DIR}" ${PG_INITDB_OPTS}
+       fi
+
+       if [[ "${DATA_DIR%/}" != "${PGDATA%/}" ]] ; then
+               mv "${DATA_DIR%/}"/{pg_{hba,ident},postgresql}.conf "${PGDATA}"
+               ln -s "${PGDATA%/}"/{pg_{hba,ident},postgresql}.conf 
"${DATA_DIR%/}"
+       fi
+
+       # unix_socket_directory has no effect in postgresql.conf as it's
+       # overridden in the initscript
+       sed '/^#unix_socket_directories/,+1d' -i "${PGDATA%/}"/postgresql.conf
+
+       cat <<- EOF >> "${PGDATA%/}"/postgresql.conf
+               # This is here because of 
https://bugs.gentoo.org/show_bug.cgi?id=518522
+               # On the off-chance that you might need to work with UTF-8 
encoded
+               # characters in PL/Perl
+               plperl.on_init = 'use utf8; use re; package utf8; require 
"utf8_heavy.pl";'
+       EOF
+
+       einfo "The autovacuum function, which was in contrib, has been moved to 
the main"
+       einfo "PostgreSQL functions starting with 8.1, and starting with 8.4 is 
now enabled"
+       einfo "by default. You can disable it in the cluster's:"
+       einfo "    ${PGDATA%/}/postgresql.conf"
+       einfo
+       einfo "The PostgreSQL server, by default, will log events to:"
+       einfo "    ${DATA_DIR%/}/postmaster.log"
+       einfo
+       if use prefix ; then
+               einfo "The location of the configuration files have moved to:"
+               einfo "    ${PGDATA}"
+               einfo "To start the server:"
+               einfo "    pg_ctl start -D ${DATA_DIR} -o '-D ${PGDATA} 
--data-directory=${DATA_DIR}'"
+               einfo "To stop:"
+               einfo "    pg_ctl stop -D ${DATA_DIR}"
+               einfo
+               einfo "Or move the configuration files back:"
+               einfo "mv ${PGDATA}*.conf ${DATA_DIR}"
+       else
+               einfo "You should use the 
'${EROOT%/}/etc/init.d/postgresql-${SLOT}' script to run PostgreSQL"
+               einfo "instead of 'pg_ctl'."
+       fi
+}
+
+src_test() {
+       if use server && [[ ${UID} -ne 0 ]] ; then
+               emake check
+
+               einfo "If you think other tests besides the regression tests 
are necessary, please"
+               einfo "submit a bug including a patch for this ebuild to enable 
them."
+       else
+               use server || \
+                       ewarn 'Tests cannot be run without the "server" use 
flag enabled.'
+               [[ ${UID} -eq 0 ]] || \
+                       ewarn 'Tests cannot be run as root. Enable "userpriv" 
in FEATURES.'
+
+               ewarn 'Skipping.'
+       fi
+}

diff --git a/dev-db/postgresql/postgresql-9.6.3.ebuild 
b/dev-db/postgresql/postgresql-9.6.3.ebuild
new file mode 100644
index 00000000000..80cb4316fd9
--- /dev/null
+++ b/dev-db/postgresql/postgresql-9.6.3.ebuild
@@ -0,0 +1,475 @@
+# Copyright 1999-2017 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI="5"
+
+PYTHON_COMPAT=( python2_7 python3_{4,5,6} )
+
+inherit eutils flag-o-matic linux-info multilib pam prefix python-single-r1 \
+               systemd user versionator
+
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~mips ~ppc ~ppc64 ~s390 ~sh 
~sparc ~x86 ~amd64-fbsd ~sparc-fbsd ~x86-fbsd ~ppc-macos ~x86-solaris"
+
+SLOT="$(get_version_component_range 1-2)"
+
+MY_PV=${PV/_/}
+S="${WORKDIR}/${PN}-${MY_PV}"
+
+SRC_URI="mirror://postgresql/source/v${MY_PV}/postgresql-${MY_PV}.tar.bz2"
+
+LICENSE="POSTGRESQL GPL-2"
+DESCRIPTION="PostgreSQL RDBMS"
+HOMEPAGE="http://www.postgresql.org/";
+
+LINGUAS="af cs de en es fa fr hr hu it ko nb pl pt_BR ro ru sk sl sv tr
+                zh_CN zh_TW"
+IUSE="doc kerberos kernel_linux ldap libressl nls pam perl -pg_legacytimestamp 
python
+         +readline selinux +server ssl static-libs tcl threads uuid xml zlib"
+
+for lingua in ${LINGUAS}; do
+       IUSE+=" linguas_${lingua}"
+done
+REQUIRED_USE="python? ( ${PYTHON_REQUIRED_USE} )"
+
+wanted_languages() {
+       local enable_langs
+
+       for lingua in ${LINGUAS} ; do
+               use linguas_${lingua} && enable_langs+="${lingua} "
+       done
+
+       echo -n ${enable_langs}
+}
+
+CDEPEND="
+>=app-eselect/eselect-postgresql-2.0
+sys-apps/less
+virtual/libintl
+kerberos? ( virtual/krb5 )
+ldap? ( net-nds/openldap )
+pam? ( virtual/pam )
+perl? ( >=dev-lang/perl-5.8:= )
+python? ( ${PYTHON_DEPS} )
+readline? ( sys-libs/readline:0= )
+ssl? (
+       !libressl? ( >=dev-libs/openssl-0.9.6-r1:0= )
+       libressl? ( dev-libs/libressl:= )
+)
+tcl? ( >=dev-lang/tcl-8:0= )
+xml? ( dev-libs/libxml2 dev-libs/libxslt )
+zlib? ( sys-libs/zlib )
+"
+
+# uuid flags -- depend on sys-apps/util-linux for Linux libcs, or if no
+# supported libc in use depend on dev-libs/ossp-uuid. For BSD systems,
+# the libc includes UUID functions.
+UTIL_LINUX_LIBC=( elibc_{glibc,uclibc,musl} )
+BSD_LIBC=( elibc_{Free,Net,Open}BSD )
+
+nest_usedep() {
+       local front back
+       while [[ ${#} -gt 1 ]]; do
+               front+="${1}? ( "
+               back+=" )"
+               shift
+       done
+       echo "${front}${1}${back}"
+}
+
+IUSE+=" ${UTIL_LINUX_LIBC[@]} ${BSD_LIBC[@]}"
+CDEPEND+="
+uuid? (
+       ${UTIL_LINUX_LIBC[@]/%/? ( sys-apps/util-linux )}
+       $(nest_usedep ${UTIL_LINUX_LIBC[@]/#/!} ${BSD_LIBC[@]/#/!} 
dev-libs/ossp-uuid)
+)"
+
+DEPEND="${CDEPEND}
+!!<sys-apps/sandbox-2.0
+sys-devel/bison
+sys-devel/flex
+nls? ( sys-devel/gettext )
+xml? ( virtual/pkgconfig )
+"
+
+RDEPEND="${CDEPEND}
+!dev-db/postgresql-docs:${SLOT}
+!dev-db/postgresql-base:${SLOT}
+!dev-db/postgresql-server:${SLOT}
+selinux? ( sec-policy/selinux-postgresql )
+"
+
+pkg_setup() {
+       use server && CONFIG_CHECK="~SYSVIPC" linux-info_pkg_setup
+
+       enewgroup postgres 70
+       enewuser postgres 70 /bin/sh /var/lib/postgresql postgres
+
+       use python && python-single-r1_pkg_setup
+}
+
+src_prepare() {
+       # Work around PPC{,64} compilation bug where bool is already defined
+       sed '/#ifndef __cplusplus/a #undef bool' -i src/include/c.h || die
+
+       # Set proper run directory
+       sed "s|\(PGSOCKET_DIR\s\+\)\"/tmp\"|\1\"${EPREFIX}/run/postgresql\"|" \
+               -i src/include/pg_config_manual.h || die
+
+       # Rely on $PATH being in the proper order so that the correct
+       # install program is used for modules utilizing PGXS in both
+       # hardened and non-hardened environments. (Bug #528786)
+       sed 's/@install_bin@/install -c/' -i src/Makefile.global.in || die
+
+       use server || epatch "${FILESDIR}/${PN}-${SLOT}.1-no-server.patch"
+
+       # Fix bug 486556 where the server would crash at start up because of
+       # an infinite loop caused by a self-referencing symlink.
+       epatch "${FILESDIR}/postgresql-9.2-9.4-tz-dir-overflow.patch"
+
+       if use pam ; then
+               sed -e "s/\(#define PGSQL_PAM_SERVICE 
\"postgresql\)/\1-${SLOT}/" \
+                       -i src/backend/libpq/auth.c || \
+                       die 'PGSQL_PAM_SERVICE rename failed.'
+       fi
+
+       epatch_user
+}
+
+src_configure() {
+       case ${CHOST} in
+               *-darwin*|*-solaris*)
+                       use nls && append-libs intl
+                       ;;
+       esac
+
+       export LDFLAGS_SL="${LDFLAGS}"
+       export LDFLAGS_EX="${LDFLAGS}"
+
+       local PO="${EPREFIX%/}"
+
+       local i uuid_config=""
+       if use uuid; then
+               for i in ${UTIL_LINUX_LIBC[@]}; do
+                       use ${i} && uuid_config="--with-uuid=e2fs"
+               done
+               for i in ${BSD_LIBC[@]}; do
+                       use ${i} && uuid_config="--with-uuid=bsd"
+               done
+               [[ -z $uuid_config ]] && uuid_config="--with-uuid=ossp"
+       fi
+
+       econf \
+               --prefix="${PO}/usr/$(get_libdir)/postgresql-${SLOT}" \
+               --datadir="${PO}/usr/share/postgresql-${SLOT}" \
+               --docdir="${PO}/usr/share/doc/${PF}" \
+               --includedir="${PO}/usr/include/postgresql-${SLOT}" \
+               --mandir="${PO}/usr/share/postgresql-${SLOT}/man" \
+               --sysconfdir="${PO}/etc/postgresql-${SLOT}" \
+               --with-system-tzdata="${PO}/usr/share/zoneinfo" \
+               $(use_enable !pg_legacytimestamp integer-datetimes) \
+               $(use_enable threads thread-safety) \
+               $(use_with kerberos gssapi) \
+               $(use_with ldap) \
+               $(use_with pam) \
+               $(use_with perl) \
+               $(use_with python) \
+               $(use_with readline) \
+               $(use_with ssl openssl) \
+               $(use_with tcl) \
+               ${uuid_config} \
+               $(use_with xml libxml) \
+               $(use_with xml libxslt) \
+               $(use_with zlib) \
+               "$(use_enable nls nls "$(wanted_languages)")"
+}
+
+src_compile() {
+       emake
+       emake -C contrib
+}
+
+src_install() {
+       emake DESTDIR="${D}" install
+       emake DESTDIR="${D}" install -C contrib
+
+       dodoc README HISTORY doc/{TODO,bug.template}
+
+       # man pages are already built, but if we have the target make them,
+       # they'll be generated from source before being installed so we
+       # manually install man pages.
+       # We use ${SLOT} instead of doman for postgresql.eselect
+       insinto /usr/share/postgresql-${SLOT}/man/
+       doins -r doc/src/sgml/man{1,3,7}
+       if ! use server; then
+               # Remove man pages for non-existent binaries
+               for m in 
{initdb,pg_{controldata,ctl,resetxlog},post{gres,master}}; do
+                       rm "${ED}/usr/share/postgresql-${SLOT}/man/man1/${m}.1"
+               done
+       fi
+       docompress /usr/share/postgresql-${SLOT}/man/man{1,3,7}
+
+       insinto /etc/postgresql-${SLOT}
+       newins src/bin/psql/psqlrc.sample psqlrc
+
+       use static-libs || find "${ED}" -name '*.a' -delete
+
+       local f bn
+       for f in $(find "${ED}/usr/$(get_libdir)/postgresql-${SLOT}/bin" \
+                                       -mindepth 1 -maxdepth 1)
+       do
+               bn=$(basename "${f}")
+               # Temporarily tack on tmp to workaround a file collision
+               # issue. This is only necessary for 9.7 and earlier. 10 never
+               # had this issue.
+               dosym "../$(get_libdir)/postgresql-${SLOT}/bin/${bn}" \
+                         "/usr/bin/${bn}${SLOT/.}tmp"
+       done
+
+       local linkname mansec
+       for mansec in {1,3,7} ; do
+               for f in 
"${ED}"/usr/share/postgresql-${SLOT}/man/man${mansec}/* ; do
+                       bn=$(basename "${f}")
+                       linkname=${bn/%.${mansec}/${SLOT/.}.${mansec}}
+                       dosym ../../postgresql-${SLOT}/man/man${mansec}/$bn \
+                                 /usr/share/man/man${mansec}/${linkname}
+               done
+       done
+
+       if use doc ; then
+               docinto html
+               dodoc doc/src/sgml/html/*
+
+               docinto sgml
+               dodoc doc/src/sgml/*.{sgml,dsl}
+       fi
+
+       if use server; then
+               sed -e "s|@SLOT@|${SLOT}|g" -e "s|@LIBDIR@|$(get_libdir)|g" \
+                       "${FILESDIR}/${PN}.confd-9.3" | newconfd - ${PN}-${SLOT}
+
+               sed -e "s|@SLOT@|${SLOT}|g" -e "s|@LIBDIR@|$(get_libdir)|g" \
+                       "${FILESDIR}/${PN}.init-9.3-r1" | newinitd - 
${PN}-${SLOT}
+
+               sed -e "s|@SLOT@|${SLOT}|g" -e "s|@LIBDIR@|$(get_libdir)|g" \
+                       "${FILESDIR}/${PN}.service" | \
+                       systemd_newunit - ${PN}-${SLOT}.service
+
+               newbin "${FILESDIR}"/${PN}-check-db-dir 
${PN}-${SLOT}-check-db-dir
+
+               use pam && pamd_mimic system-auth ${PN}-${SLOT} auth account 
session
+
+               if use prefix ; then
+                       keepdir /run/postgresql
+                       fperms 0775 /run/postgresql
+               fi
+       fi
+}
+
+pkg_preinst() {
+       # Find all of the slot-specific symlinks, if any, in /usr/bin (e.g.,
+       # /usr/bin/psql96). They may have been created by the
+       # postgresql.eselect module, but they're handled within this ebuild
+       # now. It's alright if we momentarily delete /usr/bin/psql as it
+       # will be recreated by the eselect module in pkg_ppostinst(). This
+       # is only necessary for 9.7 and earlier. 10 and later were never
+       # handled in this manner.
+       local canonicalise
+       if type -p realpath > /dev/null; then
+               canonicalise=realpath
+       elif type -p readlink > /dev/null; then
+               canonicalise='readlink -f'
+       else
+               # can't die, subshell
+               die "No readlink nor realpath found, cannot canonicalise"
+       fi
+
+       local l
+       # First remove any symlinks in /usr/bin that may have been created
+       # by the old eselect
+       for l in $(find "${ROOT%/}/usr/bin" -mindepth 1 -maxdepth 1 -type l) ; 
do
+               if [[ $(${canonicalise} "${l}") == *postgresql-${SLOT}* ]] ; 
then
+                       rm "${l}" || ewarn "Couldn't remove ${l}"
+               fi
+       done
+
+       # Then move the symlinks created by the ebuild to their proper place.
+       for l in "${ED}"/usr/bin/*tmp ; do
+               mv "${l}" "${l%tmp}" \
+                       || ewarn "Couldn't rename $(basename ${l}) to 
$(basename ${l%tmp})"
+       done
+}
+
+pkg_postinst() {
+       postgresql-config update
+
+       elog "If you need a global psqlrc-file, you can place it in:"
+       elog "    ${EROOT%/}/etc/postgresql-${SLOT}/"
+
+       if use server ; then
+               elog
+               elog "Gentoo specific documentation:"
+               elog "https://wiki.gentoo.org/wiki/PostgreSQL";
+               elog
+               elog "Official documentation:"
+               elog "http://www.postgresql.org/docs/${SLOT}/static/index.html";
+               elog
+               elog "The default location of the Unix-domain socket is:"
+               elog "    ${EROOT%/}/run/postgresql/"
+               elog
+               elog "Before initializing the database, you may want to edit 
PG_INITDB_OPTS"
+               elog "so that it contains your preferred locale in:"
+               elog "    ${EROOT%/}/etc/conf.d/postgresql-${SLOT}"
+               elog
+               elog "Then, execute the following command to setup the initial 
database"
+               elog "environment:"
+               elog "    emerge --config =${CATEGORY}/${PF}"
+       fi
+}
+
+pkg_prerm() {
+       if use server && [[ -z ${REPLACED_BY_VERSION} ]] ; then
+               ewarn "Have you dumped and/or migrated the ${SLOT} database 
cluster?"
+               ewarn 
"\thttps://wiki.gentoo.org/wiki/PostgreSQL/QuickStart#Migrating_PostgreSQL";
+
+               ebegin "Resuming removal in 10 seconds (Control-C to cancel)"
+               sleep 10
+               eend 0
+       fi
+}
+
+pkg_postrm() {
+       postgresql-config update
+}
+
+pkg_config() {
+       use server || die "USE flag 'server' not enabled. Nothing to configure."
+
+       [[ -f "${EROOT%/}/etc/conf.d/postgresql-${SLOT}" ]] \
+               && source "${EROOT%/}/etc/conf.d/postgresql-${SLOT}"
+       [[ -z "${PGDATA}" ]] && PGDATA="${EROOT%/}/etc/postgresql-${SLOT}/"
+       [[ -z "${DATA_DIR}" ]] \
+               && DATA_DIR="${EROOT%/}/var/lib/postgresql/${SLOT}/data"
+
+       # environment.bz2 may not contain the same locale as the current system
+       # locale. Unset and source from the current system locale.
+       if [ -f "${EROOT%/}/etc/env.d/02locale" ]; then
+               unset LANG
+               unset LC_CTYPE
+               unset LC_NUMERIC
+               unset LC_TIME
+               unset LC_COLLATE
+               unset LC_MONETARY
+               unset LC_MESSAGES
+               unset LC_ALL
+               source "${EROOT%/}/etc/env.d/02locale"
+               [ -n "${LANG}" ] && export LANG
+               [ -n "${LC_CTYPE}" ] && export LC_CTYPE
+               [ -n "${LC_NUMERIC}" ] && export LC_NUMERIC
+               [ -n "${LC_TIME}" ] && export LC_TIME
+               [ -n "${LC_COLLATE}" ] && export LC_COLLATE
+               [ -n "${LC_MONETARY}" ] && export LC_MONETARY
+               [ -n "${LC_MESSAGES}" ] && export LC_MESSAGES
+               [ -n "${LC_ALL}" ] && export LC_ALL
+       fi
+
+       einfo "You can modify the paths and options passed to initdb by 
editing:"
+       einfo "    ${EROOT%/}/etc/conf.d/postgresql-${SLOT}"
+       einfo
+       einfo "Information on options that can be passed to initdb are found 
at:"
+       einfo "    
http://www.postgresql.org/docs/${SLOT}/static/creating-cluster.html";
+       einfo "    
http://www.postgresql.org/docs/${SLOT}/static/app-initdb.html";
+       einfo
+       einfo "PG_INITDB_OPTS is currently set to:"
+       if [[ -z "${PG_INITDB_OPTS}" ]] ; then
+               einfo "    (none)"
+       else
+               einfo "    ${PG_INITDB_OPTS}"
+       fi
+       einfo
+       einfo "Configuration files will be installed to:"
+       einfo "    ${PGDATA}"
+       einfo
+       einfo "The database cluster will be created in:"
+       einfo "    ${DATA_DIR}"
+       einfo
+
+       ebegin "Continuing initialization in 5 seconds (Control-C to cancel)"
+       sleep 5
+       eend 0
+
+       if [ -n "$(ls -A ${DATA_DIR} 2> /dev/null)" ] ; then
+               eerror "The given directory, '${DATA_DIR}', is not empty."
+               eerror "Modify DATA_DIR to point to an empty directory."
+               die "${DATA_DIR} is not empty."
+       fi
+
+       einfo "Creating the data directory ..."
+       if [[ ${EUID} == 0 ]] ; then
+               mkdir -p "${DATA_DIR}"
+               chown -Rf postgres:postgres "${DATA_DIR}"
+               chmod 0700 "${DATA_DIR}"
+       fi
+
+       einfo "Initializing the database ..."
+
+       if [[ ${EUID} == 0 ]] ; then
+               su postgres -c 
"${EROOT%/}/usr/$(get_libdir)/postgresql-${SLOT}/bin/initdb -D \"${DATA_DIR}\" 
${PG_INITDB_OPTS}"
+       else
+               "${EROOT%/}"/usr/$(get_libdir)/postgresql-${SLOT}/bin/initdb -U 
postgres -D "${DATA_DIR}" ${PG_INITDB_OPTS}
+       fi
+
+       if [[ "${DATA_DIR%/}" != "${PGDATA%/}" ]] ; then
+               mv "${DATA_DIR%/}"/{pg_{hba,ident},postgresql}.conf "${PGDATA}"
+               ln -s "${PGDATA%/}"/{pg_{hba,ident},postgresql}.conf 
"${DATA_DIR%/}"
+       fi
+
+       # unix_socket_directory has no effect in postgresql.conf as it's
+       # overridden in the initscript
+       sed '/^#unix_socket_directories/,+1d' -i "${PGDATA%/}"/postgresql.conf
+
+       cat <<- EOF >> "${PGDATA%/}"/postgresql.conf
+               # This is here because of 
https://bugs.gentoo.org/show_bug.cgi?id=518522
+               # On the off-chance that you might need to work with UTF-8 
encoded
+               # characters in PL/Perl
+               plperl.on_init = 'use utf8; use re; package utf8; require 
"utf8_heavy.pl";'
+       EOF
+
+       einfo "The autovacuum function, which was in contrib, has been moved to 
the main"
+       einfo "PostgreSQL functions starting with 8.1, and starting with 8.4 is 
now enabled"
+       einfo "by default. You can disable it in the cluster's:"
+       einfo "    ${PGDATA%/}/postgresql.conf"
+       einfo
+       einfo "The PostgreSQL server, by default, will log events to:"
+       einfo "    ${DATA_DIR%/}/postmaster.log"
+       einfo
+       if use prefix ; then
+               einfo "The location of the configuration files have moved to:"
+               einfo "    ${PGDATA}"
+               einfo "To start the server:"
+               einfo "    pg_ctl start -D ${DATA_DIR} -o '-D ${PGDATA} 
--data-directory=${DATA_DIR}'"
+               einfo "To stop:"
+               einfo "    pg_ctl stop -D ${DATA_DIR}"
+               einfo
+               einfo "Or move the configuration files back:"
+               einfo "mv ${PGDATA}*.conf ${DATA_DIR}"
+       else
+               einfo "You should use the 
'${EROOT%/}/etc/init.d/postgresql-${SLOT}' script to run PostgreSQL"
+               einfo "instead of 'pg_ctl'."
+       fi
+}
+
+src_test() {
+       if use server && [[ ${UID} -ne 0 ]] ; then
+               emake check
+
+               einfo "If you think other tests besides the regression tests 
are necessary, please"
+               einfo "submit a bug including a patch for this ebuild to enable 
them."
+       else
+               use server || \
+                       ewarn 'Tests cannot be run without the "server" use 
flag enabled.'
+               [[ ${UID} -eq 0 ]] || \
+                       ewarn 'Tests cannot be run as root. Enable "userpriv" 
in FEATURES.'
+
+               ewarn 'Skipping.'
+       fi
+}

Reply via email to