mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-01-24 13:53:24 +00:00
79156bf13a
Previously, when cross compiling from non-musl to musl, the crt-static default override wouldn't be applied, because the compiler wouldn't have been built with it due to fastCross. Moving it to the wrapper fixes this without having to introduce extra compiler rebuilds. And because the wrapper is applied even to the bootstrap rustc, we no longer need special handling of crt-static in the Cargo expression. Unlike --sysroot, rustc allows -C target-feature= to be passed multiple times, with later instances taking precedence over earlier ones. This means that it's very easy to set the default in the wrapper, just by our overridden default before any other arguments. This fixes pkgsCross.aarch64-multiplatform-musl.mesa from x86_64-linux.
85 lines
2.6 KiB
Nix
85 lines
2.6 KiB
Nix
{ lib, stdenv, pkgsBuildHost, pkgsHostHost
|
|
, file, curl, pkg-config, python3, openssl, cmake, zlib
|
|
, installShellFiles, makeWrapper, rustPlatform, rustc
|
|
, CoreFoundation, Security
|
|
, auditable ? !cargo-auditable.meta.broken
|
|
, cargo-auditable
|
|
, pkgsBuildBuild
|
|
}:
|
|
|
|
rustPlatform.buildRustPackage.override {
|
|
cargo-auditable = cargo-auditable.bootstrap;
|
|
} ({
|
|
pname = "cargo";
|
|
inherit (rustc.unwrapped) version src;
|
|
|
|
# the rust source tarball already has all the dependencies vendored, no need to fetch them again
|
|
cargoVendorDir = "vendor";
|
|
buildAndTestSubdir = "src/tools/cargo";
|
|
|
|
inherit auditable;
|
|
|
|
passthru = {
|
|
rustc = rustc;
|
|
inherit (rustc.unwrapped) tests;
|
|
};
|
|
|
|
# changes hash of vendor directory otherwise
|
|
dontUpdateAutotoolsGnuConfigScripts = true;
|
|
|
|
nativeBuildInputs = [
|
|
pkg-config cmake installShellFiles makeWrapper
|
|
(lib.getDev pkgsHostHost.curl)
|
|
zlib
|
|
];
|
|
buildInputs = [ file curl python3 openssl zlib ]
|
|
++ lib.optionals stdenv.isDarwin [ CoreFoundation Security ];
|
|
|
|
# cargo uses git-rs which is made for a version of libgit2 from recent master that
|
|
# is not compatible with the current version in nixpkgs.
|
|
#LIBGIT2_SYS_USE_PKG_CONFIG = 1;
|
|
|
|
# fixes: the cargo feature `edition` requires a nightly version of Cargo, but this is the `stable` channel
|
|
RUSTC_BOOTSTRAP = 1;
|
|
|
|
postInstall = ''
|
|
wrapProgram "$out/bin/cargo" --suffix PATH : "${rustc}/bin"
|
|
|
|
installManPage src/tools/cargo/src/etc/man/*
|
|
|
|
installShellCompletion --bash --name cargo \
|
|
src/tools/cargo/src/etc/cargo.bashcomp.sh
|
|
|
|
installShellCompletion --zsh src/tools/cargo/src/etc/_cargo
|
|
'';
|
|
|
|
checkPhase = ''
|
|
# Disable cross compilation tests
|
|
export CFG_DISABLE_CROSS_TESTS=1
|
|
cargo test
|
|
'';
|
|
|
|
# Disable check phase as there are failures (4 tests fail)
|
|
doCheck = false;
|
|
|
|
doInstallCheck = !stdenv.hostPlatform.isStatic && stdenv.hostPlatform.isElf;
|
|
installCheckPhase = ''
|
|
runHook preInstallCheck
|
|
readelf -a $out/bin/.cargo-wrapped | grep -F 'Shared library: [libcurl.so'
|
|
runHook postInstallCheck
|
|
'';
|
|
|
|
meta = with lib; {
|
|
homepage = "https://crates.io";
|
|
description = "Downloads your Rust project's dependencies and builds your project";
|
|
maintainers = teams.rust.members;
|
|
license = [ licenses.mit licenses.asl20 ];
|
|
platforms = platforms.unix;
|
|
# https://github.com/alexcrichton/nghttp2-rs/issues/2
|
|
broken = stdenv.hostPlatform.isx86 && stdenv.buildPlatform != stdenv.hostPlatform;
|
|
};
|
|
}
|
|
// lib.optionalAttrs (stdenv.buildPlatform.rust.rustcTarget != stdenv.hostPlatform.rust.rustcTarget) {
|
|
HOST_PKG_CONFIG_PATH="${pkgsBuildBuild.pkg-config}/bin/pkg-config";
|
|
})
|