postgresql: move postgresqlWithPackages to separate file

Moves the function to a separate file and makes it callPackage-able. Now
that buildEnv also supports finalAttrs, the finalPackage construct can
also be rewritten that way.

This gives us clear separation of concern between the package builder in
generic.nix and wrapper.nix.
This commit is contained in:
Wolfgang Walther
2026-04-24 13:11:41 +02:00
parent 1cff068641
commit 16d53dfcf6
2 changed files with 72 additions and 76 deletions
+1 -76
View File
@@ -39,7 +39,6 @@ let
removeReferencesTo,
# passthru
buildEnv,
buildPackages,
newScope,
nixosTests,
@@ -542,10 +541,7 @@ let
in
import ./ext.nix newSelf newSuper;
withPackages = postgresqlWithPackages {
inherit buildEnv lib makeBinaryWrapper;
postgresql = finalAttrs.finalPackage;
};
withPackages = self.callPackage ./wrapper.nix { postgresql = finalAttrs.finalPackage; };
pg_config = buildPackages.callPackage ./pg_config.nix {
inherit (finalAttrs) finalPackage;
@@ -604,77 +600,6 @@ let
};
});
postgresqlWithPackages =
{
postgresql,
buildEnv,
lib,
makeBinaryWrapper,
}:
f:
let
installedExtensions = f postgresql.pkgs;
recurse = postgresqlWithPackages {
inherit
buildEnv
lib
makeBinaryWrapper
postgresql
;
};
finalPackage = buildEnv {
pname = "${postgresql.pname}-and-plugins";
inherit (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"
];
derivationArgs = {
strictDeps = true;
nativeBuildInputs = [ makeBinaryWrapper ];
postBuild =
let
args = lib.concatMap (ext: ext.wrapperArgs or [ ]) installedExtensions;
in
''
wrapProgram "$out/bin/postgres" ${lib.concatStringsSep " " args}
'';
};
passthru = {
inherit installedExtensions;
inherit (postgresql)
pkgs
psqlSchema
;
pg_config = postgresql.pg_config.override {
outputs = {
out = finalPackage;
man = finalPackage;
};
};
withJIT = recurse (_: installedExtensions ++ [ postgresql.jit ]);
withoutJIT = recurse (_: lib.remove postgresql.jit installedExtensions);
withPackages = f': recurse (ps: installedExtensions ++ f' ps);
};
};
in
finalPackage;
in
# passed by <major>.nix
versionArgs:
+71
View File
@@ -0,0 +1,71 @@
{
buildEnv,
callPackage,
lib,
makeBinaryWrapper,
postgresql,
}:
f:
let
installedExtensions = f postgresql.pkgs;
recurse = import ./wrapper.nix {
# explicitly listed in case they were overridden
inherit
buildEnv
callPackage
lib
makeBinaryWrapper
postgresql
;
};
in
buildEnv (finalAttrs: {
pname = "${postgresql.pname}-and-plugins";
inherit (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"
];
derivationArgs = {
strictDeps = true;
nativeBuildInputs = [ makeBinaryWrapper ];
postBuild =
let
args = lib.concatMap (ext: ext.wrapperArgs or [ ]) installedExtensions;
in
''
wrapProgram "$out/bin/postgres" ${lib.concatStringsSep " " args}
'';
};
passthru = {
inherit installedExtensions;
inherit (postgresql)
pkgs
psqlSchema
;
pg_config = postgresql.pg_config.override {
outputs = {
out = finalAttrs.finalPackage;
man = finalAttrs.finalPackage;
};
};
withJIT = recurse (_: installedExtensions ++ [ postgresql.jit ]);
withoutJIT = recurse (_: lib.remove postgresql.jit installedExtensions);
withPackages = f': recurse (ps: installedExtensions ++ f' ps);
};
})