about summary refs log tree commit diff
path: root/pkgs/development/compilers/rust/rustfmt.nix
blob: 62a6ccbbef17a569e4832a398a42826faf5d3d74 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
{ stdenv, rustPlatform, rustc, Security }:

rustPlatform.buildRustPackage rec {
  name = "rustfmt-${version}";
  inherit (rustc) version src;

  # the rust source tarball already has all the dependencies vendored, no need to fetch them again
  cargoVendorDir = "vendor";
  preBuild = "pushd src/tools/rustfmt";
  postBuild = "popd";

  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 tool for formatting Rust code according to style guidelines";
    homepage = https://github.com/rust-lang-nursery/rustfmt;
    license = with licenses; [ mit asl20 ];
    maintainers = with maintainers; [ globin basvandijk ];
    platforms = platforms.all;
  };
}