projects/aports·blob master · refs

582 lines · 15.2 KiB

1# Contributor: G.J.R. Timmer <[email protected]>
2# Contributor: Jakub Jirutka <[email protected]>
3# Maintainer: Jakub Jirutka <[email protected]>
4_pkgname=postgresql
5pkgver=17.11
6pkgrel=0
7_majorver=${pkgver%%[_.]*}
8# Should this aport provide libpq* and libecpg*? true/false
9# Exactly one postgresql aport must be the default one!
10_default_ver=false
11pkgname=$_pkgname$_majorver
12pkgdesc="A sophisticated object-relational DBMS, version $_majorver"
13url="https://www.postgresql.org/"
14arch="all"
15license="PostgreSQL"
16_llvmver=20
17depends="$pkgname-client postgresql-common tzdata"
18depends_dev="
19 libpq-dev
20 libecpg-dev
21 clang$_llvmver
22 icu-dev
23 llvm$_llvmver
24 lz4-dev
25 openssl-dev
26 zstd-dev
27 "
28checkdepends="
29 diffutils
30 icu-data-full
31 perl-ipc-run
32 "
33makedepends="$depends_dev
34 bison
35 docbook-xsl-nons
36 flex
37 libxml2-dev~2.13
38 linux-headers
39 llvm$_llvmver-dev
40 openldap-dev
41 perl-dev
42 python3-dev
43 readline-dev
44 tcl-dev
45 util-linux-dev
46 zlib-dev
47 "
48pkgusers="postgres"
49pkggroups="postgres"
50install="$pkgname.post-install $pkgname.pre-deinstall"
51provider_priority=$_majorver
52provides="postgresql"
53replaces="postgresql" # for backward compatibility
54$_default_ver && subpackages="
55 libpq
56 libpq-dev:libpq_dev
57 libecpg
58 libecpg-dev:libecpg_dev
59 "
60subpackages="
61 $subpackages
62 $pkgname-client
63 $pkgname-jit
64 $pkgname-contrib
65 $pkgname-plperl
66 $pkgname-plperl-contrib:plperl_contrib
67 $pkgname-plpython3
68 $pkgname-plpython3-contrib:plpython3_contrib
69 $pkgname-pltcl
70 $pkgname-contrib-jit:contrib_jit
71 $pkgname-dev
72 $pkgname-doc
73 $pkgname-openrc
74 "
75source="https://ftp.postgresql.org/pub/source/v$pkgver/postgresql-$pkgver.tar.bz2
76 initdb.patch
77 perl-rpath.patch
78 per-version-dirs.patch
79 unix_socket_directories.patch
80 disable-html-docs.patch
81 remove-libecpg_compat.patch
82 czech-snowball-stemmer.patch
83 make-split-headers.patch
84 jit-datalayout-mismatch-on-s390x-and-x86.patch
85 pg_config-add-major-version.patch
86 dont-use-locale-a-on-musl.patch
87 icu-collations-hack.patch
88 fix-test-check_guc.patch
89 fix-test-libpq18-compat.patch
90 libpgport-pkglibdir.patch.txt
91 external-libpq.patch.txt
92
93 pltcl_create_tables.sql
94 "
95builddir="$srcdir/$_pkgname-$pkgver"
96options="net"
97
98case "$CARCH" in
99 # XXX: Tests are broken.
100 riscv64|loongarch64) options="$options !check"
101esac
102
103# secfixes:
104# 17.11-r0:
105# - CVE-2026-6464
106# - CVE-2026-6469
107# - CVE-2026-6470
108# - CVE-2026-6471
109# - CVE-2026-14662
110# - CVE-2026-14663
111# - CVE-2026-14664
112# - CVE-2026-14666
113# - CVE-2026-14668
114# - CVE-2026-14669
115# - CVE-2026-14670
116# - CVE-2026-14671
117# - CVE-2026-14672
118# - CVE-2026-14673
119# - CVE-2026-14676
120# - CVE-2026-14677
121# - CVE-2026-14678
122# - CVE-2026-14679
123# - CVE-2026-14680
124# - CVE-2026-14681
125# - CVE-2026-15741
126# - CVE-2026-15742
127# - CVE-2026-16238
128# - CVE-2026-16239
129# - CVE-2026-16241
130# - CVE-2026-18024
131# - CVE-2026-18408
132# - CVE-2026-19385
133# 17.10-r0:
134# - CVE-2026-6472
135# - CVE-2026-6473
136# - CVE-2026-6474
137# - CVE-2026-6475
138# - CVE-2026-6476
139# - CVE-2026-6477
140# - CVE-2026-6478
141# - CVE-2026-6479
142# - CVE-2026-6637
143# - CVE-2026-6638
144# 17.9-r0:
145# - CVE-2026-2006
146# - CVE-2026-2007
147# 17.8-r0:
148# - CVE-2026-2003
149# - CVE-2026-2004
150# - CVE-2026-2005
151# - CVE-2026-2006
152# - CVE-2026-2007
153# 17.7-r0:
154# - CVE-2025-12817
155# - CVE-2025-12818
156# 17.6-r0:
157# - CVE-2025-8713
158# - CVE-2025-8714
159# - CVE-2025-8715
160# 17.5-r0:
161# - CVE-2025-4207
162# 17.4-r0:
163# - CVE-2025-1094
164# 17.1-r0:
165# - CVE-2024-10976
166# - CVE-2024-10977
167# - CVE-2024-10978
168# - CVE-2024-10979
169# 0:
170# - CVE-2026-14681
171
172_bindir=usr/libexec/$pkgname
173_datadir=usr/share/$pkgname
174_docdir=usr/share/doc/$pkgname
175_mandir=$_datadir/man
176_includedir=usr/include/postgresql
177# Directory for server-related libraries. This is hard-coded in
178# per-version-dirs.patch.
179_srvlibdir=usr/lib/$pkgname
180
181# Programs to be included in the -client subpackage.
182# TODO: This was probably originally copied from Debian and I have no idea
183# why these are considered as front-end (client) programs and the rest of
184# the programs are not. So it should be reviewed.
185_client_cmds="
186 clusterdb
187 createdb
188 createuser
189 dropdb
190 dropuser
191 pg_amcheck
192 pg_basebackup
193 pg_dump
194 pg_dumpall
195 pg_isready
196 pg_receivewal
197 pg_recvlogical
198 pg_restore
199 pg_verifybackup
200 pgbench
201 psql
202 reindexdb
203 vacuumdb
204 "
205
206prepare() {
207 default_prepare
208
209 # FIXME: This test is broken, skip it for now.
210 sed -i '/test_pg_dump/d' src/test/modules/Makefile
211
212 # This test doesn't work on CI.
213 rm src/test/recovery/t/017_shm.pl
214
215 if $_default_ver; then
216 cp -rl "$builddir" "$builddir-ifaces"
217 else
218 msg 'external-libpq.patch'
219 patch -p1 < "$srcdir"/external-libpq.patch.txt
220 fi
221 # Note: This must be applied after clonning $builddir-ifaces.
222 msg 'libpgport-pkglibdir.patch'
223 patch -p1 < "$srcdir"/libpgport-pkglibdir.patch.txt
224}
225
226build() {
227 export LLVM_CONFIG="/usr/lib/llvm$_llvmver/bin/llvm-config"
228 export PYTHON=/usr/bin/python3
229 export CFLAGS="${CFLAGS/-Os/-O2}"
230 export CPPFLAGS="${CPPFLAGS/-Os/-O2}"
231 # older clang versions don't have a 'clang' exe anymore.
232 export CLANG=clang-$_llvmver
233
234 _configure --with-ldap
235 make world
236
237 if $_default_ver; then
238 cd "$builddir-ifaces"
239
240 _configure --without-ldap
241 local dir; for dir in include common port interfaces bin/pg_config; do
242 make -C src/$dir
243 done
244 fi
245}
246
247_configure() {
248 local _extra_opts
249 # When disable-spinlocks is no longer required - check postgresql-bdr package.
250 case "$CARCH" in
251 riscv64) _extra_opts='--disable-spinlocks';;
252 esac
253 want_check && _extra_opts="$_extra_opts --enable-tap-tests"
254
255 ./configure \
256 --build=$CBUILD \
257 --host=$CHOST \
258 --prefix=/usr \
259 --bindir=/$_bindir \
260 --datarootdir=/usr/share \
261 --datadir=/$_datadir \
262 --docdir=/$_docdir \
263 --includedir=/$_includedir \
264 --libdir=/usr/lib \
265 --mandir=/$_mandir \
266 --sysconfdir=/etc/postgresql \
267 --disable-rpath \
268 --with-system-tzdata=/usr/share/zoneinfo \
269 --with-libxml \
270 --with-openssl \
271 --with-uuid=e2fs \
272 --with-llvm \
273 --with-perl \
274 --with-python \
275 --with-tcl \
276 --with-lz4 \
277 --with-zstd \
278 $_extra_opts \
279 "$@"
280}
281
282check() {
283 case "$CARCH" in
284 # XXX: Tests fail on 32-bit, but they shouldn't.
285 arm* | x86)
286 warning "Skipping server tests on 32-bit";;
287 *)
288 _run_tests src/test
289 _run_tests src/pl
290 _run_tests contrib
291 esac
292
293 if $_default_ver; then
294 _run_tests src/interfaces/libpq
295 fi
296}
297
298package() {
299 make DESTDIR="$pkgdir" install install-docs
300
301 if $_default_ver; then
302 cd "$builddir-ifaces"
303
304 # Override libpq and libecpg files with the build without LDAP support.
305 local dir; for dir in common port interfaces bin/pg_config; do
306 make -C src/$dir DESTDIR="$pkgdir" bindir=/usr/bin install
307 done
308 make -C src/include DESTDIR="$pkgdir" install-interfaces
309 fi
310
311 cd "$pkgdir"
312
313 # Duplicate of usr/bin/ecpg.
314 rm -f ./$_bindir/ecpg
315
316 mkdir -p ./usr/bin
317 ln -s /$_bindir/postgres ./usr/bin/postgres$_majorver
318
319 # This file is used by pg_versions and init script.
320 echo "$_majorver" > ./$_bindir/PG_VERSION
321
322 install -d -m750 -o postgres -g postgres \
323 ./etc/postgresql$_majorver \
324 ./var/lib/postgresql \
325 ./var/log/postgresql
326
327 local server_cmds=$(_setdiff "$(ls -1 $_bindir)" "$_client_cmds pg_config ecpg PG_VERSION")
328 [ "$server_cmds" ] || die 'package: variable server_cmds is empty'
329
330 # These commands are symlinked to /usr/bin by pg_versions script after
331 # installation.
332 provides="$provides $(echo "$server_cmds" | sed 's/^/cmd:&/')"
333}
334
335libpq() {
336 pkgdesc="PostgreSQL client library"
337 depends=""
338 replaces=""
339
340 amove usr/lib/libpq.so.*
341}
342
343libpq_dev() {
344 pkgdesc="PostgreSQL client library (development files)"
345 depends=""
346 replaces=""
347
348 amove usr/bin/pg_config
349
350 amove $_includedir/internal/*
351 amove $_includedir/libpq-*.h
352 amove $_includedir/libpq/*
353 amove $_includedir/pg_config*.h
354 amove $_includedir/postgres_ext.h
355
356 amove usr/lib/libpq.*
357 amove usr/lib/libpgcommon*.a
358 amove usr/lib/libpgport*.a
359 amove usr/lib/pkgconfig/libpq.pc
360}
361
362libecpg() {
363 pkgdesc="ECPG - Embedded SQL in C"
364 depends=""
365 provides="postgresql-libs" # for backward compatibility (Alpine <3.15)
366 replaces="$provides" # for backward compatibility (Alpine <3.15)
367
368 amove usr/lib/libecpg.so.*
369 amove usr/lib/libpgtypes.so.*
370}
371
372libecpg_dev() {
373 pkgdesc="ECPG - Embedded SQL in C (development files)"
374 depends="libpq-dev=$pkgver-r$pkgrel"
375 replaces=""
376
377 amove usr/bin/ecpg
378
379 amove $_includedir/ecpg*.h
380 amove $_includedir/informix/*
381 amove $_includedir/pgtypes*.h
382 amove $_includedir/sql3types.h
383 amove $_includedir/sqlca.h
384 amove $_includedir/sqlda*.h
385
386 amove usr/lib/libecpg.*
387 amove usr/lib/libpgtypes.*
388 amove usr/lib/pkgconfig/libecpg.pc
389 amove usr/lib/pkgconfig/libpgtypes.pc
390}
391
392client() {
393 pkgdesc="PostgreSQL client"
394 depends="postgresql-common"
395 _subpkg_common
396
397 local cmd; for cmd in $_client_cmds; do
398 amove $_bindir/$cmd
399 # These commands are symlinked to /usr/bin by pg_versions script after
400 # installation.
401 provides="$provides cmd:$cmd"
402 done
403 amove $_bindir/PG_VERSION
404}
405
406jit() {
407 pkgdesc="Just-in-time compilation support for PostgreSQL"
408 depends="$pkgname=$pkgver-r$pkgrel"
409 _subpkg_common
410
411 amove $_srvlibdir/bitcode/*
412 amove $_srvlibdir/llvmjit.so
413 amove $_srvlibdir/llvmjit_types.bc
414}
415
416contrib() {
417 pkgdesc="Extension modules distributed with PostgreSQL"
418 depends="$pkgname=$pkgver-r$pkgrel"
419 _subpkg_common
420
421 cd "$builddir"
422
423 # Avoid installing plperl and plpython extensions, these will be
424 # installed into separate subpackages.
425 sed -Ei -e 's/(.*_plperl)/#\1/' \
426 -e 's/(.*_plpython)/#\1/' \
427 contrib/Makefile
428
429 make -C contrib DESTDIR="$subpkgdir" install
430
431 _contrib_common
432
433 provides="$provides $(ls -1 "$subpkgdir"/$_bindir | sed 's/^/cmd:&/')"
434}
435
436pltcl() {
437 pkgdesc="PL/Tcl procedural language for PostgreSQL"
438 depends="$pkgname=$pkgver-r$pkgrel pgtcl"
439 _subpkg_common
440
441 amove $_srvlibdir/pltcl.so
442 amove $_datadir/extension/pltcl*
443
444 install -m 644 "$srcdir"/pltcl_create_tables.sql -t "$subpkgdir"/$_datadir/
445}
446
447plperl() {
448 pkgdesc="PL/Perl procedural language for PostgreSQL"
449 depends="$pkgname=$pkgver-r$pkgrel"
450 _subpkg_common
451
452 amove $_srvlibdir/plperl.so
453 amove $_datadir/extension/plperl*
454}
455
456plperl_contrib() {
457 _plcontrib plperl "PL/Perl"
458
459 cd "$builddir"
460 make -C contrib/hstore_plperl DESTDIR="$subpkgdir" install
461
462 _contrib_common
463}
464
465plpython3() {
466 pkgdesc="PL/Python3 procedural language for PostgreSQL"
467 depends="$pkgname=$pkgver-r$pkgrel python3"
468 _subpkg_common
469
470 amove $_srvlibdir/plpython3.so
471 amove $_datadir/extension/plpython*
472}
473
474plpython3_contrib() {
475 _plcontrib plpython3 "PL/Python 3"
476
477 cd "$builddir"
478 make -C contrib/hstore_plpython DESTDIR="$subpkgdir" install
479 make -C contrib/ltree_plpython DESTDIR="$subpkgdir" install
480
481 _contrib_common
482}
483
484contrib_jit() {
485 pkgdesc="Extension modules distributed with PostgreSQL (JIT support)"
486 depends="$pkgname-contrib=$pkgver-r$pkgrel"
487 install_if="$pkgname-jit $pkgname-contrib=$pkgver-r$pkgrel"
488 _subpkg_common
489
490 amove $_srvlibdir/bitcode/*
491}
492
493dev() {
494 default_dev
495 _subpkg_common
496 replaces=""
497
498 amove $_srvlibdir/pgxs/*
499}
500
501doc() {
502 default_doc
503 _subpkg_common
504
505 amove $_mandir
506}
507
508openrc() {
509 default_openrc
510 depends="postgresql-common-openrc"
511
512 mkdir -p "$subpkgdir"
513}
514
515_plcontrib() {
516 local subname="$1"
517 pkgdesc="$2 extension modules distributed with PostgreSQL"
518 depends="$pkgname-$subname=$pkgver-r$pkgrel"
519 install_if="$pkgname-$subname=$pkgver-r$pkgrel $pkgname-contrib=$pkgver-r$pkgrel"
520 _subpkg_common
521}
522
523_subpkg_common() {
524 provides="postgresql${subpkgname#$pkgname}"
525 replaces="$provides" # for backward compatibility
526}
527
528_contrib_common() {
529 # Move headers, bitcode and docs from subpackage back to pkgdir, so it
530 # can be catched by subsequent split functions.
531 local dir; for dir in $_includedir $_srvlibdir/bitcode $_docdir; do
532 [ -d "$subpkgdir"/$dir ] || continue
533
534 mkdir -p "$pkgdir"/$dir
535 cp -rf "$subpkgdir"/$dir/* "$pkgdir"/$dir/
536 rm -rf "$subpkgdir"/$dir/*
537 rmdir -p "$subpkgdir"/$dir || true
538 done
539}
540
541_run_tests() {
542 local path="$1"; shift
543
544 msg "Running test suite at $path..."
545 # Note: some tests fail when running in parallel.
546 make -k -j 1 -C "$path" "$@" check MAX_CONNECTIONS=5 || {
547 printf "\n%s\n\n" "Trying to find all regression.diffs files in build directory..." >&2
548 find "$path" -name regression.diffs | while read -r file; do
549 echo "=== test failure: $file ===" >&2
550 cat "$file" >&2
551 done
552 return 1
553 }
554}
555
556# $1: whitespace-separated items of set A
557# $2: whitespace-separated items of set B
558# stdout: newline-separated items of A - B
559_setdiff() {
560 python3 -c 'import sys;print("\n".join(set(sys.argv[1].split()).difference(set(sys.argv[2].split()))))' "$@"
561}
562
563sha512sums="
564caf6acf22d21856d95899cf6f2b7bd2ad8018e6d32d59fe28b3010edb1faf259124fee4a163f8d0a9e5307e12b98287266e040ff6cfc0b1f60e65b96e10458b2 postgresql-17.11.tar.bz2
56531fff28ca37f05c29be061fa95ce7870597092c71590031bf79fcc5701a35e73521924168eca2847ed770356b2d954e445e6dd780e89772dea141931ae430579 initdb.patch
56642e7ff5e4114390ec7f0f69b037ebcbc9a7739b239d992bc6f4d13561e188f9027e896892230a5d7cbf1ec0a1ad68deacdd414dcfc7d919bfc368442a220d352 perl-rpath.patch
5677501022ac2befce1adcf72a4ca06f10af3aad6ad19692fa53e6fa7cc24457ce0852ef1805ddfcd82db6402f6d1e684570b3151028397f0a55a696164aa73975d per-version-dirs.patch
5689ad57531cc8b848d53a21d5ba9838b4f76272ce80a40b7802993d4999667b87decdd31527dc8b22464f6b21b66fb1f54efcbbb0e2f6d6d961cbc622d78150a27 unix_socket_directories.patch
569e1503664ede8ec677edb11b03eac86d392c5aea64e95d2b98c952c0f1773d07e14e01d8ba072cf8dcbc0d54deb3dab5d6d93a0048f0e97e7c9844346a8faf8da disable-html-docs.patch
57047d7675c6092bb88ceab36c842d94823c0b212e9abfef338f8e8d99d01ded642447db5f2556860fb7df7131634168158bda6ed20fcddc9a41d2924a2570bf93d remove-libecpg_compat.patch
5713494de24c343f40228ad73b501a76025dc536083399a65adf010ee61813d7af3b2151e8850c018c2062f4c2d2e9a9e5eb64087da73d8bd3541fbcf88bc2a8bea czech-snowball-stemmer.patch
5722b19d6fe44ff5df0047178de47a77e977727321c66459f7f023c536a2d830649453863e2072ee4af76ee7f46145218eb3b323a9aaa5ce077c9992955bb18c982 make-split-headers.patch
5731098f3bcbf8c72b501dc9a2837a3b1ef4ceeebc7e89efec08404c835ec90505a2d4f03d196c47c64b8293d7c8ae552f151e311109ba2b7265e84bf880a500c62 jit-datalayout-mismatch-on-s390x-and-x86.patch
57404751b23c7085b40829c6d2d63bb428e04b11d79aa58804045f2ed52d096e75304b1c7d0f8f37e3398156f18f69e6f6f2879ece46209c091b4348bc39d181511 pg_config-add-major-version.patch
5755b271bfb9c109d7c9c6ddb126528d4028f9f0193e0b9b8bc1a5afb3c47dada8fbee7265f73cb168ac8d518867b8dc830ad5392eb5f405a8e5db9d7d2e58fd3ef dont-use-locale-a-on-musl.patch
57659928acfd23f917134f1ccca241d0fed2f81cea402e21bb3c9821f25ff895ac2ad60f391c0fc7b302daf0361e646d13b4e2b7aac09c54f2a5d35651bfbfddf01 icu-collations-hack.patch
57766c93d499c2629589936dc4097413b2b103f7ac10ad716636d8e78fb2104a0f458b48b4a6bd0d45e53a8a65c4a62ca119ee34a9f1ab9bcda988db6d5f5514691 fix-test-check_guc.patch
57822fee07cae9416739596ef5a498e514d736dbdbc783db652fbeec33261c6cabfe49786811cea443b7dec8a629ff8398032398e19cecad87b0d91dd467dba5b45 fix-test-libpq18-compat.patch
5791ef4cc68e6781e0680472bfe71f07385982cc5f3932f63928d4025b8b3a74f630c775fdbc02f903f1da3c2187756393a572387f8ac7fbd643d6b06bd9fc9b93b libpgport-pkglibdir.patch.txt
58006f32f8a05228f27bc8c5ed4aac7ac6eab0c64915932ed0c37f76335fbe635396a43226a006ce83ba93ef3b8ca2dff424725dddd490ed9c5f686c1ea2607781e external-libpq.patch.txt
5815c9bfd9e295dcf678298bf0aa974347a7c311d6e7c2aa76a6920fcb751d01fd1ab77abbec11f3c672f927ad9deaa88e04e370c0b5cd1b60087554c474b748731 pltcl_create_tables.sql
582"