crane/lib/writeTOML.nix
Ivan Petkov 960d350770
vendorCargoDeps: manually splice packages to avoid cross build issues (#507)
* Source vendoring is passed as a standalone attribute to
  `mkCargoDerivation`, meaning it does not automagically get spliced
  with the correct local/cross system inputs (i.e. what would happen if
  it was a `depsBuildBuild` entry)
* To fix this we need to make sure that `vendorCargoDeps` and all of its
  transitive dependencies always use `runCommand` (and friends) from
  their `pkgsBuildBuild` equivalent. This should always be safe to do
  (even for cross-builds) since this amounts to building up a bunch of
  sources which will be read by the build system
* Unfortunately I had to manually specify `pkgsBuildBuild.whatever` in
  multiple places as I could not get things to work by messing with the
  `callPackage` definition. Perhaps we should be using
  `makeScopeWithSplicing'` instead of `makeScope` when constructing the
  library, but I couldn't get it working (and I couldn't find any decent
  docs on how to use it online) so this will make do for the time being.
2024-01-28 19:08:44 +00:00

17 lines
289 B
Nix

{ pkgsBuildBuild
}:
let
inherit (pkgsBuildBuild)
remarshal
runCommand;
in
name: contents: runCommand name
{
contents = builtins.toJSON contents;
passAsFile = [ "contents" ];
nativeBuildInputs = [ remarshal ];
} ''
remarshal -i $contentsPath -if json -of toml -o $out
''