diff -r 33c0b135173e -r 382048971a24 postgresql/postgresql.spec
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/postgresql/postgresql.spec Mon Nov 22 16:54:26 2010 +0100
@@ -0,0 +1,820 @@
+##
+## postgresql.spec -- OpenPKG RPM Package Specification
+## Copyright (c) 2000-2010 OpenPKG Foundation e.V.
+##
+## Permission to use, copy, modify, and distribute this software for
+## any purpose with or without fee is hereby granted, provided that
+## the above copyright notice and this permission notice appear in all
+## copies.
+##
+## THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+## WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+## IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
+## CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+## USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+## ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+## OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+## OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+## SUCH DAMAGE.
+##
+
+# package versions
+%define V_postgresql 9.0.0
+%define V_postgresql_dist 9.0.0
+%define V_postgresql_dir 9.0.0
+%define V_libpqxx 3.1
+%define V_perl 5.10.0
+%define V_pgperl 2.0.2
+%define V_psqlodbc 09.00.0200
+%define V_pgjdbc 9.0-801
+%define V_slony1_major 1.2
+%define V_slony1_minor 21
+%define V_pgcluster 1.9.0rc5
+%define V_pgcluster_dir 1706
+%define V_mysqlcompat 1.0b3
+%define V_mysqlcompat_dir 548
+
+# package information
+Name: postgresql
+Summary: PostgreSQL Database
+URL: http://www.postgresql.org/
+Vendor: PostgreSQL Group
+Packager: OpenPKG Foundation e.V.
+Distribution: OpenPKG Community
+Class: BASE
+Group: Database
+License: GPL
+Version: %{V_postgresql}
+Release: 20101101
+
+# package options
+%option with_server yes
+%option with_cxx no
+%option with_perl no
+%option with_odbc no
+%option with_jdbc no
+%option with_compat no
+%option with_tcl no
+%option with_slony1 no
+%option with_pgcluster no
+%option with_kerberos no
+%option with_mysqlcompat no
+%option with_xml no
+%option with_uuid no
+%option with_conversion no
+
+# list of sources
+Source0: ftp://ftp.postgresql.org/pub/source/v%{V_postgresql_dir}/postgresql-%{V_postgresql_dist}.tar.bz2
+Source1: http://pqxx.org/download/software/libpqxx/libpqxx-%{V_libpqxx}.tar.gz
+Source2: ftp://gborg.postgresql.org/pub/pgperl/stable/pgperl-%{V_pgperl}.tar.gz
+Source3: ftp://ftp.postgresql.org/pub/odbc/versions/src/psqlodbc-%{V_psqlodbc}.tar.gz
+Source4: http://slony.info/downloads/%{V_slony1_major}/source/slony1-%{V_slony1_major}.%{V_slony1_minor}.tar.bz2
+Source5: http://pgfoundry.org/frs/download.php/%{V_pgcluster_dir}/pgcluster-%{V_pgcluster}.patch.tar.gz
+Source6: http://pgfoundry.org/frs/download.php/%{V_mysqlcompat_dir}/mysqlcompat-%{V_mysqlcompat}.tar.gz
+Source7: http://jdbc.postgresql.org/download/postgresql-jdbc-%{V_pgjdbc}.src.tar.gz
+Source8: rc.postgresql
+Source9: pg_migrate
+Source10: pg_passwd
+Patch0: postgresql.patch
+
+# build information
+BuildPreReq: OpenPKG, openpkg >= 20100101, make, gcc, flex, bison, gzip
+PreReq: OpenPKG, openpkg >= 20100101
+BuildPreReq: readline, zlib, openssl, getopt
+PreReq: readline, zlib, openssl, getopt
+%if "%{with_perl}" == "yes"
+BuildPreReq: perl >= %{V_perl}, perl-openpkg >= %{V_perl}-20061013
+PreReq: perl >= %{V_perl}
+%endif
+%if "%{with_odbc}" == "yes"
+BuildPreReq: unixodbc
+PreReq: unixodbc
+%endif
+%if "%{with_jdbc}" == "yes"
+BuildPreReq: java, JAVA-JDK, ant
+PreReq: java, JAVA-JDK
+%endif
+%if "%{with_tcl}" == "yes"
+BuildPreReq: tcl, tcl::with_x11 = yes, X11
+PreReq: tcl, tcl::with_x11 = yes, X11
+%endif
+%if "%{with_kerberos}" == "yes"
+BuildPreReq: KERBEROS
+PreReq: KERBEROS
+%endif
+%if "%{with_xml}" == "yes"
+BuildPreReq: libxml, libxslt, zlib
+PreReq: libxml, libxslt, zlib
+%endif
+%if "%{with_uuid}" == "yes"
+BuildPreReq: uuid
+PreReq: uuid
+%endif
+
+%description
+ PostgreSQL is a sophisticated Object-Relational Database Management
+ System (ORDBMS). It is fully ACID compliant and has full support
+ for foreign keys, joins, views, triggers, and stored procedures (in
+ multiple languages). It includes most SQL92 and SQL99 data types
+ and also supports storage of binary large objects. It is the most
+ advanced Open-Source RDBMS available anywhere.
+
+ As an enterprise class RDBMS, PostgreSQL boasts sophisticated
+ features such as Multi-Version Concurrency Control (MVCC), Point In
+ Time Recovery (PITR), tablespaces, asynchronous replication, nested
+ transactions (savepoints), online/hot backups, a sophisticated
+ query planner/optimizer, and Write Ahead Logging (WAL) for fault
+ tolerance. It supports international character sets, multibyte
+ character encodings, Unicode, and it is locale-aware for sorting,
+ case-sensitivity, and formatting. It is highly scalable both in the
+ sheer quantity of data it can manage and in the number of concurrent
+ users it can accommodate.
+
+%track
+ prog postgresql = {
+ version = %{V_postgresql_dist}
+ url = ftp://ftp.postgresql.org/pub/source/
+ regex = v(\d+\.\d+(\.\d+)*(?:beta\d*)?)
+ url = ftp://ftp.postgresql.org/pub/source/v__NEWVER__/
+ regex = postgresql-(\d+(\.\d+)+)\.tar\.(bz2|gz)
+ }
+ prog postgresql:libpqxx = {
+ version = %{V_libpqxx}
+ url = http://pqxx.org/development/libpqxx/wiki/DownloadPage
+ regex = libpqxx-(__VER__)\.tar\.gz
+ }
+ prog postgresql:pgperl = {
+ version = %{V_pgperl}
+ url = ftp://gborg.postgresql.org/pub/pgperl/stable/
+ regex = pgperl-(__VER__)\.tar\.gz
+ }
+ prog postgresql:psqlodbc = {
+ version = %{V_psqlodbc}
+ url = ftp://ftp.postgresql.org/pub/odbc/versions/src/
+ regex = psqlodbc-(\d{2}\.\d{2}\.\d{4})\.tar\.gz
+ }
+ prog postgresql:jdbc = {
+ version = %{V_pgjdbc}
+ url = http://jdbc.postgresql.org/download.html
+ regex = postgresql-jdbc-(\d+\.\d+-\d+)\.src\.tar\.gz
+ }
+ prog postgresql:slony1 = {
+ version = %{V_slony1_major}.%{V_slony1_minor}
+ url = http://slony.info/downloads/%{V_slony1_major}/source/
+ regex = slony1-(\d+\.\d+\.\d+)\.tar\.bz2
+ }
+ prog postgresql:pgcluster = {
+ version = %{V_pgcluster}.%{V_pgcluster_dir}
+ url = http://pgfoundry.org/frs/?group_id=1000072
+ regex = /(\d+/pgcluster-__VER__)\.patch\.tar\.gz
+ transform = "s/^(\\d+)\/pgcluster-(.+)$/$2.$1/; $_"
+ }
+ prog postgresql:mysqlcompat = {
+ version = %{V_mysqlcompat}.%{V_mysqlcompat_dir}
+ url = http://pgfoundry.org/frs/?group_id=1000154
+ regex = (\d+/mysqlcompat-__VER__)\.tar\.gz
+ transform = "s/^(\\d+)\/mysqlcompat-(.+)$/$2.$1/; $_"
+ }
+
+%prep
+ %setup -q
+ %patch -p0
+%if "%{with_cxx}" == "yes"
+ %setup -q -T -D -a 1
+ case "%{l_platform -t}" in
+ *-sunos* )
+ %{l_shtool} subst \
+ -e 's;strerror_r(0,0,0);strerror((int)0);g' \
+ -e 's;strerror_r((int)0, (char \*)0, (size_t)0);strerror((int)0);g' \
+ libpqxx-%{V_libpqxx}/configure
+ %{l_shtool} subst \
+ -e 's;strerror_r(err, buf, sizeof(buf));strerror(err);g' \
+ libpqxx-%{V_libpqxx}/src/largeobject.cxx \
+ libpqxx-%{V_libpqxx}/configure
+ %{l_shtool} subst \
+ -e 's;\(strerror(err) ==\) -1;\1 (char *)-1;' \
+ libpqxx-%{V_libpqxx}/src/largeobject.cxx
+ ;;
+ esac
+ %{l_shtool} subst \
+ -e 's;^function \(add_compiler_opts() {\);\1;' \
+ libpqxx-%{V_libpqxx}/configure
+%endif
+%if "%{with_perl}" == "yes"
+ %setup -q -T -D -a 2
+%endif
+%if "%{with_odbc}" == "yes"
+ %setup -q -T -D -a 3
+%endif
+%if "%{with_slony1}" == "yes"
+ %setup -q -T -D -a 4
+%endif
+%if "%{with_pgcluster}" == "yes"
+ %setup -q -T -D -a 5
+ sed -e '/^diff.*libpq\.rc/,/^diff/d' pgcluster-*-patch |\
+ %{l_patch} -p1
+%endif
+%if "%{with_mysqlcompat}" == "yes"
+ %setup -q -T -D -a 6
+%endif
+%if "%{with_jdbc}" == "yes"
+ %setup -q -T -D -a 7
+%endif
+
+ # adjust source tree
+ %{l_shtool} subst \
+ -e 's;\(#define.*DEFAULT_PGSOCKET_DIR[^"]*"\)/tmp\("\);\1%{l_prefix}/var/postgresql/run\2;' \
+ src/include/pg_config_manual.h
+ %{l_shtool} subst \
+ -e 's;^\(sqlmansect *=\).*$;\1 7;' \
+ src/makefiles/Makefile.solaris
+%if "%{with_conversion}" == "yes"
+ %{l_shtool} subst \
+ -e '/^SQLSCRIPT =/{x;s/.*/enable_shared = yes/;G;}' \
+ src/backend/utils/mb/conversion_procs/Makefile
+ %{l_shtool} subst \
+ -e '/^all:/{x;s/.*/enable_shared = yes/;G;}' \
+ src/backend/utils/mb/conversion_procs/proc.mk
+%endif
+%if "%{with_uuid}" == "yes"
+ %{l_shtool} subst \
+ -e '/^SHLIB_LINK/{x;s/.*/enable_shared = yes/;G;}' \
+ contrib/uuid-ossp/Makefile
+%endif
+ %{l_shtool} subst \
+ -e 's;# Shared library stuff;enable_shared = yes;g' \
+ src/pl/plpgsql/src/Makefile
+
+%build
+
+ # configure package
+ echo "ac_cv_func_isinf=no" >config.cache
+ export CC="%{l_cc}"
+ export CFLAGS="%{l_cflags -O}"
+ export CPPFLAGS="%{l_cppflags readline}"
+ export LDFLAGS="%{l_ldflags}"
+ export LIBS=""
+%if "%{with_slony1}" == "yes"
+ CFLAGS="$CFLAGS -pthread"
+%endif
+%if "%{with_tcl}" == "yes"
+ CPPFLAGS="$CPPFLAGS %{l_cppflags tcl}"
+ LDFLAGS="$LDFLAGS -L`%{l_rc} --query x11_libdir`"
+%endif
+%if "%{with_kerberos}" == "yes"
+ CPPFLAGS="$CPPFLAGS `krb5-config --cflags`"
+ LIBS="$LIBS `krb5-config --libs`"
+%endif
+%if "%{with_pgcluster}" == "yes"
+ case "%{l_platform -t}" in
+ *-freebsd* ) LIBS="$LIBS -lcompat" ;;
+ esac
+%endif
+%if "%{with_xml}" == "yes"
+ LIBS="$LIBS -liconv"
+%endif
+ export TAR="%{l_tar}"
+ export YACC="bison -y"
+ ./configure \
+ --cache-file=./config.cache \
+ --prefix=%{l_prefix} \
+ --mandir=%{l_prefix}/man \
+ --sysconfdir=%{l_prefix}/etc/postgresql \
+ --includedir=%{l_prefix}/include/postgresql \
+ --with-openssl \
+ --with-readline \
+ --with-zlib \
+%if "%{with_tcl}" == "yes"
+ --with-tcl \
+ --with-tclconfig="%{l_prefix}/lib" \
+ --with-tkconfig="%{l_prefix}/lib" \
+%endif
+%if "%{with_slony1}" == "yes"
+ --enable-thread-safety \
+%endif
+%if "%{with_kerberos}" == "yes"
+ --with-krb5 \
+ --with-krb-srvnam=postgresql \
+%endif
+%if "%{with_xml}" == "yes"
+ --with-libxml \
+ --with-libxslt \
+%endif
+%if "%{with_uuid}" == "yes"
+ --with-ossp-uuid \
+%endif
+ --disable-shared
+
+ # build package
+ %{l_make} %{l_mflags}
+
+ # build C++ bindings (both old and new one)
+%if "%{with_cxx}" == "yes"
+ ln -s `pwd`/src/interfaces/libpq/*.h src/include/
+ ( cd libpqxx-%{V_libpqxx}
+ %{l_shtool} subst \
+ -e 's;\(cut\)\( .*/configitems\)\( -f [0-9]\);\1\3\2;g' \
+ configure
+ ( echo "#!/bin/sh"
+ echo "case \"\$1\" in"
+ echo " --includedir ) echo \"`pwd`/../src/include\" ;;"
+ echo " --libdir ) echo \"`pwd`/../src/interfaces/libpq\" ;;"
+ echo "esac"
+ ) >pg_config
+ chmod a+x pg_config
+ export PG_CONFIG=`pwd`/pg_config
+ export CC="%{l_cc}"
+ export CXX="%{l_cxx}"
+ export CFLAGS="%{l_cflags -O}"
+ export CXXFLAGS="%{l_cxxflags -O}"
+ export CPPFLAGS="-I`pwd`/../src/include %{l_cppflags}"
+ export LDFLAGS="%{l_ldflags}"
+ export LIBS="-lssl -lcrypto -lcrypt"
+ case "%{l_platform -t}" in
+ *-sunos* ) LIBS="$LIBS -lsocket -lnsl" ;;
+ esac
+ ./configure \
+ --disable-shared
+ %{l_make} %{l_mflags -O}
+ ) || exit $?
+%endif
+
+ # build Perl bindings
+%if "%{with_perl}" == "yes"
+ %{l_prefix}/bin/perl-openpkg prepare
+ ( cd Pg-%{V_pgperl}
+ export POSTGRES_INCLUDE=dummy
+ export POSTGRES_LIB=dummy
+ %{l_shtool} subst \
+ -e 's;-I$POSTGRES_INCLUDE;-I../src/interfaces/libpq -I../src/include;' \
+ -e 's;-L$POSTGRES_LIB;-L../src/interfaces/libpq;' \
+ -e 's;-lpq;-lpq %{l_ldflags} -lssl -lcrypto -lcrypt;' \
+ Makefile.PL
+ ) || exit $?
+ ( export POSTGRES_INCLUDE=dummy
+ export POSTGRES_LIB=dummy
+ %{l_prefix}/bin/perl-openpkg -d Pg-%{V_pgperl} configure build
+ ) || exit $?
+%endif
+
+ # build ODBC driver
+%if "%{with_odbc}" == "yes"
+ ( cd psqlodbc-%{V_psqlodbc}
+ export CC="%{l_cc}"
+ export CXX="%{l_cxx}"
+ export CFLAGS="%{l_cflags -O}"
+ export CXXFLAGS="%{l_cxxflags -O}"
+ export CPPFLAGS="-I`pwd`/../src/include"
+ CPPFLAGS="$CPPFLAGS -I`pwd`/../src/interfaces -I`pwd`/../src/interfaces/libpq"
+ CPPFLAGS="$CPPFLAGS %{l_cppflags}"
+ export LDFLAGS="-L`pwd`/../src/interfaces/libpq %{l_ldflags}"
+ export LIBS="-lssl -lcrypto"
+ ./configure \
+ --prefix=%{l_prefix} \
+ --with-unixodbc=%{l_prefix} \
+ --with-odbcinst=%{l_prefix}/etc/unixodbc
+ %{l_make} %{l_mflags -O}
+ ) || exit $?
+%endif
+
+ # build JDBC driver
+%if "%{with_jdbc}" == "yes"
+ ( cd postgresql-jdbc-%{V_pgjdbc}.src
+ export JAVA_PLATFORM="sun-jdk"
+ eval `%{l_prefix}/bin/java-toolkit -e`
+ %{l_prefix}/bin/ant
+ ) || exit $?
+%endif
+
+ # build Slony-1 replication engine
+%if "%{with_slony1}" == "yes"
+ ( cd slony1-%{V_slony1_major}.%{V_slony1_minor}
+ ln ../src/pl/plpgsql/src/libplpgsql.so \
+ ../src/pl/plpgsql/src/plpgsql.so
+ %{l_shtool} subst \
+ -e 's;-lpq;-lpq @LIBS@;' \
+ Makefile.global.in
+ export CC="%{l_cc}"
+ export CFLAGS="%{l_cflags -O}"
+ export CPPFLAGS="%{l_cppflags}"
+ export LDFLAGS="%{l_ldflags}"
+ export LIBS="-lssl -lcrypto -lcrypt"
+ ./configure \
+ --prefix=%{l_prefix} \
+ --sysconfdir=%{l_prefix}/etc/postgresql \
+ --with-pgconfigdir=../src/bin/pg_config \
+ --with-pgincludedir=../src/include \
+ --with-pgincludeserverdir=../src/interfaces/libpq \
+ --with-pglibdir=../src/interfaces/libpq \
+ --with-pgpkglibdir=../src/pl/plpgsql/src \
+ --with-pgsharedir=../src/backend/utils/misc
+ %{l_make} %{l_mflags -O}
+ ) || exit $?
+%endif
+
+ # build OSSP uuid based UUID generator functions
+%if "%{with_uuid}" == "yes"
+ ( cd contrib/uuid-ossp
+ %{l_make} %{l_mflags}
+ %{l_make} %{l_mflags} uuid-ossp.so
+ ) || exit $?
+%endif
+
+ # rebuild pg_config with hard-coded path to avoid that it provides
+ # dynamically resolved paths which circumvent symlinks, etc.
+ ( cd src/bin/pg_config
+ %{l_shtool} subst \
+ -e 's:find_my_exec(argv.0., mypath):0; strcpy(mypath, "%{l_prefix}/bin/pg_config"):' \
+ pg_config.c
+ %{l_make} %{l_mflags}
+ ) || exit $?
+
+%install
+
+ # perform standard installation procedure
+ cp /dev/null register.txt
+ %{l_make} %{l_mflags} install install-docs DESTDIR=$RPM_BUILD_ROOT
+
+ # strip down installation
+ rm -rf $RPM_BUILD_ROOT%{l_prefix}/share/doc
+ strip $RPM_BUILD_ROOT%{l_prefix}/bin/* >/dev/null 2>&1 || true
+ rm -f $RPM_BUILD_ROOT%{l_prefix}/man/man1/pgaccess.1
+ rm -f $RPM_BUILD_ROOT%{l_prefix}/man/man1/pgtclsh.1
+ rm -f $RPM_BUILD_ROOT%{l_prefix}/man/man1/pgtksh.1
+
+ # namespace adjustments to installation
+ for prog in \
+ createdb createlang createuser dropdb droplang clusterdb \
+ dropuser initdb vacuumdb reindexdb; do
+%if "%{with_compat}" == "yes"
+ cmd="ln"
+%else
+ cmd="mv"
+%endif
+ $cmd $RPM_BUILD_ROOT%{l_prefix}/bin/$prog \
+ $RPM_BUILD_ROOT%{l_prefix}/bin/pg_$prog
+ $cmd $RPM_BUILD_ROOT%{l_prefix}/man/man1/$prog.1 \
+ $RPM_BUILD_ROOT%{l_prefix}/man/man1/pg_$prog.1
+ done
+ ( cd $RPM_BUILD_ROOT%{l_prefix}/man/man7
+ for man in *.7; do
+ mv $man pg_$man
+ done
+ ) || exit $?
+
+ # create additional directories
+ %{l_shtool} mkdir -f -p -m 755 \
+%if "%{with_slony1}" == "yes" || "%{with_pgcluster}" == "yes"
+ $RPM_BUILD_ROOT%{l_prefix}/etc/postgresql \
+%endif
+ $RPM_BUILD_ROOT%{l_prefix}/var/postgresql/db \
+ $RPM_BUILD_ROOT%{l_prefix}/var/postgresql/run
+
+ # install addon utilities
+ %{l_shtool} install -c -m 755 %{l_value -s -a} \
+ %{SOURCE pg_migrate} $RPM_BUILD_ROOT%{l_prefix}/bin/
+ %{l_shtool} install -c -m 755 %{l_value -s -a} \
+ -e "s;@l_bash@;%{l_bash};g" \
+ %{SOURCE pg_passwd} $RPM_BUILD_ROOT%{l_prefix}/bin/
+
+ # install C++ bindings (both old and new one)
+%if "%{with_cxx}" == "yes"
+ ( cd libpqxx-%{V_libpqxx}
+ %{l_shtool} mkdir -f -p -m 755 \
+ $RPM_BUILD_ROOT%{l_prefix}/include/pqxx
+ %{l_shtool} install -c -m 644 \
+ include/pqxx/* \
+ $RPM_BUILD_ROOT%{l_prefix}/include/pqxx/
+ rm -f $RPM_BUILD_ROOT%{l_prefix}/include/pqxx/Makefile*
+ rm -f $RPM_BUILD_ROOT%{l_prefix}/include/pqxx/config.h*
+ %{l_shtool} install -c -m 644 \
+ src/.libs/libpqxx.a \
+ $RPM_BUILD_ROOT%{l_prefix}/lib/
+ ) || exit $?
+%endif
+
+ # install Perl binding
+%if "%{with_perl}" == "yes"
+ ( export POSTGRES_INCLUDE=dummy
+ export POSTGRES_LIB=dummy
+ %{l_prefix}/bin/perl-openpkg -d Pg-%{V_pgperl} install
+ ) || exit $?
+ %{l_prefix}/bin/perl-openpkg -F perl-openpkg-files fixate cleanup
+%else
+ >perl-openpkg-files
+%endif
+
+ # install ODBC driver
+%if "%{with_odbc}" == "yes"
+ ( cd psqlodbc-%{V_psqlodbc}
+ %{l_make} %{l_mflags} install AM_MAKEFLAGS="DESTDIR=$RPM_BUILD_ROOT"
+ ) || exit $?
+%endif
+
+ # install JDBC driver
+%if "%{with_jdbc}" == "yes"
+ ( cd postgresql-jdbc-%{V_pgjdbc}.src
+ %{l_shtool} install -c -m 644 \
+ jars/postgresql.jar $RPM_BUILD_ROOT%{l_prefix}/lib/
+ ) || exit $?
+%endif
+
+ # install Slony-1 replication engine
+%if "%{with_slony1}" == "yes"
+ ( cd slony1-%{V_slony1_major}.%{V_slony1_minor}
+ %{l_shtool} subst \
+ -e 's;$(SQL_NAME80);$(SQL_NAME74);g' \
+ src/xxid/Makefile
+ %{l_make} %{l_mflags} install \
+ DESTDIR=$RPM_BUILD_ROOT \
+ pgconfigdir=%{l_prefix}/bin \
+ pgincludedir=%{l_prefix}/include/postgresql \
+ pgincludeserverdir=%{l_prefix}/include/postgresql/libpq \
+ pglibdir=%{l_prefix}/lib/postgresql \
+ pgpkglibdir=%{l_prefix}/lib/postgresql \
+ pgsharedir=%{l_prefix}/share/postgresql
+ rm -f $RPM_BUILD_ROOT%{l_prefix}/share/postgresql/slony1*v7[34].sql
+ rm -f $RPM_BUILD_ROOT%{l_prefix}/share/postgresql/xxid.v73.sql
+ mv $RPM_BUILD_ROOT%{l_prefix}/share/postgresql/xxid.v74.sql \
+ $RPM_BUILD_ROOT%{l_prefix}/share/postgresql/xxid.sql
+ ( echo "# Slony-1 configuration for replication engine slon(1)"
+ echo "SLON_CLUSTER_NAME=\"example\""
+ echo "SLON_CONNECT_DBNAME=\"example\""
+ echo "SLON_CONNECT_USER=\"postgresql\""
+ echo "SLON_CONNECT_PASS=\"postgresql\""
+ echo "SLON_CONNECT_HOST=\"localhost\""
+ echo "SLON_SYNC_INTERVAL=\"10000\""
+ echo "SLON_SYNC_TIMEOUT=\"60000\""
+ echo "SLON_SYNC_GROUPSIZE=\"6\""
+ echo "SLON_SYNC_LOGLEVEL=\"1\""
+ ) >$RPM_BUILD_ROOT%{l_prefix}/etc/postgresql/slony1.conf
+ ) || exit $?
+%endif
+
+ # install OSSP uuid based UUID generator functions
+%if "%{with_uuid}" == "yes"
+ ( cd contrib/uuid-ossp
+ %{l_shtool} install -c -m 644 \
+ uuid-ossp.sql uuid-ossp.so \
+ $RPM_BUILD_ROOT%{l_prefix}/lib/postgresql/
+ ) || exit $?
+%endif
+
+ # adjust default configuration for hourly auto-vacuum operation
+ %{l_shtool} subst \
+ -e 's;^# *\(stats_start_collector *=\) *[^#]*\(#.*\);\1 on \2;' \
+ -e 's;^# *\(stats_row_level *=\) *[^#]*\(#.*\);\1 on \2;' \
+ -e 's;^# *\(autovacuum *=\) *[^#]*\(#.*\);\1 on \2;' \
+ -e 's;^# *\(autovacuum_naptime *=\) *[^#]*\(#.*\);\1 1h \2;' \
+ $RPM_BUILD_ROOT%{l_prefix}/share/postgresql/postgresql.conf.sample
+
+ # post-adjust pgcluster configuration filenames
+%if "%{with_pgcluster}" == "yes"
+ cp $RPM_BUILD_ROOT%{l_prefix}/share/postgresql/pgreplicate.conf.sample \
+ $RPM_BUILD_ROOT%{l_prefix}/etc/postgresql/pgreplicate.conf
+%endif
+
+ # install MySQL compatibility layer
+%if "%{with_mysqlcompat}" == "yes"
+ %{l_shtool} mkdir -f -p -m 755 \
+ $RPM_BUILD_ROOT%{l_prefix}/share/postgresql/mysqlcompat
+ %{l_shtool} install -c -m 644 \
+ mysqlcompat-%{V_mysqlcompat}/README \
+ mysqlcompat-%{V_mysqlcompat}/*.sql \
+ $RPM_BUILD_ROOT%{l_prefix}/share/postgresql/mysqlcompat/
+%endif
+
+ # install run-command script
+ %{l_shtool} mkdir -f -p -m 755 \
+ $RPM_BUILD_ROOT%{l_prefix}/etc/rc.d
+ %{l_shtool} install -c -m 755 %{l_value -s -a} \
+ %{SOURCE rc.postgresql} \
+ $RPM_BUILD_ROOT%{l_prefix}/etc/rc.d/
+
+ # optionally strip down to client-only installation
+%if "%{with_server}" != "yes"
+ rm -f $RPM_BUILD_ROOT%{l_prefix}/bin/pg_[a-bd-z]*
+ rm -f $RPM_BUILD_ROOT%{l_prefix}/bin/pg_c[a-np-z]*
+ rm -f $RPM_BUILD_ROOT%{l_prefix}/bin/pg_controldata
+ rm -f $RPM_BUILD_ROOT%{l_prefix}/bin/post*
+ rm -f $RPM_BUILD_ROOT%{l_prefix}/man/man1/pg_[a-bd-z]*
+ rm -f $RPM_BUILD_ROOT%{l_prefix}/man/man1/pg_c[a-np-z]*
+ rm -f $RPM_BUILD_ROOT%{l_prefix}/man/man1/pg_controldata.1
+ rm -f $RPM_BUILD_ROOT%{l_prefix}/man/man1/post*
+ rm -rf $RPM_BUILD_ROOT%{l_prefix}/etc/rc.d
+ rm -rf $RPM_BUILD_ROOT%{l_prefix}/include/postgresql/server
+ rm -rf $RPM_BUILD_ROOT%{l_prefix}/lib/postgresql
+ rm -rf $RPM_BUILD_ROOT%{l_prefix}/share/postgresql
+ rm -rf $RPM_BUILD_ROOT%{l_prefix}/var/postgresql
+%endif
+
+ # determine installation files
+ %{l_rpmtool} files -v -ofiles -r$RPM_BUILD_ROOT \
+%if "%{with_server}" == "yes"
+ %{l_files_std} `cat perl-openpkg-files` \
+%if "%{with_slony1}" == "yes" || "%{with_pgcluster}" == "yes"
+ '%config %{l_prefix}/etc/postgresql/*' \
+%endif
+ '%attr(700,%{l_rusr},%{l_rgrp}) %dir %{l_prefix}/var/postgresql/db' \
+ '%attr(755,%{l_rusr},%{l_rgrp}) %dir %{l_prefix}/var/postgresql/run'
+%else
+ %{l_files_std} `cat perl-openpkg-files`
+%endif
+
+%files -f files
+
+%clean
+
+%pre
+%if "%{with_server}" == "yes"
+ # before upgrade, check migration dump, save status and stop service
+ [ $1 -eq 2 ] || exit 0
+ if [ -f $RPM_INSTALL_PREFIX/var/postgresql/db/PG_VERSION -a \
+ -f $RPM_INSTALL_PREFIX/bin/pg_migrate ]; then
+ # database migration dumping hint
+ v_old_all=`cat $RPM_INSTALL_PREFIX/var/postgresql/db/PG_VERSION`
+ v_old_maj=`echo "$v_old_all" | sed -e 's/^\([0-9]*\.[0-9]*\).*/\1/'`
+ v_new_all="%{V_postgresql}"
+ v_new_maj=`echo "$v_new_all" | sed -e 's/^\([0-9]*\.[0-9]*\).*/\1/'`
+ if [ ".$v_old_maj" != ".$v_new_maj" ]; then
+ ( echo "You are upgrading from PostgreSQL $v_old_all to PostgresSQL $v_new_all,"
+ echo "which is a major version change. We expect a database incompatibility,"
+ echo "so a full database backup and restore is required!"
+ ) | %{l_rpmtool} msg -b -t notice
+ if [ ".$RPM_POSTGRESQL_MIGRATE" != .ignore ]; then
+ if [ ! -f $RPM_INSTALL_PREFIX/var/postgresql/db.dump.sql.bz2 ]; then
+ ( echo "We are performing a full backup of your existing database"
+ echo "($RPM_INSTALL_PREFIX/var/postgresql/db/) for you by running:"
+ echo " \$ $RPM_INSTALL_PREFIX/bin/pg_migrate dump"
+ echo "If this fails for some reasons, try to dump your data manually:"
+ echo " \$ $RPM_INSTALL_PREFIX/bin/pg_dumpall -U postgresql -o | \\ "
+ echo " $RPM_INSTALL_PREFIX/lib/openpkg/bzip2 -9 \\ "
+ echo " >$RPM_INSTALL_PREFIX/var/postgresql/db.dump.sql.bz2"
+ echo "Alternatively, if you want to force this package to be installed without"
+ echo "a previously created database dump, run the following command"
+ echo "before trying this package upgrade again:"
+ echo " \$ RPM_POSTGRESQL_MIGRATE=ignore; export RPM_POSTGRESQL_MIGRATE"
+ ) | %{l_rpmtool} msg -b -t notice
+ $RPM_INSTALL_PREFIX/bin/pg_migrate dump
+ if [ $? -ne 0 ] || [ ! -f $RPM_INSTALL_PREFIX/var/postgresql/db.dump.sql.bz2 ]; then
+ ( echo "Automatic database dump creation failed!"
+ echo "PLEASE INVESTIGATE MANUALLY YOURSELF!"
+ ) | %{l_rpmtool} msg -b -t error
+ exit 1
+ fi
+ fi
+ fi
+ fi
+ fi
+ eval `%{l_rc} postgresql status 2>/dev/null | tee %{l_tmpfile}`
+ %{l_rc} postgresql stop 2>/dev/null
+ exit 0
+%endif
+
+%post
+%if "%{with_server}" == "yes"
+%if "%{with_compat}" == "yes"
+ l_pguser="postgres"
+ l_pgpass="postgres"
+%else
+ l_pguser="postgresql"
+ l_pgpass="postgresql"
+%endif
+ if [ $1 -eq 1 ]; then
+ # create initial database
+ su - %{l_rusr} -c \
+ "LC_CTYPE=C; export LC_CTYPE; umask 077; \
+ rm -rf $RPM_INSTALL_PREFIX/var/postgresql/db/*; \
+ echo $l_pgpass >$RPM_INSTALL_PREFIX/var/postgresql/run/pg_initdb.pw; \
+ $RPM_INSTALL_PREFIX/bin/pg_initdb \
+ --encoding=SQL_ASCII --locale=C --auth=md5 --username=$l_pguser \
+ --pwfile=$RPM_INSTALL_PREFIX/var/postgresql/run/pg_initdb.pw \
+ --pgdata=$RPM_INSTALL_PREFIX/var/postgresql/db; \
+ rm -f $RPM_INSTALL_PREFIX/var/postgresql/run/pg_initdb.pw" 2>&1 | \
+ $RPM_INSTALL_PREFIX/lib/openpkg/shtool prop \
+ -p "Creating initial PostgreSQL DB in $RPM_INSTALL_PREFIX/var/postgresql/db"
+ if [ ! -f $RPM_INSTALL_PREFIX/var/postgresql/db/PG_VERSION ]; then
+ echo "ERROR: failed to create initial PostgreSQL database" 1>&2
+ exit 1
+ fi
+ ( umask 077
+ ( echo "##"
+ echo "## pg_superuser.conf -- PostgreSQL database superuser configuration"
+ echo "##"
+ echo ""
+ echo "superuser_database=\"template1\""
+ echo "superuser_username=\"$l_pguser\""
+ echo "superuser_password=\"$l_pgpass\""
+ echo ""
+ ) >$RPM_INSTALL_PREFIX/var/postgresql/db/pg_superuser.conf
+ chown %{l_rusr}:%{l_rgrp} $RPM_INSTALL_PREFIX/var/postgresql/db/pg_superuser.conf || exit $?
+ chmod 600 $RPM_INSTALL_PREFIX/var/postgresql/db/pg_superuser.conf || exit $?
+ ) || exit $?
+
+ # display information about next steps
+ ( echo "An initial PostgreSQL DB was created with the two standard"
+ echo "databases 'template0' and 'template1'. The owner of both"
+ echo "is the DB user '$l_pguser'. Its initial password is '$l_pgpass'."
+ echo ""
+ echo "After starting PostgreSQL with"
+ echo " \$ $RPM_INSTALL_PREFIX/bin/openpkg rc postgresql start"
+ echo "you should immediately change this with the following command:"
+ echo " \$ $RPM_INSTALL_PREFIX/bin/pg_passwd postgresql template1"
+ echo ""
+ echo "Then you usually create a database for a user (assuming that"
+ echo "his home directory is /u/) with password under"
+ echo "path /u//rdbms with the commands:"
+ echo " \$ mkdir /u//rdbms"
+ echo " \$ chmod 700 /u//rdbms"
+ echo " \$ chown %{l_rusr}:%{l_rgrp} /u//rdbms"
+ echo " \$ $RPM_INSTALL_PREFIX/bin/psql -U $l_pguser -d template1"
+ echo " template1=> CREATE ROLE "
+ echo " LOGIN ENCRYPTED PASSWORD ''"
+ echo " NOCREATEDB NOCREATEROLE;"
+ echo " template1=> CREATE TABLESPACE OWNER "
+ echo " LOCATION '/u//rdbms';"
+ echo " template1=> CREATE DATABASE OWNER "
+ echo " TABLESPACE ;"
+ echo " \$ echo 'localhost:*:::' >>/u//.pgpass"
+ echo " \$ chmod 600 /u//.pgpass"
+ echo " \$ chown /u//.pgpass"
+ echo "After this the user will be able to connect to his RDBMS with:"
+ echo " \$ $RPM_INSTALL_PREFIX/bin/psql"
+ ) | %{l_rpmtool} msg -b -t notice
+ fi
+
+%if "%{with_odbc}" == "yes"
+ # optionally link into ODBC
+ if ! $RPM_INSTALL_PREFIX/bin/odbcinst -q -d -n "PostgreSQL" >/dev/null 2>&1; then
+ ( echo "[PostgreSQL]"
+ echo "Description = PostgreSQL ODBC driver"
+ echo "Driver = $RPM_INSTALL_PREFIX/lib/psqlodbc.so"
+ echo "Threading = 2"
+ ) | $RPM_INSTALL_PREFIX/bin/odbcinst -i -d -r -n "PostgreSQL"
+ fi
+%endif
+
+ if [ $1 -eq 2 ]; then
+ # after upgrade, restore status
+ { eval `cat %{l_tmpfile}`; rm -f %{l_tmpfile}; true; } >/dev/null 2>&1
+ [ ".$postgresql_active" = .yes ] && %{l_rc} postgresql start
+ if [ -f $RPM_INSTALL_PREFIX/var/postgresql/db/PG_VERSION -a \
+ ! -f $RPM_INSTALL_PREFIX/var/postgresql/db/pg_superuser.conf ]; then
+ ( umask 077
+ ( echo "##"
+ echo "## pg_superuser.conf -- PostgreSQL database superuser configuration"
+ echo "##"
+ echo ""
+ echo "superuser_database=\"template1\""
+ echo "superuser_username=\"$l_pguser\""
+ echo "superuser_password=\"\""
+ echo ""
+ ) >$RPM_INSTALL_PREFIX/var/postgresql/db/pg_superuser.conf
+ chown %{l_rusr}:%{l_rgrp} $RPM_INSTALL_PREFIX/var/postgresql/db/pg_superuser.conf || exit $?
+ chmod 600 $RPM_INSTALL_PREFIX/var/postgresql/db/pg_superuser.conf || exit $?
+ ) || exit $?
+ ( echo "Created still missing \"pg_superuser.conf\" configuration file."
+ echo "You should update its content by resetting the PostgreSQL"
+ echo "superuser account password with the following command:"
+ echo " \$ $RPM_INSTALL_PREFIX/bin/pg_passwd postgresql template1"
+ ) | %{l_rpmtool} msg -b -t warn
+ fi
+ if [ -f $RPM_INSTALL_PREFIX/var/postgresql/db/PG_VERSION -a ".$PG_MIGRATE" != .ignore ]; then
+ # database migration restoring hint
+ v_old_all=`cat $RPM_INSTALL_PREFIX/var/postgresql/db/PG_VERSION`
+ v_old_maj=`echo "$v_old_all" | sed -e 's/^\([0-9]*\.[0-9]*\).*/\1/'`
+ v_new_all="%{V_postgresql}"
+ v_new_maj=`echo "$v_new_all" | sed -e 's/^\([0-9]*\.[0-9]*\).*/\1/'`
+ if [ ".$v_old_maj" != ".$v_new_maj" ]; then
+ ( echo "You upgraded from PostgreSQL $v_old_all to PostgresSQL $v_new_all,"
+ echo "which is a major version upgrade. We expect a database incompatibility,"
+ echo "so we strongly recommend you to recreate the existing database under"
+ echo "$RPM_INSTALL_PREFIX/var/postgresql/db/ by running the following command:"
+ echo " \$ $RPM_INSTALL_PREFIX/bin/pg_migrate restore"
+ echo "If this fails for some reasons, try to restore your data manually:"
+ echo " \$ $RPM_INSTALL_PREFIX/lib/openpkg/bzip2 -d -c \\ "
+ echo " $RPM_INSTALL_PREFIX/var/postgresql/db.dump.sql.bz2 | \\ "
+ echo " $RPM_INSTALL_PREFIX/bin/psql -U postgresql -d template1"
+ ) | %{l_rpmtool} msg -b -t warn
+ fi
+ fi
+ fi
+ exit 0
+%endif
+
+%preun
+%if "%{with_server}" == "yes"
+ # before erase, stop service and remove log files
+ [ $1 -eq 0 ] || exit 0
+ %{l_rc} postgresql stop 2>/dev/null
+ rm -f $RPM_INSTALL_PREFIX/var/postgresql/run/* >/dev/null 2>&1 || true
+ # optionally unlink from ODBC
+%if "%{with_odbc}" == "yes"
+ $RPM_INSTALL_PREFIX/bin/odbcinst -u -d -n "PostgreSQL"
+%endif
+ exit 0
+%endif
+