# Maintainer: Jakub Jirutka # Contributor: G.J.R. Timmer # Contributor: Jakub Jirutka pkgname=postgresql pkgver=11.5 pkgrel=2 pkgdesc="A sophisticated object-relational DBMS" url="https://www.postgresql.org/" arch="all" license="PostgreSQL" depends="postgresql-client tzdata" install="$pkgname.pre-install $pkgname.pre-upgrade" pkgusers="postgres" pkggroups="postgres" checkdepends="diffutils" depends_dev="openssl-dev" makedepends="$depends_dev libedit-dev zlib-dev libxml2-dev util-linux-dev openldap-dev tcl-dev perl-dev python2-dev python3-dev" subpackages="$pkgname-contrib $pkgname-dev $pkgname-doc libpq $pkgname-libs $pkgname-client $pkgname-pltcl $pkgname-plperl $pkgname-plperl-contrib:plperl_contrib $pkgname-plpython2 $pkgname-plpython2-contrib:plpython2_contrib $pkgname-plpython3 $pkgname-plpython3-contrib:plpython3_contrib" source="https://ftp.postgresql.org/pub/source/v$pkgver/$pkgname-$pkgver.tar.bz2 initdb.patch perl-rpath.patch conf-unix_socket_directories.patch disable-broken-tests.patch fix-psql-segfault.patch $pkgname.initd $pkgname.confd pg-restore.initd pg-restore.confd pltcl_create_tables.sql " builddir="$srcdir/$pkgname-$pkgver" options="!checkroot" # secfixes: # 11.5-r0: # - CVE-2019-10208 # - CVE-2019-10209 # 11.4-r0: # - CVE-2019-10164 # 11.3-r0: # - CVE-2019-10129 # - CVE-2019-10130 # 11.1-r0: # - CVE-2018-16850 # 10.5-r0: # - CVE-2018-10915 # - CVE-2018-10925 # 10.4-r0: # - CVE-2018-1115 # 10.3-r0: # - CVE-2018-1058 # 10.2-r0: # - CVE-2018-1052 # - CVE-2018-1053 # 10.1-r0: # - CVE-2017-15098 # - CVE-2017-15099 # 9.6.4-r0: # - CVE-2017-7546 # - CVE-2017-7547 # - CVE-2017-7548 # 9.6.3-r0: # - CVE-2017-7484 # - CVE-2017-7485 # - CVE-2017-7486 prepare() { default_prepare cd "$builddir" local file; for file in $pkgname.initd $pkgname.confd; do sed "s|@VERSION@|${pkgver%.*}|" "$srcdir"/$file > $file done cp -al "$builddir" "$builddir"~py3 } # NOTE: plpython requires separate configure/build runs to build against # python 2 versus python 3. Note that the installed Makefile.global will # reflect the python 2 build, which seems appropriate since that's still # considered the default plpython version. build() { msg "Building plpython3" cd "$builddir"~py3 export PYTHON=/usr/bin/python3 _configure make -C src/pl/plpython all msg "Building all" cd "$builddir" export PYTHON=/usr/bin/python2 _configure && make world unset PYTHON } # Note: (...) instead of {...} is NOT a typo! _configure() ( export CFLAGS="${CFLAGS/-Os/-O2}" export CPPFLAGS="${CPPFLAGS/-Os/-O2}" ./configure \ --build=$CBUILD \ --host=$CHOST \ --prefix=/usr \ --mandir=/usr/share/man \ --with-system-tzdata=/usr/share/zoneinfo \ --with-ldap \ --with-libedit-preferred \ --with-libxml \ --with-openssl \ --with-uuid=e2fs \ --disable-rpath \ --with-perl \ --with-python \ --with-tcl ) check() { cd "$builddir" _run_tests src/test _run_tests src/pl _run_tests contrib } package() { cd "$builddir" make DESTDIR="$pkgdir" install install-docs cd "$pkgdir" install -d -m750 -o postgres -g postgres \ ./var/lib/postgresql \ ./var/log/$pkgname install -D -m755 "$builddir"/postgresql.initd ./etc/init.d/postgresql install -D -m644 "$builddir"/postgresql.confd ./etc/conf.d/postgresql install -D -m755 "$srcdir"/pg-restore.initd ./etc/init.d/pg-restore install -D -m644 "$srcdir"/pg-restore.confd ./etc/conf.d/pg-restore } dev() { default_dev _submv usr/bin/pg_config \ usr/bin/ecpg \ usr/lib/postgresql/pgxs } libpq() { pkgdesc="PostgreSQL libraries" depends="" _submv usr/lib/libpq.so.* } libs() { depends="" default_libs } client() { pkgdesc="PostgreSQL client" depends="" cd "$pkgdir"/usr/bin mkdir -p "$subpkgdir"/usr/bin mv clusterdb \ createdb \ createuser \ dropdb \ dropuser \ pg_basebackup \ pg_dump \ pg_dumpall \ pg_isready \ pg_receivewal \ pg_recvlogical \ pg_restore \ psql \ reindexdb \ vacuumdb \ "$subpkgdir"/usr/bin/ } contrib() { pkgdesc="Extension modules distributed with PostgreSQL" depends="" cd "$builddir" # Avoid installing plperl and plpython extensions, these will be # installed into separate subpackages. sed -Ei -e 's/(.*_plperl)/#\1/' \ -e 's/(.*_plpython)/#\1/' \ contrib/Makefile make -C contrib DESTDIR="$subpkgdir" install mv "$subpkgdir"/usr/share/doc/postgresql/extension \ "$pkgdir"/usr/share/doc/postgresql/ rmdir -p "$subpkgdir"/usr/share/doc/postgresql || true } pltcl() { pkgdesc="PL/Tcl procedural language for PostgreSQL" depends="pgtcl" _submv usr/lib/postgresql/pltcl.so \ usr/share/postgresql/extension/pltcl* install -m 644 "$srcdir"/pltcl_create_tables.sql \ "$subpkgdir"/usr/share/postgresql/ } plperl() { pkgdesc="PL/Perl procedural language for PostgreSQL" depends="" _submv usr/lib/postgresql/plperl.so \ usr/share/postgresql/extension/plperl* } plperl_contrib() { _plcontrib plperl "PL/Perl" cd "$builddir" make -C contrib/hstore_plperl DESTDIR="$subpkgdir" install } plpython2() { pkgdesc="PL/Python2 procedural language for PostgreSQL" depends="python2" _submv usr/lib/postgresql/plpython2.so \ usr/share/postgresql/extension/plpython* } plpython2_contrib() { _plcontrib plpython2 "PL/Python 2" cd "$builddir" make -C contrib/hstore_plpython DESTDIR="$subpkgdir" install make -C contrib/ltree_plpython DESTDIR="$subpkgdir" install rm "$subpkgdir"/usr/share/postgresql/extension/*plpython3* } plpython3() { pkgdesc="PL/Python3 procedural language for PostgreSQL" depends="python3" cd "$builddir"~py3 make -C src/pl/plpython DESTDIR="$subpkgdir" install rm -R "$subpkgdir"/usr/include } plpython3_contrib() { _plcontrib plpython3 "PL/Python 3" cd "$builddir"~py3 make -C contrib/hstore_plpython DESTDIR="$subpkgdir" install make -C contrib/ltree_plpython DESTDIR="$subpkgdir" install cd "$subpkgdir"/usr/share/postgresql/extension/ rm *plpython2* *plpythonu* } _plcontrib() { local subname="$1" pkgdesc="$2 extension modules distributed with PostgreSQL" depends="$pkgname-$subname" install_if="$pkgname-$subname=$pkgver-r$pkgrel $pkgname-contrib=$pkgver-r$pkgrel" } _run_tests() { local path="$1"; shift msg "Running test suite at $path..." # Note: some tests fail when running in parallel. make -k -j 1 -C "$path" $@ check MAX_CONNECTIONS=5 || { printf "\n%s\n\n" "Trying to find all regression.diffs files in build directory..." >&2 find "$path" -name regression.diffs | while read file; do echo "=== test failure: $file ===" >&2 cat "$file" >&2 done return 1 } } _submv() { local path; for path in "$@"; do mkdir -p "$subpkgdir/${path%/*}" mv "$pkgdir"/$path "$subpkgdir"/${path%/*}/ done } sha512sums="537148079dc6c33cfb9bf9722171e524707b42ef01369deb968d0d6e8fa9b7f16f6ce67139d9dc45fb7385defbf56aa2c0affe5ee9d76e996f31e47486192141 postgresql-11.5.tar.bz2 1f8e7dc58f5b0a12427cf2fd904ffa898a34f23f3332c8382b94e0d991c007289e7913a69e04498f3d93fc5701855796c207b4b1cc4a0b366f586050124d7fcc initdb.patch 5f9d8bb4957194069d01af8ab3abc6d4d83a7e7f8bd7ebe1caae5361d621a3e58f91b14b952958138a794e0a80bc154fbb7e3e78d211e2a95b9b7901335de854 perl-rpath.patch 8439a6fdfdea0a4867daeb8bc23d6c825f30c00d91d4c39f48653f5ee77341f23282ce03a77aad94b5369700f11d2cb28d5aee360e59138352a9ab331a9f9d0f conf-unix_socket_directories.patch 274e0a5a6e7d179f5327ae2da0274f13d9198d9acbe45f90e2bdadf454f1e32aceac6a1d4ef2b1744c4468994e93b14a38abea877b419b3fd28b8a3273b5d574 disable-broken-tests.patch 4a241074d27d638743eb56eedbc3cefe5ed4c02b6bf8030940be960d8c09ef88751443162ab405853d8db9ecc4af08ddb250096464d89cae5c0d4d4bf7eeb51f fix-psql-segfault.patch 224e80f9e62843fd248e625abdd0d9fe477729ff3f9a64fc5c86dd37bb7176d3504107fbed7ce578e3a1db7f60b8cf2abf5fe4862c81f76b6d026e29ca495cfc postgresql.initd a6d9cba5c7270484b3a22083b2b37742faefb01b6643040050c92235840c601b2e206ebda32804937b729c6cf42c79a558b921900e52fc420df2a03b5f29e1f7 postgresql.confd f5a1cba051e7d846c2d16703514601cb25729ed96b677c9bd0c199d64552120a8b14b238af01917fdb87106681e12dee6fff7447558155ba273e4f96be5e2892 pg-restore.initd c14a5684e914abb3b0ee71bbf15eed71a9264deacaa404a6e3af6bfc330d93e7598624d0ed11a94263106cc660f7f54c8ff57e759033cf606a795f69ff6c1c7c pg-restore.confd 5c9bfd9e295dcf678298bf0aa974347a7c311d6e7c2aa76a6920fcb751d01fd1ab77abbec11f3c672f927ad9deaa88e04e370c0b5cd1b60087554c474b748731 pltcl_create_tables.sql"