aboutsummaryrefslogtreecommitdiffstats
path: root/community/rust/alpine-change-rpath-to-rustlib.patch
diff options
context:
space:
mode:
Diffstat (limited to 'community/rust/alpine-change-rpath-to-rustlib.patch')
-rw-r--r--community/rust/alpine-change-rpath-to-rustlib.patch37
1 files changed, 37 insertions, 0 deletions
diff --git a/community/rust/alpine-change-rpath-to-rustlib.patch b/community/rust/alpine-change-rpath-to-rustlib.patch
new file mode 100644
index 0000000000..4be0f9d0a6
--- /dev/null
+++ b/community/rust/alpine-change-rpath-to-rustlib.patch
@@ -0,0 +1,37 @@
+From: Jakub Jirutka <jakub@jirutka.cz>
+Date: Sat, 08 Aug 2016 19:56:00 +0200
+Subject: [PATCH] Change rpath for rustc/rustdoc to rustlib/$TARGET/lib
+
+Rust installs two identical sets of *.so libraries into /usr/lib and
+/usr/lib/rustlib/$TARGET/lib. The former comes with the rustc component,
+/usr/bin/rustc and /usr/bin/rustdoc are linked against them. The latter
+comes with rust-std and are used for binaries dynamically linked against
+Rust libraries (usually compiler plugins, like clippy).
+
+These *.so libraries don't keep stable ABI, so it's better to treat
+them as private. Such libraries should not be exposed at standard paths
+like /usr/lib, but use rpath.
+
+This patch changes rpath for binaries of the rustc component to
+`$ORIGIN/../lib/rustlib/$TARGET/lib`. Duplicate libraries will be still
+installed into /usr/lib, but we can simply remove them when packaging.
+
+Related upstream issues:
+
+* https://github.com/rust-lang/rust/issues/37971
+* https://github.com/rust-lang-nursery/rustup.rs/issues/837
+
+--- a/src/bootstrap/bin/rustc.rs
++++ b/src/bootstrap/bin/rustc.rs
+@@ -189,9 +189,9 @@
+ if stage != "0" {
+ cmd.arg("-Z").arg("osx-rpath-install-name");
+ }
+- Some("-Wl,-rpath,@loader_path/../lib")
++ Some("-Wl,-rpath,@loader_path/../lib".to_string())
+ } else if !target.contains("windows") {
+- Some("-Wl,-rpath,$ORIGIN/../lib")
++ Some(format!("-Wl,-rpath,$ORIGIN/../lib/rustlib/{}/lib", target))
+ } else {
+ None
+ };