linux: parse configfile at eval-time if possible

Users might call `manualConfig` with a path presented at evaluation
time, in which case they shouldn't need to set `allowImportFromDerivation`
to true, since IFD wouldn't be needed.
This commit is contained in:
Jared Baur 2025-08-17 19:01:27 -07:00
parent 294574264e
commit 35956ce40e
No known key found for this signature in database

View File

@ -32,16 +32,24 @@ let
readConfig =
configfile:
import
(runCommand "config.nix" { } ''
echo "{" > "$out"
while IFS='=' read key val; do
[ "x''${key#CONFIG_}" != "x$key" ] || continue
no_firstquote="''${val#\"}";
echo ' "'"$key"'" = "'"''${no_firstquote%\"}"'";' >> "$out"
done < "${configfile}"
echo "}" >> $out
'').outPath;
lib.listToAttrs (
map
(
line:
let
match = lib.match "(.*)=\"?(.*)\"?" line;
in
{
name = lib.elemAt match 0;
value = lib.elemAt match 1;
}
)
(
lib.filter (line: !(lib.hasPrefix "#" line || line == "")) (
lib.splitString "\n" (builtins.readFile configfile)
)
)
);
in
lib.makeOverridable (
{
@ -64,7 +72,9 @@ lib.makeOverridable (
configfile,
# Manually specified nixexpr representing the config
# If unspecified, this will be autodetected from the .config
config ? lib.optionalAttrs allowImportFromDerivation (readConfig configfile),
config ? lib.optionalAttrs (builtins.isPath configfile || allowImportFromDerivation) (
readConfig configfile
),
# Custom seed used for CONFIG_GCC_PLUGIN_RANDSTRUCT if enabled. This is
# automatically extended with extra per-version and per-config values.
randstructSeed ? "",