# Copyright 1999-2008 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Header: $ EAPI="1" WANT_AUTOCONF="latest" WANT_AUTOMAKE="none" inherit eutils gnuconfig multilib toolchain-funcs versionator autotools KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~sparc-fbsd ~x86 ~x86-fbsd" DESCRIPTION="PostgreSQL server" HOMEPAGE="http://www.postgresql.org/" SRC_URI="mirror://postgresql/source/v${PV}/postgresql-${PV}.tar.bz2" LICENSE="POSTGRESQL" SLOT="$(get_version_component_range 1-2)" IUSE_LINGUAS=" linguas_cs linguas_de linguas_es linguas_fr linguas_hr linguas_hu linguas_it linguas_nb linguas_pt_BR linguas_ru linguas_sl linguas_sv linguas_tr linguas_zh_CN linguas_zh_TW" IUSE="doc perl python selinux test tcl xml nls kernel_linux ${IUSE_LINGUAS}" wanted_languages() { for u in ${IUSE_LINGUAS} ; do use $u && echo ${u#linguas_} done } RDEPEND="~dev-db/postgresql-base-${PV}:${SLOT} perl? ( >=dev-lang/perl-5.6.1-r2 ) python? ( >=dev-lang/python-2.2 dev-python/egenix-mx-base ) selinux? ( sec-policy/selinux-postgresql ) tcl? ( >=dev-lang/tcl-8 ) xml? ( dev-libs/libxml2 dev-libs/libxslt )" DEPEND="${RDEPEND} xml? ( dev-util/pkgconfig )" PDEPEND="doc? ( dev-db/postgresql-docs:${SLOT} )" [[ -r /etc/conf.d/postgresql-${SLOT} ]] && source /etc/conf.d/postgresql-${SLOT} [[ -z "${PGDATA}" ]] && PGDATA="/var/lib/postgresql/${SLOT}/data" [[ -z "${PG_MAX_CONNECTIONS}" ]] && PG_MAX_CONNECTIONS="512" S="${WORKDIR}/postgresql-${PV}" pkg_setup() { if [[ -f "${PGDATA}/PG_VERSION" ]] ; then if [[ $(cat "${PGDATA}/PG_VERSION") != $(get_version_component_range 1-2) ]] ; then eerror "PostgreSQL ${PV} cannot upgrade your existing databases, you must" eerror "use pg_dump to export your existing databases to a file, and then" eerror "pg_restore to import them when you have upgraded completely." eerror "You must remove your entire database directory to continue." eerror "(database directory = ${PGDATA})." die "Remove your database directory to continue" fi fi enewgroup postgres 70 enewuser postgres 70 /bin/bash /var/lib postgres } src_unpack() { unpack ${A} cd "${S}" epatch "${FILESDIR}/postgresql-${PV}-autoconf.patch" epatch "${FILESDIR}/postgresql-${SLOT}-vacuum-delay.patch" epatch "${FILESDIR}/postgresql-${SLOT}-server.patch" if use test ; then epatch "${FILESDIR}/postgresql-${SLOT}-regress.patch" fi eautoreconf } src_compile() { # TODO: test if PPC really cannot work with other CFLAGS settings # use ppc && CFLAGS="-pipe -fsigned-char" # eval is needed to get along with pg_config quotation of space-rich entities. eval econf "$(/usr/$(get_libdir)/postgresql-${SLOT}/bin/pg_config --configure)" \ $(use_with perl) \ $(use_with python) \ $(use_with tcl) \ --with-includes="/usr/include/postgresql-${SLOT}/" \ --with-libs="/usr/$(get_libdir)/postgresql-${SLOT}/$(get_libdir)/" \ "$(built_with_use ~dev-db/postgresql-base-${PV} nls && use_enable nls nls "$(wanted_languages)")" \ "CFLAGS='${CFLAGS} $(use xml && pkg-config --cflags libxml-2.0)'" \ "LIBS='${LIBS} $(use xml && pkg-config --libs libxml-2.0) -L/usr/$(get_libdir)/postgresql-${SLOT}/$(get_libdir)'" \ || die "configure failed" for bd in . contrib $(use xml && echo contrib/xml) ; do PATH="/usr/$(get_libdir)/postgresql-${SLOT}/bin:${PATH}" \ emake -C $bd -j1 LD="$(tc-getLD) $(get_abi_LDFLAGS)" \ docdir=/usr/share/doc/${PF} SLOT=${SLOT} || die "emake in $bd failed" done } src_install() { if use perl ; then mv -f "${S}/src/pl/plperl/GNUmakefile" "${S}/src/pl/plperl/GNUmakefile_orig" sed -e "s:\$(DESTDIR)\$(plperl_installdir):\$(plperl_installdir):" \ "${S}/src/pl/plperl/GNUmakefile_orig" > "${S}/src/pl/plperl/GNUmakefile" fi for bd in . contrib $(use xml && echo contrib/xml) ; do PATH="/usr/$(get_libdir)/postgresql-${SLOT}/bin:${PATH}" \ emake install -C $bd -j1 DESTDIR="${D}" \ docdir=/usr/share/doc/${PF} SLOT=${SLOT} || die "emake install in $bd failed" done rm -rf "${D}/usr/share/postgresql-${SLOT}/man/man7/" rm "${D}"/usr/share/postgresql-${SLOT}/man/man1/{clusterdb,create{db,lang,user},drop{db,lang,user},ecpg,pg_{config,dump,dumpall,restore},psql,vacuumdb,pgtksh,pgtclsh}.1 dodoc README HISTORY doc/{README.*,TODO,bug.template} dodir /usr/$(get_libdir)/eselect-postgresql/slots/${SLOT} cat >"${D}/usr/$(get_libdir)/eselect-postgresql/slots/${SLOT}/service" <<-__EOF__ postgres_ebuilds="\${postgres_ebuilds} ${PF}" postgres_service="postgresql-${SLOT}" __EOF__ newinitd "${FILESDIR}/postgresql.init-${SLOT}" postgresql-${SLOT} || die "Inserting init.d-file failed" newconfd "${FILESDIR}/postgresql.conf-${SLOT}" postgresql-${SLOT} || die "Inserting conf.d-file failed" } pkg_postinst() { eselect postgresql update [[ "$(eselect postgresql show)" = "(none)" ]] && eselect postgresql set ${SLOT} [[ "$(eselect postgresql show-service)" = "(none)" ]] && eselect postgresql set-service ${SLOT} elog "Execute the following command to setup the initial database environment:" elog elog "emerge --config =${CATEGORY}/${PF}" elog } pkg_postrm() { eselect postgresql update } pkg_config() { einfo "Creating the data directory ..." mkdir -p "${PGDATA}" chown -Rf postgres:postgres "${PGDATA}" chmod 0700 "${PGDATA}" einfo "Initializing the database ..." if [[ -f "${PGDATA}/PG_VERSION" ]] ; then eerror "PostgreSQL ${PV} cannot upgrade your existing databases." eerror "You must remove your entire database directory to continue." eerror "(database directory = ${PGDATA})." die "Remove your database directory to continue" else if use kernel_linux ; then local SEM=`sysctl -n kernel.sem | cut -f-3` local SEMMNI=`sysctl -n kernel.sem | cut -f4` local SEMMNI_MIN=`expr \( ${PG_MAX_CONNECTIONS} + 15 \) / 16` local SHMMAX=`sysctl -n kernel.shmmax` local SHMMAX_MIN=`expr 500000 + 30600 \* ${PG_MAX_CONNECTIONS}` if [ ${SEMMNI} -lt ${SEMMNI_MIN} ] ; then eerror "The current value of SEMMNI is too low" eerror "for PostgreSQL to run ${PG_MAX_CONNECTIONS} connections!" eerror "Temporary setting this value to ${SEMMNI_MIN} while creating the initial database." echo ${SEM} ${SEMMNI_MIN} > /proc/sys/kernel/sem fi su postgres -c "/usr/$(get_libdir)/postgresql-${SLOT}/bin/initdb --pgdata ${PGDATA} ${PG_INITDB_OPTS}" if [ ! `sysctl -n kernel.sem | cut -f4` -eq ${SEMMNI} ] ; then echo ${SEM} ${SEMMNI} > /proc/sys/kernel/sem ewarn "Restoring the SEMMNI value to the previous value." ewarn "Please edit the last value of kernel.sem in /etc/sysctl.conf" ewarn "and set it to at least ${SEMMNI_MIN}:" ewarn ewarn " kernel.sem = ${SEM} ${SEMMNI_MIN}" ewarn fi if [ ${SHMMAX} -lt ${SHMMAX_MIN} ] ; then eerror "The current value of SHMMAX is too low for postgresql to run." eerror "Please edit /etc/sysctl.conf and set this value to at least ${SHMMAX_MIN}:" eerror eerror " kernel.shmmax = ${SHMMAX_MIN}" eerror fi else su postgres -c "/usr/$(get_libdir)/postgresql-${SLOT}/bin/initdb --pgdata ${PGDATA} ${PG_INITDB_OPTS}" fi einfo einfo "You can use the '${ROOT}/etc/init.d/postgresql-${SLOT}' script to run PostgreSQL instead of 'pg_ctl'." einfo fi } src_test() { einfo ">>> Test phase [check]: ${CATEGORY}/${PF}" PATH="/usr/$(get_libdir)/postgresql-${SLOT}/bin:${PATH}" \ emake -j1 check \ PGXS=$(/usr/$(get_libdir)/postgresql-${SLOT}/bin/pg_config --pgxs) \ NO_PGXS=0 USE_PGXS=1 SLOT=${SLOT} || die "Make check failed. See above for details." einfo "Yes, there are other tests which could be run." einfo "... and no, we don't plan to add/support them." einfo "For now, the main regressions tests will suffice." einfo "If you think other tests are necessary, please submit a" einfo "bug including a patch for this ebuild to enable them." }