# Copyright 1999-2012 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Header: /var/cvsroot/gentoo-x86/dev-db/postgis/postgis-1.5.3-r1.ebuild,v 1.4 2012/03/06 21:24:46 ranger Exp $ EAPI="4" inherit eutils versionator DESCRIPTION="Geographic Objects for PostgreSQL" HOMEPAGE="http://postgis.refractions.net" SRC_URI="http://postgis.refractions.net/download/${P}.tar.gz" LICENSE="GPL-2" SLOT="0" KEYWORDS="amd64 ppc x86" IUSE="doc gtk" RDEPEND=" || ( dev-db/postgresql-server:9.0 dev-db/postgresql-server:8.4 dev-db/postgresql-server:8.3 dev-db/postgresql-server:9.1 ) dev-libs/libxml2:2 >=sci-libs/geos-3.2 >=sci-libs/proj-4.6.0 gtk? ( x11-libs/gtk+:2 ) " DEPEND="${RDEPEND} doc? ( app-text/docbook-xsl-stylesheets app-text/docbook-xml-dtd:4.3 dev-libs/libxslt || ( media-gfx/imagemagick media-gfx/graphicsmagick[imagemagick] ) ) " RESTRICT="test" PGIS="$(get_version_component_range 1-2)" # not parallel safe MAKEOPTS+=" -j1" pkg_setup() { export PGSLOT="$(postgresql-config show)" if [[ ${PGSLOT//.} < 83 ]] ; then eerror "You must build ${CATEGORY}/${PN} against PostgreSQL 8.3 or higher." eerror "Set an appropriate slot with postgresql-config." die "postgresql-config not set to 8.3 or higher." fi if [[ ${PGSLOT//.} > 90 ]] ; then ewarn "You are building ${CATEGORY}/${PN} against a version of PostgreSQL greater than 9.0." ewarn "This is neither supported here nor upstream." ewarn "However, all indicators show that this should work." ewarn "Any bugs you encounter should be reported upstream." fi } src_configure() { local myargs="" use gtk && myargs+=" --with-gui" econf \ ${myargs} } src_compile() { # Occasionally, builds fail because of out of order compilation. # Otherwise, it'd be fine. emake emake -C topology use doc && emake -C doc } src_install() { emake DESTDIR="${D}" install emake -C topology DESTDIR="${D}" install cd "${S}" dodoc CREDITS TODO loader/README.* doc/*txt docinto topology dodoc topology/{TODO,README} dobin ./utils/postgis_restore.pl if use doc; then cd doc/html dohtml -r * fi insinto /etc doins "${FILESDIR}/postgis_dbs" cd "${S}/doc" doman man/* insinto /usr/share/postgresql-${PGSLOT}/contrib/postgis-${PGIS}/ doins postgis_comments.sql } pkg_postinst() { postgresql-config update elog "To finish installing or updating PostGIS edit:" elog " ${EROOT%/}/etc/postgis_dbs" elog elog "Then, run:" elog " emerge --config =${CATEGORY}/${PF}" } pkg_config(){ source "${EROOT%/}/etc/conf.d/postgresql-${PGSLOT}" source "${EROOT%/}/etc/postgis_dbs" local postgis_path="${EROOT%/}/usr/share/postgresql-${PGSLOT}/contrib/postgis-${PGIS}" if [[ -n ${configured} ]] ; then einfon "Password for PostgreSQL user '${pguser}': " read -s PGPASSWORD export PGPASSWORD echo else eerror "You must edit:" eerror " ${EROOT%/}/etc/postgis_dbs" eerror "Before running 'emerge --config =${CATEGORY}/${PF}'" eerror die "Edit postgis_dbs" fi # The server we work with must be the same slot we built against. local server_version server_version=$(psql -U ${pguser} -d postgres -p ${PGPORT} \ -Aqwtc 'SELECT version()' 2> /dev/null) if [[ $? = 0 ]] ; then server_version=$(echo ${server_version} | cut -d " " -f 2 | \ cut -d "." -f -2 | tr -d .) if [[ $server_version != ${PGSLOT//.} ]] ; then unset PGPASSWORD eerror "Server version must be ${PGSLOT}.x" die "Server version isn't ${PGSLOT}.x" fi else unset PGPASSWORD eerror "Is the server running?" die "Couldn't connect to server." fi local retval safe_exit() { unset PGPASSWORD sed -e 's/\(configured\)/#\1/' -i "${EROOT%/}/etc/postgis_dbs" eend $retval eerror "All actions could not be performed." eerror "Read above to see what failed." eerror "Once you fix the issue, you'll need to edit:" eerror " ${EROOT%/}/etc/postgis_dbs" eerror "As some things may have succeeded." eerror die "All actions could not be performed" } local db for db in ${databases[@]} ; do ebegin "Performing CREATE LANGUAGE on ${db}" createlang -U ${pguser} -p ${PGPORT} plpgsql ${db} retval=$? # In this case, only error code 1 is fatal [[ $retval == 1 ]] && safe_exit || eend 0 ebegin "Enabling PostGIS on ${db}" psql -q -U ${pguser} -p ${PGPORT} -d ${db} \ -f "${postgis_path}/postgis.sql" retval=$? [[ $retval == 0 ]] && eend 0 || safe_exit done for db in ${templates[@]} ; do ebegin "Creating template database '${db}'" createdb -p ${PGPORT} -U ${pguser} -O ${pguser} -T ${from_template} \ ${db} "PostGIS Template" retval=$? [[ $retval != 0 ]] && safe_exit psql -q -U ${pguser} -p ${PGPORT} -c \ "UPDATE pg_database \ SET datistemplate = TRUE, datallowconn = TRUE \ WHERE datname = '${db}'" retval=$? [[ $retval != 0 ]] && safe_exit createlang -U ${pguser} -p ${PGPORT} plpgsql ${db} retval=$? # In this case, only error code 1 is fatal [[ $retval == 1 ]] && safe_exit psql -q -U ${pguser} -p ${PGPORT} -d ${db} \ -f "${postgis_path}/postgis.sql" retval=$? [[ $retval == 0 ]] && eend 0 || safe_exit done for db in ${epsg_databases[@]} ; do ebegin "Adding EPSG to ${db}" psql -q -U ${pguser} -p ${PGPORT} -d ${db} \ -f "${postgis_path}/spatial_ref_sys.sql" retval=$? [[ $retval == 0 ]] && eend 0 || safe_exit done for db in ${comment_databases[@]} ; do ebegin "Adding comments on ${db}" psql -q -U ${pguser} -p ${PGPORT} -d ${db} \ -f "${postgis_path}/postgis_comments.sql" retval=$? [[ $retval == 0 ]] && eend 0 || safe_exit done for db in ${upgrade_from_1_3[@]} ; do ebegin "Upgrading from PostGIS 1.3 to ${PGIS} on ${db}" psql -q -U ${pguser} -p ${PGPORT} -d ${db} \ -f "${postgis_path}/postgis_upgrade_13_to_${PGIS//.}.sql" retval=$? [[ $retval == 0 ]] && eend 0 || safe_exit done for db in ${upgrade_from_1_4[@]} ; do ebegin "Upgrading from PostGIS 1.4 to ${PGIS} on ${db}" psql -q -U ${pguser} -p ${PGPORT} -d ${db} \ -f "${postgis_path}/postgis_upgrade_14_to_${PGIS//.}.sql" retval=$? [[ $retval == 0 ]] && eend 0 || safe_exit done for db in ${upgrade_from_1_5[@]} ; do ebegin "Minor upgrade for PostGIS ${PGIS} on ${db}" psql -q -U ${pguser} -p ${PGPORT} -d ${db} \ -f "${postgis_path}/postgis_upgrade_${PGIS//.}_minor.sql" retval=$? [[ $retval == 0 ]] && eend 0 || safe_exit done # Clean up and make it so the user has to edit postgis_dbs again that # way this script won't step on any toes due to user error. unset PGPASSWORD sed -e 's/\(configured\)/#\1/' -i "${EROOT%/}/etc/postgis_dbs" einfo "PostgreSQL ${PGSLOT} is now PostGIS enabled." einfo einfo "To enable other databases, change the default slot:" einfo " postgresql-config set " einfo "Then, emerge this package again:" einfo " emerge -av =${CATEGORY}/${PF}" }