commit:     85b120bb3ea6d7583cbdd1bec0d7dee134359a69
Author:     Jason A. Donenfeld <zx2c4 <AT> gentoo <DOT> org>
AuthorDate: Mon Apr  1 23:08:38 2024 +0000
Commit:     Jason A. Donenfeld <zx2c4 <AT> gentoo <DOT> org>
CommitDate: Mon Apr  1 23:08:38 2024 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=85b120bb

media-sound/reaper-bin: move -z,lazy into patch

Now that we've sent this upstream, add this as a patch.

Link: https://github.com/justinfrankel/WDL/pull/22
Signed-off-by: Jason A. Donenfeld <zx2c4 <AT> gentoo.org>

 .../files/libSwell-makefile-lazy-binding.patch     | 46 ++++++++++++++++++++++
 media-sound/reaper-bin/reaper-bin-7.12-r1.ebuild   |  4 +-
 2 files changed, 48 insertions(+), 2 deletions(-)

diff --git a/media-sound/reaper-bin/files/libSwell-makefile-lazy-binding.patch 
b/media-sound/reaper-bin/files/libSwell-makefile-lazy-binding.patch
new file mode 100644
index 000000000000..9d9508071af8
--- /dev/null
+++ b/media-sound/reaper-bin/files/libSwell-makefile-lazy-binding.patch
@@ -0,0 +1,46 @@
+From d7fa7b22fdbc894a9986ab686b9c009d25f8cae7 Mon Sep 17 00:00:00 2001
+From: "Jason A. Donenfeld" <[email protected]>
+Date: Tue, 2 Apr 2024 01:03:30 +0200
+Subject: [PATCH] swell-linux: ensure LD lazily binds symbols
+
+On newer toolchains that by default set `-Wl,-z,now`, such as Gentoo's
+23.0 toolchain, setting PRELOAD_GDK causes swell's dlopen() to fail with
+an error like:
+
+    Error loading '/opt/REAPER/libSwell.so': /opt/REAPER/libSwell.so: 
undefined symbol: gdk_x11_window_get_xid
+
+This is because -z,now, according to the man page, "When generating an
+executable or shared library, mark it to tell the dynamic linker to
+resolve all symbols when the program is started, or when the shared
+library is loaded by dlopen, instead of deferring function call
+resolution to the point when the function is first called." This is
+basically the opposite of what swell's preloading feature wants.
+
+This can be overridden by setting -z,lazy, which according to the man
+page, "When generating an executable or shared library, mark it to tell
+the dynamic linker to defer function call resolution to the point when
+the function is called (lazy binding), rather than at load time."
+
+So pass -Wl,-z,lazy in the preloading case, so that it works no matter
+what the toolchain defaults are.
+---
+ WDL/swell/Makefile | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/WDL/swell/Makefile b/WDL/swell/Makefile
+index 9e7e2d87..8033fb30 100644
+--- a/WDL/swell/Makefile
++++ b/WDL/swell/Makefile
+@@ -140,6 +140,9 @@ ifndef NOGDK
+     endif
+   endif
+   LINKEXTRA += -lGL
++  ifdef PRELOAD_GDK
++    CFLAGS += -Wl,-z,lazy
++  endif
+ endif
+ 
+ CXXFLAGS = $(CFLAGS)
+-- 
+2.44.0
+

diff --git a/media-sound/reaper-bin/reaper-bin-7.12-r1.ebuild 
b/media-sound/reaper-bin/reaper-bin-7.12-r1.ebuild
index 06bcf6617d8f..a6338707abea 100644
--- a/media-sound/reaper-bin/reaper-bin-7.12-r1.ebuild
+++ b/media-sound/reaper-bin/reaper-bin-7.12-r1.ebuild
@@ -3,7 +3,7 @@
 
 EAPI=8
 
-inherit desktop flag-o-matic xdg
+inherit desktop xdg
 
 DESCRIPTION="Digital audio workstation"
 HOMEPAGE="https://www.reaper.fm";
@@ -49,10 +49,10 @@ src_prepare() {
        default
        cd "WDL-${WDL_COMMIT}" || die
        eapply "${FILESDIR}"/libSwell-makefile-cflags.patch
+       eapply "${FILESDIR}"/libSwell-makefile-lazy-binding.patch
 }
 
 src_compile() {
-       append-cflags -Wl,-z,lazy
        emake -C "WDL-${WDL_COMMIT}/WDL/swell" \
                PRELOAD_GDK=1 \
                ALLOW_WARNINGS=1

Reply via email to