From 750dba01d390c9f87f978a28138aee0e96af85f9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Deuc=D0=B5?= <shurd@sasktel.net>
Date: Tue, 31 Dec 2024 00:01:04 -0500
Subject: [PATCH] Fix GTK stuff for macOS

Remove the -E linker flag.
This should not be needed anymore, and isn't supported on macOS.

Have shared libraries include their full path.
This allows linked dylibs to work from where they were built, so
as long as you don't build the binaries on a CI machine, then try
to run them on a users machine (*cough*), it'll work out.

Use the correct rpath argument format on macOS.
It uses -rpath, not --rpath.
---
 src/sbbs3/GNUmakefile             |  6 +++++-
 src/sbbs3/gtkmonitor/GNUmakefile  | 14 +++++++++-----
 src/sbbs3/gtkuseredit/GNUmakefile | 14 +++++++++-----
 src/sbbs3/gtkuserlist/GNUmakefile | 14 +++++++++-----
 4 files changed, 32 insertions(+), 16 deletions(-)

diff --git a/src/sbbs3/GNUmakefile b/src/sbbs3/GNUmakefile
index 1f4a7a32bd..8c682a859e 100644
--- a/src/sbbs3/GNUmakefile
+++ b/src/sbbs3/GNUmakefile
@@ -150,12 +150,16 @@ ifndef NO_LD_RUN_PATH
 endif
 
 CON_LIBS	+= -lsbbs -lftpsrvr -lwebsrvr -lmailsrvr -lservices
-SHLIBOPTS	:=	-shared
 ifeq ($(os),sunos)
  MKSHLIB		:=	/usr/ccs/bin/ld -G
  MKSHPPLIB		:=	/usr/ccs/bin/ld -G
  SHLIBOPTS	:=
 else
+ ifeq ($(os),darwin)
+  SHLIBOPTS	=	-shared -install_name `realpath $(SBBSDIR)`/$@
+ else
+  SHLIBOPTS	:=	-shared
+ endif
  MKSHLIB		:=	$(CC)
  MKSHPPLIB		:=	$(CXX)
 endif
diff --git a/src/sbbs3/gtkmonitor/GNUmakefile b/src/sbbs3/gtkmonitor/GNUmakefile
index ebb4b9da90..2f6981002a 100644
--- a/src/sbbs3/gtkmonitor/GNUmakefile
+++ b/src/sbbs3/gtkmonitor/GNUmakefile
@@ -24,19 +24,23 @@ endif
 vpath %.c ..
 
 CFLAGS	+=	$(SBBSDEFS) -I.. -I../../comio $(SMBLIB_CFLAGS) $(HASH_CFLAGS) $(XPDEV-MT_CFLAGS) $(JS_CFLAGS) $(CRYPT_CFLAGS) `pkg-config gtk+-3.0 --cflags`
-# Hopefully, -Wl,-E exports all symbols dynamically everywhere.
-LDFLAGS	+=	-Wl,-E -L../$(LIBODIR) $(SMBLIB_LDFLAGS) $(XPDEV-MT_LDFLAGS) $(MT_LDFLAGS)
+LDFLAGS	+=	-L../$(LIBODIR) $(SMBLIB_LDFLAGS) $(XPDEV-MT_LDFLAGS) $(MT_LDFLAGS)
 EXTRA_LIBS +=	`pkg-config gtk+-3.0 --libs`
 
 # Because pkg-config for libglade uses --rpath, we need to also, LD_RUN_PATH
 # won't work.  :-(
+ifeq ($(os),darwin)
+ RPATH := -rpath
+else
+ RPATH := --rpath
+endif
 ifdef SBBSDIR
- LDFLAGS	+=	-Wl,--rpath -Wl,$(SBBSDIR)/exec
+ LDFLAGS	+=	-Wl,$(RPATH),$(SBBSDIR)/exec
 endif
 PARENT_DIR = $(shell dirname `pwd`)
-LDFLAGS	+=	-Wl,--rpath -Wl,$(PARENT_DIR)/$(LIBODIR)
+LDFLAGS	+=	-Wl,$(RPATH),$(PARENT_DIR)/$(LIBODIR)
 ifeq ($(os),sunos)
- LDFLAGS	+=	-Wl,--rpath -Wl,/opt/sfw/gcc-3/lib
+ LDFLAGS	+=	-Wl,$(RPATH),/opt/sfw/gcc-3/lib
 endif
 
 $(GTKMONITOR): $(OBJS)
