From 87192164d2a366a18e96721fbdbbb7bc3653a70e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Piotr=20W=C3=B3jcik?= <chocimier@tlen.pl>
Date: Fri, 10 Nov 2023 08:19:10 +0100
Subject: [PATCH] New package: postgresql16-16.1

---
 common/shlibs                                 |   8 +-
 srcpkgs/postgresql-libs                       |   2 +-
 srcpkgs/postgresql-libs-devel                 |   2 +-
 srcpkgs/postgresql16-client                   |   1 +
 srcpkgs/postgresql16-contrib                  |   1 +
 srcpkgs/postgresql16-doc                      |   1 +
 srcpkgs/postgresql16-plperl                   |   1 +
 srcpkgs/postgresql16-plpython                 |   1 +
 srcpkgs/postgresql16-pltcl                    |   1 +
 srcpkgs/postgresql16/files/pg_config.sh.in    | 143 ++++++++++
 srcpkgs/postgresql16/files/postgresql.confd   |  17 ++
 srcpkgs/postgresql16/files/postgresql.pam     |   3 +
 .../postgresql16/files/postgresql16/control/t |   2 +
 srcpkgs/postgresql16/files/postgresql16/run   |  28 ++
 .../patches/pg_config-cross-value.patch       |  45 +++
 srcpkgs/postgresql16/patches/relocate.patch   |  22 ++
 srcpkgs/postgresql16/template                 | 263 ++++++++++++++++++
 srcpkgs/postgresql16/update                   |   2 +
 18 files changed, 537 insertions(+), 6 deletions(-)
 create mode 120000 srcpkgs/postgresql16-client
 create mode 120000 srcpkgs/postgresql16-contrib
 create mode 120000 srcpkgs/postgresql16-doc
 create mode 120000 srcpkgs/postgresql16-plperl
 create mode 120000 srcpkgs/postgresql16-plpython
 create mode 120000 srcpkgs/postgresql16-pltcl
 create mode 100644 srcpkgs/postgresql16/files/pg_config.sh.in
 create mode 100644 srcpkgs/postgresql16/files/postgresql.confd
 create mode 100644 srcpkgs/postgresql16/files/postgresql.pam
 create mode 100755 srcpkgs/postgresql16/files/postgresql16/control/t
 create mode 100755 srcpkgs/postgresql16/files/postgresql16/run
 create mode 100644 srcpkgs/postgresql16/patches/pg_config-cross-value.patch
 create mode 100644 srcpkgs/postgresql16/patches/relocate.patch
 create mode 100644 srcpkgs/postgresql16/template
 create mode 100644 srcpkgs/postgresql16/update

diff --git a/common/shlibs b/common/shlibs
index c086125eb8c..a0cddb2729e 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -562,10 +562,10 @@ libKF5PurposeWidgets.so.5 purpose-5.48.0_1
 libKF5Purpose.so.5 purpose-5.48.0_1
 libKF5PulseAudioQt.so.3 pulseaudio-qt-1.3_1
 libReviewboardHelpers.so.5 purpose-5.48.0_1
-libecpg_compat.so.3 postgresql-libs-15.1_1
-libecpg.so.6 postgresql-libs-15.1_1
-libpgtypes.so.3 postgresql-libs-15.1_1
-libpq.so.5 postgresql-libs-15.1_1
+libecpg_compat.so.3 postgresql-libs-16.1_1
+libecpg.so.6 postgresql-libs-16.1_1
+libpgtypes.so.3 postgresql-libs-16.1_1
+libpq.so.5 postgresql-libs-16.1_1
 libmypaint.so.0 libmypaint-1.6.1_1
 libgssapi_krb5.so.2 mit-krb5-libs-1.8_1
 libgssrpc.so.4 mit-krb5-libs-1.8_1
