Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
93 changes: 68 additions & 25 deletions pkgs/development/tools/rust/cargo-llvm-cov/default.nix
Original file line number Diff line number Diff line change
@@ -1,36 +1,76 @@
# If the tests are broken, it's probably for one of two reasons:
#
# 1. The version of llvm used doesn't match the expectations of rustc and/or
# cargo-llvm-cov. This is relatively unlikely because we pull llvm out of
# rustc's attrset, so it *should* be the right version as long as this is the
# case.
# 2. Nixpkgs has changed its rust infrastructure in a way that causes
# cargo-llvm-cov to misbehave under test. It's likely that even though the
# tests are failing, cargo-llvm-cov will still function properly in actual
# use. This has happened before, and is described [here][0] (along with a
# feature request that would fix this instance of the problem).
#
# For previous test-troubleshooting discussion, see [here][1].
#
# [0]: https://github.com/taiki-e/cargo-llvm-cov/issues/242
# [1]: https://github.com/NixOS/nixpkgs/pull/197478

{ stdenv
, lib
, fetchCrate
, fetchurl
, fetchFromGitHub
, rustPlatform
, rustc
}:

rustPlatform.buildRustPackage rec {
let
pname = "cargo-llvm-cov";
version = "0.5.31";

src = fetchCrate {
inherit pname version;
sha256 = "sha256-HjnP9H1t660PJ5eXzgAhrdDEgqdzzb+9Dbk5RGUPjaQ=";
owner = "taiki-e";
homepage = "https://github.com/${owner}/${pname}";

llvm = rustc.llvmPackages.llvm;

# Download `Cargo.lock` from crates.io so we don't clutter up Nixpkgs
cargoLock = fetchurl {
name = "Cargo.lock";
url = "https://crates.io/api/v1/crates/${pname}/${version}/download";
sha256 = "sha256-BbrdyJgZSIz6GaTdQv1GiFHufRBSbcoHcqqEmr/HvAM=";
downloadToTemp = true;
postFetch = ''
tar xzf $downloadedFile ${pname}-${version}/Cargo.lock
mv ${pname}-${version}/Cargo.lock $out
'';
};
in

rustPlatform.buildRustPackage {
inherit pname version;

# Use `fetchFromGitHub` instead of `fetchCrate` because the latter does not
# pull in fixtures needed for the test suite
src = fetchFromGitHub {
inherit owner;
repo = pname;
rev = "v${version}";
sha256 = "sha256-wRo94JVn4InkhrMHFSsEvm2FFIxUsltA57sMMOcL8b0=";
};
cargoSha256 = "sha256-p6zpRRNX4g+jESNSwouWMjZlFhTBFJhe7LirYtFrZ1g=";

# skip tests which require llvm-tools-preview
checkFlags = [
"--skip bin_crate"
"--skip cargo_config"
"--skip clean_ws"
"--skip instantiations"
"--skip merge"
"--skip merge_failure_mode_all"
"--skip no_test"
"--skip open_report"
"--skip real1"
"--skip show_env"
"--skip virtual1"
];

meta = rec {
homepage = "https://github.com/taiki-e/${pname}";

# Upstream doesn't include the lockfile so we need to add it back
postUnpack = ''
cp ${cargoLock} source/Cargo.lock
'';

cargoSha256 = "sha256-XcsognndhHenYnlJCNMbrNh+S8FX7qxXUjuV1j2qsmY=";

# `cargo-llvm-cov` reads these environment variables to find these binaries,
# which are needed to run the tests
LLVM_COV = "${llvm}/bin/llvm-cov";
LLVM_PROFDATA = "${llvm}/bin/llvm-profdata";

meta = {
inherit homepage;
changelog = homepage + "/blob/v${version}/CHANGELOG.md";
description = "Cargo subcommand to easily use LLVM source-based code coverage";
longDescription = ''
Expand All @@ -39,6 +79,9 @@ rustPlatform.buildRustPackage rec {
library (e.g. fenix or rust-overlay)
'';
license = with lib.licenses; [ asl20 /* or */ mit ];
maintainers = with lib.maintainers; [ wucke13 matthiasbeyer ];
maintainers = with lib.maintainers; [ wucke13 matthiasbeyer CobaltCause ];

# The profiler runtime is (currently) disabled on non-Linux platforms
broken = !(stdenv.isLinux && !stdenv.targetPlatform.isRedox);
};
}