From f8bc00efc5671bd6084f88f995d6928956e6b85f Mon Sep 17 00:00:00 2001 From: Wolfgang Walther Date: Sat, 19 Jul 2025 18:13:16 +0200 Subject: [PATCH 1/3] postgresql.pg_config: make overrideable This allows `postgresql.withPackages` to easily override the paths to the default and man outputs for `pg_config`. It avoids all `buildEnv`-dev-output hackery, which it didn't properly support, and separates the logic cleanly. --- pkgs/servers/sql/postgresql/generic.nix | 141 +++++++++++----------- pkgs/servers/sql/postgresql/libpq.nix | 6 + pkgs/servers/sql/postgresql/pg_config.nix | 11 +- pkgs/servers/sql/postgresql/pg_config.sh | 2 +- 4 files changed, 87 insertions(+), 73 deletions(-) diff --git a/pkgs/servers/sql/postgresql/generic.nix b/pkgs/servers/sql/postgresql/generic.nix index 028722c5aff1..a9a1ea398060 100644 --- a/pkgs/servers/sql/postgresql/generic.nix +++ b/pkgs/servers/sql/postgresql/generic.nix @@ -456,9 +456,12 @@ let "$out/bin/pg_config" > "$dev/nix-support/pg_config.expected" '' + '' - rm "$out/bin/pg_config" - make -C src/common pg_config.env - install -D src/common/pg_config.env "$dev/nix-support/pg_config.env" + rm "$out/bin/pg_config" + make -C src/common pg_config.env + substituteInPlace src/common/pg_config.env \ + --replace-fail "$out" "@out@" \ + --replace-fail "$man" "@man@" + install -D src/common/pg_config.env "$dev/nix-support/pg_config.env" # postgres exposes external symbols get_pkginclude_path and similar. Those # can't be stripped away by --gc-sections/LTO, because they could theoretically @@ -585,7 +588,13 @@ let postgresql = this; }; - pg_config = buildPackages.callPackage ./pg_config.nix { inherit (finalAttrs) finalPackage; }; + pg_config = buildPackages.callPackage ./pg_config.nix { + inherit (finalAttrs) finalPackage; + outputs = { + out = lib.getOutput "out" finalAttrs.finalPackage; + man = lib.getOutput "man" finalAttrs.finalPackage; + }; + }; tests = { postgresql = nixosTests.postgresql.postgresql.passthru.override finalAttrs.finalPackage; @@ -639,84 +648,76 @@ let f: let installedExtensions = f postgresql.pkgs; - finalPackage = - (buildEnv { - name = "${postgresql.pname}-and-plugins-${postgresql.version}"; - paths = installedExtensions ++ [ - # consider keeping in-sync with `postBuild` below - postgresql - postgresql.man # in case user installs this into environment - ]; + finalPackage = buildEnv { + name = "${postgresql.pname}-and-plugins-${postgresql.version}"; + paths = installedExtensions ++ [ + # consider keeping in-sync with `postBuild` below + postgresql + postgresql.man # in case user installs this into environment + ]; - pathsToLink = [ - "/" - "/bin" - "/share/postgresql/extension" - # Unbreaks Omnigres' build system - "/share/postgresql/timezonesets" - "/share/postgresql/tsearch_data" - ]; + pathsToLink = [ + "/" + "/bin" + "/share/postgresql/extension" + # Unbreaks Omnigres' build system + "/share/postgresql/timezonesets" + "/share/postgresql/tsearch_data" + ]; - nativeBuildInputs = [ makeBinaryWrapper ]; - postBuild = - let - args = lib.concatMap (ext: ext.wrapperArgs or [ ]) installedExtensions; - in - '' - wrapProgram "$out/bin/postgres" ${lib.concatStringsSep " " args} + nativeBuildInputs = [ makeBinaryWrapper ]; + postBuild = + let + args = lib.concatMap (ext: ext.wrapperArgs or [ ]) installedExtensions; + in + '' + wrapProgram "$out/bin/postgres" ${lib.concatStringsSep " " args} + ''; - mkdir -p "$dev/nix-support" - substitute "${lib.getDev postgresql}/nix-support/pg_config.env" "$dev/nix-support/pg_config.env" \ - --replace-fail "${postgresql}" "$out" \ - --replace-fail "${postgresql.man}" "$out" - ''; + passthru = { + inherit installedExtensions; + inherit (postgresql) + pkgs + psqlSchema + version + ; - passthru = { - inherit installedExtensions; - inherit (postgresql) - pkgs - psqlSchema - version + pg_config = postgresql.pg_config.override { + outputs = { + out = finalPackage; + man = finalPackage; + }; + }; + + withJIT = postgresqlWithPackages { + inherit + buildEnv + lib + makeBinaryWrapper + postgresql ; + } (_: installedExtensions ++ [ postgresql.jit ]); + withoutJIT = postgresqlWithPackages { + inherit + buildEnv + lib + makeBinaryWrapper + postgresql + ; + } (_: lib.remove postgresql.jit installedExtensions); - pg_config = postgresql.pg_config.override { inherit finalPackage; }; - - withJIT = postgresqlWithPackages { + withPackages = + f': + postgresqlWithPackages { inherit buildEnv lib makeBinaryWrapper postgresql ; - } (_: installedExtensions ++ [ postgresql.jit ]); - withoutJIT = postgresqlWithPackages { - inherit - buildEnv - lib - makeBinaryWrapper - postgresql - ; - } (_: lib.remove postgresql.jit installedExtensions); - - withPackages = - f': - postgresqlWithPackages { - inherit - buildEnv - lib - makeBinaryWrapper - postgresql - ; - } (ps: installedExtensions ++ f' ps); - }; - }).overrideAttrs - { - # buildEnv doesn't support passing `outputs`, so going via overrideAttrs. - outputs = [ - "out" - "dev" - ]; - }; + } (ps: installedExtensions ++ f' ps); + }; + }; in finalPackage; diff --git a/pkgs/servers/sql/postgresql/libpq.nix b/pkgs/servers/sql/postgresql/libpq.nix index d3f3da989186..ab977dfb531d 100644 --- a/pkgs/servers/sql/postgresql/libpq.nix +++ b/pkgs/servers/sql/postgresql/libpq.nix @@ -128,6 +128,9 @@ stdenv.mkDerivation (finalAttrs: { make -C src/interfaces/libpq install make -C src/port install + substituteInPlace src/common/pg_config.env \ + --replace-fail "$out" "@out@" + install -D src/common/pg_config.env "$dev/nix-support/pg_config.env" moveToOutput "lib/*.a" "$dev" @@ -151,6 +154,9 @@ stdenv.mkDerivation (finalAttrs: { passthru.pg_config = buildPackages.callPackage ./pg_config.nix { inherit (finalAttrs) finalPackage; + outputs = { + out = lib.getOutput "out" finalAttrs.finalPackage; + }; }; meta = { diff --git a/pkgs/servers/sql/postgresql/pg_config.nix b/pkgs/servers/sql/postgresql/pg_config.nix index 20544cdb0614..c4cc1cee06cd 100644 --- a/pkgs/servers/sql/postgresql/pg_config.nix +++ b/pkgs/servers/sql/postgresql/pg_config.nix @@ -6,6 +6,8 @@ stdenv, # PostgreSQL package finalPackage, + # PostgreSQL package's outputs + outputs, }: replaceVarsWith { @@ -15,12 +17,17 @@ replaceVarsWith { isExecutable = true; replacements = { inherit runtimeShell; - postgresql-dev = lib.getDev finalPackage; + "pg_config.env" = replaceVarsWith { + name = "pg_config.env"; + src = "${lib.getDev finalPackage}/nix-support/pg_config.env"; + replacements = outputs; + }; }; nativeCheckInputs = [ diffutils ]; - postCheck = '' + # The expected output only matches when outputs have *not* been altered by postgresql.withPackages. + postCheck = lib.optionalString (outputs.out == lib.getOutput "out" finalPackage) '' if [ -e ${lib.getDev finalPackage}/nix-support/pg_config.expected ]; then diff ${lib.getDev finalPackage}/nix-support/pg_config.expected <($out/bin/pg_config) fi diff --git a/pkgs/servers/sql/postgresql/pg_config.sh b/pkgs/servers/sql/postgresql/pg_config.sh index 3f0aa08eb70c..ff18e3a4752b 100644 --- a/pkgs/servers/sql/postgresql/pg_config.sh +++ b/pkgs/servers/sql/postgresql/pg_config.sh @@ -13,7 +13,7 @@ set -euo pipefail # https://github.com/postgres/postgres/blob/7510ac6203bc8e3c56eae95466feaeebfc1b4f31/src/bin/pg_config/pg_config.sh # https://github.com/postgres/postgres/blob/master/src/bin/pg_config/pg_config.c -source @postgresql-dev@/nix-support/pg_config.env +source @pg_config.env@ help=" pg_config provides information about the installed version of PostgreSQL. From 43fddf04c0d04300c5859c2853965d725ed5e8cf Mon Sep 17 00:00:00 2001 From: Wolfgang Walther Date: Sat, 19 Jul 2025 18:29:56 +0200 Subject: [PATCH 2/3] Revert "python3Packages.pgvector: temporarily disable checkPhase" This reverts commit 39767f902ebfc8ecd9722ee085cad51e0100aac7. --- pkgs/development/python-modules/pgvector/default.nix | 4 ---- 1 file changed, 4 deletions(-) diff --git a/pkgs/development/python-modules/pgvector/default.nix b/pkgs/development/python-modules/pgvector/default.nix index 377535d893c8..cc604bc87997 100644 --- a/pkgs/development/python-modules/pgvector/default.nix +++ b/pkgs/development/python-modules/pgvector/default.nix @@ -42,10 +42,6 @@ buildPythonPackage rec { dependencies = [ numpy ]; - # Temporarily disabled until the following is solved: - # https://github.com/NixOS/nixpkgs/pull/425384 - doCheck = false; - nativeCheckInputs = [ asyncpg django From 267991cc76cdad7f266d5c375492add53ed1620f Mon Sep 17 00:00:00 2001 From: Wolfgang Walther Date: Sat, 19 Jul 2025 18:30:04 +0200 Subject: [PATCH 3/3] Revert "python3Packages.langgraph-checkpoint-postgres: temporarily disable checkPhase" This reverts commit 6dee2b6377c673da32fdc08289f59c304a77043f. --- .../python-modules/langgraph-checkpoint-postgres/default.nix | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/pkgs/development/python-modules/langgraph-checkpoint-postgres/default.nix b/pkgs/development/python-modules/langgraph-checkpoint-postgres/default.nix index 590d0ecefcdb..d17f7c55de9a 100644 --- a/pkgs/development/python-modules/langgraph-checkpoint-postgres/default.nix +++ b/pkgs/development/python-modules/langgraph-checkpoint-postgres/default.nix @@ -58,10 +58,7 @@ buildPythonPackage rec { "psycopg-pool" ]; - # Temporarily disabled until the following is solved: - # https://github.com/NixOS/nixpkgs/pull/425384 - doCheck = false; - # doCheck = !(stdenvNoCC.hostPlatform.isDarwin); + doCheck = !(stdenvNoCC.hostPlatform.isDarwin); nativeCheckInputs = [ pytest-asyncio