fix(release): serial shared-deps build, macOS strchrnul fallback, copy all Windows DLLs
Three independent pg-tools step failures on the 5th release run: - Linux: 'ar: libpgcommon_srv.a: file format not recognized' — parallel `make -C` tool builds race each other's recursion into src/common (rm -f / ar crs on the same archive). Pre-build generated-headers + libpq (which pulls in common/port) serially so the -j tool builds find the archives up to date. - macOS x86_64: strchrnul marked 'introduced in macOS 15.4' by Xcode 16.4 fails -Werror=unguarded-availability-new and would crash at runtime on macOS < 15.4. Force ac_cv_func_strchrnul=no and rename PG16's inline fallback (pg_strchrnul) so it compiles on any SDK without touching the system symbol. - Windows: EDB pg_dump.exe needs libcrypto/libssl/libiconv/libintl/ libwinpthread/liblz4/libzstd/ICU DLLs; copy every bin/*.dll, not just libpq.dll. All three verified locally (macOS: full build + tools run from resource dir; YAML + bash -n for all platform variants).
This commit is contained in:
@@ -78,10 +78,14 @@ jobs:
|
|||||||
tar -xf /tmp/pg.tar.bz2 -C /tmp
|
tar -xf /tmp/pg.tar.bz2 -C /tmp
|
||||||
cd /tmp/postgresql-${PG_VER}
|
cd /tmp/postgresql-${PG_VER}
|
||||||
./configure --prefix=/tmp/pgbuild --without-readline --without-icu CFLAGS="-O2"
|
./configure --prefix=/tmp/pgbuild --without-readline --without-icu CFLAGS="-O2"
|
||||||
# Generate the catalog headers (pg_class_d.h etc.) serially FIRST:
|
# Build the shared prerequisites (catalog headers + libpq/common/
|
||||||
# building src/bin/pg_dump directly races its generated-headers
|
# port archives) SERIALLY FIRST. Parallel `make -C` runs recurse
|
||||||
# prerequisite under -j and fails with 'catalog/pg_*_d.h not found'.
|
# into src/common concurrently and race `rm -f` / `ar crs` on the
|
||||||
|
# same .a — intermittently failing with 'ar: libpgcommon_srv.a:
|
||||||
|
# file format not recognized'. Once the archives exist, the tools'
|
||||||
|
# -j builds find them up to date and those recursions are no-ops.
|
||||||
make -C src/backend generated-headers
|
make -C src/backend generated-headers
|
||||||
|
make -C src/interfaces/libpq all
|
||||||
make -j"$(nproc)" -C src/bin/pg_dump all
|
make -j"$(nproc)" -C src/bin/pg_dump all
|
||||||
make -j"$(nproc)" -C src/bin/psql all
|
make -j"$(nproc)" -C src/bin/psql all
|
||||||
cp src/bin/pg_dump/pg_dump src/bin/pg_dump/pg_restore "$OUT"/
|
cp src/bin/pg_dump/pg_dump src/bin/pg_dump/pg_restore "$OUT"/
|
||||||
@@ -98,8 +102,25 @@ jobs:
|
|||||||
curl -fsSL "https://ftp.postgresql.org/pub/source/v${PG_VER}/postgresql-${PG_VER}.tar.bz2" -o /tmp/pg.tar.bz2
|
curl -fsSL "https://ftp.postgresql.org/pub/source/v${PG_VER}/postgresql-${PG_VER}.tar.bz2" -o /tmp/pg.tar.bz2
|
||||||
tar -xf /tmp/pg.tar.bz2 -C /tmp
|
tar -xf /tmp/pg.tar.bz2 -C /tmp
|
||||||
cd /tmp/postgresql-${PG_VER}
|
cd /tmp/postgresql-${PG_VER}
|
||||||
./configure --prefix=/tmp/pgbuild --without-readline --without-icu CFLAGS="-O2"
|
# ac_cv_func_strchrnul=no: Xcode 16.4's SDK marks strchrnul as
|
||||||
|
# introduced in macOS 15.4, so configure detects it and PG's
|
||||||
|
# snprintf.c calls the system symbol — which fails to compile
|
||||||
|
# (-Werror=unguarded-availability-new) and would crash at runtime
|
||||||
|
# on macOS < 15.4. Forcing the check off makes PG use its own
|
||||||
|
# inline fallback instead.
|
||||||
|
ac_cv_func_strchrnul=no ./configure --prefix=/tmp/pgbuild --without-readline --without-icu CFLAGS="-O2"
|
||||||
|
# macOS SDKs always declare strchrnul in <string.h> (Xcode 16.4
|
||||||
|
# marks it 'introduced in macOS 15.4'), so even with HAVE_STRCHRNUL
|
||||||
|
# disabled PG16's static-inline fallback would collide with the
|
||||||
|
# header declaration on newer SDKs. Rename PG's fallback so the
|
||||||
|
# tools compile on any SDK and never touch the (15.4+ only)
|
||||||
|
# system symbol.
|
||||||
|
sed -i '' 's/strchrnul/pg_strchrnul/g' src/port/snprintf.c
|
||||||
|
# Serial shared-prerequisite build first (see the Linux block: the
|
||||||
|
# archives must exist before the -j tool builds recurse into
|
||||||
|
# src/common).
|
||||||
make -C src/backend generated-headers
|
make -C src/backend generated-headers
|
||||||
|
make -C src/interfaces/libpq all
|
||||||
make -j"$(sysctl -n hw.ncpu)" -C src/bin/pg_dump all
|
make -j"$(sysctl -n hw.ncpu)" -C src/bin/pg_dump all
|
||||||
make -j"$(sysctl -n hw.ncpu)" -C src/bin/psql all
|
make -j"$(sysctl -n hw.ncpu)" -C src/bin/psql all
|
||||||
cp src/bin/pg_dump/pg_dump src/bin/pg_dump/pg_restore "$OUT"/
|
cp src/bin/pg_dump/pg_dump src/bin/pg_dump/pg_restore "$OUT"/
|
||||||
@@ -120,7 +141,11 @@ jobs:
|
|||||||
sha256sum /tmp/pg.zip
|
sha256sum /tmp/pg.zip
|
||||||
unzip -o /tmp/pg.zip -d /tmp/pg
|
unzip -o /tmp/pg.zip -d /tmp/pg
|
||||||
cp /tmp/pg/pgsql/bin/pg_dump.exe /tmp/pg/pgsql/bin/pg_restore.exe /tmp/pg/pgsql/bin/psql.exe "$OUT"/
|
cp /tmp/pg/pgsql/bin/pg_dump.exe /tmp/pg/pgsql/bin/pg_restore.exe /tmp/pg/pgsql/bin/psql.exe "$OUT"/
|
||||||
cp /tmp/pg/pgsql/bin/libpq.dll "$OUT"/
|
# pg_dump.exe needs far more than libpq.dll (libcrypto-3-x64.dll,
|
||||||
|
# libssl-3-x64.dll, libiconv-2.dll, libintl-9.dll,
|
||||||
|
# libwinpthread-1.dll, liblz4.dll, libzstd.dll, ICU DLLs, ...);
|
||||||
|
# copy every DLL next to the tools.
|
||||||
|
cp /tmp/pg/pgsql/bin/*.dll "$OUT"/
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
(cd "$OUT" && sha256sum * | tee checksums.txt)
|
(cd "$OUT" && sha256sum * | tee checksums.txt)
|
||||||
|
|||||||
Reference in New Issue
Block a user