diff --git a/srcpkgs/postgresql-libs b/srcpkgs/postgresql-libs
index a44b462efd1..2caa22354d1 120000
--- a/srcpkgs/postgresql-libs
+++ b/srcpkgs/postgresql-libs
@@ -1 +1 @@
-postgresql15
\ No newline at end of file
+postgresql16
\ No newline at end of file
diff --git a/srcpkgs/postgresql-libs-devel b/srcpkgs/postgresql-libs-devel
index a44b462efd1..2caa22354d1 120000
--- a/srcpkgs/postgresql-libs-devel
+++ b/srcpkgs/postgresql-libs-devel
@@ -1 +1 @@
-postgresql15
\ No newline at end of file
+postgresql16
\ No newline at end of file
diff --git a/srcpkgs/postgresql16-client b/srcpkgs/postgresql16-client
new file mode 120000
index 00000000000..2caa22354d1
--- /dev/null
+++ b/srcpkgs/postgresql16-client
@@ -0,0 +1 @@
+postgresql16
\ No newline at end of file
diff --git a/srcpkgs/postgresql16-contrib b/srcpkgs/postgresql16-contrib
new file mode 120000
index 00000000000..2caa22354d1
--- /dev/null
+++ b/srcpkgs/postgresql16-contrib
@@ -0,0 +1 @@
+postgresql16
\ No newline at end of file
diff --git a/srcpkgs/postgresql16-doc b/srcpkgs/postgresql16-doc
new file mode 120000
index 00000000000..2caa22354d1
--- /dev/null
+++ b/srcpkgs/postgresql16-doc
@@ -0,0 +1 @@
+postgresql16
\ No newline at end of file
diff --git a/srcpkgs/postgresql16-plperl b/srcpkgs/postgresql16-plperl
new file mode 120000
index 00000000000..2caa22354d1
--- /dev/null
+++ b/srcpkgs/postgresql16-plperl
@@ -0,0 +1 @@
+postgresql16
\ No newline at end of file
diff --git a/srcpkgs/postgresql16-plpython b/srcpkgs/postgresql16-plpython
new file mode 120000
index 00000000000..2caa22354d1
--- /dev/null
+++ b/srcpkgs/postgresql16-plpython
@@ -0,0 +1 @@
+postgresql16
\ No newline at end of file
diff --git a/srcpkgs/postgresql16-pltcl b/srcpkgs/postgresql16-pltcl
new file mode 120000
index 00000000000..2caa22354d1
--- /dev/null
+++ b/srcpkgs/postgresql16-pltcl
@@ -0,0 +1 @@
+postgresql16
\ No newline at end of file
diff --git a/srcpkgs/postgresql16/files/pg_config.sh.in b/srcpkgs/postgresql16/files/pg_config.sh.in
new file mode 100644
index 00000000000..68068a82e01
--- /dev/null
+++ b/srcpkgs/postgresql16/files/pg_config.sh.in
@@ -0,0 +1,143 @@
+#!/bin/sh
+# Released to Public Domain by Doan Tran Cong Danh
+
+print() {
+	printf '%s\n' "$@"
+}
+
+sysroot="$(cd "${0%/*}" && cd ../.. && pwd)"
+
+BINDIR="$sysroot/@PREFIX@/bin"
+DOCDIR="$sysroot/@PREFIX@/share/doc/postgresql"
+HTMLDIR="$sysroot/@PREFIX@/share/doc/postgresql"
+INCLUDEDIR="$sysroot/usr/include"
+PKGINCLUDEDIR="$sysroot/usr/include/postgresql"
+INCLUDEDIR_SERVER="$sysroot/usr/include/postgresql/server"
+LIBDIR="$sysroot/@PREFIX@/lib"
+PKGLIBDIR="$sysroot/@PREFIX@/lib/postgresql"
+LOCALEDIR="$sysroot/@PREFIX@/share/locale"
+MANDIR="$sysroot/@PREFIX@/share/man"
+SHAREDIR="$sysroot/@PREFIX@/share/postgresql"
+SYSCONFDIR="$sysroot/etc/psql@VERSION@/postgresql"
+PGXS="$sysroot/@PREFIX@/lib/postgresql/pgxs/src/makefiles/pgxs.mk"
+
+CONFIGURE="@configure_args@"
+CC="@CC@"
+CPPFLAGS="@CPPFLAGS@"
+CFLAGS="@CFLAGS@"
+CFLAGS_SL="@CFLAGS_SL@"
+LDFLAGS="@LDFLAGS@"
+LDFLAGS_EX="@LDFLAGS_EX@"
+LDFLAGS_SL="@LDFLAGS_SL@"
+LIBS="@LIBS@"
+VERSION="PostgreSQL @FULL_VERSION@"
+
+if [ "$sysroot" != "/" ]; then
+	CPPFLAGS="$(print "$CPPFLAGS" | sed "s,-I *\\(/@PREFIX@/include\\),-I$sysroot\\1,g")"
+	CFLAGS="$(print "$CFLAGS" | sed "s,-I *\\(/@PREFIX@/include\\),-I$sysroot\\1,g")"
+	LDFLAGS="$(print "$LDFLAGS" | sed "s,-L *\\(/@PREFIX@/lib\\),-L$sysroot\\1,g")"
+fi
+
+usage() {
+	cat <<-EOF
+	$0 provides information about the installed version of PostgreSQL.
+
+	Usage:
+	  $0 [OPTION]...
+
+	Options:
+	  --bindir              show location of user executables
+	  --docdir              show location of documentation files
+	  --htmldir             show location of HTML documentation files
+	  --includedir          show location of C header files of the client interfaces
+	  --pkgincludedir       show location of other C header files
+	  --includedir-server   show location of C header files for the server
+	  --libdir              show location of object code libraries
+	  --pkglibdir           show location of dynamically loadable modules
+	  --localedir           show location of locale support files
+	  --mandir              show location of manual pages
+	  --sharedir            show location of architecture-independent support files
+	  --sysconfdir          show location of system-wide configuration files
+	  --pgxs                show location of extension makefile
+	  --configure           show options given to PostgreSQL was built
+	  --cc                  show CC value used when PostgreSQL was built
+	  --cppflags            show CPPFLAGS value used when PostgreSQL was built
+	  --cflags              show CFLAGS value used when PostgreSQL was built
+	  --cflags_sl           show CFLAGS_SL value used when PostgreSQL was built
+	  --ldflags             show LDFLAGS value used when PostgreSQL was built
+	  --ldflags_ex          show LDFLAGS_EX value used when PostgreSQL was built
+	  --ldflags_sl          show LDFLAGS_SL value used when PostgreSQL was built
+	  --libs                show LIBS value used when PostgreSQL was built
+	  --version             show the PostgreSQL version
+	  -?, --help            show this help, then exit
+
+	With no arguments, all known items are shown.
+
+	Report bugs to <pgsql-bugs@postgresql.org>.
+	EOF
+}
+
+if test $# -eq 0; then
+	cat <<-EOF
+	BINDIR = $BINDIR
+	DOCDIR = $DOCDIR
+	HTMLDIR = $HTMLDIR
+	INCLUDEDIR = $INCLUDEDIR
+	PKGINCLUDEDIR = $PKGINCLUDEDIR
+	INCLUDEDIR-SERVER = $INCLUDEDIR_SERVER
+	LIBDIR = $LIBDIR
+	PKGLIBDIR = $PKGLIBDIR
+	LOCALEDIR = $LOCALEDIR
+	MANDIR = $MANDIR
+	SHAREDIR = $SHAREDIR
+	SYSCONFDIR = $SYSCONFDIR
+	PGXS = $PGXS
+	CONFIGURE = $CONFIGURE
+	CC = $CC
+	CPPFLAGS = $CPPFLAGS
+	CFLAGS = $CFLAGS
+	CFLAGS_SL = $CFLAGS_SL
+	LDFLAGS = $LDFLAGS
+	LDFLAGS_EX = $LDFLAGS_EX
+	LDFLAGS_SL = $LDFLAGS_SL
+	LIBS = $LIBS
+	VERSION = $VERSION
+	EOF
+fi
+
+for arg
+do
+	if test "x$arg" = "x--help" || test "x$arg" = "x-?"; then
+		usage
+		exit 0
+	fi
+done
+
+for arg
+do
+	case "$arg" in
+	--bindir) print "$BINDIR" ;;
+	--docdir) print "$DOCDIR" ;;
+	--htmldir) print "$HTMLDIR" ;;
+	--includedir) print "$INCLUDEDIR" ;;
+	--pkgincludedir) print "$PKGINCLUDEDIR" ;;
+	--includedir-server) print "$INCLUDEDIR_SERVER" ;;
+	--libdir) print "$LIBDIR" ;;
+	--pkglibdir) print "$PKGLIBDIR" ;;
+	--localedir) print "$LOCALEDIR" ;;
+	--mandir) print "$MANDIR" ;;
+	--sharedir) print "$SHAREDIR" ;;
+	--sysconfdir) print "$SYSCONFDIR" ;;
+	--pgxs) print "$PGXS" ;;
+	--configure) print "$CONFIGURE" ;;
+	--cc) print "$CC" ;;
+	--cppflags) print "$CPPFLAGS" ;;
+	--cflags) print "$CFLAGS" ;;
+	--cflags_sl) print "$CFLAGS_SL" ;;
+	--ldflags) print "$LDFLAGS" ;;
+	--ldflags_ex) print "$LDFLAGS_EX" ;;
+	--ldflags_sl) print "$LDFLAGS_SL" ;;
+	--libs) print "$LIBS" ;;
+	--version) print "$VERSION" ;;
+	esac
+done
diff --git a/srcpkgs/postgresql16/files/postgresql.confd b/srcpkgs/postgresql16/files/postgresql.confd
new file mode 100644
index 00000000000..fe7106626fa
--- /dev/null
+++ b/srcpkgs/postgresql16/files/postgresql.confd
@@ -0,0 +1,17 @@
+# Configuration file for the PostgreSQL server.
+
+# PostgreSQL's database directory
+PGROOT="/var/lib/postgresql@VERSION@"
+
+# PostgreSQL's log file.
+PGLOG="/var/log/postgresql@VERSION@.log"
+
+# Passed to initdb if necessary
+INITOPTS="-A peer --auth-host=md5 --auth-local=peer --locale en_US.UTF-8"
+
+# Extra options to run postmaster with, e.g.:
+# -N is the maximal number of client connections
+# -B is the number of shared buffers and has to be at least 2x the value for -N
+# Please read the man-page to postmaster for more options. Many of these options
+# can be set directly in the configuration-file.
+#PGOPTS="-N 512 -B 1024"
diff --git a/srcpkgs/postgresql16/files/postgresql.pam b/srcpkgs/postgresql16/files/postgresql.pam
new file mode 100644
index 00000000000..53724d1f86a
--- /dev/null
+++ b/srcpkgs/postgresql16/files/postgresql.pam
@@ -0,0 +1,3 @@
+auth		required	pam_unix.so
+account		required	pam_unix.so
+session		required	pam_unix.so
diff --git a/srcpkgs/postgresql16/files/postgresql16/control/t b/srcpkgs/postgresql16/files/postgresql16/control/t
new file mode 100755
index 00000000000..dcedfaa2018
--- /dev/null
+++ b/srcpkgs/postgresql16/files/postgresql16/control/t
@@ -0,0 +1,2 @@
+#!/bin/sh
+/usr/bin/kill -INT `/usr/bin/head -1 /run/runit/supervise.postgresql@VERSION@/pid`
diff --git a/srcpkgs/postgresql16/files/postgresql16/run b/srcpkgs/postgresql16/files/postgresql16/run
new file mode 100755
index 00000000000..1da79920625
--- /dev/null
+++ b/srcpkgs/postgresql16/files/postgresql16/run
@@ -0,0 +1,28 @@
+#!/bin/sh
+exec 2>&1
+. /etc/psql@VERSION@/default/postgresql
+: ${PGDATA:="$PGROOT/data"}
+
+if [ "$PGROOT" != "/var/lib/postgresql@VERSION@" ]; then
+	echo "Creating symlink /var/lib/postgresql@VERSION@ -> $PGROOT"
+	ln -sf "$PGROOT" /var/lib/postgresql@VERSION@
+fi
+
+
+if [ ! -d "$PGDATA" ]; then
+	echo "Initializing database in $PGDATA"
+
+	mkdir -p "$PGDATA" || exit 1
+	chown -R postgres:postgres "$PGDATA"
+	chmod 0700 "$PGDATA"
+	su - postgres -c "/@PREFIX@/bin/initdb $INITOPTS -D '$PGDATA'" 2>&1 || {
+		rm -fr "$PGDATA"
+		exit 1
+	}
+
+	if [ -f /etc/psql@VERSION@/postgresql/postgresql.conf ]; then
+		ln -sf /etc/psql@VERSION@/postgresql/postgresql.conf "$PGDATA/postgresql.conf"
+	fi
+fi
+
+exec chpst -u postgres:postgres /@PREFIX@/bin/postgres -D "$PGDATA" $PGOPTS 2>&1
diff --git a/srcpkgs/postgresql16/patches/pg_config-cross-value.patch b/srcpkgs/postgresql16/patches/pg_config-cross-value.patch
new file mode 100644
index 00000000000..cc0a9fc1913
--- /dev/null
+++ b/srcpkgs/postgresql16/patches/pg_config-cross-value.patch
@@ -0,0 +1,45 @@
+Sources: Doan Tran Cong Danh
+Upstream: No
+	- First part needs to be rework in configure script to be usable
+	  upstream
+	- Second part would un-usable for Windows
+diff --git src/common/Makefile src/common/Makefile
+index ec04710..2af845f 100644
+--- a/src/common/Makefile
++++ b/src/common/Makefile
+@@ -30,10 +30,13 @@ include $(top_builddir)/src/Makefile.global
+ 
+ # don't include subdirectory-path-dependent -I and -L switches
+ STD_CPPFLAGS := $(filter-out -I$(top_srcdir)/src/include -I$(top_builddir)/src/include,$(CPPFLAGS))
++STD_CPPFLAGS := $(subst @XBPS_SYSROOT@,,$(STD_CPPFLAGS))
++STD_CFLAGS   := $(subst @XBPS_SYSROOT@,,$(CFLAGS))
+ STD_LDFLAGS := $(filter-out -L$(top_builddir)/src/common -L$(top_builddir)/src/port,$(LDFLAGS))
++STD_LDFLAGS := $(subst @XBPS_SYSROOT@,,$(STD_LDFLAGS))
+ override CPPFLAGS += -DVAL_CC="\"$(CC)\""
+ override CPPFLAGS += -DVAL_CPPFLAGS="\"$(STD_CPPFLAGS)\""
+-override CPPFLAGS += -DVAL_CFLAGS="\"$(CFLAGS)\""
++override CPPFLAGS += -DVAL_CFLAGS="\"$(STD_CFLAGS)\""
+ override CPPFLAGS += -DVAL_CFLAGS_SL="\"$(CFLAGS_SL)\""
+ override CPPFLAGS += -DVAL_LDFLAGS="\"$(STD_LDFLAGS)\""
+ override CPPFLAGS += -DVAL_LDFLAGS_EX="\"$(LDFLAGS_EX)\""
+@@ -72,7 +75,19 @@ OBJS_FRONTEND = $(OBJS_COMMON) fe_memutils.o restricted_token.o
+ GEN_KEYWORDLIST = $(PERL) -I $(TOOLSDIR) $(TOOLSDIR)/gen_keywordlist.pl
+ GEN_KEYWORDLIST_DEPS = $(TOOLSDIR)/gen_keywordlist.pl $(TOOLSDIR)/PerfectHash.pm
+ 
+-all: libpgcommon.a libpgcommon_shlib.a libpgcommon_srv.a
++all: libpgcommon.a libpgcommon_shlib.a libpgcommon_srv.a pg_config.sh
++
++pg_config.sh: pg_config.sh.in
++	sed -e "s/@configure_args@/$(subst /,\\/,$(configure_args))/" \
++		-e "s/@CC@/$(subst /,\\/,$(CC))/" \
++		-e "s/@CPPFLAGS@/$(subst /,\\/,$(STD_CPPFLAGS))/" \
++		-e "s/@CFLAGS@/$(subst /,\\/,$(STD_CFLAGS))/" \
++		-e "s/@CFLAGS_SL@/$(subst /,\\/,$(CFLAGS_SL))/" \
++		-e "s/@LDFLAGS@/$(subst /,\\/,$(STD_LDFLAGS))/" \
++		-e "s/@LDFLAGS_EX@/$(subst /,\\/,$(LDFLAGS_EX))/" \
++		-e "s/@LDFLAGS_SL@/$(subst /,\\/,$(LDFLAGS_SL))/" \
++		-e "s/@LIBS@/$(subst /,\\/,$(LIBS))/" \
++		$< >$@
+ 
+ distprep: kwlist_d.h
+ 
diff --git a/srcpkgs/postgresql16/patches/relocate.patch b/srcpkgs/postgresql16/patches/relocate.patch
new file mode 100644
index 00000000000..d2cc14281e3
--- /dev/null
+++ b/srcpkgs/postgresql16/patches/relocate.patch
@@ -0,0 +1,22 @@
+From bf0601df89f611b33d8dbc27722351bf99e2cc18 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Piotr=20W=C3=B3jcik?= <chocimier@tlen.pl>
+Date: Sat, 18 Jan 2020 12:19:45 +0100
+Subject: [PATCH] relocate
+
+
+diff --git src/port/path.c src/port/path.c
+index 710988b..20dc57d 100644
+--- a/src/port/path.c
++++ b/src/port/path.c
+@@ -544,6 +544,8 @@ make_relative_path(char *ret_path, const char *target_path,
+ 	int			tail_len;
+ 	int			i;
+ 
++	goto no_match; // we relocate only binaries
++
+ 	/*
+ 	 * Determine the common prefix --- note we require it to end on a
+ 	 * directory separator, consider eg '/usr/lib' and '/usr/libexec'.
+-- 
+2.23.0
+
diff --git a/srcpkgs/postgresql16/template b/srcpkgs/postgresql16/template
new file mode 100644
index 00000000000..5eba23437c8
--- /dev/null
+++ b/srcpkgs/postgresql16/template
@@ -0,0 +1,263 @@
+# Template file for 'postgresql16'
+pkgname=postgresql16
+version=16.1
+revision=1
+build_style=gnu-configure
+make_build_target=world
+_major="${version%%.*}"
+_prefix="usr/lib/psql${_major}"
+_sysconfdir="etc/psql${_major}"
+configure_args="--with-openssl --with-python
+ --with-pam --enable-thread-safety
+ --with-perl --with-tcl --without-ldap --without-gssapi
+ --without-bonjour --with-libxml --with-libxslt
+ --with-system-tzdata=/usr/share/zoneinfo --enable-nls --with-uuid=e2fs"
+hostmakedepends="docbook2x gettext flex openjade pkg-config"
+makedepends="libfl-devel openssl-devel libuuid-devel libxslt-devel pam-devel perl
+ python3-devel readline-devel tcl-devel"
+short_desc="Sophisticated open-source Object-Relational DBMS"
+maintainer="Piotr Wójcik <chocimier@tlen.pl>"
+license="PostgreSQL"
+homepage="https://www.postgresql.org"
+changelog="https://www.postgresql.org/docs/current/release-${version//./-}.html"
+distfiles="https://ftp.postgresql.org/pub/source/v${version}/postgresql-${version}.tar.bz2"
+checksum=ce3c4d85d19b0121fe0d3f8ef1fa601f71989e86f8a66f7dc3ad546dd5564fec
+make_check=ci-skip # Postgres server can't be run as root
+
+conf_files="
+ /${_sysconfdir}/default/postgresql
+ /${_sysconfdir}/pam.d/postgresql
+ /${_sysconfdir}/postgresql/postgresql.conf
+"
+alternatives="
+ postgresql:/usr/bin/initdb:/usr/lib/psql16/bin/initdb
+ postgresql:/usr/bin/pg_amcheck:/usr/lib/psql16/bin/pg_amcheck
+ postgresql:/usr/bin/pg_archivecleanup:/usr/lib/psql16/bin/pg_archivecleanup
+ postgresql:/usr/bin/pg_basebackup:/usr/lib/psql16/bin/pg_basebackup
+ postgresql:/usr/bin/pg_checksums:/usr/lib/psql16/bin/pg_checksums
+ postgresql:/usr/bin/pg_controldata:/usr/lib/psql16/bin/pg_controldata
+ postgresql:/usr/bin/pg_ctl:/usr/lib/psql16/bin/pg_ctl
+ postgresql:/usr/bin/pg_receivewal:/usr/lib/psql16/bin/pg_receivewal
+ postgresql:/usr/bin/pg_recvlogical:/usr/lib/psql16/bin/pg_recvlogical
+ postgresql:/usr/bin/pg_resetwal:/usr/lib/psql16/bin/pg_resetwal
+ postgresql:/usr/bin/pg_rewind:/usr/lib/psql16/bin/pg_rewind
+ postgresql:/usr/bin/pg_test_fsync:/usr/lib/psql16/bin/pg_test_fsync
+ postgresql:/usr/bin/pg_test_timing:/usr/lib/psql16/bin/pg_test_timing
+ postgresql:/usr/bin/pg_upgrade:/usr/lib/psql16/bin/pg_upgrade
+ postgresql:/usr/bin/pg_verifybackup:/usr/lib/psql16/bin/pg_verifybackup
+ postgresql:/usr/bin/pg_waldump:/usr/lib/psql16/bin/pg_waldump
+ postgresql:/usr/bin/pgbench:/usr/lib/psql16/bin/pgbench
+ postgresql:/usr/bin/postgres:/usr/lib/psql16/bin/postgres
+"
+
+# Create 'postgres' user for the server.
+system_accounts="postgres"
+postgres_homedir="/var/lib/postgresql"
+postgres_shell="/bin/sh"
+postgres_descr="PostgreSQL database server user"
+make_dirs="
+ /var/lib/postgresql   0750 postgres postgres
+ /var/lib/postgresql${_major} 0750 postgres postgres"
+
+if [ "$CROSS_BUILD" ]; then
+	configure_args+=" --without-perl --without-python --without-tcl"
+fi
+
+post_patch() {
+	cp "$FILESDIR"/pg_config.sh.in src/common/pg_config.sh.in
+	_substitute src/common/pg_config.sh.in
+	vsed -i -e "s,@XBPS_SYSROOT@,${XBPS_CROSS_BASE%/}," src/common/Makefile
+}
+
+pre_configure() {
+	_style_configure_args="${configure_args}"
+	configure_args=" "
+	for arg in ${_style_configure_args}; do
+		case $arg in
+			--prefix=*|*dir=*) : ;; # skip
+			*) configure_args+=" $arg"
+		esac
+	done
+	configure_args="--prefix=/${_prefix}
+	 --sysconfdir=/${_sysconfdir}
+	 --includedir=/usr/include
+	 ${configure_args}"
+}
+
+post_build() {
+	make -C contrib ${makejobs}
+}
+
+pre_check() {
+	ln -sr tmp_install/${_prefix} /${_prefix%/*}
+}
+
+post_install() {
+	vmkdir usr/share/man
+	cp -r doc/src/sgml/man? ${DESTDIR}/usr/share/man
+	for i in ${DESTDIR}/usr/share/man/*[^3]/*; do
+		mv $i ${i%.*}-${_major}.${i##*.}
+	done
+	vmkdir ${_prefix}/share/doc
+	cp -r doc/src/sgml/html ${DESTDIR}/${_prefix}/share/doc
+	vsv ${pkgname}
+	find "${DESTDIR}/etc/sv" -type f -exec sed -i -e s:@VERSION@:${_major}: -e s:@PREFIX@:${_prefix}: '{}' ';'
+	vlicense COPYRIGHT
+
+	vinstall ${FILESDIR}/postgresql.confd 644 ${_sysconfdir}/default postgresql
+	_substitute ${DESTDIR}/${_sysconfdir}/default/postgresql
+	vinstall ${FILESDIR}/postgresql.pam 644 ${_sysconfdir}/pam.d postgresql
+	_substitute ${DESTDIR}/${_sysconfdir}/pam.d/postgresql
+	vinstall ${DESTDIR}/${_prefix}/share/postgresql/postgresql.conf.sample \
+		644 ${_sysconfdir}/postgresql postgresql.conf
+	vbin src/common/pg_config.sh
+
+	vsed -i 's/install_bin = .*/install_bin = install/g' \
+		${DESTDIR}/${_prefix}/lib/postgresql/pgxs/src/Makefile.global
+}
+
+_substitute() {
+	sed -i "$1" -e s:@PREFIX@:${_prefix}: -e s:@VERSION@:${_major}: -e s:@FULL_VERSION@:${version}:
+}
+
+postgresql16-doc_package() {
+	short_desc="PostgreSQL documentation"
+	pkg_install() {
+		vmove ${_prefix}/share/doc
+	}
+}
+
+postgresql-libs_package() {
+	short_desc="PostgreSQL shared libraries"
+	conflicts="postgresql9.6-libs>=0 postgresql12-libs>=0 postgresql13-libs>=0 postgresql14-libs>=0 postgresql15-libs>=0"
+	pkg_install() {
+		vmove "${_prefix}/lib/*.so*"
+		for d in $(find ${DESTDIR}/${_prefix}/share/locale \
+		    -type f -name libpq5\*); do
+			mkdir -p ${PKGDESTDIR}/$(dirname ${d#${DESTDIR}})
+			mv ${d} ${PKGDESTDIR}/$(dirname ${d#${DESTDIR}})
+		done
+		mv ${PKGDESTDIR}/${_prefix}/lib/* ${PKGDESTDIR}/usr/lib
+	}
+}
+
+postgresql-libs-devel_package() {
+	depends="postgresql-libs>=${version}_${revision} openssl-devel"
+	short_desc="PostgreSQL shared libraries (development files)"
+	conflicts="postgresql9.6-libs-devel>=0 postgresql12-libs-devel>=0 postgresql13-libs-devel>=0 postgresql14-libs-devel>=0 postgresql15-libs-devel>=0"
+	pkg_install() {
+		vmkdir usr/bin
+		vmkdir usr/lib
+		for f in pg_config ecpg; do
+			vmove ${_prefix}/bin/${f}
+			vmove "usr/share/man/man1/$(basename ${f})*"
+			ln -sr "${PKGDESTDIR}/${_prefix}/bin/${f}" "${PKGDESTDIR}/usr/bin"
+		done
+		vmove usr/bin/pg_config.sh
+		vmove usr/include
+		vmove "${_prefix}/lib/*.a"
+		mv "${DESTDIR}/${_prefix}/lib/pkgconfig" "${PKGDESTDIR}/usr/lib"
+		vmove usr/share/man/man3
+		vmove ${_prefix}/lib/postgresql/pgxs
+		for f in libpq.so libpgtypes.so libecpg_compat.so libecpg.so; do
+			ln -sr "${PKGDESTDIR}/usr/lib/${f}" "${PKGDESTDIR}/${_prefix}/lib"
+		done
+		for d in $(find ${DESTDIR}/${_prefix}/share/locale \
+		   -type f -name pg_config\* -o -name ecpg\*); do
+			mkdir -p ${PKGDESTDIR}/$(dirname ${d#${DESTDIR}})
+			mv ${d} ${PKGDESTDIR}/$(dirname ${d#${DESTDIR}})
+		done
+	}
+}
+
+# XXX disabled for now in cross builds.
+if [ -z "$CROSS_BUILD" ]; then
+
+postgresql16-plperl_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc="PL/Perl procedural language for PostgreSQL"
+	pkg_install() {
+		vmove "${_prefix}/lib/postgresql/plperl*"
+		for d in $(find ${DESTDIR}/${_prefix}/share/locale \
+		   -type f -name plperl\*); do
+			mkdir -p ${PKGDESTDIR}/$(dirname ${d#${DESTDIR}})
+			mv ${d} ${PKGDESTDIR}/$(dirname ${d#${DESTDIR}})
+		done
+	}
+}
+
+postgresql16-plpython_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc="PL/Python procedural language for PostgreSQL"
+	pkg_install() {
+		vmove "${_prefix}/lib/postgresql/plpython*"
+		for d in $(find ${DESTDIR}/${_prefix}/share/locale \
+		   -type f -name plpython\*); do
+			mkdir -p ${PKGDESTDIR}/$(dirname ${d#${DESTDIR}})
+			mv ${d} ${PKGDESTDIR}/$(dirname ${d#${DESTDIR}})
+		done
+	}
+}
+
+postgresql16-pltcl_package() {
+	depends="${sourcepkg}>=${version}_${revision}"
+	short_desc="PL/Tcl procedural language for PostgreSQL"
+	pkg_install() {
+		vmove "${_prefix}/lib/postgresql/pltcl*"
+		for d in $(find ${DESTDIR}/${_prefix}/share/locale \
+		   -type f -name pltcl\*); do
+			mkdir -p ${PKGDESTDIR}/$(dirname ${d#${DESTDIR}})
+			mv ${d} ${PKGDESTDIR}/$(dirname ${d#${DESTDIR}})
+		done
+	}
+}
+
+fi # !CROSS_BUILD
+
+postgresql16-client_package() {
+	short_desc="Client frontends programs for PostgreSQL"
+	alternatives="
+	 postgresql-client:/usr/bin/clusterdb:/usr/lib/psql16/bin/clusterdb
+	 postgresql-client:/usr/bin/createdb:/usr/lib/psql16/bin/createdb
+	 postgresql-client:/usr/bin/createuser:/usr/lib/psql16/bin/createuser
+	 postgresql-client:/usr/bin/dropdb:/usr/lib/psql16/bin/dropdb
+	 postgresql-client:/usr/bin/dropuser:/usr/lib/psql16/bin/dropuser
+	 postgresql-client:/usr/bin/pg_dump:/usr/lib/psql16/bin/pg_dump
+	 postgresql-client:/usr/bin/pg_dumpall:/usr/lib/psql16/bin/pg_dumpall
+	 postgresql-client:/usr/bin/pg_isready:/usr/lib/psql16/bin/pg_isready
+	 postgresql-client:/usr/bin/pg_restore:/usr/lib/psql16/bin/pg_restore
+	 postgresql-client:/usr/bin/psql:/usr/lib/psql16/bin/psql
+	 postgresql-client:/usr/bin/reindexdb:/usr/lib/psql16/bin/reindexdb
+	 postgresql-client:/usr/bin/vacuumdb:/usr/lib/psql16/bin/vacuumdb
+	"
+	pkg_install() {
+		for f in clusterdb createdb createuser dropdb \
+			dropuser pg_dump pg_dumpall pg_isready pg_restore psql reindexdb \
+			vacuumdb; do
+			vmove ${_prefix}/bin/${f}
+			vmove usr/share/man/man1/$(basename ${f})-${_major}.1
+		done
+		vmove usr/share/man/man7
+		for d in $(find ${DESTDIR}/${_prefix}/share/locale \
+		   -type f -name pgscripts\* -o \
+			   -name psql\* -o \
+			   -name pg_dump\*); do
+			mkdir -p ${PKGDESTDIR}/$(dirname ${d#${DESTDIR}})
+			mv ${d} ${PKGDESTDIR}/$(dirname ${d#${DESTDIR}})
+		done
+		mv ${DESTDIR}/${_prefix}/share/postgresql/psqlrc.* \
+			${PKGDESTDIR}/${_prefix}/share
+	}
+}
+
+postgresql16-contrib_package() {
+	short_desc="PostgreSQL contributed programs and extensions"
+	alternatives="
+	 postgresql-contrib:/usr/bin/oid2name:/usr/lib/psql16/bin/oid2name
+	 postgresql-contrib:/usr/bin/vacuumlo:/usr/lib/psql16/bin/vacuumlo
+	"
+	pkg_install() {
+		make -C contrib install DESTDIR=${PKGDESTDIR}
+		mv ${PKGDESTDIR}/usr/include ${PKGDESTDIR}/${_prefix}
+	}
+}
diff --git a/srcpkgs/postgresql16/update b/srcpkgs/postgresql16/update
new file mode 100644
index 00000000000..160ccf14333
--- /dev/null
+++ b/srcpkgs/postgresql16/update
@@ -0,0 +1,2 @@
+site="https://ftp.postgresql.org/pub/source/"
+pattern="v\K${version%%.*}[\d.]+(?!\w)"