From e15d15749a7b19fc9fe933f3728668299a0201f4 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Tue, 25 Jun 2019 11:54:51 +0000 Subject: [PATCH] Use relative rpath if possible On several popular operating systems, we can use relative rpaths, using the $ORIGIN placeholder, so that the resulting installation is relocatable. Then we also don't need to set LD_LIBRARY_PATH during make check. This implementation will use a relative rpath if bindir and libdir are under the same common parent directory. --- src/Makefile.global.in | 2 +- src/makefiles/Makefile.freebsd | 5 +++++ src/makefiles/Makefile.linux | 5 +++++ src/makefiles/Makefile.netbsd | 5 +++++ src/makefiles/Makefile.openbsd | 5 +++++ src/makefiles/Makefile.solaris | 10 ++++++++++ 6 files changed, 31 insertions(+), 1 deletion(-) diff --git a/src/Makefile.global.in b/src/Makefile.global.in index b9d86ac..0b69064 100644 --- a/src/Makefile.global.in +++ b/src/Makefile.global.in @@ -422,7 +422,7 @@ ld_library_path_var = LD_LIBRARY_PATH # nothing. with_temp_install = \ PATH="$(abs_top_builddir)/tmp_install$(bindir):$$PATH" \ - $(call add_to_path,$(strip $(ld_library_path_var)),$(abs_top_builddir)/tmp_install$(libdir)) \ + $(if $(strip $(ld_library_path_var)),$(call add_to_path,$(strip $(ld_library_path_var)),$(abs_top_builddir)/tmp_install$(libdir))) \ $(with_temp_install_extra) ifeq ($(enable_tap_tests),yes) diff --git a/src/makefiles/Makefile.freebsd b/src/makefiles/Makefile.freebsd index 98a6f50..6378551 100644 --- a/src/makefiles/Makefile.freebsd +++ b/src/makefiles/Makefile.freebsd @@ -2,8 +2,13 @@ AROPT = cr ifdef ELF_SYSTEM export_dynamic = -Wl,-export-dynamic +ifeq ($(dir $(bindir)),$(dir $(libdir))) +rpath = -Wl,-R,'$(subst $(dir $(libdir)),$$ORIGIN/../,$(rpathdir))',-z,origin +ld_library_path_var = +else rpath = -Wl,-R'$(rpathdir)' endif +endif DLSUFFIX = .so diff --git a/src/makefiles/Makefile.linux b/src/makefiles/Makefile.linux index ac58fe4..d967eec 100644 --- a/src/makefiles/Makefile.linux +++ b/src/makefiles/Makefile.linux @@ -3,7 +3,12 @@ AROPT = crs export_dynamic = -Wl,-E # Use --enable-new-dtags to generate DT_RUNPATH instead of DT_RPATH. # This allows LD_LIBRARY_PATH to still work when needed. +ifeq ($(dir $(bindir)),$(dir $(libdir))) +rpath = -Wl,-rpath,'$(subst $(dir $(libdir)),$$ORIGIN/../,$(rpathdir))',--enable-new-dtags +ld_library_path_var = +else rpath = -Wl,-rpath,'$(rpathdir)',--enable-new-dtags +endif DLSUFFIX = .so diff --git a/src/makefiles/Makefile.netbsd b/src/makefiles/Makefile.netbsd index 7bb9721..5cc152c 100644 --- a/src/makefiles/Makefile.netbsd +++ b/src/makefiles/Makefile.netbsd @@ -2,7 +2,12 @@ AROPT = cr ifdef ELF_SYSTEM export_dynamic = -Wl,-E +ifeq ($(dir $(bindir)),$(dir $(libdir))) +rpath = -Wl,-R,'$(subst $(dir $(libdir)),$$ORIGIN/../,$(rpathdir))' +ld_library_path_var = +else rpath = -Wl,-R'$(rpathdir)' +endif else rpath = -Wl,-R'$(rpathdir)' endif diff --git a/src/makefiles/Makefile.openbsd b/src/makefiles/Makefile.openbsd index eda3110..c03987d 100644 --- a/src/makefiles/Makefile.openbsd +++ b/src/makefiles/Makefile.openbsd @@ -2,8 +2,13 @@ AROPT = cr ifdef ELF_SYSTEM export_dynamic = -Wl,-E +ifeq ($(dir $(bindir)),$(dir $(libdir))) +rpath = -Wl,-R,'$(subst $(dir $(libdir)),$$ORIGIN/../,$(rpathdir))',-z,origin +ld_library_path_var = +else rpath = -Wl,-R'$(rpathdir)' endif +endif DLSUFFIX = .so diff --git a/src/makefiles/Makefile.solaris b/src/makefiles/Makefile.solaris index a7f5652..b61757f 100644 --- a/src/makefiles/Makefile.solaris +++ b/src/makefiles/Makefile.solaris @@ -4,10 +4,20 @@ AROPT = crs ifeq ($(with_gnu_ld), yes) export_dynamic = -Wl,-E +ifeq ($(dir $(bindir)),$(dir $(libdir))) +rpath = -Wl,-rpath,'$(subst $(dir $(libdir)),$$ORIGIN/../,$(rpathdir))' +ld_library_path_var = +else rpath = -Wl,-rpath,'$(rpathdir)' +endif +else +ifeq ($(dir $(bindir)),$(dir $(libdir))) +rpath = -Wl,-R,'$(subst $(dir $(libdir)),$$ORIGIN/../,$(rpathdir))' +ld_library_path_var = else rpath = -Wl,-R'$(rpathdir)' endif +endif DLSUFFIX = .so ifeq ($(GCC), yes) -- 1.8.3.1