mirror of
https://github.com/ipetkov/crane.git
synced 2024-11-22 23:17:15 +03:00
Add tests for using cargoExtraArgs
* In this case, we set up a crate with various non-default features and ensure that we can correctly influence the cargo build by passing in the appropriate `--feature` flag
This commit is contained in:
parent
9b09599c5c
commit
359cb53441
@ -3,10 +3,10 @@
|
||||
, jq
|
||||
}:
|
||||
|
||||
src: expected:
|
||||
src: expected: args:
|
||||
let
|
||||
runCargoAndCheckFreshness = cmd: ''
|
||||
cargo ${cmd} --workspace --release --message-format json-diagnostic-short >${cmd}out
|
||||
cargo ${cmd} --workspace --release --message-format json-diagnostic-short ${args.cargoExtraArgs or ""} >${cmd}out
|
||||
|
||||
filter='select(.reason == "compiler-artifact" and .fresh != true) | .target.name'
|
||||
builtTargets="$(jq -r "$filter" <${cmd}out | sort -u)"
|
||||
@ -19,13 +19,13 @@ let
|
||||
fi
|
||||
'';
|
||||
in
|
||||
buildWithCargo {
|
||||
buildWithCargo (args // {
|
||||
inherit src;
|
||||
doCopyTargetToOutput = false;
|
||||
|
||||
# NB: explicit call here so that the buildDepsOnly call
|
||||
# doesn't inherit our build commands
|
||||
cargoArtifacts = buildDepsOnly { inherit src; };
|
||||
cargoArtifacts = buildDepsOnly (args // { inherit src; });
|
||||
|
||||
nativeBuildInputs = [ jq ];
|
||||
|
||||
@ -49,4 +49,4 @@ buildWithCargo {
|
||||
installPhase = ''
|
||||
touch $out
|
||||
'';
|
||||
}
|
||||
})
|
||||
|
@ -17,7 +17,7 @@ pkgs.lib.makeScope myLib.newScope (self:
|
||||
cmpCleanCargoTomlComplex = self.cmpCleanCargoToml ./cleanCargoToml/complex;
|
||||
|
||||
compilesFresh = callPackage ./compilesFresh.nix { };
|
||||
compilesFreshSimple = self.compilesFresh ./simple "simple";
|
||||
compilesFreshSimple = self.compilesFresh ./simple "simple" { };
|
||||
compilesFreshOverlappingTargets = self.compilesFresh
|
||||
./overlapping-targets
|
||||
(builtins.concatStringsSep "\n" [
|
||||
@ -25,7 +25,8 @@ pkgs.lib.makeScope myLib.newScope (self:
|
||||
"baz"
|
||||
"foo"
|
||||
"overlapping-targets"
|
||||
]);
|
||||
])
|
||||
{ };
|
||||
|
||||
customCargoTargetDirectory =
|
||||
let
|
||||
@ -45,65 +46,7 @@ pkgs.lib.makeScope myLib.newScope (self:
|
||||
src = ./various-targets;
|
||||
};
|
||||
|
||||
featuresDefault =
|
||||
let
|
||||
crate = myLib.buildPackage {
|
||||
src = ./features;
|
||||
};
|
||||
in
|
||||
pkgs.runCommand "featuresDefault" { } ''
|
||||
set -x
|
||||
[[ "hello" == "$(${crate}/bin/features)" ]]
|
||||
touch $out
|
||||
'';
|
||||
|
||||
featuresFoo =
|
||||
let
|
||||
crate = myLib.buildPackage {
|
||||
src = ./features;
|
||||
cargoExtraArgs = "--features foo";
|
||||
};
|
||||
in
|
||||
pkgs.runCommand "featuresFoo" { } ''
|
||||
[[ "$(echo -e 'hello\nfoo')" == "$(${crate}/bin/features)" ]]
|
||||
touch $out
|
||||
'';
|
||||
|
||||
featuresBar =
|
||||
let
|
||||
crate = myLib.buildPackage {
|
||||
src = ./features;
|
||||
cargoExtraArgs = "--features bar";
|
||||
};
|
||||
in
|
||||
pkgs.runCommand "featuresBar" { } ''
|
||||
[[ "$(echo -e 'hello\nbar')" == "$(${crate}/bin/features)" ]]
|
||||
touch $out
|
||||
'';
|
||||
|
||||
featuresFooBar =
|
||||
let
|
||||
crate = myLib.buildPackage {
|
||||
src = ./features;
|
||||
cargoExtraArgs = "--features 'foo bar'";
|
||||
};
|
||||
in
|
||||
pkgs.runCommand "featuresFoo" { } ''
|
||||
[[ "$(echo -e 'hello\nfoo\nbar')" == "$(${crate}/bin/features)" ]]
|
||||
touch $out
|
||||
'';
|
||||
|
||||
featuresAll =
|
||||
let
|
||||
crate = myLib.buildPackage {
|
||||
src = ./features;
|
||||
cargoExtraArgs = "--all-features";
|
||||
};
|
||||
in
|
||||
pkgs.runCommand "featuresAll" { } ''
|
||||
[[ "$(echo -e 'hello\nfoo\nbar')" == "$(${crate}/bin/features)" ]]
|
||||
touch $out
|
||||
'';
|
||||
features = callPackage ./features { };
|
||||
|
||||
manyLibs = myLib.buildPackage {
|
||||
src = ./with-libs;
|
||||
|
7
tests/features/Cargo.lock
generated
7
tests/features/Cargo.lock
generated
@ -1,7 +0,0 @@
|
||||
# This file is automatically @generated by Cargo.
|
||||
# It is not intended for manual editing.
|
||||
version = 3
|
||||
|
||||
[[package]]
|
||||
name = "features"
|
||||
version = "0.1.0"
|
@ -1,9 +0,0 @@
|
||||
[package]
|
||||
name = "features"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
[features]
|
||||
default = []
|
||||
foo = []
|
||||
bar = []
|
62
tests/features/default.nix
Normal file
62
tests/features/default.nix
Normal file
@ -0,0 +1,62 @@
|
||||
{ buildPackage
|
||||
, compilesFresh
|
||||
, lib
|
||||
, linkFarmFromDrvs
|
||||
, runCommand
|
||||
}:
|
||||
|
||||
let
|
||||
mkTests = { name, cargoExtraArgs, runResult }:
|
||||
let
|
||||
crate = buildPackage {
|
||||
inherit cargoExtraArgs name;
|
||||
src = ./features;
|
||||
};
|
||||
in
|
||||
[
|
||||
crate
|
||||
|
||||
(compilesFresh ./features "features" {
|
||||
inherit cargoExtraArgs;
|
||||
name = "${name}CompilesFresh";
|
||||
})
|
||||
|
||||
(runCommand "${name}Run" { } ''
|
||||
[[ "hello${runResult}" == "$(${crate}/bin/features)" ]]
|
||||
touch $out
|
||||
'')
|
||||
];
|
||||
|
||||
tests = [
|
||||
(mkTests {
|
||||
name = "default";
|
||||
cargoExtraArgs = "";
|
||||
runResult = "";
|
||||
})
|
||||
|
||||
(mkTests {
|
||||
name = "foo";
|
||||
cargoExtraArgs = "--features foo";
|
||||
runResult = "\nfoo";
|
||||
})
|
||||
|
||||
(mkTests {
|
||||
name = "bar";
|
||||
cargoExtraArgs = "--features bar";
|
||||
runResult = "\nbar";
|
||||
})
|
||||
|
||||
(mkTests {
|
||||
name = "fooBar";
|
||||
cargoExtraArgs = "--features 'foo bar'";
|
||||
runResult = "\nfoo\nbar";
|
||||
})
|
||||
|
||||
(mkTests {
|
||||
name = "all";
|
||||
cargoExtraArgs = "--all-features";
|
||||
runResult = "\nfoo\nbar";
|
||||
})
|
||||
];
|
||||
in
|
||||
linkFarmFromDrvs "features" (lib.flatten tests)
|
49
tests/features/features/Cargo.lock
generated
Normal file
49
tests/features/features/Cargo.lock
generated
Normal file
@ -0,0 +1,49 @@
|
||||
# This file is automatically @generated by Cargo.
|
||||
# It is not intended for manual editing.
|
||||
version = 3
|
||||
|
||||
[[package]]
|
||||
name = "aho-corasick"
|
||||
version = "0.7.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f"
|
||||
dependencies = [
|
||||
"memchr",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "features"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"regex",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "libc"
|
||||
version = "0.2.112"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1b03d17f364a3a042d5e5d46b053bbbf82c92c9430c592dd4c064dc6ee997125"
|
||||
|
||||
[[package]]
|
||||
name = "memchr"
|
||||
version = "2.4.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a"
|
||||
|
||||
[[package]]
|
||||
name = "regex"
|
||||
version = "1.5.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461"
|
||||
dependencies = [
|
||||
"aho-corasick",
|
||||
"memchr",
|
||||
"regex-syntax",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "regex-syntax"
|
||||
version = "0.6.25"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b"
|
13
tests/features/features/Cargo.toml
Normal file
13
tests/features/features/Cargo.toml
Normal file
@ -0,0 +1,13 @@
|
||||
[package]
|
||||
name = "features"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
[features]
|
||||
default = []
|
||||
foo = ["libc"]
|
||||
bar = ["regex"]
|
||||
|
||||
[dependencies]
|
||||
libc = { version = "*", optional = true }
|
||||
regex = { version = "*", optional = true }
|
Loading…
Reference in New Issue
Block a user