nix: port over packaging patches from nix repo (#562702)

This commit is contained in:
zowoq
2026-09-14 22:24:52 +00:00
committed by GitHub
9 changed files with 79 additions and 14 deletions

View File

@@ -174,6 +174,17 @@ let
outputs = prevAttrs.outputs or [ "out" ] ++ [ "dev" ];
};
fixupStaticLayer = finalAttrs: prevAttrs: {
postFixup =
prevAttrs.postFixup or ""
+ lib.optionalString (stdenv.hostPlatform.isStatic) ''
# HACK: Otherwise the result will have the entire buildInputs closure
# injected by the pkgsStatic stdenv
# <https://github.com/NixOS/nixpkgs/issues/83667>
rm -f $out/nix-support/propagated-build-inputs
'';
};
# Work around weird `--as-needed` linker behavior with BSD, see
# https://github.com/mesonbuild/meson/issues/3593
bsdNoLinkAsNeeded =
@@ -323,6 +334,7 @@ in
scope.sourceLayer
setVersionLayer
mesonLayer
fixupStaticLayer
scope.mesonComponentOverrides
];
mkMesonExecutable = mkPackageBuilder [
@@ -332,6 +344,7 @@ in
setVersionLayer
mesonLayer
mesonBuildLayer
fixupStaticLayer
scope.mesonComponentOverrides
];
mkMesonLibrary = mkPackageBuilder [
@@ -342,9 +355,17 @@ in
setVersionLayer
mesonBuildLayer
mesonLibraryLayer
fixupStaticLayer
scope.mesonComponentOverrides
];
/**
Whether to embed the public C API into nix-cli so plugins can resolve those symbols from the executable.
*/
withPluginCAPI =
(lib.versionAtLeast (lib.versions.majorMinor version) "2.35")
&& !(stdenv.hostPlatform.isWindows || stdenv.hostPlatform.isStatic);
nix-util = callPackage ../src/libutil/package.nix { };
nix-util-c = callPackage ../src/libutil-c/package.nix { };
nix-util-test-support = callPackage ../src/libutil-test-support/package.nix { };

View File

@@ -8,6 +8,7 @@
# Configuration Options
version,
withPluginCAPI,
}:
mkMesonLibrary (finalAttrs: {
@@ -21,8 +22,9 @@ mkMesonLibrary (finalAttrs: {
nix-expr
];
mesonFlags = [
];
mesonFlags = lib.optional (lib.versionAtLeast (lib.versions.majorMinor version) "2.35") (
lib.mesonBool "plugin-c-api" withPluginCAPI
);
meta = {
platforms = lib.platforms.unix ++ lib.platforms.windows;

View File

@@ -10,6 +10,7 @@
# Configuration Options
version,
withPluginCAPI,
}:
mkMesonLibrary (finalAttrs: {
@@ -25,7 +26,9 @@ mkMesonLibrary (finalAttrs: {
nix-fetchers
];
mesonFlags = [ ];
mesonFlags = lib.optional (lib.versionAtLeast (lib.versions.majorMinor version) "2.35") (
lib.mesonBool "plugin-c-api" withPluginCAPI
);
meta = {
platforms = lib.platforms.unix ++ lib.platforms.windows;

View File

@@ -10,6 +10,7 @@
# Configuration Options
version,
withPluginCAPI,
}:
mkMesonLibrary (finalAttrs: {
@@ -29,8 +30,9 @@ mkMesonLibrary (finalAttrs: {
nix-flake
];
mesonFlags = [
];
mesonFlags = lib.optional (lib.versionAtLeast (lib.versions.majorMinor version) "2.35") (
lib.mesonBool "plugin-c-api" withPluginCAPI
);
meta = {
platforms = lib.platforms.unix ++ lib.platforms.windows;

View File

@@ -10,6 +10,7 @@
# Configuration Options
version,
withPluginCAPI,
}:
mkMesonLibrary (finalAttrs: {
@@ -25,8 +26,9 @@ mkMesonLibrary (finalAttrs: {
nix-main
];
mesonFlags = [
];
mesonFlags = lib.optional (lib.versionAtLeast (lib.versions.majorMinor version) "2.35") (
lib.mesonBool "plugin-c-api" withPluginCAPI
);
meta = {
platforms = lib.platforms.unix ++ lib.platforms.windows;

View File

@@ -8,6 +8,7 @@
# Configuration Options
version,
withPluginCAPI,
}:
mkMesonLibrary (finalAttrs: {
@@ -21,8 +22,9 @@ mkMesonLibrary (finalAttrs: {
nix-store
];
mesonFlags = [
];
mesonFlags = lib.optional (lib.versionAtLeast (lib.versions.majorMinor version) "2.35") (
lib.mesonBool "plugin-c-api" withPluginCAPI
);
meta = {
platforms = lib.platforms.unix ++ lib.platforms.windows;

View File

@@ -7,6 +7,7 @@
# Configuration Options
version,
withPluginCAPI,
}:
mkMesonLibrary (finalAttrs: {
@@ -19,8 +20,9 @@ mkMesonLibrary (finalAttrs: {
nix-util
];
mesonFlags = [
];
mesonFlags = lib.optional (lib.versionAtLeast (lib.versions.majorMinor version) "2.35") (
lib.mesonBool "plugin-c-api" withPluginCAPI
);
meta = {
platforms = lib.platforms.unix ++ lib.platforms.windows;

View File

@@ -8,6 +8,13 @@
nix-main,
nix-cmd,
nix-expr-c,
nix-fetchers-c,
nix-flake-c,
nix-main-c,
nix-store-c,
nix-util-c,
mimalloc,
# Configuration Options
@@ -18,6 +25,10 @@
# Significantly improves evaluation performance on allocation-heavy
# workloads (~10-15% on large evaluations).
withMimalloc ? !stdenv.hostPlatform.isWindows,
# Whether to embed the public C API into the `nix` executable so plugins can
# resolve those symbols without linking Nix libraries directly.
withPluginCApi ? !stdenv.hostPlatform.isWindows && !stdenv.hostPlatform.isStatic,
}:
mkMesonExecutable (finalAttrs: {
@@ -32,11 +43,27 @@ mkMesonExecutable (finalAttrs: {
nix-main
nix-cmd
]
++ lib.optionals ((lib.versionAtLeast (lib.versions.majorMinor version) "2.35") && withPluginCApi) [
nix-expr-c
nix-fetchers-c
nix-flake-c
nix-main-c
nix-store-c
nix-util-c
]
++ lib.optional ((lib.versionAtLeast version "2.35pre") && withMimalloc) mimalloc;
mesonFlags = lib.optionals (lib.versionAtLeast version "2.35pre") [
(lib.mesonEnable "mimalloc" withMimalloc)
];
mesonFlags =
lib.optionals (lib.versionAtLeast version "2.35pre") [
(lib.mesonEnable "mimalloc" withMimalloc)
]
++ lib.optional (lib.versionAtLeast (lib.versions.majorMinor version) "2.35") (
lib.mesonBool "plugin-c-api" withPluginCApi
);
passthru = {
exportsPluginCApi = withPluginCApi;
};
meta = {
mainProgram = "nix";

View File

@@ -77,6 +77,10 @@ mkMesonDerivation (finalAttrs: {
"--print-errorlogs"
];
mesonFlags = lib.optional (lib.versionAtLeast (lib.versions.majorMinor version) "2.35") (
lib.mesonBool "plugin-c-api" nix-cli.exportsPluginCApi
);
doCheck = true;
installPhase = ''