1
0
Fork 0
mirror of https://gitlab.alpinelinux.org/alpine/aports.git synced 2025-07-21 10:15:12 +03:00
aports/community/postgresql12/APKBUILD
2023-02-10 14:03:14 +00:00

497 lines
13 KiB
Text

# Maintainer: Jakub Jirutka <jakub@jirutka.cz>
# Contributor: G.J.R. Timmer <gjr.timmer@gmail.com>
# Contributor: Jakub Jirutka <jakub@jirutka.cz>
_pkgname=postgresql
pkgver=12.14
pkgrel=0
_majorver=${pkgver%%.*}
# Should this aport provide libpq* and libecpg*? true/false
# Exactly one postgresql aport must be the default one!
_default_ver=false
pkgname=$_pkgname$_majorver
pkgdesc="A sophisticated object-relational DBMS, version $_majorver"
url="https://www.postgresql.org/"
arch="all"
license="PostgreSQL"
_llvmver=14
depends="$pkgname-client postgresql-common tzdata"
depends_dev="
libpq-dev
libecpg-dev
clang$_llvmver
icu-dev
llvm$_llvmver
openssl-dev>3
"
checkdepends="diffutils"
makedepends="$depends_dev
libxml2-dev
linux-headers
llvm$_llvmver-dev
openldap-dev
perl-dev
python3-dev
readline-dev
tcl-dev
util-linux-dev
zlib-dev
bison flex
"
pkgusers="postgres"
pkggroups="postgres"
install="$pkgname.post-install $pkgname.pre-deinstall"
provider_priority=$_majorver
provides="postgresql"
replaces="postgresql" # for backward compatibility
$_default_ver && subpackages="
libpq
libpq-dev:libpq_dev
libecpg
libecpg-dev:libecpg_dev
"
subpackages="
$subpackages
$pkgname-client
$pkgname-jit
$pkgname-contrib
$pkgname-plperl
$pkgname-plperl-contrib:plperl_contrib
$pkgname-plpython3
$pkgname-plpython3-contrib:plpython3_contrib
$pkgname-pltcl
$pkgname-contrib-jit:contrib_jit
$pkgname-dev
$pkgname-doc
$pkgname-openrc
"
source="https://ftp.postgresql.org/pub/source/v$pkgver/postgresql-$pkgver.tar.bz2
initdb.patch
perl-rpath.patch
per-version-dirs.patch
unix_socket_directories.patch
disable-broken-tests.patch
disable-html-docs.patch
remove-libecpg_compat.patch
make-split-headers.patch
jit-datalayout-mismatch-on-s390x.patch
pg_config-add-major-version.patch
dont-use-locale-a-on-musl.patch
icu-collations-hack.patch
libpgport-pkglibdir.patch.txt
external-libpq.patch.txt
pltcl_create_tables.sql
"
builddir="$srcdir/$_pkgname-$pkgver"
# secfixes:
# 12.14-r0:
# - CVE-2022-41862
# 12.12-r0:
# - CVE-2022-2625
# 12.11-r0:
# - CVE-2022-1552
# 12.9-r0:
# - CVE-2021-23214
# - CVE-2021-23222
# 12.8-r0:
# - CVE-2021-3677
# 12.5-r0:
# - CVE-2020-25694
# - CVE-2020-25695
# - CVE-2020-25696
# 12.4-r0:
# - CVE-2020-14349
# - CVE-2020-14350
# 12.2-r0:
# - CVE-2020-1720
_bindir=usr/libexec/$pkgname
_datadir=usr/share/$pkgname
_docdir=usr/share/doc/$pkgname
_mandir=$_datadir/man
_includedir=usr/include/postgresql
# Directory for server-related libraries. This is hard-coded in
# per-version-dirs.patch.
_srvlibdir=usr/lib/$pkgname
# Programs to be included in the -client subpackage.
# TODO: This was probably originally copied from Debian and I have no idea
# why these are considered as front-end (client) programs and the rest of
# the programs are not. So it should be reviewed.
_client_cmds="
clusterdb
createdb
createuser
dropdb
dropuser
pg_basebackup
pg_dump
pg_dumpall
pg_isready
pg_receivewal
pg_recvlogical
pg_restore
pgbench
psql
reindexdb
vacuumdb
"
prepare() {
default_prepare
if $_default_ver; then
cp -rl "$builddir" "$builddir-ifaces"
else
msg 'external-libpq.patch'
patch -p1 < "$srcdir"/external-libpq.patch.txt
fi
# Note: This must be applied after clonning $builddir-ifaces.
patch -p1 < "$srcdir"/libpgport-pkglibdir.patch.txt
}
build() {
export LLVM_CONFIG="/usr/lib/llvm$_llvmver/bin/llvm-config"
export PYTHON=/usr/bin/python3
export CFLAGS="${CFLAGS/-Os/-O2}"
export CPPFLAGS="${CPPFLAGS/-Os/-O2}"
_configure --with-ldap
make world
if $_default_ver; then
cd "$builddir-ifaces"
_configure --without-ldap
local dir; for dir in include common port interfaces bin/pg_config; do
make -C src/$dir
done
fi
}
_configure() {
local _extra_opts
# When disable-spinlocks is no longer required - check postgresql-bdr package.
case "$CARCH" in
riscv64) _extra_opts='--disable-spinlocks';;
esac
./configure \
--build=$CBUILD \
--host=$CHOST \
--prefix=/usr \
--bindir=/$_bindir \
--datarootdir=/usr/share \
--datadir=/$_datadir \
--docdir=/$_docdir \
--includedir=/$_includedir \
--libdir=/usr/lib \
--mandir=/$_mandir \
--sysconfdir=/etc/postgresql \
--disable-rpath \
--with-system-tzdata=/usr/share/zoneinfo \
--with-libxml \
--with-openssl \
--with-uuid=e2fs \
--with-llvm \
--with-icu \
--with-perl \
--with-python \
--with-tcl \
$_extra_opts \
"$@"
}
check() {
_run_tests src/test
_run_tests src/pl
_run_tests contrib
}
package() {
make DESTDIR="$pkgdir" install install-docs
if $_default_ver; then
cd "$builddir-ifaces"
# Override libpq and libecpg files with the build without LDAP support.
local dir; for dir in common port interfaces bin/pg_config; do
make -C src/$dir DESTDIR="$pkgdir" bindir=/usr/bin install
done
make -C src/include DESTDIR="$pkgdir" install-interfaces
fi
cd "$pkgdir"
# Duplicate of usr/bin/ecpg.
rm -f ./$_bindir/ecpg
mkdir -p ./usr/bin
ln -s /$_bindir/postgres ./usr/bin/postgres$_majorver
# This file is used by pg_versions and init script.
echo "$_majorver" > ./$_bindir/PG_VERSION
install -d -m750 -o postgres -g postgres \
./etc/postgresql$_majorver \
./var/lib/postgresql \
./var/log/postgresql
local server_cmds=$(_setdiff "$(ls -1 $_bindir)" "$_client_cmds pg_config ecpg PG_VERSION")
[ "$server_cmds" ] || die 'package: variable server_cmds is empty'
# These commands are symlinked to /usr/bin by pg_versions script after
# installation.
provides="$provides $(echo "$server_cmds" | sed 's/^/cmd:&/')"
}
libpq() {
pkgdesc="PostgreSQL client library"
depends=""
replaces=""
amove usr/lib/libpq.so.*
}
libpq_dev() {
pkgdesc="PostgreSQL client library (development files)"
depends=""
replaces=""
amove usr/bin/pg_config
amove $_includedir/internal/*
amove $_includedir/libpq-*.h
amove $_includedir/libpq/*
amove $_includedir/pg_config*.h
amove $_includedir/postgres_ext.h
amove usr/lib/libpq.*
amove usr/lib/libpgcommon*.a
amove usr/lib/libpgport*.a
amove usr/lib/pkgconfig/libpq.pc
}
libecpg() {
pkgdesc="ECPG - Embedded SQL in C"
depends=""
provides="postgresql-libs" # for backward compatibility (Alpine <3.15)
replaces="$provides" # for backward compatibility (Alpine <3.15)
amove usr/lib/libecpg.so.*
amove usr/lib/libpgtypes.so.*
}
libecpg_dev() {
pkgdesc="ECPG - Embedded SQL in C (development files)"
depends="libpq-dev=$pkgver-r$pkgrel"
replaces=""
amove usr/bin/ecpg
amove $_includedir/ecpg*.h
amove $_includedir/informix/*
amove $_includedir/pgtypes*.h
amove $_includedir/sql3types.h
amove $_includedir/sqlca.h
amove $_includedir/sqlda*.h
amove usr/lib/libecpg.*
amove usr/lib/libpgtypes.*
amove usr/lib/pkgconfig/libecpg.pc
amove usr/lib/pkgconfig/libpgtypes.pc
}
client() {
pkgdesc="PostgreSQL client"
depends="postgresql-common"
_subpkg_common
local cmd; for cmd in $_client_cmds; do
amove $_bindir/$cmd
# These commands are symlinked to /usr/bin by pg_versions script after
# installation.
provides="$provides cmd:$cmd"
done
amove $_bindir/PG_VERSION
}
jit() {
pkgdesc="Just-in-time compilation support for PostgreSQL"
depends="$pkgname=$pkgver-r$pkgrel"
_subpkg_common
amove $_srvlibdir/bitcode/*
amove $_srvlibdir/llvmjit.so
amove $_srvlibdir/llvmjit_types.bc
}
contrib() {
pkgdesc="Extension modules distributed with PostgreSQL"
depends="$pkgname=$pkgver-r$pkgrel"
_subpkg_common
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
_contrib_common
provides="$provides $(ls -1 "$subpkgdir"/$_bindir | sed 's/^/cmd:&/')"
}
pltcl() {
pkgdesc="PL/Tcl procedural language for PostgreSQL"
depends="$pkgname=$pkgver-r$pkgrel pgtcl"
_subpkg_common
amove $_srvlibdir/pltcl.so
amove $_datadir/extension/pltcl*
install -m 644 "$srcdir"/pltcl_create_tables.sql -t "$subpkgdir"/$_datadir/
}
plperl() {
pkgdesc="PL/Perl procedural language for PostgreSQL"
depends="$pkgname=$pkgver-r$pkgrel"
_subpkg_common
amove $_srvlibdir/plperl.so
amove $_datadir/extension/plperl*
}
plperl_contrib() {
_plcontrib plperl "PL/Perl"
cd "$builddir"
make -C contrib/hstore_plperl DESTDIR="$subpkgdir" install
_contrib_common
}
plpython3() {
pkgdesc="PL/Python3 procedural language for PostgreSQL"
depends="$pkgname=$pkgver-r$pkgrel python3"
_subpkg_common
amove $_srvlibdir/plpython3.so
amove $_datadir/extension/plpython*
}
plpython3_contrib() {
_plcontrib plpython3 "PL/Python 3"
cd "$builddir"
make -C contrib/hstore_plpython DESTDIR="$subpkgdir" install
make -C contrib/ltree_plpython DESTDIR="$subpkgdir" install
cd "$subpkgdir"/$_datadir/extension/
rm ./*plpython2* ./*plpythonu*
_contrib_common
}
contrib_jit() {
pkgdesc="Extension modules distributed with PostgreSQL (JIT support)"
depends="$pkgname-contrib=$pkgver-r$pkgrel"
install_if="$pkgname-jit $pkgname-contrib=$pkgver-r$pkgrel"
_subpkg_common
amove $_srvlibdir/bitcode/*
}
dev() {
default_dev
_subpkg_common
replaces=""
amove $_srvlibdir/pgxs/*
}
doc() {
default_doc
_subpkg_common
amove $_mandir
}
openrc() {
default_openrc
depends="postgresql-common-openrc"
mkdir -p "$subpkgdir"
}
_plcontrib() {
local subname="$1"
pkgdesc="$2 extension modules distributed with PostgreSQL"
depends="$pkgname-$subname=$pkgver-r$pkgrel"
install_if="$pkgname-$subname=$pkgver-r$pkgrel $pkgname-contrib=$pkgver-r$pkgrel"
_subpkg_common
}
_subpkg_common() {
provides="postgresql${subpkgname#$pkgname}"
replaces="$provides" # for backward compatibility
}
_contrib_common() {
# Move headers, bitcode and docs from subpackage back to pkgdir, so it
# can be catched by subsequent split functions.
local dir; for dir in $_includedir $_srvlibdir/bitcode $_docdir; do
[ -d "$subpkgdir"/$dir ] || continue
mkdir -p "$pkgdir"/$dir
cp -rf "$subpkgdir"/$dir/* "$pkgdir"/$dir/
rm -rf "$subpkgdir"/$dir/*
rmdir -p "$subpkgdir"/$dir || true
done
}
_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 -r file; do
echo "=== test failure: $file ===" >&2
cat "$file" >&2
done
return 1
}
}
# $1: whitespace-separated items of set A
# $2: whitespace-separated items of set B
# stdout: newline-separated items of A - B
_setdiff() {
python3 -c 'import sys;print("\n".join(set(sys.argv[1].split()).difference(set(sys.argv[2].split()))))' "$@"
}
sha512sums="
a859067119cc21702ab1af6507bf703e4263d9399745cd7b025a3c73d55367ba0f960fd2b1b4af43e73b8448bb2e52555734d60a5f306041719190f28a8bd505 postgresql-12.14.tar.bz2
1f8e7dc58f5b0a12427cf2fd904ffa898a34f23f3332c8382b94e0d991c007289e7913a69e04498f3d93fc5701855796c207b4b1cc4a0b366f586050124d7fcc initdb.patch
5f9d8bb4957194069d01af8ab3abc6d4d83a7e7f8bd7ebe1caae5361d621a3e58f91b14b952958138a794e0a80bc154fbb7e3e78d211e2a95b9b7901335de854 perl-rpath.patch
92d28f91b57a01afc81a00d386e87b9e2aa812f341a1578f262af372ee905530205592eda595111827582acceacd1bf244d1df130330003f05e74e4ddb5a7c4f per-version-dirs.patch
64ec2aaae51fb85db62431524ceac06b11924b333ef21f8fe113eb4798f1aa7b428505ea9299af9f482c64bb9792455435a716fc422db0dacdd753cfd45e2703 unix_socket_directories.patch
c4179fcd8b71791cdc41ea7b622cf82e9bd42ac1de66999234b98a83c0c508c79c492a9301274fe859c06a3f1a8b17b53ab97541ab76801a985f8f0b9b8716e7 disable-broken-tests.patch
2e33e1ae38d60e0daf3ed18e6eaa9ddf6762b4b1bb7e51f1d2690e3df9d602aa1a700e603ba3ee69314a75a963131c7dc67c1b1f8b7eb5564e9c4253e81a4db4 disable-html-docs.patch
d8eb4274a54b94bed4a2ded7ae775c5a95ca0f051b831b859ccf78bf6d2ea6fe89a9a0611771f6ad85573995a7e3af1fdf5859e20cae3267a52239f12e1b61c3 remove-libecpg_compat.patch
5262f4944844bccc839c4441570b9eb2e0792390234ebfdb8ebb7b83380ce5f5de84b038cb03045526da202a185af9c3972c2ae1b9e0e743a95c6e84f4621cf9 make-split-headers.patch
403f5afccda38ea666a9e813b0f41b5d9f93dede3c7d023b0d780b6b011af81b6bf32ba2d7769acc0404ec25b46978cb6c7a8a05063ccd0328ec69105c974b6f jit-datalayout-mismatch-on-s390x.patch
7790e4e4374f7bdc6b4484ba87a5fa709d30d3cbdce61ee7bf9c5dfce40cb51c7bd54ab42f4050fb48eede08ef573624d819128e57cc8c976e01202854740308 pg_config-add-major-version.patch
b0688d66fdd7d612c24d9aa69bdd80d30787d2d6409b4524c79b41797144fc743213460e6de9c536bfb72da089f92cf89731f15137b1407fd04ca97fd393bfd2 dont-use-locale-a-on-musl.patch
0ebee9cf40a7e84e8eda3998c0dd0f7601d9288233411f45f9710fcafc5f4ca3e4a91e8e1b552cc4f4d2c0e8fa6512703b1094e501f132ea2842db0398e62934 icu-collations-hack.patch
f8ed2b7b96fd22cd87c982151e659d82bcae10033a97f403f7847fce6daa8fc580e998cfb3813af9cb59a12f0c6bcc276397c28b1fc48321eed8c7ba5f3f92ed libpgport-pkglibdir.patch.txt
6078defb3da67e7df96665cc130d32b69eebfcaf49d92eef368ea8eea8bb311fab56064c104bc97f53da9cd925301bef696b506af33e0b66d65bc6cd41ec7499 external-libpq.patch.txt
5c9bfd9e295dcf678298bf0aa974347a7c311d6e7c2aa76a6920fcb751d01fd1ab77abbec11f3c672f927ad9deaa88e04e370c0b5cd1b60087554c474b748731 pltcl_create_tables.sql
"