From 4e0012037c32d3f667223de84232af31e96dba7c Mon Sep 17 00:00:00 2001 From: Javier Olaechea Date: Wed, 10 May 2023 00:04:31 -0500 Subject: [PATCH] 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 --- pkgs/development/compilers/rust/rustfmt.nix | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/pkgs/development/compilers/rust/rustfmt.nix b/pkgs/development/compilers/rust/rustfmt.nix index 1ff36e71e82babd..98f5969887f5bc1 100644 --- a/pkgs/development/compilers/rust/rustfmt.nix +++ b/pkgs/development/compilers/rust/rustfmt.nix @@ -15,6 +15,17 @@ rustPlatform.buildRustPackage rec { rustPlatform.rust.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;