From 1d028d4783da69c5c0e6e0b59e0f8ac55eb9d2b1 Mon Sep 17 00:00:00 2001 From: Stephan Bergmann Date: Fri, 12 Jun 2015 14:38:02 +0200 Subject: Fix Linux RPATH of various external modules ...as discussed in 371cc81bd9ccbfbed25f810e70899c044280349e "external/liborcus: Fix Linux RPATH:" * When an external module produces multiple libraries (that we all install) that depend on each other, they need to contain $ORIGIN in RPATH (strictly speaking, those that do not depend on any other libraries from the module would not need that, but it is harmless and easier to do that way). * When an external module's libraries depend on other external modules' libraries, and (at least some of) those other external modules are not configuread as --with-system-*, they need to contain $ORIGIN in RPATH (again, for simplicity, some libraries may get that even if they would not strictly need it). * Try to outsmart the external modules' libtool instances to not add (ultimately bogus) paths to RPATH for dependencies on libraries from external modules (either from the same module, or from anohter module not configured as --with-system-*). The only time we do not outsmart libtool, and instead rely on it (hopefully?) doing the right thing is when a given external modules' libraries depend on libraries from excatly one other external module, and the latter is configured as --with-system-*. * That outsmarting means that if an external library depends both on external libraries provided by modules not configured as --with-system-* (so RPATH contains $ORIGIN, and the outsmarting is not suppressed) and on external libraries provided by modules configured as --with-system-*: Then if the latter are in unusual locations on the system that would require an RPATH entry (which might be provided via the corresponding "pkg-config --libs", say, and presumably would be honoured by libtool if we did not outsmart it), then those paths are now erroneously missing from RPATH. * That outsmarting also causes linking of some utility applications in module redland to fail, but those are ultimately unused, so cut them off by patching their respective sub-directory Makefile.in. Change-Id: Iec05b3568fbcf04987018322c328b769ae4f5dab --- external/libodfgen/ExternalProject_libodfgen.mk | 3 +++ external/libodfgen/UnpackedTarball_libodfgen.mk | 6 ++++++ external/libodfgen/rpath.patch | 10 ++++++++++ 3 files changed, 19 insertions(+) create mode 100644 external/libodfgen/rpath.patch (limited to 'external/libodfgen') diff --git a/external/libodfgen/ExternalProject_libodfgen.mk b/external/libodfgen/ExternalProject_libodfgen.mk index 066ea8662988..2ad5a155b064 100644 --- a/external/libodfgen/ExternalProject_libodfgen.mk +++ b/external/libodfgen/ExternalProject_libodfgen.mk @@ -36,6 +36,9 @@ $(call gb_ExternalProject_get_state_target,libodfgen,build) : --without-docs \ $(if $(VERBOSE)$(verbose),--disable-silent-rules,--enable-silent-rules) \ CXXFLAGS="$(if $(SYSTEM_BOOST),$(BOOST_CPPFLAGS),-I$(call gb_UnpackedTarball_get_dir,boost)) $(if $(SYSTEM_REVENGE),,$(if $(filter-out MSC,$(COM)),-DLIBREVENGE_VISIBILITY))" \ + $(if $(filter LINUX,$(OS)),$(if $(SYSTEM_REVENGE),, \ + 'LDFLAGS=-Wl$(COMMA)-z$(COMMA)origin \ + -Wl$(COMMA)-rpath$(COMMA)\$$$$ORIGIN')) \ $(if $(CROSS_COMPILING),--build=$(BUILD_PLATFORM) --host=$(HOST_PLATFORM)) \ $(if $(filter MACOSX,$(OS)),--prefix=/@.__________________________________________________OOO) \ && $(MAKE) \ diff --git a/external/libodfgen/UnpackedTarball_libodfgen.mk b/external/libodfgen/UnpackedTarball_libodfgen.mk index 85a14b3e961b..32c8b366a33b 100644 --- a/external/libodfgen/UnpackedTarball_libodfgen.mk +++ b/external/libodfgen/UnpackedTarball_libodfgen.mk @@ -21,4 +21,10 @@ $(eval $(call gb_UnpackedTarball_add_patches,libodfgen, \ endif endif +ifeq ($(SYSTEM_REVENGE),) +$(eval $(call gb_UnpackedTarball_add_patches,libodfgen, \ + external/libodfgen/rpath.patch \ +)) +endif + # vim: set noet sw=4 ts=4: diff --git a/external/libodfgen/rpath.patch b/external/libodfgen/rpath.patch new file mode 100644 index 000000000000..698cf5dca241 --- /dev/null +++ b/external/libodfgen/rpath.patch @@ -0,0 +1,10 @@ +--- configure ++++ configure +@@ -13940,6 +13940,7 @@ + esac + ;; + esac ++hardcode_libdir_flag_spec_CXX= + ;; + + lynxos*) -- cgit