summaryrefslogtreecommitdiffstats
path: root/pkgs/build-support/rust
diff options
context:
space:
mode:
authorAndreas Rammhold <andreas@rammhold.de>2020-03-28 16:02:51 +0100
committerGitHub <noreply@github.com>2020-03-28 16:02:51 +0100
commitd86bfec309585d91615e518f4a289a8a65c4cee3 (patch)
tree8607448c8eeec7b04a6fdc8d41e01d8d02188709 /pkgs/build-support/rust
parentce1695ace7787af537189384acd025cf160e2832 (diff)
parent2f7fb1c49732105c8937b66b7d92402c04546073 (diff)
Merge pull request #83379 from symphorien/rust-link
buildRustCrate: don't sort link flags
Diffstat (limited to 'pkgs/build-support/rust')
-rw-r--r--pkgs/build-support/rust/build-rust-crate/configure-crate.nix2
-rw-r--r--pkgs/build-support/rust/build-rust-crate/lib.sh5
-rw-r--r--pkgs/build-support/rust/build-rust-crate/test/default.nix54
3 files changed, 54 insertions, 7 deletions
diff --git a/pkgs/build-support/rust/build-rust-crate/configure-crate.nix b/pkgs/build-support/rust/build-rust-crate/configure-crate.nix
index 61c39c6b21c0..ed8100537090 100644
--- a/pkgs/build-support/rust/build-rust-crate/configure-crate.nix
+++ b/pkgs/build-support/rust/build-rust-crate/configure-crate.nix
@@ -172,7 +172,7 @@ in ''
set +e
EXTRA_BUILD=$(sed -n "s/^cargo:rustc-flags=\(.*\)/\1/p" target/build/${crateName}.opt | tr '\n' ' ' | sort -u)
EXTRA_FEATURES=$(sed -n "s/^cargo:rustc-cfg=\(.*\)/--cfg \1/p" target/build/${crateName}.opt | tr '\n' ' ')
- EXTRA_LINK=$(sed -n "s/^cargo:rustc-link-lib=\(.*\)/\1/p" target/build/${crateName}.opt | tr '\n' ' ' | sort -u)
+ EXTRA_LINK=$(sed -n "s/^cargo:rustc-link-lib=\(.*\)/\1/p" target/build/${crateName}.opt | tr '\n' ' ')
EXTRA_LINK_SEARCH=$(sed -n "s/^cargo:rustc-link-search=\(.*\)/\1/p" target/build/${crateName}.opt | tr '\n' ' ' | sort -u)
for env in $(sed -n "s/^cargo:rustc-env=\(.*\)/\1/p" target/build/${crateName}.opt); do
diff --git a/pkgs/build-support/rust/build-rust-crate/lib.sh b/pkgs/build-support/rust/build-rust-crate/lib.sh
index 5843ee98b0d5..6cf3481754b2 100644
--- a/pkgs/build-support/rust/build-rust-crate/lib.sh
+++ b/pkgs/build-support/rust/build-rust-crate/lib.sh
@@ -105,11 +105,6 @@ setup_link_paths() {
done
if [[ -e target/link ]]; then
- sort -u target/link.final > target/link.final.sorted
- mv target/link.final.sorted target/link.final
- sort -u target/link > target/link.sorted
- mv target/link.sorted target/link
-
tr '\n' ' ' < target/link > target/link_
LINK=$(cat target/link_)
fi
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 f24583c41fcb..2251a1b40f2e 100644
--- a/pkgs/build-support/rust/build-rust-crate/test/default.nix
+++ b/pkgs/build-support/rust/build-rust-crate/test/default.nix
@@ -1,4 +1,4 @@
-{ lib, buildRustCrate, runCommand, writeTextFile, symlinkJoin, callPackage, releaseTools }:
+{ lib, buildRustCrate, runCommand, runCommandCC, writeTextFile, symlinkJoin, callPackage, releaseTools }:
let
mkCrate = args: let
p = {
@@ -258,6 +258,58 @@ let
];
};
};
+ # Regression test for https://github.com/NixOS/nixpkgs/pull/83379
+ # link flag order should be preserved
+ linkOrder = {
+ src = symlinkJoin {
+ name = "buildrs-out-dir-overlay";
+ paths = [
+ (mkFile "build.rs" ''
+ fn main() {
+ // in the other order, linkage will fail
+ println!("cargo:rustc-link-lib=b");
+ println!("cargo:rustc-link-lib=a");
+ }
+ '')
+ (mkFile "src/main.rs" ''
+ extern "C" {
+ fn hello_world();
+ }
+ fn main() {
+ unsafe {
+ hello_world();
+ }
+ }
+ '')
+ ];
+ };
+ buildInputs = let
+ compile = name: text: runCommandCC name {} ''
+ mkdir -p $out/lib
+ $CC -shared -o $out/lib/${name}.so ${writeTextFile {
+ name = "${name}-src.c";
+ inherit text;
+ }}
+ '';
+ b = compile "libb" ''
+ #include <stdio.h>
+
+ void hello();
+
+ void hello_world() {
+ hello();
+ printf(" world!\n");
+ }
+ '';
+ a = compile "liba" ''
+ #include <stdio.h>
+
+ void hello() {
+ printf("hello");
+ }
+ '';
+ in [ a b ];
+ };
rustCargoTomlInSubDir = {
# The "workspace_member" can be set to the sub directory with the crate to build.
# By default ".", meaning the top level directory is assumed.