diff --git a/src/sbbs3/gtkuseredit/GNUmakefile b/src/sbbs3/gtkuseredit/GNUmakefile
index e0fde23aef..a35a9d0e04 100644
--- a/src/sbbs3/gtkuseredit/GNUmakefile
+++ b/src/sbbs3/gtkuseredit/GNUmakefile
@@ -24,19 +24,23 @@ endif
 vpath %.c ..
 
 CFLAGS	+=	$(SBBSDEFS) -I.. -I../../comio $(SMBLIB_CFLAGS) $(HASH_CFLAGS) $(XPDEV-MT_CFLAGS) $(JS_CFLAGS) $(CRYPT_CFLAGS) `pkg-config gtk+-3.0 --cflags`
-# Hopefully, -Wl,-E exports all symbols dynamically everywhere.
-LDFLAGS	+=	-Wl,-E -L../$(LIBODIR) $(SMBLIB_LDFLAGS) $(XPDEV-MT_LDFLAGS) $(MT_LDFLAGS)
+LDFLAGS	+=	-L../$(LIBODIR) $(SMBLIB_LDFLAGS) $(XPDEV-MT_LDFLAGS) $(MT_LDFLAGS)
 EXTRA_LIBS += `pkg-config gtk+-3.0 --libs`
 
 # Because pkg-config for libglade uses --rpath, we need to also, LD_RUN_PATH
 # won't work.  :-(
+ifeq ($(os),darwin)
+ RPATH := -rpath
+else
+ RPATH := --rpath
+endif
 ifdef SBBSDIR
- LDFLAGS	+=	-Wl,--rpath -Wl,$(SBBSDIR)/exec
+ LDFLAGS	+=	-Wl,$(RPATH),$(SBBSDIR)/exec
 endif
 PARENT_DIR = $(shell dirname `pwd`)
-LDFLAGS	+=	-Wl,--rpath -Wl,$(PARENT_DIR)/$(LIBODIR)
+LDFLAGS	+=	-Wl,$(RPATH),$(PARENT_DIR)/$(LIBODIR)
 ifeq ($(os),sunos)
- LDFLAGS	+=	-Wl,--rpath -Wl,/opt/sfw/gcc-3/lib
+ LDFLAGS	+=	-Wl,$(RPATH),/opt/sfw/gcc-3/lib
 endif
 
 $(GTKUSEREDIT): $(OBJS)
diff --git a/src/sbbs3/gtkuserlist/GNUmakefile b/src/sbbs3/gtkuserlist/GNUmakefile
index 77189edabc..356ad3ad34 100644
--- a/src/sbbs3/gtkuserlist/GNUmakefile
+++ b/src/sbbs3/gtkuserlist/GNUmakefile
@@ -24,19 +24,23 @@ endif
 vpath %.c ..
 
 CFLAGS	+=	$(SBBSDEFS) -I.. -I../../comio $(SMBLIB_CFLAGS) $(HASH_CFLAGS) $(XPDEV-MT_CFLAGS) $(CRYPT_CFLAGS) `pkg-config gtk+-3.0 --cflags`
-# Hopefully, -Wl,-E exports all symbols dynamically everywhere.
-LDFLAGS	+=	-Wl,-E -L../$(LIBODIR) $(SMBLIB_LDFLAGS) $(XPDEV-MT_LDFLAGS) $(MT_LDFLAGS)
+LDFLAGS	+=	-L../$(LIBODIR) $(SMBLIB_LDFLAGS) $(XPDEV-MT_LDFLAGS) $(MT_LDFLAGS)
 EXTRA_LIBS += `pkg-config gtk+-3.0 --libs`
 
 # Because pkg-config for libglade uses --rpath, we need to also, LD_RUN_PATH
 # won't work.  :-(
+ifeq ($(os),darwin)
+ RPATH := -rpath
+else
+ RPATH := --rpath
+endif
 ifdef SBBSDIR
- LDFLAGS	+=	-Wl,--rpath -Wl,$(SBBSDIR)/exec
+ LDFLAGS	+=	-Wl,$(RPATH),$(SBBSDIR)/exec
 endif
 PARENT_DIR = $(shell dirname `pwd`)
-LDFLAGS	+=	-Wl,--rpath -Wl,$(PARENT_DIR)/$(LIBODIR)
+LDFLAGS	+=	-Wl,$(RPATH),$(PARENT_DIR)/$(LIBODIR)
 ifeq ($(os),sunos)
- LDFLAGS	+=	-Wl,--rpath -Wl,/opt/sfw/gcc-3/lib
+ LDFLAGS	+=	-Wl,$(RPATH),/opt/sfw/gcc-3/lib
 endif
 
 $(GTKUSERLIST): $(OBJS)
-- 
GitLab