diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-06-19 09:26:37 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-06-19 09:26:37 +0000 |
commit | 1c69ecb2dd463a5cd922e872386381e1cc17147e (patch) | |
tree | d49e9c5086b704151975474cb9ae68509ffa4787 /debian/patches/behaviour/d-rustc-add-soname.patch | |
parent | Merging upstream version 1.76.0+dfsg1. (diff) | |
download | rustc-1c69ecb2dd463a5cd922e872386381e1cc17147e.tar.xz rustc-1c69ecb2dd463a5cd922e872386381e1cc17147e.zip |
Merging debian version 1.76.0+dfsg1-1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'debian/patches/behaviour/d-rustc-add-soname.patch')
-rw-r--r-- | debian/patches/behaviour/d-rustc-add-soname.patch | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/debian/patches/behaviour/d-rustc-add-soname.patch b/debian/patches/behaviour/d-rustc-add-soname.patch new file mode 100644 index 000000000..91959bdc0 --- /dev/null +++ b/debian/patches/behaviour/d-rustc-add-soname.patch @@ -0,0 +1,44 @@ +From: Angus Lees <gus@debian.org> +Date: Thu, 14 Jul 2022 13:17:39 +0200 +Subject: Set DT_SONAME when building dylibs + +In Rust, library filenames include a version-specific hash to help +the run-time linker find the correct version. Unlike in C/C++, the +compiler looks for all libraries matching a glob that ignores the +hash and reads embedded metadata to work out versions, etc. + +The upshot is that there is no need for the usual "libfoo.so -> +libfoo-1.2.3.so" symlink common with C/C++ when building with Rust, +and no need to communicate an alternate filename to use at run-time +vs compile time. If linking to a Rust dylib from C/C++ however, a +"libfoo.so -> libfoo-$hash.so" symlink may well be useful and in +this case DT_SONAME=libfoo-$hash.so would be required. More +mundanely, various tools (eg: dpkg-shlibdeps) complain if they don't +find DT_SONAME on shared libraries in public directories. + +This patch passes -Wl,-soname=$outfile when building dylibs (and +using a GNU linker). + +Forwarded: no +--- + compiler/rustc_codegen_ssa/src/back/link.rs | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/compiler/rustc_codegen_ssa/src/back/link.rs b/compiler/rustc_codegen_ssa/src/back/link.rs +index b0d22ad..9f824f4 100644 +--- a/compiler/rustc_codegen_ssa/src/back/link.rs ++++ b/compiler/rustc_codegen_ssa/src/back/link.rs +@@ -2384,6 +2384,13 @@ fn add_order_independent_options( + } + + add_rpath_args(cmd, sess, codegen_results, out_filename); ++ ++ if (crate_type == config::CrateType::Dylib || crate_type == config::CrateType::Cdylib) ++ && sess.target.linker_flavor.is_gnu() { ++ let filename = String::from(out_filename.file_name().unwrap().to_str().unwrap()); ++ let soname = [String::from("-Wl,-soname=") + &filename]; ++ cmd.args(&soname); ++ } + } + + // Write the NatVis debugger visualizer files for each crate to the temp directory and gather the file paths. |