From 6e69eec18963adad13ff5c531e25a5580ffae22e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Deuc=D0=B5?= <shurd@sasktel.net> Date: Tue, 31 Dec 2024 01:25:57 -0500 Subject: [PATCH] For macOS, set install_name to @rpath/libNAME.dylib and use it For the SBBS binaries, set @executable_path and @executable_path/../${LIBODIR} so they can all be in one dir, or they can be in the build output dirs and still work. For utilities, set to @executable_path and @executable_path/../../${LIBODIR} for the same reason. With this, we shouldn't need to fiddle with DYLD_LIBRARY_PATH --- src/build/Common.gmake | 6 ++++++ src/sbbs3/GNUmakefile | 19 +++++++++++-------- src/sbbs3/gtkmonitor/GNUmakefile | 21 ++++++++++----------- src/sbbs3/gtkuseredit/GNUmakefile | 19 +++++++++---------- src/sbbs3/gtkuserlist/GNUmakefile | 19 +++++++++---------- src/sbbs3/userlist/GNUmakefile | 3 +++ 6 files changed, 48 insertions(+), 39 deletions(-) diff --git a/src/build/Common.gmake b/src/build/Common.gmake index 95fe24a09f..763cd42ee9 100644 --- a/src/build/Common.gmake +++ b/src/build/Common.gmake @@ -264,6 +264,12 @@ ifeq ($(os),darwin) endif endif +ifeq ($(os),darwin) + RPATH := -rpath +else + RPATH := --rpath +endif + ifeq ($(machine_uname),x86_64) machine_uname := x64 endif diff --git a/src/sbbs3/GNUmakefile b/src/sbbs3/GNUmakefile index 8c682a859e..c0647d408b 100644 --- a/src/sbbs3/GNUmakefile +++ b/src/sbbs3/GNUmakefile @@ -156,13 +156,16 @@ ifeq ($(os),sunos) SHLIBOPTS := else ifeq ($(os),darwin) - SHLIBOPTS = -shared -install_name `realpath $(SBBSDIR)`/$@ + SHLIBOPTS = -shared -install_name @rpath/`VAR=$@; echo $${VAR\#\#*/}` else SHLIBOPTS := -shared endif MKSHLIB := $(CC) MKSHPPLIB := $(CXX) endif +ifeq ($(os),darwin) + LIB_RPATH := -Wl,$(RPATH),@executable_path,$(RPATH),@executable_path/../$(LIBDIR) +endif CFLAGS += $(JS_CFLAGS) $(CRYPT_CFLAGS) $(UIFC-MT_CFLAGS) $(XPDEV-MT_CFLAGS) $(SMBLIB_CFLAGS) $(CIOLIB-MT_CFLAGS) $(ENCODE_CFLAGS) $(HASH_CFLAGS) CFLAGS += -I../comio @@ -190,27 +193,27 @@ endif # FTP Server Link Rule $(FTPSRVR): $(MTOBJODIR)/ftpsrvr.o @echo Linking $@ - $(QUIET)$(MKSHLIB) $(LDFLAGS) $(MTOBJODIR)/ftpsrvr.o $(SHLIBOPTS) -o $@ -lsbbs + $(QUIET)$(MKSHLIB) $(LDFLAGS) $(MTOBJODIR)/ftpsrvr.o $(SHLIBOPTS) $(LIB_RPATH) -o $@ -lsbbs # Mail Server Link Rule $(MAILSRVR): $(MAIL_OBJS) @echo Linking $@ - $(QUIET)$(MKSHLIB) $(LDFLAGS) $(MAIL_OBJS) $(SHLIBOPTS) -o $@ -lsbbs + $(QUIET)$(MKSHLIB) $(LDFLAGS) $(MAIL_OBJS) $(SHLIBOPTS) $(LIB_RPATH) -o $@ -lsbbs # Web Server Link Rule $(WEBSRVR): $(WEB_OBJS) @echo Linking $@ - $(QUIET)$(MKSHLIB) $(LDFLAGS) $(WEB_OBJS) $(SHLIBOPTS) -o $@ $(ENCODE_LIBS) -lsbbs $(XPDEV-MT_LIBS) + $(QUIET)$(MKSHLIB) $(LDFLAGS) $(WEB_OBJS) $(SHLIBOPTS) $(LIB_RPATH) -o $@ $(ENCODE_LIBS) -lsbbs $(XPDEV-MT_LIBS) # Services Link Rule $(SERVICES): $(SERVICE_OBJS) @echo Linking $@ - $(QUIET)$(MKSHLIB) $(LDFLAGS) $(SERVICE_OBJS) $(SHLIBOPTS) -o $@ -lsbbs + $(QUIET)$(MKSHLIB) $(LDFLAGS) $(SERVICE_OBJS) $(SHLIBOPTS) $(LIB_RPATH) -o $@ -lsbbs # Synchronet Console Build Rule $(SBBSCON): $(CON_OBJS) $(SBBS) $(FTPSRVR) $(WEBSRVR) $(MAILSRVR) $(SERVICES) @echo Linking $@ - $(QUIET)$(CXX) $(LDFLAGS) $(MT_LDFLAGS) -o $@ $(CON_OBJS) $(CON_LIBS) $(SMBLIB_LIBS) $(XPDEV-MT_LIBS) + $(QUIET)$(CXX) $(LDFLAGS) $(MT_LDFLAGS) $(LIB_RPATH) -o $@ $(CON_OBJS) $(CON_LIBS) $(SMBLIB_LIBS) $(XPDEV-MT_LIBS) # Baja Utility $(BAJA): $(BAJA_OBJS) | $(EXEODIR) @@ -280,7 +283,7 @@ endif # JSEXEC $(JSEXEC): $(JSEXEC_OBJS) $(SBBS) $(CIOLIB-MT) | $(EXEODIR) @echo Linking $@ - $(QUIET)$(CXX) $(LDFLAGS) $(MT_LDFLAGS) -o $@ $(JSEXEC_OBJS) -lsbbs $(JS_LIBS) $(SMBLIB_LIBS) $(UIFC-MT_LIBS) $(CIOLIB-MT_LIBS) $(XPDEV-MT_LIBS) + $(QUIET)$(CXX) $(LDFLAGS) $(MT_LDFLAGS) $(LIB_RPATH) -o $@ $(JSEXEC_OBJS) -lsbbs $(JS_LIBS) $(SMBLIB_LIBS) $(UIFC-MT_LIBS) $(CIOLIB-MT_LIBS) $(XPDEV-MT_LIBS) ifeq ($(os), netbsd) paxctl +m $(JSEXEC) endif @@ -308,7 +311,7 @@ $(QWKNODES): $(QWKNODES_OBJS) | $(EXEODIR) # SLOG $(SLOG): $(SLOG_OBJS) $(SBBS) | $(EXEODIR) @echo Linking $@ - $(QUIET)$(CC) $(CONSOLE_LDFLAGS) -o $@ $(SLOG_OBJS) $(XPDEV_LIBS) -lsbbs + $(QUIET)$(CC) $(CONSOLE_LDFLAGS) $(LIB_RPATH) -o $@ $(SLOG_OBJS) $(XPDEV_LIBS) -lsbbs # DELFILES $(DELFILES): $(DELFILES_OBJS) $(ENCODE_LIB) | $(EXEODIR) diff --git a/src/sbbs3/gtkmonitor/GNUmakefile b/src/sbbs3/gtkmonitor/GNUmakefile index 2f6981002a..bf51846d55 100644 --- a/src/sbbs3/gtkmonitor/GNUmakefile +++ b/src/sbbs3/gtkmonitor/GNUmakefile @@ -30,17 +30,16 @@ 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),$(SBBSDIR)/exec -endif -PARENT_DIR = $(shell dirname `pwd`) -LDFLAGS += -Wl,$(RPATH),$(PARENT_DIR)/$(LIBODIR) -ifeq ($(os),sunos) - LDFLAGS += -Wl,$(RPATH),/opt/sfw/gcc-3/lib + LDFLAGS += -Wl,$(RPATH),@executable_path,$(RPATH),@executable_path/../../$(LIBODIR) +else + ifdef SBBSDIR + LDFLAGS += -Wl,$(RPATH),$(SBBSDIR)/exec + endif + PARENT_DIR = $(shell dirname `pwd`) + LDFLAGS += -Wl,$(RPATH),$(PARENT_DIR)/$(LIBODIR) + ifeq ($(os),sunos) + LDFLAGS += -Wl,$(RPATH),/opt/sfw/gcc-3/lib + endif endif $(GTKMONITOR): $(OBJS) diff --git a/src/sbbs3/gtkuseredit/GNUmakefile b/src/sbbs3/gtkuseredit/GNUmakefile index a35a9d0e04..a191fa1795 100644 --- a/src/sbbs3/gtkuseredit/GNUmakefile +++ b/src/sbbs3/gtkuseredit/GNUmakefile @@ -30,17 +30,16 @@ 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 + LDFLAGS += -Wl,$(RPATH),@executable_path,$(RPATH),@executable_path/../../$(LIBODIR) else - RPATH := --rpath -endif -ifdef SBBSDIR - LDFLAGS += -Wl,$(RPATH),$(SBBSDIR)/exec -endif -PARENT_DIR = $(shell dirname `pwd`) -LDFLAGS += -Wl,$(RPATH),$(PARENT_DIR)/$(LIBODIR) -ifeq ($(os),sunos) - LDFLAGS += -Wl,$(RPATH),/opt/sfw/gcc-3/lib + ifdef SBBSDIR + LDFLAGS += -Wl,$(RPATH),$(SBBSDIR)/exec + endif + PARENT_DIR = $(shell dirname `pwd`) + LDFLAGS += -Wl,$(RPATH),$(PARENT_DIR)/$(LIBODIR) + ifeq ($(os),sunos) + LDFLAGS += -Wl,$(RPATH),/opt/sfw/gcc-3/lib + endif endif $(GTKUSEREDIT): $(OBJS) diff --git a/src/sbbs3/gtkuserlist/GNUmakefile b/src/sbbs3/gtkuserlist/GNUmakefile index 356ad3ad34..71b4086a16 100644 --- a/src/sbbs3/gtkuserlist/GNUmakefile +++ b/src/sbbs3/gtkuserlist/GNUmakefile @@ -30,17 +30,16 @@ 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 + LDFLAGS += -Wl,$(RPATH),@executable_path,$(RPATH),@executable_path/../../$(LIBODIR) else - RPATH := --rpath -endif -ifdef SBBSDIR - LDFLAGS += -Wl,$(RPATH),$(SBBSDIR)/exec -endif -PARENT_DIR = $(shell dirname `pwd`) -LDFLAGS += -Wl,$(RPATH),$(PARENT_DIR)/$(LIBODIR) -ifeq ($(os),sunos) - LDFLAGS += -Wl,$(RPATH),/opt/sfw/gcc-3/lib + ifdef SBBSDIR + LDFLAGS += -Wl,$(RPATH),$(SBBSDIR)/exec + endif + PARENT_DIR = $(shell dirname `pwd`) + LDFLAGS += -Wl,$(RPATH),$(PARENT_DIR)/$(LIBODIR) + ifeq ($(os),sunos) + LDFLAGS += -Wl,$(RPATH),/opt/sfw/gcc-3/lib + endif endif $(GTKUSERLIST): $(OBJS) diff --git a/src/sbbs3/userlist/GNUmakefile b/src/sbbs3/userlist/GNUmakefile index c241a7ff67..ae966ec3fa 100644 --- a/src/sbbs3/userlist/GNUmakefile +++ b/src/sbbs3/userlist/GNUmakefile @@ -23,6 +23,9 @@ include ../Common.gmake CFLAGS += $(SBBS_CFLAGS) $(SMBLIB_CFLAGS) $(XPDEV-MT_CFLAGS) `$(WX_CONFIG) $(WX_CONFFLAGS) --cflags` CXXFLAGS += $(CFLAGS) LDFLAGS += `$(WX_CONFIG) $(WX_CONFFLAGS) --libs` $(SMBLIB_LDFLAGS) $(XPDEV-MT_LDFLAGS) $(MT_LDFLAGS) $(SBBS_LDFLAGS) +ifeq ($(os),darwin) + LDFLAGS += -Wl,$(RPATH),@executable_path,$(RPATH),@executable_path/../../$(LIBODIR) +endif $(USERLIST): $(SBBS) $(OBJS) @echo Linking $@ -- GitLab