diff options
Diffstat (limited to 'odk')
-rw-r--r-- | odk/build-examples_common.mk | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/odk/build-examples_common.mk b/odk/build-examples_common.mk index 4d7d645ed40a..50ea40ec905e 100644 --- a/odk/build-examples_common.mk +++ b/odk/build-examples_common.mk @@ -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 |