[M8] reusable libraries: install layout + cargoxx-path deps
This commit is contained in:
29
flake.nix
29
flake.nix
@@ -60,6 +60,7 @@
|
||||
lock = builtins.fromTOML (builtins.readFile (src + "/Cargoxx.lock"));
|
||||
isDep = p: p ? linkdb_source;
|
||||
isRoot = p: !(isDep p);
|
||||
isCargoxxSource = p: (p.source_kind or "") != "";
|
||||
root = builtins.head (builtins.filter isRoot lock.package);
|
||||
depPkgs = builtins.filter isDep lock.package;
|
||||
pname = if name != null then name else root.name;
|
||||
@@ -68,11 +69,17 @@
|
||||
(builtins.getFlake "github:NixOS/nixpkgs/${rev}")
|
||||
.legacyPackages.${system};
|
||||
|
||||
# cargoxx-path deps recurse into buildCppPackage on the sibling
|
||||
# source tree; the result joins buildInputs so the consumer's
|
||||
# find_package(<dep> CONFIG REQUIRED) resolves via CMAKE_PREFIX_PATH.
|
||||
evalDep = p:
|
||||
let rev = if (p ? nixpkgs_rev) && (p.nixpkgs_rev != "")
|
||||
then p.nixpkgs_rev
|
||||
else lock.nixpkgs_rev;
|
||||
in (pkgsAt rev).${p.nixpkgs_attr};
|
||||
if (p.source_kind or "") == "cargoxx-path" then
|
||||
buildCppPackage { src = src + ("/" + p.source_path); }
|
||||
else
|
||||
let rev = if (p ? nixpkgs_rev) && (p.nixpkgs_rev != "")
|
||||
then p.nixpkgs_rev
|
||||
else lock.nixpkgs_rev;
|
||||
in (pkgsAt rev).${p.nixpkgs_attr};
|
||||
|
||||
depInputs = map evalDep depPkgs;
|
||||
|
||||
@@ -87,12 +94,18 @@
|
||||
mkDepTomlEntry = p:
|
||||
let
|
||||
derivation = evalDep p;
|
||||
rev = if (p ? nixpkgs_rev) && (p.nixpkgs_rev != "")
|
||||
# For cargoxx-source deps we don't have a nixpkgs rev/attr — the
|
||||
# vendor.toml entry just needs a name + store_path so cargoxx's
|
||||
# offline pathway can find the dep's installed prefix.
|
||||
isPath = (p.source_kind or "") == "cargoxx-path";
|
||||
attr = if isPath then "" else p.nixpkgs_attr;
|
||||
rev = if isPath then ""
|
||||
else if (p ? nixpkgs_rev) && (p.nixpkgs_rev != "")
|
||||
then p.nixpkgs_rev else lock.nixpkgs_rev;
|
||||
in ''
|
||||
[[dep]]
|
||||
name = "${p.name}"
|
||||
nixpkgs_attr = "${p.nixpkgs_attr}"
|
||||
nixpkgs_attr = "${attr}"
|
||||
nixpkgs_rev = "${rev}"
|
||||
store_path = "${derivation}"
|
||||
'';
|
||||
@@ -121,9 +134,7 @@
|
||||
cargoxx build --release --offline --vendor ${vendorToml}
|
||||
'';
|
||||
installPhase = ''
|
||||
mkdir -p $out/bin
|
||||
cp build/release/${pname} $out/bin/ 2>/dev/null || \
|
||||
cp build/release/${pname}_bin $out/bin/${pname}
|
||||
cmake --install build/release --prefix $out
|
||||
'';
|
||||
hardeningDisable = [ "all" ];
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user