mirror of
https://codeberg.org/icewind/mill-scale.git
synced 2026-06-03 18:04:09 +02:00
56 lines
1.6 KiB
Nix
56 lines
1.6 KiB
Nix
{
|
|
lib,
|
|
src,
|
|
config,
|
|
cargoLock,
|
|
}: let
|
|
inherit (builtins) readFile pathExists attrNames hasAttr;
|
|
inherit (lib) map intersectLists foldl splitString getAttrFromPath;
|
|
|
|
cargoLockDeps =
|
|
if pathExists cargoLock
|
|
then let
|
|
cargoLockToml = fromTOML (readFile cargoLock);
|
|
in
|
|
map (package: package.name) cargoLockToml.package
|
|
else [];
|
|
availableAutoDeps = import ./deps.nix;
|
|
detectedDeps = intersectLists cargoLockDeps (attrNames availableAutoDeps);
|
|
mergedDetectedDeps =
|
|
if config.autodeps
|
|
then
|
|
foldl
|
|
(merged: dep: {
|
|
build = merged.build ++ (availableAutoDeps.${dep}.build or []);
|
|
native = merged.native ++ (availableAutoDeps.${dep}.native or []);
|
|
runtime = merged.runtime ++ (availableAutoDeps.${dep}.runtime or []);
|
|
env =
|
|
if (hasAttr "env" availableAutoDeps.${dep})
|
|
then pkgs: (merged.env pkgs) // (availableAutoDeps.${dep}.env pkgs)
|
|
else merged.env;
|
|
})
|
|
{
|
|
build = [];
|
|
native = [];
|
|
runtime = [];
|
|
env = pkgs: {};
|
|
}
|
|
detectedDeps
|
|
else {
|
|
build = [];
|
|
native = [];
|
|
runtime = [];
|
|
env = pkgs: {};
|
|
};
|
|
getPkgs = pkgs: deps: let
|
|
depPaths = map (splitString ".") deps;
|
|
in
|
|
map (path: getAttrFromPath path pkgs) depPaths;
|
|
autoDeps = pkgs: {
|
|
buildInputs = getPkgs pkgs mergedDetectedDeps.build;
|
|
nativeBuildInputs = with pkgs; [pkg-config] ++ (getPkgs pkgs mergedDetectedDeps.native);
|
|
runtimeInputs = getPkgs pkgs mergedDetectedDeps.runtime;
|
|
env = mergedDetectedDeps.env pkgs;
|
|
};
|
|
in
|
|
autoDeps
|