buildBazelPackage: support __structuredAttrs = true

When using structured attributes, `bazelFlags` is an array.
`$bazelFlags` then only returns the array's first item.

Instead we need to use `"${bazelFlags[@]}"` which correctly returns all
array items with proper support for spaces in individual flags.

To remain compatible with the non-structured case, this adds a
conversion from array or string `bazelFlags` into an array
`bazelFlagsArray`.
This commit is contained in:
Nicolas Guichard
2026-04-23 10:34:20 +02:00
parent dd1fb03f1b
commit 3782bfa7bf
@@ -86,6 +86,8 @@ let
targetRunFlags ? [ ],
}:
lib.optionalString (targets != [ ]) ''
concatTo bazelFlagsArray bazelFlags
# See footnote called [USER and BAZEL_USE_CPP_ONLY_TOOLCHAIN variables]
BAZEL_USE_CPP_ONLY_TOOLCHAIN=1 \
USER=homeless-shelter \
@@ -99,7 +101,7 @@ let
"''${host_copts[@]}" \
"''${linkopts[@]}" \
"''${host_linkopts[@]}" \
$bazelFlags \
"''${bazelFlagsArray[@]}" \
${lib.strings.concatStringsSep " " additionalFlags} \
${lib.strings.concatStringsSep " " targets} \
${
@@ -239,13 +241,24 @@ stdenv.mkDerivation (
);
dontFixup = true;
allowedRequisites = [ ];
inherit (lib.fetchers.normalizeHash { hashTypes = [ "sha256" ]; } fetchAttrs)
outputHash
outputHashAlgo
;
}
// (
if fFetchAttrs.__structuredAttrs or false then
{
# With __structuredAttrs = true, the build always fails with “output $out is not allowed to refer to the following paths: $out”.
# This appears to be the same issue as in 283bca9648fc1afb01d3e4c3b5919251429da907.
outputChecks.out.allowedRequisites = [ "out" ];
}
else
{
allowedRequisites = [ ];
}
)
);
nativeBuildInputs = fBuildAttrs.nativeBuildInputs or [ ] ++ [