From d6a8b55fb0fd9f41f3c83982a5e3a7b7d7a4f01f Mon Sep 17 00:00:00 2001 From: Andreas Rammhold Date: Tue, 21 Jan 2020 17:22:59 +0100 Subject: [PATCH 1/3] buildRustCrate: treat `rlib` crates just like `lib` crates Both version provide `rlib` files to link against. Previously we would try to find a matching shared library in the `lib` output. --- pkgs/build-support/rust/build-rust-crate/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/build-support/rust/build-rust-crate/default.nix b/pkgs/build-support/rust/build-rust-crate/default.nix index 2885b2aef51..569b48d25ae 100644 --- a/pkgs/build-support/rust/build-rust-crate/default.nix +++ b/pkgs/build-support/rust/build-rust-crate/default.nix @@ -23,7 +23,7 @@ let lib.strings.replaceStrings ["-"] ["_"] crateRenames.${dep.crateName} else extern; - in (if lib.any (x: x == "lib") dep.crateType then + in (if lib.any (x: x == "lib" || x == "rlib") dep.crateType then " --extern ${name}=${dep.lib}/lib/lib${extern}-${dep.metadata}.rlib" else " --extern ${name}=${dep.lib}/lib/lib${extern}-${dep.metadata}${stdenv.hostPlatform.extensions.sharedLibrary}") From 406e0c9d511311a8892dffe94ab7198e5e46b2b8 Mon Sep 17 00:00:00 2001 From: Andreas Rammhold Date: Tue, 21 Jan 2020 17:32:48 +0100 Subject: [PATCH 2/3] buildRustCrateTests: fix some formatting issues --- .../rust/build-rust-crate/test/default.nix | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/pkgs/build-support/rust/build-rust-crate/test/default.nix b/pkgs/build-support/rust/build-rust-crate/test/default.nix index aefa279fc5e..1379854d0c1 100644 --- a/pkgs/build-support/rust/build-rust-crate/test/default.nix +++ b/pkgs/build-support/rust/build-rust-crate/test/default.nix @@ -1,17 +1,17 @@ { lib, buildRustCrate, runCommand, writeTextFile, symlinkJoin, callPackage, releaseTools }: let mkCrate = args: let - p = { - crateName = "nixtestcrate"; - version = "0.1.0"; - authors = [ "Test " ]; - } // args; - in buildRustCrate p; + p = { + crateName = "nixtestcrate"; + version = "0.1.0"; + authors = [ "Test " ]; + } // args; + in buildRustCrate p; - mkFile = destination: text: writeTextFile { - name = "src"; - destination = "/${destination}"; - inherit text; + mkFile = destination: text: writeTextFile { + name = "src"; + destination = "/${destination}"; + inherit text; }; mkBin = name: mkFile name '' From 78faab1be0f1e7eaba38aed5627921fc7c000401 Mon Sep 17 00:00:00 2001 From: Andreas Rammhold Date: Tue, 21 Jan 2020 17:33:01 +0100 Subject: [PATCH 3/3] buildRustCrateTests: add test case for rlib linking --- .../rust/build-rust-crate/test/default.nix | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/pkgs/build-support/rust/build-rust-crate/test/default.nix b/pkgs/build-support/rust/build-rust-crate/test/default.nix index 1379854d0c1..cdffb30d9b3 100644 --- a/pkgs/build-support/rust/build-rust-crate/test/default.nix +++ b/pkgs/build-support/rust/build-rust-crate/test/default.nix @@ -185,7 +185,20 @@ let "test tests_bar ... ok" ]; }; - + linkAgainstRlibCrate = { + crateName = "foo"; + src = mkFile "src/main.rs" '' + extern crate somerlib; + fn main() {} + ''; + dependencies = [ + (mkCrate { + crateName = "somerlib"; + type = [ "rlib" ]; + src = mkLib "src/lib.rs"; + }) + ]; + }; }; brotliCrates = (callPackage ./brotli-crates.nix {}); in lib.mapAttrs (key: value: mkTest (value // lib.optionalAttrs (!value?crateName) { crateName = key; })) cases // {