Make odk build-examples work on macOS 10.15
...which apparently got even stricter with unsetting DYLD_LIBRARY_PATH when
starting a shell, so the old workaround from
9ac2aad4c1
"OSX fix ODK example builds with
enabled SIP" no longer worked for me (and CustomTarget_odk/build-examples_java
failed with
> dyld: Library not loaded: @__VIA_LIBRARY_PATH__/libreglo.dylib
> Referenced from: /Users/stephan/Software/lo/core/instdir/LibreOffice6.4_SDK/bin/idlc
> Reason: image not found
). Building on macOS 10.15 now requires to build a shell from upstream sources
and pass it into toplevel make as a SHELL=... command line argument (but which I
at least already needed to do anyway, to preserve a global DYLD_LIBRARY_PATH
pointing at a nonstandard libc++, when building external/firebird).
Change-Id: I00ec0649fafa1842bed3f2a1258e3184d6bcfdd1
Reviewed-on: https://gerrit.libreoffice.org/80532
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
This commit is contained in:
@@ -11,6 +11,23 @@ define odk_build-examples_test
|
||||
|
||||
$(eval $(call gb_CustomTarget_CustomTarget,$(1)))
|
||||
|
||||
# System-provided shells on macOS are known to unset DYLD_LIBRARY_PATH, so we need some sort of hack
|
||||
# to provided the invocation of make below with a shell that preserves DYLD_LIBRARY_PATH. Until
|
||||
# macOS 10.14, what apparently worked is to use a copy of /bin/sh in some temp dir. However, with
|
||||
# macOS 10.15, that hack appears to no longer work, the only known workaround is to use e.g. bash
|
||||
# built from upstream source and pass it into the toplevel make invocation as SHELL=... command line
|
||||
# argument (which is also needed when building external/firebird and needing to preserve a global
|
||||
# DYLD_LIBRARY_PATH, see comment 17 at
|
||||
# <https://bugs.documentfoundation.org/show_bug.cgi?id=101789#c17> "FIREBIRD 3 - fails to build on
|
||||
# OSX 10.11.6 with clang"). When building on macOS <= 10.14 and not passing SHELL=... on the
|
||||
# command line, MACOSX_SHELL_HACK will kick in and do the "use a copy of /bin/sh" workaround. When
|
||||
# passing in a self-built SHELL=... (which is necessary now on macOS >= 10.15), the
|
||||
# MACOSX_SHELL_HACK will not kick in, but the below invocation of make will automatically inherit
|
||||
# SHELL from the currently running invocation of make. (At least with GNU Make 4.2.1, the origin of
|
||||
# a default SHELL setting is, somewhat unintuitively, reported as "file" rather than "default". To
|
||||
# avoid surprises, use an explicit check for an origin of "command line" here.)
|
||||
MACOSX_SHELL_HACK := $(and $(filter MACOSX,$(OS)),$(filter-out command line,$(origin SHELL)))
|
||||
|
||||
$(call gb_CustomTarget_get_target,$(1)): \
|
||||
$(call gb_CustomTarget_get_workdir,$(1))/setsdkenv
|
||||
ifneq ($(gb_SUPPRESS_TESTS),)
|
||||
@@ -18,7 +35,7 @@ ifneq ($(gb_SUPPRESS_TESTS),)
|
||||
else
|
||||
$$(call gb_Output_announce,$(subst $(WORKDIR)/,,$(1)),$(true),CHK,1)
|
||||
rm -fr $(call gb_CustomTarget_get_workdir,$(1))/{out,user}
|
||||
ifeq (MACOSX,$(OS))
|
||||
ifneq ($(MACOSX_SHELL_HACK),)
|
||||
$(eval ODK_BUILD_SHELL := $(shell $(gb_MKTEMP)))
|
||||
cp /bin/sh "$(ODK_BUILD_SHELL)"
|
||||
chmod 0700 "$(ODK_BUILD_SHELL)"
|
||||
@@ -32,13 +49,13 @@ endif
|
||||
&& (cd $(INSTDIR)/$(SDKDIRNAME)/examples/$(my_dir) \
|
||||
&& printf 'yes\n' | LC_ALL=C make \
|
||||
CC="$(CXX)" LINK="$(CXX)" LIB="$(CXX)" \
|
||||
$(if $(filter MACOSX,$(OS)), SHELL=$(ODK_BUILD_SHELL), )))) \
|
||||
$(if $(MACOSX_SHELL_HACK), SHELL=$(ODK_BUILD_SHELL), )))) \
|
||||
>$(call gb_CustomTarget_get_workdir,$(1))/log 2>&1 \
|
||||
|| (RET=$$$$? \
|
||||
$(if $(filter MACOSX,$(OS)), && rm -f $(ODK_BUILD_SHELL) , ) \
|
||||
$(if $(MACOSX_SHELL_HACK), && rm -f $(ODK_BUILD_SHELL) , ) \
|
||||
&& cat $(call gb_CustomTarget_get_workdir,$(1))/log \
|
||||
&& exit $$$$RET)
|
||||
ifeq (MACOSX,$(OS))
|
||||
ifneq ($(MACOSX_SHELL_HACK),)
|
||||
-rm -f $(ODK_BUILD_SHELL)
|
||||
endif
|
||||
endif
|
||||
|
Reference in New Issue
Block a user