Skip to content

Commit 856936a

Browse files
committed
buildRustCrate: add libiconv to nativeBuildInputs on darwin
Fixes linker errors while building build.rs where it tries to link libiconv but cannot find it. Rust executable build for Darwin need libiconv, and indeed buildInputs already has this case handled. So why is another change needed? Suppose we are cross compiling from Darwin (the build platform) to something else, and the package has a build.rs build script. The build script is built for the build platform (Darwin) and is also a regular Rust executable, needing libiconv, but due to cross compilation (and strict deps) we need an extra nativeBuildInput.
1 parent 3d57138 commit 856936a

1 file changed

Lines changed: 3 additions & 1 deletion

File tree

pkgs/build-support/rust/build-rust-crate/default.nix

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,9 @@ crate_: lib.makeOverridable
276276
name = "rust_${crate.crateName}-${crate.version}${lib.optionalString buildTests_ "-test"}";
277277
version = crate.version;
278278
depsBuildBuild = [ pkgsBuildBuild.stdenv.cc ];
279-
nativeBuildInputs = [ rust stdenv.cc cargo jq ] ++ (crate.nativeBuildInputs or [ ]) ++ nativeBuildInputs_;
279+
nativeBuildInputs = [ rust stdenv.cc cargo jq ]
280+
++ lib.optionals stdenv.buildPlatform.isDarwin [ libiconv ]
281+
++ (crate.nativeBuildInputs or [ ]) ++ nativeBuildInputs_;
280282
buildInputs = lib.optionals stdenv.isDarwin [ libiconv ] ++ (crate.buildInputs or [ ]) ++ buildInputs_;
281283
dependencies = map lib.getLib dependencies_;
282284
buildDependencies = map lib.getLib buildDependencies_;

0 commit comments

Comments
 (0)