odk/build-examples_common.mk |   25 +++++++++++++++++++++----
 1 file changed, 21 insertions(+), 4 deletions(-)

New commits:
commit eba135a844064a6f4a3a4f938d24b2b98dd99642
Author:     Stephan Bergmann <sberg...@redhat.com>
AuthorDate: Wed Oct 9 11:08:39 2019 +0200
Commit:     Stephan Bergmann <sberg...@redhat.com>
CommitDate: Wed Oct 9 13:48:20 2019 +0200

    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
    9ac2aad4c1cd0f8d513c02a897da90c42f2fa961 "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 <sberg...@redhat.com>

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
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to