Unverified Commit ed0efe59 authored by Wolfgang Walther's avatar Wolfgang Walther
Browse files

pkgsStatic.libpq: fix build

This has worked before - but only accidentally so. It worked once we
enabled `structuredAttrs`, but there was a bug in the stdenv adapter for
`pkgsStatic`, which made it ineffective when using `structuredAttrs`.

With the bug fixed, libpq was broken again. This time, we fix it by
entirely disabling the build of shared libraries in PG's Makefiles for
the static case. No shared libraries - no problem.
parent 0cfc179c
Loading
Loading
Loading
Loading
+9 −8
Original line number Diff line number Diff line
@@ -118,6 +118,14 @@ stdenv.mkDerivation (finalAttrs: {

  postPatch = ''
    cat ${./pg_config.env.mk} >> src/common/Makefile
  ''
  # Explicitly disable building the shared libs, because that would fail with pkgsStatic.
  + lib.optionalString stdenv.hostPlatform.isStatic ''
    substituteInPlace src/interfaces/libpq/Makefile \
      --replace-fail "all: all-lib libpq-refs-stamp" "all: all-lib"
    substituteInPlace src/Makefile.shlib \
      --replace-fail "all-lib: all-shared-lib" "all-lib: all-static-lib" \
      --replace-fail "install-lib: install-lib-shared" "install-lib: install-lib-static"
  '';

  installPhase = ''
@@ -141,14 +149,7 @@ stdenv.mkDerivation (finalAttrs: {
  '';

  # PostgreSQL always builds both shared and static libs, so we delete those we don't want.
  postInstall =
    if stdenv.hostPlatform.isStatic then
      ''
        rm -rfv $out/lib/*.so*
        touch $out/empty
      ''
    else
      "rm -rfv $dev/lib/*.a";
  postInstall = if stdenv.hostPlatform.isStatic then "touch $out/empty" else "rm -rfv $dev/lib/*.a";

  doCheck = false;