diff --git a/lib/vendorCargoDeps.nix b/lib/vendorCargoDeps.nix index d6fdeb54..b3603555 100644 --- a/lib/vendorCargoDeps.nix +++ b/lib/vendorCargoDeps.nix @@ -44,10 +44,14 @@ let ); lock = args.cargoLockParsed or (builtins.fromTOML cargoLockContents); + + toml = builtins.fromTOML (readFile (src + "/Cargo.toml")); + + patch = lib.attrsets.foldlAttrs (acc: registry: value: acc // value) {} (toml.patch or {}); in vendorMultipleCargoDeps ( { - inherit cargoConfigs; + inherit cargoConfigs patch src; cargoLockParsedList = [ lock ]; outputHashes = args.outputHashes or { }; overrideVendorCargoPackage = args.overrideVendorCargoPackage or (_: drv: drv); diff --git a/lib/vendorMultipleCargoDeps.nix b/lib/vendorMultipleCargoDeps.nix index 80bea5ae..7398e757 100644 --- a/lib/vendorMultipleCargoDeps.nix +++ b/lib/vendorMultipleCargoDeps.nix @@ -42,11 +42,24 @@ in overrideVendorCargoPackage ? _: drv: drv, overrideVendorGitCheckout ? _: drv: drv, registries ? null, + patch ? { }, + src, }: let cargoLocksParsed = (map fromTOML ((map readFile cargoLockList) ++ cargoLockContentsList)) ++ cargoLockParsedList; + linkedPatches = + lib.attrsets.foldlAttrs (acc: name: value: if value ? path then acc + '' + ln -s ${src}/${value.path} $out/${name} + '' else acc) "" patch; + + linkedPatchesWarn = + if linkedPatches != "" then + builtins.warn "Using Crane together with [patch] may prevent the caching of build atrefacts" linkedPatches + else + ""; + # Extract all packages from all Cargo.locks and trim any unused attributes from the parsed # data so we do not get any faux duplicates allowedAttrs = { @@ -94,4 +107,5 @@ runCommandLocal "vendor-cargo-deps" { } '' ${linkSources vendoredRegistries.sources} ${linkSources vendoredGit.sources} + ${linkedPatchesWarn} ''