2019-08-16 12:26:51 +02:00
{ stdenv , rustPlatform , rustc , Security }:
rustPlatform . buildRustPackage rec {
name = " r u s t f m t - ${ version } " ;
inherit ( rustc ) version src ;
# the rust source tarball already has all the dependencies vendored, no need to fetch them again
cargoVendorDir = " v e n d o r " ;
preBuild = " p u s h d s r c / t o o l s / r u s t f m t " ;
2019-08-19 12:54:40 +02:00
preInstall = " p o p d " ;
2019-08-16 12:26:51 +02:00
buildInputs = stdenv . lib . optional stdenv . isDarwin Security ;
# As of 1.0.0 and rustc 1.30 rustfmt requires a nightly compiler
RUSTC_BOOTSTRAP = 1 ;
# Without disabling the test the build fails with:
#
# Compiling rustc_llvm v0.0.0 (/private/tmp/nix-build-rustfmt-1.36.0.drv-0/rustc-1.36.0-src/src/librustc_llvm)
# ...
# error: failed to run custom build command for `rustc_llvm v0.0.0
# (/private/tmp/nix-build-rustfmt-1.36.0.drv-0/rustc-1.36.0-src/src/librustc_llvm)`
#
# Caused by:
# process didn't exit successfully:
# `/private/tmp/nix-build-rustfmt-1.36.0.drv-0/rustc-1.36.0-src/target/debug/build/rustc_llvm-4d3eb1eff32fd46b/build-script-build` (exit code: 101)
# --- stdout
# cargo:rerun-if-env-changed=REAL_LIBRARY_PATH_VAR
# cargo:rerun-if-env-changed=REAL_LIBRARY_PATH
#
# --- stderr
# thread 'main' panicked at 'REAL_LIBRARY_PATH_VAR', src/libcore/option.rs:1036:5
# note: Run with `RUST_BACKTRACE=1` environment variable to display a backtrace.
#
# Setting the following:
#
# # This mimics https://github.com/rust-lang/rust/blob/1.36.0/src/bootstrap/util.rs#L58:L70
# REAL_LIBRARY_PATH_VAR =
# if stdenv.isDarwin then "DYLD_LIBRARY_PATH"
# else "LD_LIBRARY_PATH";
#
# Results in:
#
# Compiling rustc_llvm v0.0.0 (/private/tmp/nix-build-rustfmt-1.36.0.drv-0/rustc-1.36.0-src/src/librustc_llvm)
# ...
# error: failed to run custom build command for `rustc_llvm v0.0.0 (/private/tmp/nix-build-rustfmt-1.36.0.drv-0/rustc-1.36.0-src/src/librustc_llvm)`
#
# Caused by:
# process didn't exit successfully: `/private/tmp/nix-build-rustfmt-1.36.0.drv-0/rustc-1.36.0-src/target/debug/build/rustc_llvm-4d3eb1eff32fd46b/build-script-build` (exit code: 1)
# --- stdout
# cargo:rerun-if-env-changed=REAL_LIBRARY_PATH_VAR
# cargo:rerun-if-env-changed=REAL_LIBRARY_PATH
# cargo:rerun-if-changed=llvm-config
# cargo:rerun-if-env-changed=LLVM_CONFIG
#
#
# failed to execute command: "llvm-config" "--version"
# error: No such file or directory (os error 2)
#
# Adding `llvmSharedForBuild` to rustc's `passthru` and adding
# `rustc.llvmSharedForBuild` to the `buildInputs` fixes this but then the
# build fails lateron with:
#
# Compiling rustc_llvm v0.0.0 (/private/tmp/nix-build-rustfmt-1.36.0.drv-0/rustc-1.36.0-src/src/librustc_llvm)
# ...
# error[E0658]: use of unstable library feature 'rustc_private': this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via `Cargo.toml` instead?
# --> src/librustc_llvm/lib.rs:9:1
# |
# 9 | extern crate rustc_cratesio_shim;
# | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
# |
# = note: for more information, see https://github.com/rust-lang/rust/issues/27812
# = help: add #![feature(rustc_private)] to the crate attributes to enable
#
# error: aborting due to previous error
#
# For more information about this error, try `rustc --explain E0658`.
#
# error: Could not compile `rustc_llvm`.
doCheck = false ;
meta = with stdenv . lib ; {
description = " A t o o l f o r f o r m a t t i n g R u s t c o d e a c c o r d i n g t o s t y l e g u i d e l i n e s " ;
homepage = https://github.com/rust-lang-nursery/rustfmt ;
license = with licenses ; [ mit asl20 ] ;
maintainers = with maintainers ; [ globin basvandijk ] ;
platforms = platforms . all ;
} ;
}