mirror of
https://github.com/lopsided98/nix-ros-overlay.git
synced 2025-06-13 03:04:49 +03:00
cargo-ament-build: v0.1.8
This commit is contained in:
parent
dabd41fd0d
commit
90a80fe3dc
2 changed files with 161 additions and 94 deletions
|
@ -1,5 +1,5 @@
|
||||||
|
|
||||||
# This file was @generated by crate2nix 0.10.0 with the command:
|
# This file was @generated by crate2nix 0.14.1 with the command:
|
||||||
# "generate"
|
# "generate"
|
||||||
# See https://github.com/kolloch/crate2nix for more info.
|
# See https://github.com/kolloch/crate2nix for more info.
|
||||||
|
|
||||||
|
@ -7,17 +7,15 @@
|
||||||
, pkgs ? import nixpkgs { config = {}; }
|
, pkgs ? import nixpkgs { config = {}; }
|
||||||
, lib ? pkgs.lib
|
, lib ? pkgs.lib
|
||||||
, stdenv ? pkgs.stdenv
|
, stdenv ? pkgs.stdenv
|
||||||
, buildRustCrateForPkgs ? if buildRustCrate != null
|
, buildRustCrateForPkgs ? pkgs: pkgs.buildRustCrate
|
||||||
then lib.warn "crate2nix: Passing `buildRustCrate` as argument to Cargo.nix is deprecated. If you don't customize `buildRustCrate`, replace `callPackage ./Cargo.nix {}` by `import ./Cargo.nix { inherit pkgs; }`, and if you need to customize `buildRustCrate`, use `buildRustCrateForPkgs` instead." (_: buildRustCrate)
|
|
||||||
else pkgs: pkgs.buildRustCrate
|
|
||||||
# Deprecated
|
|
||||||
, buildRustCrate ? null
|
|
||||||
# This is used as the `crateOverrides` argument for `buildRustCrate`.
|
# This is used as the `crateOverrides` argument for `buildRustCrate`.
|
||||||
, defaultCrateOverrides ? pkgs.defaultCrateOverrides
|
, defaultCrateOverrides ? pkgs.defaultCrateOverrides
|
||||||
# The features to enable for the root_crate or the workspace_members.
|
# The features to enable for the root_crate or the workspace_members.
|
||||||
, rootFeatures ? [ "default" ]
|
, rootFeatures ? [ "default" ]
|
||||||
# If true, throw errors instead of issueing deprecation warnings.
|
# If true, throw errors instead of issueing deprecation warnings.
|
||||||
, strictDeprecation ? false
|
, strictDeprecation ? false
|
||||||
|
# Elements to add to the `-C target-feature=` argument passed to `rustc`
|
||||||
|
# (separated by `,`, prefixed with `+`).
|
||||||
# Used for conditional compilation based on CPU feature detection.
|
# Used for conditional compilation based on CPU feature detection.
|
||||||
, targetFeatures ? []
|
, targetFeatures ? []
|
||||||
# Whether to perform release builds: longer compile times, faster binaries.
|
# Whether to perform release builds: longer compile times, faster binaries.
|
||||||
|
@ -89,9 +87,9 @@ rec {
|
||||||
crates = {
|
crates = {
|
||||||
"anyhow" = rec {
|
"anyhow" = rec {
|
||||||
crateName = "anyhow";
|
crateName = "anyhow";
|
||||||
version = "1.0.66";
|
version = "1.0.89";
|
||||||
edition = "2018";
|
edition = "2018";
|
||||||
sha256 = "1xj3ahmwjlbiqsajhkaa0q6hqwb4l3l5rkfxa7jk1498r3fn2qi1";
|
sha256 = "1xh1vg89n56h6nqikcmgbpmkixjds33492klrp9m96xrbmhgizc6";
|
||||||
authors = [
|
authors = [
|
||||||
"David Tolnay <dtolnay@gmail.com>"
|
"David Tolnay <dtolnay@gmail.com>"
|
||||||
];
|
];
|
||||||
|
@ -103,9 +101,9 @@ rec {
|
||||||
};
|
};
|
||||||
"autocfg" = rec {
|
"autocfg" = rec {
|
||||||
crateName = "autocfg";
|
crateName = "autocfg";
|
||||||
version = "1.1.0";
|
version = "1.3.0";
|
||||||
edition = "2015";
|
edition = "2015";
|
||||||
sha256 = "1ylp3cb47ylzabimazvbz9ms6ap784zhb6syaz6c1jqpmcmq0s6l";
|
sha256 = "1c3njkfzpil03k92q0mij5y1pkhhfr4j3bf0h53bgl2vs85lsjqc";
|
||||||
authors = [
|
authors = [
|
||||||
"Josh Stone <cuviper@gmail.com>"
|
"Josh Stone <cuviper@gmail.com>"
|
||||||
];
|
];
|
||||||
|
@ -113,10 +111,14 @@ rec {
|
||||||
};
|
};
|
||||||
"cargo-ament-build" = rec {
|
"cargo-ament-build" = rec {
|
||||||
crateName = "cargo-ament-build";
|
crateName = "cargo-ament-build";
|
||||||
version = "0.1.6";
|
version = "0.1.8";
|
||||||
edition = "2021";
|
edition = "2021";
|
||||||
crateBin = [
|
crateBin = [
|
||||||
{ name = "cargo-ament-build"; path = "src/main.rs"; }
|
{
|
||||||
|
name = "cargo-ament-build";
|
||||||
|
path = "src/main.rs";
|
||||||
|
requiredFeatures = [ ];
|
||||||
|
}
|
||||||
];
|
];
|
||||||
src = lib.cleanSourceWith { filter = sourceFilter; src = ./.; };
|
src = lib.cleanSourceWith { filter = sourceFilter; src = ./.; };
|
||||||
authors = [
|
authors = [
|
||||||
|
@ -188,9 +190,9 @@ rec {
|
||||||
};
|
};
|
||||||
"indexmap" = rec {
|
"indexmap" = rec {
|
||||||
crateName = "indexmap";
|
crateName = "indexmap";
|
||||||
version = "1.9.1";
|
version = "1.9.3";
|
||||||
edition = "2021";
|
edition = "2021";
|
||||||
sha256 = "07nli1wcz7m81svvig8l5j6vjycjnv9va46lwblgy803ffbmm8qh";
|
sha256 = "16dxmy7yvk51wvnih3a3im6fp5lmx0wx76i03n06wyak6cwhw1xx";
|
||||||
dependencies = [
|
dependencies = [
|
||||||
{
|
{
|
||||||
name = "hashbrown";
|
name = "hashbrown";
|
||||||
|
@ -206,6 +208,8 @@ rec {
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
features = {
|
features = {
|
||||||
|
"arbitrary" = [ "dep:arbitrary" ];
|
||||||
|
"quickcheck" = [ "dep:quickcheck" ];
|
||||||
"rayon" = [ "dep:rayon" ];
|
"rayon" = [ "dep:rayon" ];
|
||||||
"rustc-rayon" = [ "dep:rustc-rayon" ];
|
"rustc-rayon" = [ "dep:rustc-rayon" ];
|
||||||
"serde" = [ "dep:serde" ];
|
"serde" = [ "dep:serde" ];
|
||||||
|
@ -227,9 +231,10 @@ rec {
|
||||||
};
|
};
|
||||||
"proc-macro2" = rec {
|
"proc-macro2" = rec {
|
||||||
crateName = "proc-macro2";
|
crateName = "proc-macro2";
|
||||||
version = "1.0.47";
|
version = "1.0.86";
|
||||||
edition = "2018";
|
edition = "2021";
|
||||||
sha256 = "09g7alc7mlbycsadfh7lwskr1qfxbiic9qp9z751cqz3n04dk8sy";
|
sha256 = "0xrv22p8lqlfdf1w0pj4si8n2ws4aw0kilmziwf0vpv5ys6rwway";
|
||||||
|
libName = "proc_macro2";
|
||||||
authors = [
|
authors = [
|
||||||
"David Tolnay <dtolnay@gmail.com>"
|
"David Tolnay <dtolnay@gmail.com>"
|
||||||
"Alex Crichton <alex@alexcrichton.com>"
|
"Alex Crichton <alex@alexcrichton.com>"
|
||||||
|
@ -243,13 +248,13 @@ rec {
|
||||||
features = {
|
features = {
|
||||||
"default" = [ "proc-macro" ];
|
"default" = [ "proc-macro" ];
|
||||||
};
|
};
|
||||||
resolvedDefaultFeatures = [ "default" "proc-macro" ];
|
resolvedDefaultFeatures = [ "proc-macro" ];
|
||||||
};
|
};
|
||||||
"quote" = rec {
|
"quote" = rec {
|
||||||
crateName = "quote";
|
crateName = "quote";
|
||||||
version = "1.0.21";
|
version = "1.0.37";
|
||||||
edition = "2018";
|
edition = "2018";
|
||||||
sha256 = "0yai5cyd9h95n7hkwjcx8ig3yv0hindmz5gm60g9dmm7fzrlir5v";
|
sha256 = "1brklraw2g34bxy9y4q1nbrccn7bv36ylihv12c9vlcii55x7fdm";
|
||||||
authors = [
|
authors = [
|
||||||
"David Tolnay <dtolnay@gmail.com>"
|
"David Tolnay <dtolnay@gmail.com>"
|
||||||
];
|
];
|
||||||
|
@ -264,17 +269,35 @@ rec {
|
||||||
"default" = [ "proc-macro" ];
|
"default" = [ "proc-macro" ];
|
||||||
"proc-macro" = [ "proc-macro2/proc-macro" ];
|
"proc-macro" = [ "proc-macro2/proc-macro" ];
|
||||||
};
|
};
|
||||||
resolvedDefaultFeatures = [ "default" "proc-macro" ];
|
resolvedDefaultFeatures = [ "proc-macro" ];
|
||||||
};
|
};
|
||||||
"serde" = rec {
|
"serde" = rec {
|
||||||
crateName = "serde";
|
crateName = "serde";
|
||||||
version = "1.0.147";
|
version = "1.0.210";
|
||||||
edition = "2015";
|
edition = "2018";
|
||||||
sha256 = "0rc9jj8bbhf3lkf07ln8kyljigyzc4kk90nzg4dc2gwqmsdxd4yi";
|
sha256 = "0flc0z8wgax1k4j5bf2zyq48bgzyv425jkd5w0i6wbh7f8j5kqy8";
|
||||||
authors = [
|
authors = [
|
||||||
"Erick Tryzelaar <erick.tryzelaar@gmail.com>"
|
"Erick Tryzelaar <erick.tryzelaar@gmail.com>"
|
||||||
"David Tolnay <dtolnay@gmail.com>"
|
"David Tolnay <dtolnay@gmail.com>"
|
||||||
];
|
];
|
||||||
|
dependencies = [
|
||||||
|
{
|
||||||
|
name = "serde_derive";
|
||||||
|
packageId = "serde_derive";
|
||||||
|
optional = true;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "serde_derive";
|
||||||
|
packageId = "serde_derive";
|
||||||
|
target = { target, features }: false;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
devDependencies = [
|
||||||
|
{
|
||||||
|
name = "serde_derive";
|
||||||
|
packageId = "serde_derive";
|
||||||
|
}
|
||||||
|
];
|
||||||
features = {
|
features = {
|
||||||
"default" = [ "std" ];
|
"default" = [ "std" ];
|
||||||
"derive" = [ "serde_derive" ];
|
"derive" = [ "serde_derive" ];
|
||||||
|
@ -284,9 +307,9 @@ rec {
|
||||||
};
|
};
|
||||||
"serde_derive" = rec {
|
"serde_derive" = rec {
|
||||||
crateName = "serde_derive";
|
crateName = "serde_derive";
|
||||||
version = "1.0.147";
|
version = "1.0.210";
|
||||||
edition = "2015";
|
edition = "2015";
|
||||||
sha256 = "0ln8rqbybpxmk4fvh6lgm75acs1d8x90fi44fhx3x77wm0n3c7ag";
|
sha256 = "07yzy4wafk79ps0hmbqmsqh5xjna4pm4q57wc847bb8gl3nh4f94";
|
||||||
procMacro = true;
|
procMacro = true;
|
||||||
authors = [
|
authors = [
|
||||||
"Erick Tryzelaar <erick.tryzelaar@gmail.com>"
|
"Erick Tryzelaar <erick.tryzelaar@gmail.com>"
|
||||||
|
@ -296,14 +319,20 @@ rec {
|
||||||
{
|
{
|
||||||
name = "proc-macro2";
|
name = "proc-macro2";
|
||||||
packageId = "proc-macro2";
|
packageId = "proc-macro2";
|
||||||
|
usesDefaultFeatures = false;
|
||||||
|
features = [ "proc-macro" ];
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
name = "quote";
|
name = "quote";
|
||||||
packageId = "quote";
|
packageId = "quote";
|
||||||
|
usesDefaultFeatures = false;
|
||||||
|
features = [ "proc-macro" ];
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
name = "syn";
|
name = "syn";
|
||||||
packageId = "syn";
|
packageId = "syn";
|
||||||
|
usesDefaultFeatures = false;
|
||||||
|
features = [ "clone-impls" "derive" "parsing" "printing" "proc-macro" ];
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
features = {
|
features = {
|
||||||
|
@ -312,9 +341,9 @@ rec {
|
||||||
};
|
};
|
||||||
"syn" = rec {
|
"syn" = rec {
|
||||||
crateName = "syn";
|
crateName = "syn";
|
||||||
version = "1.0.103";
|
version = "2.0.77";
|
||||||
edition = "2018";
|
edition = "2021";
|
||||||
sha256 = "0pa4b6g938drphblgdhmjnzclp7gcbf4zdgkmfaxlfhk54i08r58";
|
sha256 = "1vbkwfp9ymmi0fsyyjsqfvnv7gm8vjgl4pzprbk7p3pxc7gvqdcz";
|
||||||
authors = [
|
authors = [
|
||||||
"David Tolnay <dtolnay@gmail.com>"
|
"David Tolnay <dtolnay@gmail.com>"
|
||||||
];
|
];
|
||||||
|
@ -337,18 +366,17 @@ rec {
|
||||||
];
|
];
|
||||||
features = {
|
features = {
|
||||||
"default" = [ "derive" "parsing" "printing" "clone-impls" "proc-macro" ];
|
"default" = [ "derive" "parsing" "printing" "clone-impls" "proc-macro" ];
|
||||||
"printing" = [ "quote" ];
|
"printing" = [ "dep:quote" ];
|
||||||
"proc-macro" = [ "proc-macro2/proc-macro" "quote/proc-macro" ];
|
"proc-macro" = [ "proc-macro2/proc-macro" "quote?/proc-macro" ];
|
||||||
"quote" = [ "dep:quote" ];
|
|
||||||
"test" = [ "syn-test-suite/all-features" ];
|
"test" = [ "syn-test-suite/all-features" ];
|
||||||
};
|
};
|
||||||
resolvedDefaultFeatures = [ "clone-impls" "default" "derive" "parsing" "printing" "proc-macro" "quote" ];
|
resolvedDefaultFeatures = [ "clone-impls" "derive" "parsing" "printing" "proc-macro" ];
|
||||||
};
|
};
|
||||||
"toml" = rec {
|
"toml" = rec {
|
||||||
crateName = "toml";
|
crateName = "toml";
|
||||||
version = "0.5.9";
|
version = "0.5.11";
|
||||||
edition = "2018";
|
edition = "2018";
|
||||||
sha256 = "1mr40c0x3ma0dbzh4v43bfn4sj3k9ihpgq6fz1js88l6fnky30ld";
|
sha256 = "0d2266nx8b3n22c7k24x4428z6di8n83a9n466jm7a2hipfz1xzl";
|
||||||
authors = [
|
authors = [
|
||||||
"Alex Crichton <alex@alexcrichton.com>"
|
"Alex Crichton <alex@alexcrichton.com>"
|
||||||
];
|
];
|
||||||
|
@ -371,9 +399,10 @@ rec {
|
||||||
};
|
};
|
||||||
"unicode-ident" = rec {
|
"unicode-ident" = rec {
|
||||||
crateName = "unicode-ident";
|
crateName = "unicode-ident";
|
||||||
version = "1.0.5";
|
version = "1.0.13";
|
||||||
edition = "2018";
|
edition = "2018";
|
||||||
sha256 = "1wznr6ax3jl09vxkvj4a62vip2avfgif13js9sflkjg4b6fv7skc";
|
sha256 = "1zm1xylzsdfvm2a5ib9li3g5pp7qnkv4amhspydvgbmd9k6mc6z9";
|
||||||
|
libName = "unicode_ident";
|
||||||
authors = [
|
authors = [
|
||||||
"David Tolnay <dtolnay@gmail.com>"
|
"David Tolnay <dtolnay@gmail.com>"
|
||||||
];
|
];
|
||||||
|
@ -388,26 +417,22 @@ rec {
|
||||||
/* Target (platform) data for conditional dependencies.
|
/* Target (platform) data for conditional dependencies.
|
||||||
This corresponds roughly to what buildRustCrate is setting.
|
This corresponds roughly to what buildRustCrate is setting.
|
||||||
*/
|
*/
|
||||||
defaultTarget = {
|
makeDefaultTarget = platform: {
|
||||||
unix = true;
|
unix = platform.isUnix;
|
||||||
windows = false;
|
windows = platform.isWindows;
|
||||||
fuchsia = true;
|
fuchsia = true;
|
||||||
test = false;
|
test = false;
|
||||||
|
|
||||||
# This doesn't appear to be officially documented anywhere yet.
|
inherit (platform.rust.platform)
|
||||||
# See https://github.com/rust-lang-nursery/rust-forge/issues/101.
|
arch
|
||||||
os =
|
os
|
||||||
if stdenv.hostPlatform.isDarwin
|
vendor;
|
||||||
then "macos"
|
family = platform.rust.platform.target-family;
|
||||||
else stdenv.hostPlatform.parsed.kernel.name;
|
|
||||||
arch = stdenv.hostPlatform.parsed.cpu.name;
|
|
||||||
family = "unix";
|
|
||||||
env = "gnu";
|
env = "gnu";
|
||||||
endian =
|
endian =
|
||||||
if stdenv.hostPlatform.parsed.cpu.significantByte.name == "littleEndian"
|
if platform.parsed.cpu.significantByte.name == "littleEndian"
|
||||||
then "little" else "big";
|
then "little" else "big";
|
||||||
pointer_width = toString stdenv.hostPlatform.parsed.cpu.bits;
|
pointer_width = toString platform.parsed.cpu.bits;
|
||||||
vendor = stdenv.hostPlatform.parsed.vendor.name;
|
|
||||||
debug_assertions = false;
|
debug_assertions = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -496,14 +521,25 @@ rec {
|
||||||
inherit testCrateFlags;
|
inherit testCrateFlags;
|
||||||
buildInputs = testInputs;
|
buildInputs = testInputs;
|
||||||
} ''
|
} ''
|
||||||
set -ex
|
set -e
|
||||||
|
|
||||||
export RUST_BACKTRACE=1
|
export RUST_BACKTRACE=1
|
||||||
|
|
||||||
# recreate a file hierarchy as when running tests with cargo
|
# recreate a file hierarchy as when running tests with cargo
|
||||||
|
|
||||||
# the source for test data
|
# the source for test data
|
||||||
${pkgs.xorg.lndir}/bin/lndir ${crate.src}
|
# It's necessary to locate the source in $NIX_BUILD_TOP/source/
|
||||||
|
# instead of $NIX_BUILD_TOP/
|
||||||
|
# because we compiled those test binaries in the former and not the latter.
|
||||||
|
# So all paths will expect source tree to be there and not in the build top directly.
|
||||||
|
# For example: $NIX_BUILD_TOP := /build in general, if you ask yourself.
|
||||||
|
# NOTE: There could be edge cases if `crate.sourceRoot` does exist but
|
||||||
|
# it's very hard to reason about them.
|
||||||
|
# Open a bug if you run into this!
|
||||||
|
mkdir -p source/
|
||||||
|
cd source/
|
||||||
|
|
||||||
|
${pkgs.buildPackages.xorg.lndir}/bin/lndir ${crate.src}
|
||||||
|
|
||||||
# build outputs
|
# build outputs
|
||||||
testRoot=target/debug
|
testRoot=target/debug
|
||||||
|
@ -533,10 +569,12 @@ rec {
|
||||||
passthru = (crate.passthru or { }) // {
|
passthru = (crate.passthru or { }) // {
|
||||||
inherit test;
|
inherit test;
|
||||||
};
|
};
|
||||||
} ''
|
}
|
||||||
echo tested by ${test}
|
(lib.optionalString (stdenv.buildPlatform.canExecute stdenv.hostPlatform) ''
|
||||||
${lib.concatMapStringsSep "\n" (output: "ln -s ${crate.${output}} ${"$"}${output}") crate.outputs}
|
echo tested by ${test}
|
||||||
'';
|
'' + ''
|
||||||
|
${lib.concatMapStringsSep "\n" (output: "ln -s ${crate.${output}} ${"$"}${output}") crate.outputs}
|
||||||
|
'');
|
||||||
|
|
||||||
/* A restricted overridable version of builtRustCratesWithFeatures. */
|
/* A restricted overridable version of builtRustCratesWithFeatures. */
|
||||||
buildRustCrateWithFeatures =
|
buildRustCrateWithFeatures =
|
||||||
|
@ -610,12 +648,12 @@ rec {
|
||||||
, crateConfigs ? crates
|
, crateConfigs ? crates
|
||||||
, buildRustCrateForPkgsFunc
|
, buildRustCrateForPkgsFunc
|
||||||
, runTests
|
, runTests
|
||||||
, target ? defaultTarget
|
, makeTarget ? makeDefaultTarget
|
||||||
} @ args:
|
} @ args:
|
||||||
assert (builtins.isAttrs crateConfigs);
|
assert (builtins.isAttrs crateConfigs);
|
||||||
assert (builtins.isString packageId);
|
assert (builtins.isString packageId);
|
||||||
assert (builtins.isList features);
|
assert (builtins.isList features);
|
||||||
assert (builtins.isAttrs target);
|
assert (builtins.isAttrs (makeTarget stdenv.hostPlatform));
|
||||||
assert (builtins.isBool runTests);
|
assert (builtins.isBool runTests);
|
||||||
let
|
let
|
||||||
rootPackageId = packageId;
|
rootPackageId = packageId;
|
||||||
|
@ -623,7 +661,7 @@ rec {
|
||||||
(
|
(
|
||||||
args // {
|
args // {
|
||||||
inherit rootPackageId;
|
inherit rootPackageId;
|
||||||
target = target // { test = runTests; };
|
target = makeTarget stdenv.hostPlatform // { test = runTests; };
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
# Memoize built packages so that reappearing packages are only built once.
|
# Memoize built packages so that reappearing packages are only built once.
|
||||||
|
@ -632,6 +670,7 @@ rec {
|
||||||
let
|
let
|
||||||
self = {
|
self = {
|
||||||
crates = lib.mapAttrs (packageId: value: buildByPackageIdForPkgsImpl self pkgs packageId) crateConfigs;
|
crates = lib.mapAttrs (packageId: value: buildByPackageIdForPkgsImpl self pkgs packageId) crateConfigs;
|
||||||
|
target = makeTarget stdenv.hostPlatform;
|
||||||
build = mkBuiltByPackageIdByPkgs pkgs.buildPackages;
|
build = mkBuiltByPackageIdByPkgs pkgs.buildPackages;
|
||||||
};
|
};
|
||||||
in
|
in
|
||||||
|
@ -648,7 +687,8 @@ rec {
|
||||||
(crateConfig'.devDependencies or [ ]);
|
(crateConfig'.devDependencies or [ ]);
|
||||||
dependencies =
|
dependencies =
|
||||||
dependencyDerivations {
|
dependencyDerivations {
|
||||||
inherit features target;
|
inherit features;
|
||||||
|
inherit (self) target;
|
||||||
buildByPackageId = depPackageId:
|
buildByPackageId = depPackageId:
|
||||||
# proc_macro crates must be compiled for the build architecture
|
# proc_macro crates must be compiled for the build architecture
|
||||||
if crateConfigs.${depPackageId}.procMacro or false
|
if crateConfigs.${depPackageId}.procMacro or false
|
||||||
|
@ -660,24 +700,26 @@ rec {
|
||||||
};
|
};
|
||||||
buildDependencies =
|
buildDependencies =
|
||||||
dependencyDerivations {
|
dependencyDerivations {
|
||||||
inherit features target;
|
inherit features;
|
||||||
|
inherit (self.build) target;
|
||||||
buildByPackageId = depPackageId:
|
buildByPackageId = depPackageId:
|
||||||
self.build.crates.${depPackageId};
|
self.build.crates.${depPackageId};
|
||||||
dependencies = crateConfig.buildDependencies or [ ];
|
dependencies = crateConfig.buildDependencies or [ ];
|
||||||
};
|
};
|
||||||
filterEnabledDependenciesForThis = dependencies: filterEnabledDependencies {
|
|
||||||
inherit dependencies features target;
|
|
||||||
};
|
|
||||||
dependenciesWithRenames =
|
dependenciesWithRenames =
|
||||||
lib.filter (d: d ? "rename")
|
let
|
||||||
(
|
buildDeps = filterEnabledDependencies {
|
||||||
filterEnabledDependenciesForThis
|
inherit features;
|
||||||
(
|
inherit (self) target;
|
||||||
(crateConfig.buildDependencies or [ ])
|
dependencies = crateConfig.dependencies or [ ] ++ devDependencies;
|
||||||
++ (crateConfig.dependencies or [ ])
|
};
|
||||||
++ devDependencies
|
hostDeps = filterEnabledDependencies {
|
||||||
)
|
inherit features;
|
||||||
);
|
inherit (self.build) target;
|
||||||
|
dependencies = crateConfig.buildDependencies or [ ];
|
||||||
|
};
|
||||||
|
in
|
||||||
|
lib.filter (d: d ? "rename") (hostDeps ++ buildDeps);
|
||||||
# Crate renames have the form:
|
# Crate renames have the form:
|
||||||
#
|
#
|
||||||
# {
|
# {
|
||||||
|
@ -696,9 +738,9 @@ rec {
|
||||||
let
|
let
|
||||||
package = crateConfigs."${dep.packageId}";
|
package = crateConfigs."${dep.packageId}";
|
||||||
in
|
in
|
||||||
{ inherit (dep) rename; version = package.version; };
|
{ inherit (dep) rename; inherit (package) version; };
|
||||||
in
|
in
|
||||||
lib.mapAttrs (name: choices: builtins.map versionAndRename choices) grouped;
|
lib.mapAttrs (name: builtins.map versionAndRename) grouped;
|
||||||
in
|
in
|
||||||
buildRustCrateForPkgsFunc pkgs
|
buildRustCrateForPkgsFunc pkgs
|
||||||
(
|
(
|
||||||
|
@ -744,7 +786,7 @@ rec {
|
||||||
*/
|
*/
|
||||||
sanitizeForJson = val:
|
sanitizeForJson = val:
|
||||||
if builtins.isAttrs val
|
if builtins.isAttrs val
|
||||||
then lib.mapAttrs (n: v: sanitizeForJson v) val
|
then lib.mapAttrs (n: sanitizeForJson) val
|
||||||
else if builtins.isList val
|
else if builtins.isList val
|
||||||
then builtins.map sanitizeForJson val
|
then builtins.map sanitizeForJson val
|
||||||
else if builtins.isFunction val
|
else if builtins.isFunction val
|
||||||
|
@ -752,7 +794,7 @@ rec {
|
||||||
else val;
|
else val;
|
||||||
|
|
||||||
/* Returns various tools to debug a crate. */
|
/* Returns various tools to debug a crate. */
|
||||||
debugCrate = { packageId, target ? defaultTarget }:
|
debugCrate = { packageId, target ? makeDefaultTarget stdenv.hostPlatform }:
|
||||||
assert (builtins.isString packageId);
|
assert (builtins.isString packageId);
|
||||||
let
|
let
|
||||||
debug = rec {
|
debug = rec {
|
||||||
|
@ -853,7 +895,7 @@ rec {
|
||||||
enabledFeatures = enableFeatures (crateConfig.dependencies or [ ]) expandedFeatures;
|
enabledFeatures = enableFeatures (crateConfig.dependencies or [ ]) expandedFeatures;
|
||||||
depWithResolvedFeatures = dependency:
|
depWithResolvedFeatures = dependency:
|
||||||
let
|
let
|
||||||
packageId = dependency.packageId;
|
inherit (dependency) packageId;
|
||||||
features = dependencyFeatures enabledFeatures dependency;
|
features = dependencyFeatures enabledFeatures dependency;
|
||||||
in
|
in
|
||||||
{ inherit packageId features; };
|
{ inherit packageId features; };
|
||||||
|
@ -928,15 +970,14 @@ rec {
|
||||||
dependencies;
|
dependencies;
|
||||||
|
|
||||||
/* Returns whether the given feature should enable the given dependency. */
|
/* Returns whether the given feature should enable the given dependency. */
|
||||||
doesFeatureEnableDependency = { name, rename ? null, ... }: feature:
|
doesFeatureEnableDependency = dependency: feature:
|
||||||
let
|
let
|
||||||
|
name = dependency.rename or dependency.name;
|
||||||
prefix = "${name}/";
|
prefix = "${name}/";
|
||||||
len = builtins.stringLength prefix;
|
len = builtins.stringLength prefix;
|
||||||
startsWithPrefix = builtins.substring 0 len feature == prefix;
|
startsWithPrefix = builtins.substring 0 len feature == prefix;
|
||||||
in
|
in
|
||||||
(rename == null && feature == name)
|
feature == name || feature == "dep:" + name || startsWithPrefix;
|
||||||
|| (rename != null && rename == feature)
|
|
||||||
|| startsWithPrefix;
|
|
||||||
|
|
||||||
/* Returns the expanded features for the given inputFeatures by applying the
|
/* Returns the expanded features for the given inputFeatures by applying the
|
||||||
rules in featureMap.
|
rules in featureMap.
|
||||||
|
@ -948,10 +989,24 @@ rec {
|
||||||
assert (builtins.isAttrs featureMap);
|
assert (builtins.isAttrs featureMap);
|
||||||
assert (builtins.isList inputFeatures);
|
assert (builtins.isList inputFeatures);
|
||||||
let
|
let
|
||||||
expandFeature = feature:
|
expandFeaturesNoCycle = oldSeen: inputFeatures:
|
||||||
assert (builtins.isString feature);
|
if inputFeatures != [ ]
|
||||||
[ feature ] ++ (expandFeatures featureMap (featureMap."${feature}" or [ ]));
|
then
|
||||||
outFeatures = lib.concatMap expandFeature inputFeatures;
|
let
|
||||||
|
# The feature we're currently expanding.
|
||||||
|
feature = builtins.head inputFeatures;
|
||||||
|
# All the features we've seen/expanded so far, including the one
|
||||||
|
# we're currently processing.
|
||||||
|
seen = oldSeen // { ${feature} = 1; };
|
||||||
|
# Expand the feature but be careful to not re-introduce a feature
|
||||||
|
# that we've already seen: this can easily cause a cycle, see issue
|
||||||
|
# #209.
|
||||||
|
enables = builtins.filter (f: !(seen ? "${f}")) (featureMap."${feature}" or [ ]);
|
||||||
|
in
|
||||||
|
[ feature ] ++ (expandFeaturesNoCycle seen (builtins.tail inputFeatures ++ enables))
|
||||||
|
# No more features left, nothing to expand to.
|
||||||
|
else [ ];
|
||||||
|
outFeatures = expandFeaturesNoCycle { } inputFeatures;
|
||||||
in
|
in
|
||||||
sortedUnique outFeatures;
|
sortedUnique outFeatures;
|
||||||
|
|
||||||
|
@ -971,7 +1026,9 @@ rec {
|
||||||
let
|
let
|
||||||
enabled = builtins.any (doesFeatureEnableDependency dependency) features;
|
enabled = builtins.any (doesFeatureEnableDependency dependency) features;
|
||||||
in
|
in
|
||||||
if (dependency.optional or false) && enabled then [ dependency.name ] else [ ]
|
if (dependency.optional or false) && enabled
|
||||||
|
then [ (dependency.rename or dependency.name) ]
|
||||||
|
else [ ]
|
||||||
)
|
)
|
||||||
dependencies;
|
dependencies;
|
||||||
in
|
in
|
||||||
|
@ -993,11 +1050,21 @@ rec {
|
||||||
explicitFeatures = dependency.features or [ ];
|
explicitFeatures = dependency.features or [ ];
|
||||||
additionalDependencyFeatures =
|
additionalDependencyFeatures =
|
||||||
let
|
let
|
||||||
dependencyPrefix = (dependency.rename or dependency.name) + "/";
|
name = dependency.rename or dependency.name;
|
||||||
dependencyFeatures =
|
stripPrefixMatch = prefix: s:
|
||||||
builtins.filter (f: lib.hasPrefix dependencyPrefix f) features;
|
if lib.hasPrefix prefix s
|
||||||
|
then lib.removePrefix prefix s
|
||||||
|
else null;
|
||||||
|
extractFeature = feature: lib.findFirst
|
||||||
|
(f: f != null)
|
||||||
|
null
|
||||||
|
(map (prefix: stripPrefixMatch prefix feature) [
|
||||||
|
(name + "/")
|
||||||
|
(name + "?/")
|
||||||
|
]);
|
||||||
|
dependencyFeatures = lib.filter (f: f != null) (map extractFeature features);
|
||||||
in
|
in
|
||||||
builtins.map (lib.removePrefix dependencyPrefix) dependencyFeatures;
|
dependencyFeatures;
|
||||||
in
|
in
|
||||||
defaultOrNil ++ explicitFeatures ++ additionalDependencyFeatures;
|
defaultOrNil ++ explicitFeatures ++ additionalDependencyFeatures;
|
||||||
|
|
||||||
|
|
|
@ -8,8 +8,8 @@
|
||||||
src = fetchFromGitHub {
|
src = fetchFromGitHub {
|
||||||
owner = "ros2-rust";
|
owner = "ros2-rust";
|
||||||
repo = "cargo-ament-build";
|
repo = "cargo-ament-build";
|
||||||
rev = "60a9bd267b0849f5c17b9e1f159428b04a68b649";
|
rev = "v0.1.8";
|
||||||
hash = "sha256-/oB51UXasc+bwp2jXT6gPZR4nCD4leUDvY+T9Ymb1Mk=";
|
hash = "sha256-P3HX3LXQLA2NvFeV3B1baGrl0CaPWAn4Yzh+aAgUuBM=";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue