linux: make sure that src/version actually refer to the declaring file

With this change it's ensured that `builtins.unsafeGetAttrPos` actually
points to `<nixpkgs/pkgs/os-specific/linux/kernel/linux-x.y.nix>` when
retrieving the position of `src` or `version` of
`linuxPackages.kernel`.

This is relevant to make sure that ofborg pinging maintainers on kernel updates
actually works[1]. While the underlying issue should be fixed in ofborg
or Nix itself, this is IMHO a pragmatic change to ensure that all kernel
maintainers are automatically notified on updates.

[1] https://github.com/NixOS/nixpkgs/pull/143113#issuecomment-953319957
This commit is contained in:
Maximilian Bosch 2021-10-27 23:53:14 +02:00
parent 850251213a
commit 63185299f4
No known key found for this signature in database
GPG key ID: 091DBF4D1FC46B8E
2 changed files with 21 additions and 6 deletions

View file

@ -60,7 +60,7 @@
, kernelTests ? []
, nixosTests
, ...
}:
}@args:
# Note: this package is used for bootstrapping fetchurl, and thus
# cannot use fetchpatch! All mutable patches (generated by GitHub or
@ -70,6 +70,18 @@
assert stdenv.isLinux;
let
# Dirty hack to make sure that `version` & `src` have
# `<nixpkgs/pkgs/os-specific/linux/kernel/linux-x.y.nix>` as position
# when using `builtins.unsafeGetAttrPos`.
#
# This is to make sure that ofborg actually detects changes in the kernel derivation
# and pings all maintainers.
#
# For further context, see https://github.com/NixOS/nixpkgs/pull/143113#issuecomment-953319957
basicArgs = builtins.removeAttrs
args
(lib.filter (x: ! (builtins.elem x [ "version" "src" ])) (lib.attrNames args));
# Combine the `features' attribute sets of all the kernel patches.
kernelFeatures = lib.foldr (x: y: (x.features or {}) // y) ({
iwlwifi = true;
@ -180,13 +192,14 @@ let
};
}; # end of configfile derivation
kernel = (callPackage ./manual-config.nix { inherit buildPackages; }) {
inherit version modDirVersion src kernelPatches randstructSeed lib stdenv extraMakeFlags extraMeta configfile;
kernel = (callPackage ./manual-config.nix { inherit buildPackages; }) (basicArgs // {
inherit modDirVersion kernelPatches randstructSeed lib stdenv extraMakeFlags extraMeta configfile;
pos = builtins.unsafeGetAttrPos "version" args;
config = { CONFIG_MODULES = "y"; CONFIG_FW_LOADER = "m"; };
};
});
passthru = {
passthru = basicArgs // {
features = kernelFeatures;
inherit commonStructuredConfig structuredExtraConfig extraMakeFlags isZen isHardened isLibre modDirVersion;
isXen = lib.warn "The isXen attribute is deprecated. All Nixpkgs kernels that support it now have Xen enabled." true;

View file

@ -19,6 +19,8 @@ in {
stdenv,
# The kernel version
version,
# Position of the Linux build expression
pos ? null,
# Additional kernel make flags
extraMakeFlags ? [],
# The version of the kernel module directory
@ -333,4 +335,4 @@ stdenv.mkDerivation ((drvAttrs config stdenv.hostPlatform.linux-kernel kernelPat
] ++ extraMakeFlags;
karch = stdenv.hostPlatform.linuxArch;
})
} // (optionalAttrs (pos != null) { inherit pos; }))