summary refs log tree commit diff
diff options
context:
space:
mode:
authorJavier Olaechea <pirata@gmail.com>2023-05-10 00:04:31 -0500
committerWinter <winter@winter.cafe>2023-05-12 18:44:20 -0400
commitdd584d82f131a33b50e775853b22e87c363b2ade (patch)
tree0017f2fcd7de3abdd561a0b8c1ac1c02c2660e64
parentd6259e6e5daf6ca16083bf7366f93d48f4746931 (diff)
downloadnixpkgs-dd584d82f131a33b50e775853b22e87c363b2ade.tar
nixpkgs-dd584d82f131a33b50e775853b22e87c363b2ade.tar.gz
nixpkgs-dd584d82f131a33b50e775853b22e87c363b2ade.tar.bz2
nixpkgs-dd584d82f131a33b50e775853b22e87c363b2ade.tar.lz
nixpkgs-dd584d82f131a33b50e775853b22e87c363b2ade.tar.xz
nixpkgs-dd584d82f131a33b50e775853b22e87c363b2ade.tar.zst
nixpkgs-dd584d82f131a33b50e775853b22e87c363b2ade.zip
rustfmt: fix on darwin
Reading this [rust-issue] it seems that we have to link against
rustc_driver. The [clippy.nix] expression already does something similar

Of the 4 executables found in the result of building rustfmt only
rustfmt and git-rustfmt needed to be linked. The other worked without
linking to rustc_driver.

[rust-issue]: https://github.com/rust-lang/rust/pull/105609
[clippy.nix]: https://github.com/NixOS/nixpkgs/blob/c8cf570dae9b41f30395b71f9b432418b4ff0ebc/pkgs/development/compilers/rust/clippy.nix#L27-L36
-rw-r--r--pkgs/development/compilers/rust/rustfmt.nix11
1 files changed, 11 insertions, 0 deletions
diff --git a/pkgs/development/compilers/rust/rustfmt.nix b/pkgs/development/compilers/rust/rustfmt.nix
index 4bee49eff5a..a1e16b354cc 100644
--- a/pkgs/development/compilers/rust/rustfmt.nix
+++ b/pkgs/development/compilers/rust/rustfmt.nix
@@ -15,6 +15,17 @@ rustPlatform.buildRustPackage rec {
     rustc.llvm
   ] ++ lib.optional stdenv.isDarwin Security;
 
+  # rustfmt uses the rustc_driver and std private libraries, and Rust's build process forces them to have
+  # an install name of `@rpath/...` [0] [1] instead of the standard on macOS, which is an absolute path
+  # to itself.
+  #
+  # [0]: https://github.com/rust-lang/rust/blob/f77f4d55bdf9d8955d3292f709bd9830c2fdeca5/src/bootstrap/builder.rs#L1543
+  # [1]: https://github.com/rust-lang/rust/blob/f77f4d55bdf9d8955d3292f709bd9830c2fdeca5/compiler/rustc_codegen_ssa/src/back/linker.rs#L323-L331
+  preFixup = lib.optionalString stdenv.isDarwin ''
+    install_name_tool -add_rpath "${rustPlatform.rust.rustc}/lib" "$out/bin/rustfmt"
+    install_name_tool -add_rpath "${rustPlatform.rust.rustc}/lib" "$out/bin/git-rustfmt"
+  '';
+
   # As of 1.0.0 and rustc 1.30 rustfmt requires a nightly compiler
   RUSTC_BOOTSTRAP = 1;