diff options
author | Katharina Fey <kookie@spacekookie.de> | 2019-10-18 16:32:00 +0000 |
---|---|---|
committer | Katharina Fey <kookie@spacekookie.de> | 2019-10-18 16:32:00 +0000 |
commit | 0f74f62ee25ac2d21bd67c29b8efc3ad079a72a8 (patch) | |
tree | bd701e982d896952f4291e4b795c85bb581593b8 /nixpkgs/pkgs/build-support/rust | |
parent | dae1ae41b3a575e87d411e0cd9daa42a85c5aa89 (diff) | |
parent | 1c40ee6fc44f7eb474c69ea070a43247a1a2c83c (diff) |
Merge commit '1c40ee6fc44f7eb474c69ea070a43247a1a2c83c'
Diffstat (limited to 'nixpkgs/pkgs/build-support/rust')
-rw-r--r-- | nixpkgs/pkgs/build-support/rust/build-rust-crate/configure-crate.nix | 3 | ||||
-rw-r--r-- | nixpkgs/pkgs/build-support/rust/default.nix | 19 | ||||
-rw-r--r-- | nixpkgs/pkgs/build-support/rust/fetchcargo.nix | 18 |
3 files changed, 37 insertions, 3 deletions
diff --git a/nixpkgs/pkgs/build-support/rust/build-rust-crate/configure-crate.nix b/nixpkgs/pkgs/build-support/rust/build-rust-crate/configure-crate.nix index 2a40240671c..2c7226b0962 100644 --- a/nixpkgs/pkgs/build-support/rust/build-rust-crate/configure-crate.nix +++ b/nixpkgs/pkgs/build-support/rust/build-rust-crate/configure-crate.nix @@ -21,7 +21,7 @@ , workspace_member }: let version_ = lib.splitString "-" crateVersion; versionPre = if lib.tail version_ == [] then "" else builtins.elemAt version_ 1; - version = lib.splitString "." (lib.head version_); + version = lib.splitVersion (lib.head version_); rustcOpts = lib.lists.foldl' (opts: opt: opts + " " + opt) (if release then "-C opt-level=3" else "-C debuginfo=2") (["-C codegen-units=$NIX_BUILD_CORES"] ++ extraRustcOpts); @@ -150,4 +150,3 @@ in '' fi runHook postConfigure '' - diff --git a/nixpkgs/pkgs/build-support/rust/default.nix b/nixpkgs/pkgs/build-support/rust/default.nix index 4634d32f6ac..27601e481c6 100644 --- a/nixpkgs/pkgs/build-support/rust/default.nix +++ b/nixpkgs/pkgs/build-support/rust/default.nix @@ -13,6 +13,9 @@ , cargoUpdateHook ? "" , cargoDepsHook ? "" , cargoBuildFlags ? [] +, # Set to true to verify if the cargo dependencies are up to date. + # This will change the value of cargoSha256. + verifyCargoDeps ? false , buildType ? "release" , meta ? {} @@ -26,6 +29,7 @@ let cargoDeps = if cargoVendorDir == null then fetchcargo { inherit name src srcs sourceRoot cargoUpdateHook; + copyLockfile = verifyCargoDeps; patches = cargoPatches; sha256 = cargoSha256; } @@ -95,6 +99,21 @@ stdenv.mkDerivation (args // { unset cargoDepsCopy export RUST_LOG=${logLevel} + '' + stdenv.lib.optionalString verifyCargoDeps '' + if ! diff source/Cargo.lock $cargoDeps/Cargo.lock ; then + echo + echo "ERROR: cargoSha256 is out of date." + echo + echo "Cargo.lock is not the same in $cargoDeps." + echo + echo "To fix the issue:" + echo '1. Use "1111111111111111111111111111111111111111111111111111" as the cargoSha256 value' + echo "2. Build the derivation and wait it to fail with a hash mismatch" + echo "3. Copy the 'got: sha256:' value back into the cargoSha256 field" + echo + + exit 1 + fi '' + (args.postUnpack or ""); configurePhase = args.configurePhase or '' diff --git a/nixpkgs/pkgs/build-support/rust/fetchcargo.nix b/nixpkgs/pkgs/build-support/rust/fetchcargo.nix index bc80db0947b..a515ce9c6eb 100644 --- a/nixpkgs/pkgs/build-support/rust/fetchcargo.nix +++ b/nixpkgs/pkgs/build-support/rust/fetchcargo.nix @@ -17,7 +17,16 @@ let cargo-vendor-normalise = stdenv.mkDerivation { preferLocalBuild = true; }; in -{ name ? "cargo-deps", src, srcs, patches, sourceRoot, sha256, cargoUpdateHook ? "" }: +{ name ? "cargo-deps" +, src +, srcs +, patches +, sourceRoot +, sha256 +, cargoUpdateHook ? "" +, # whenever to also include the Cargo.lock in the output + copyLockfile ? false +}: stdenv.mkDerivation { name = "${name}-vendor"; nativeBuildInputs = [ cacert git cargo-vendor-normalise cargo ]; @@ -37,6 +46,9 @@ stdenv.mkDerivation { exit 1 fi + # Keep the original around for copyLockfile + cp Cargo.lock Cargo.lock.orig + export CARGO_HOME=$(mktemp -d cargo-home.XXX) CARGO_CONFIG=$(mktemp cargo-config.XXXX) @@ -52,6 +64,10 @@ stdenv.mkDerivation { if ! cmp $CARGO_CONFIG ${./fetchcargo-default-config.toml} > /dev/null; then install -D $CARGO_CONFIG $out/.cargo/config; fi; + + '' + stdenv.lib.optionalString copyLockfile '' + # add the Cargo.lock to allow hash invalidation + cp Cargo.lock.orig $out/Cargo.lock ''; outputHashAlgo = "sha256"; |