pkgsStatic.postgresql: fix build

The underlying problem was fixed as a side-effect of [1], for reasons
unknown to me. In the current state, it's enough to disable a few
breaking dependencies to make the build pass.

Note, that this builds the full package, including backend. However, the
backend is not working, yet: Loading shared modules, which PostgreSQL
heavily depends is still broken. Further, all binaries in the default
output, even client binaries such as psql, are currently dynamically
linked against libpq.so. While the current autoconf based build system
doesn't support changing this, this might be possible in the future with
meson.

However, not all is bad: Fixing the build allows using the static
libpq.a library, which is probably the one thing that most users want
from pkgsStatic.postgresql anyway.

Resolves #191920

[1]: 77977286d8
This commit is contained in:
Wolfgang Walther
2024-11-30 17:02:13 +01:00
parent 445371f309
commit 3bd9f92eae
+13 -4
View File
@@ -53,7 +53,11 @@ let
, libkrb5
# icu
, icuSupport ? true
# Building with icu in pkgsStatic gives tons of "undefined reference" errors like this:
# /nix/store/452lkaak37d3mzzn3p9ak7aa3wzhdqaj-icu4c-74.2-x86_64-unknown-linux-musl/lib/libicuuc.a(chariter.ao):
# (.data.rel.ro._ZTIN6icu_7417CharacterIteratorE[_ZTIN6icu_7417CharacterIteratorE]+0x0):
# undefined reference to `vtable for __cxxabiv1::__si_class_type_info'
, icuSupport ? !stdenv.hostPlatform.isStatic
, icu
# JIT
@@ -71,7 +75,11 @@ let
, gettext
# PAM
, pamSupport ? stdenv.hostPlatform.isLinux
# Building with linux-pam in pkgsStatic gives a few "undefined reference" errors like this:
# /nix/store/3s55icpsbc36sgn7sa8q3qq4z6al6rlr-linux-pam-static-x86_64-unknown-linux-musl-1.6.1/lib/libpam.a(pam_audit.o):
# in function `pam_modutil_audit_write':(.text+0x571):
# undefined reference to `audit_close'
, pamSupport ? stdenv.hostPlatform.isLinux && !stdenv.hostPlatform.isStatic
, linux-pam
# PL/Perl
@@ -267,7 +275,7 @@ let
# because there is a realistic use-case for extensions to locate the /lib directory to
# load other shared modules.
remove-references-to -t "$dev" -t "$doc" -t "$man" "$out/bin/postgres"
'' + lib.optionalString (!stdenv'.hostPlatform.isStatic) ''
if [ -z "''${dontDisableStatic:-}" ]; then
# Remove static libraries in case dynamic are available.
for i in $lib/lib/*.a; do
@@ -278,6 +286,7 @@ let
fi
done
fi
'' + ''
# The remaining static libraries are libpgcommon.a, libpgport.a and related.
# Those are only used when building e.g. extensions, so go to $dev.
moveToOutput "lib/*.a" "$dev"
@@ -306,7 +315,7 @@ let
# Also see <nixpkgs>/doc/stdenv/platform-notes.chapter.md
doCheck = false;
# Tests just get stuck on macOS 14.x for v13 and v14
doInstallCheck = !(stdenv'.hostPlatform.isDarwin && olderThan "15");
doInstallCheck = !(stdenv'.hostPlatform.isDarwin && olderThan "15") && !(stdenv'.hostPlatform.isStatic);
installCheckTarget = "check-world";
passthru = let