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