~ chicken-core (chicken-5) 3afc649cd97cd5ce62a560e7f28a6e74a2145014
commit 3afc649cd97cd5ce62a560e7f28a6e74a2145014 Author: felix <felix@call-with-current-continuation.org> AuthorDate: Sun Jun 23 12:15:52 2024 +0200 Commit: Peter Bex <peter@more-magic.net> CommitDate: Tue Jun 25 09:42:41 2024 +0200 Add build-directory to rpath on MacOS When running the checks without installing the overrides for DYLD_LIBRARY_PATH are not seen due to changes in the way certain environment variables are passed to subprocesses which will result in linking the wrong libchicken.dylib at runtime. This patch adds the build directory to the rpath of the "chicken" binary to make the checks run and changes the post-install command for patching the rpath to the final installation directory to add the build-path to the change list. install_name_tool accepts any number of "-change" pairs and will silently ignore those that don't apply. Thanks to Christian Himpe for helping to investigate the problem and test the fix. Signed-off-by: Peter Bex <peter@more-magic.net> diff --git a/Makefile.macosx b/Makefile.macosx index 32253291..59c6f374 100644 --- a/Makefile.macosx +++ b/Makefile.macosx @@ -51,7 +51,9 @@ endif endif LIBRARIAN ?= $(XCODE_TOOL_PATH)/ar LINKER_LINK_SHARED_LIBRARY_OPTIONS = -dynamiclib -compatibility_version 1 -current_version 1.0 -install_name $@ -POSTINSTALL_PROGRAM_FLAGS = -change lib$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX)$(SO) $(LIBDIR)/lib$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX)$(SO) +HERE = $(shell pwd) +PREINSTALL_PROGRAM_FIXUP = $(POSTINSTALL_PROGRAM) -change lib$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX)$(SO) $(HERE)/lib$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX)$(SO) +POSTINSTALL_PROGRAM_FLAGS = -change lib$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX)$(SO) $(LIBDIR)/lib$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX)$(SO) -change $(HERE)/lib$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX)$(SO) $(LIBDIR)/lib$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX)$(SO) LIBRARIAN_OPTIONS = scru LINKER_LINK_SHARED_DLOADABLE_OPTIONS = -bundle -L. ASSEMBLER_OPTIONS = diff --git a/defaults.make b/defaults.make index 9e27f5cd..e471c3f0 100644 --- a/defaults.make +++ b/defaults.make @@ -90,6 +90,7 @@ REMOVE_COMMAND ?= rm INSTALL_PROGRAM ?= install MAKEDIR_COMMAND ?= $(INSTALL_PROGRAM) endif +PREINSTALL_PROGRAM_FIXUP ?= true POSTINSTALL_STATIC_LIBRARY ?= true POSTINSTALL_PROGRAM ?= true diff --git a/rules.make b/rules.make index f7c22b7b..24ad7e2c 100644 --- a/rules.make +++ b/rules.make @@ -218,6 +218,7 @@ lib$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX)$(A): $(LIBCHICKEN_STATIC_OBJECTS) $(CHICKEN_SHARED_EXECUTABLE): $(COMPILER_OBJECTS) $(PRIMARY_LIBCHICKEN) $(LINKER) $(LINKER_OPTIONS) $(LINKER_EXECUTABLE_OPTIONS) $(COMPILER_OBJECTS) $(LINKER_OUTPUT) \ $(LINKER_LIBRARY_PREFIX)$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX)$(LINKER_LIBRARY_SUFFIX) $(LINKER_LINK_SHARED_PROGRAM_OPTIONS) $(LIBRARIES) + $(PREINSTALL_PROGRAM_FIXUP) $(CHICKEN_SHARED_EXECUTABLE) define declare-program-from-object $(1)-RC_FILE = $(if $(and $(RC_COMPILER),$(3)),$(2).rc$(O))Trap