
The biggest benefit is that we no longer have to update the registry package. This means that just about any cargo package can be built by nix. No longer does `cargo update` need to be feared because it will update to packages newer then what is available in nixpkgs. Instead of fetching the cargo registry this bundles all the source code into a "vendor/" folder. This also uses the new --frozen and --locked flags which is nice. Currently cargo-vendor only provides binaries for Linux and macOS 64-bit. This can be solved by building it for the other architectures and uploading it somewhere (like the NixOS cache). This also has the downside that it requires a change to everyone's deps hash. And if the old one is used because it was cached it will fail to build as it will attempt to use the old version. For this reason the attribute has been renamed to `cargoSha256`. Authors: * Kevin Cox <kevincox@kevincox.ca> * Jörg Thalheim <Mic92@users.noreply.github.com> * zimbatm <zimbatm@zimbatm.com>
59 lines
1.8 KiB
Nix
59 lines
1.8 KiB
Nix
{ stdenv, fetchFromGitHub, file, curl, pkgconfig, python, openssl, cmake, zlib
|
|
, makeWrapper, libiconv, cacert, rustPlatform, rustc, libgit2
|
|
, version, srcSha, cargoSha256
|
|
, patches ? []}:
|
|
|
|
rustPlatform.buildRustPackage rec {
|
|
name = "cargo-${version}";
|
|
inherit version;
|
|
|
|
src = fetchFromGitHub {
|
|
owner = "rust-lang";
|
|
repo = "cargo";
|
|
rev = version;
|
|
sha256 = srcSha;
|
|
};
|
|
|
|
inherit cargoSha256;
|
|
inherit patches;
|
|
|
|
passthru.rustc = rustc;
|
|
|
|
nativeBuildInputs = [ pkgconfig ];
|
|
buildInputs = [ file curl python openssl cmake zlib makeWrapper libgit2 ]
|
|
++ stdenv.lib.optionals stdenv.isDarwin [ libiconv ];
|
|
|
|
LIBGIT2_SYS_USE_PKG_CONFIG=1;
|
|
|
|
postInstall = ''
|
|
# NOTE: We override the `http.cainfo` option usually specified in
|
|
# `.cargo/config`. This is an issue when users want to specify
|
|
# their own certificate chain as environment variables take
|
|
# precedence
|
|
wrapProgram "$out/bin/cargo" \
|
|
--suffix PATH : "${rustc}/bin" \
|
|
--set CARGO_HTTP_CAINFO "${cacert}/etc/ssl/certs/ca-bundle.crt" \
|
|
--set SSL_CERT_FILE "${cacert}/etc/ssl/certs/ca-bundle.crt" \
|
|
${stdenv.lib.optionalString stdenv.isDarwin ''--suffix DYLD_LIBRARY_PATH : "${rustc}/lib"''}
|
|
'';
|
|
|
|
checkPhase = ''
|
|
# Export SSL_CERT_FILE as without it one test fails with SSL verification error
|
|
export SSL_CERT_FILE=${cacert}/etc/ssl/certs/ca-bundle.crt
|
|
# Disable cross compilation tests
|
|
export CFG_DISABLE_CROSS_TESTS=1
|
|
cargo test
|
|
'';
|
|
|
|
# Disable check phase as there are failures (4 tests fail)
|
|
doCheck = false;
|
|
|
|
meta = with stdenv.lib; {
|
|
homepage = https://crates.io;
|
|
description = "Downloads your Rust project's dependencies and builds your project";
|
|
maintainers = with maintainers; [ wizeman retrry ];
|
|
license = [ licenses.mit licenses.asl20 ];
|
|
platforms = platforms.linux ++ platforms.darwin;
|
|
};
|
|
}
|