Add automatic C library input propagation workaround
Automatically adds Nix C library build inputs based on which nix-bindings crates are dependencies, working around missing native input propagation in nix-cargo-integration. The workaround inspects the dreamLock to detect: - If the crate being built is a nix-bindings crate (adds its own inputs) - Direct dependencies on nix-bindings crates (adds their inputs) The mapping is recursive via lazyAttrsOf, so depending on nix-bindings-flake automatically brings in transitive C library dependencies. Downstream consumers can extend the mapping for their own multi-crate workspaces where crate A depends on crate B which depends on nix-bindings.
This commit is contained in:
parent
dbb00333b1
commit
6110414520
3 changed files with 156 additions and 66 deletions
54
nci.nix
54
nci.nix
|
|
@ -1,24 +1,8 @@
|
|||
{
|
||||
perSystem =
|
||||
{
|
||||
config,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
{ config, ... }:
|
||||
let
|
||||
cfg = config.nix-bindings-rust;
|
||||
nixLibs =
|
||||
if cfg.nixPackage ? libs then
|
||||
cfg.nixPackage.libs
|
||||
else
|
||||
# Fallback for older Nix versions without split libs
|
||||
{
|
||||
nix-util-c = cfg.nixPackage;
|
||||
nix-store-c = cfg.nixPackage;
|
||||
nix-expr-c = cfg.nixPackage;
|
||||
nix-fetchers-c = cfg.nixPackage;
|
||||
nix-flake-c = cfg.nixPackage;
|
||||
};
|
||||
in
|
||||
{
|
||||
# https://flake.parts/options/nix-cargo-integration
|
||||
|
|
@ -31,7 +15,7 @@
|
|||
drvConfig = {
|
||||
imports = [
|
||||
# Downstream projects import this into depsDrvConfig instead
|
||||
config.nix-bindings-rust.nciBuildConfig
|
||||
cfg.nciBuildConfig
|
||||
];
|
||||
# Extra settings for running the tests
|
||||
mkDerivation = {
|
||||
|
|
@ -65,39 +49,5 @@
|
|||
};
|
||||
};
|
||||
};
|
||||
|
||||
# Per-crate configuration: only provide the specific Nix libs each crate needs
|
||||
# FIXME should use propagatedBuildInputs
|
||||
nci.crates.nix-bindings-bdwgc-sys.drvConfig.mkDerivation.buildInputs = [
|
||||
pkgs.boehmgc
|
||||
];
|
||||
nci.crates.nix-bindings-util-sys.drvConfig.mkDerivation.buildInputs = [
|
||||
nixLibs.nix-util-c
|
||||
];
|
||||
nci.crates.nix-bindings-util.drvConfig.mkDerivation.buildInputs =
|
||||
config.nci.crates.nix-bindings-util-sys.drvConfig.mkDerivation.buildInputs;
|
||||
nci.crates.nix-bindings-store-sys.drvConfig.mkDerivation.buildInputs =
|
||||
config.nci.crates.nix-bindings-util-sys.drvConfig.mkDerivation.buildInputs
|
||||
++ [ nixLibs.nix-store-c ];
|
||||
nci.crates.nix-bindings-store.drvConfig.mkDerivation.buildInputs =
|
||||
config.nci.crates.nix-bindings-store-sys.drvConfig.mkDerivation.buildInputs;
|
||||
nci.crates.nix-bindings-expr-sys.drvConfig.mkDerivation.buildInputs =
|
||||
config.nci.crates.nix-bindings-store-sys.drvConfig.mkDerivation.buildInputs
|
||||
++ [
|
||||
nixLibs.nix-expr-c
|
||||
pkgs.boehmgc
|
||||
];
|
||||
nci.crates.nix-bindings-expr.drvConfig.mkDerivation.buildInputs =
|
||||
config.nci.crates.nix-bindings-expr-sys.drvConfig.mkDerivation.buildInputs;
|
||||
nci.crates.nix-bindings-fetchers-sys.drvConfig.mkDerivation.buildInputs =
|
||||
config.nci.crates.nix-bindings-expr-sys.drvConfig.mkDerivation.buildInputs
|
||||
++ [ nixLibs.nix-fetchers-c ];
|
||||
nci.crates.nix-bindings-fetchers.drvConfig.mkDerivation.buildInputs =
|
||||
config.nci.crates.nix-bindings-fetchers-sys.drvConfig.mkDerivation.buildInputs;
|
||||
nci.crates.nix-bindings-flake-sys.drvConfig.mkDerivation.buildInputs =
|
||||
config.nci.crates.nix-bindings-fetchers-sys.drvConfig.mkDerivation.buildInputs
|
||||
++ [ nixLibs.nix-flake-c ];
|
||||
nci.crates.nix-bindings-flake.drvConfig.mkDerivation.buildInputs =
|
||||
config.nci.crates.nix-bindings-flake-sys.drvConfig.mkDerivation.buildInputs;
|
||||
};
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue