diff --git a/src/Makefile.global.in b/src/Makefile.global.in
index 02c32de3a0f1fa2f1dad6a941333eabaf91c5319..2c8f38f1e716d37845f82796115664f364c0ccf5 100644
--- a/src/Makefile.global.in
+++ b/src/Makefile.global.in
@@ -1,5 +1,5 @@
 # -*-makefile-*-
-# $PostgreSQL: pgsql/src/Makefile.global.in,v 1.204 2004/10/20 02:12:07 neilc Exp $
+# $PostgreSQL: pgsql/src/Makefile.global.in,v 1.205 2004/11/19 00:41:38 tgl Exp $
 
 #------------------------------------------------------------------------------
 # All PostgreSQL makefiles include this file and use the variables it sets,
@@ -284,6 +284,10 @@ ELF_SYSTEM= @ELF_SYS@
 # Pull in platform-specific magic
 include $(top_builddir)/src/Makefile.port
 
+# Set up rpath if enabled.  By default it will point to our libdir,
+# but individual Makefiles can force other rpath paths if needed.
+rpathdir = $(libdir)
+
 ifeq ($(enable_rpath), yes)
 LDFLAGS += $(rpath)
 endif
diff --git a/src/makefiles/Makefile.bsdi b/src/makefiles/Makefile.bsdi
index 99be3eebb10fc6e6c27654396cb3ed911476cd81..0257f6367a46128245dfbf23f3db647fa8d82386 100644
--- a/src/makefiles/Makefile.bsdi
+++ b/src/makefiles/Makefile.bsdi
@@ -14,7 +14,7 @@ endif
 
 ifeq ($(DLSUFFIX), .so)
 CFLAGS_SL = -fpic
-rpath = -Wl,-rpath,$(libdir)
+rpath = -Wl,-rpath,$(rpathdir)
 export_dynamic = -export-dynamic
 shlib_symbolic = -Wl,-Bsymbolic
 else
diff --git a/src/makefiles/Makefile.freebsd b/src/makefiles/Makefile.freebsd
index a9e59604d5a4448c5da0cee8835f685db805ae75..8f41ea4d867ed4cf2debaee3e5bd549d155a858e 100644
--- a/src/makefiles/Makefile.freebsd
+++ b/src/makefiles/Makefile.freebsd
@@ -2,7 +2,7 @@ AROPT = cr
 
 ifdef ELF_SYSTEM
 export_dynamic = -export-dynamic
-rpath = -R$(libdir)
+rpath = -R$(rpathdir)
 shlib_symbolic = -Wl,-Bsymbolic -lc
 endif
 
diff --git a/src/makefiles/Makefile.hpux b/src/makefiles/Makefile.hpux
index 2ffd791e40109d1ac71d47718ed5bb454a746995..4a1e551ec148456f8585689698bc4d22fd61fb62 100644
--- a/src/makefiles/Makefile.hpux
+++ b/src/makefiles/Makefile.hpux
@@ -16,14 +16,12 @@ endif
 # correctly in the LP64 data model.
 LIBS := -lxnet $(LIBS)
 
-# Embed 'libdir' as the shared library search path so that the executables
-# don't need SHLIB_PATH to be set.  (We do not observe the --enable-rpath
-# switch here because you'd get rather bizarre behavior if you leave this
-# option off.)
+# Set up rpath so that the executables don't need SHLIB_PATH to be set.
+# (Note: --disable-rpath is a really bad idea on this platform...)
 ifeq ($(with_gnu_ld), yes)
-   LDFLAGS += -Wl,-rpath -Wl,$(libdir)
+   rpath = -Wl,-rpath,$(rpathdir)
 else
-   LDFLAGS += -Wl,+b -Wl,$(libdir)
+   rpath = -Wl,+b,$(rpathdir)
 endif
 
 # catch null pointer dereferences
diff --git a/src/makefiles/Makefile.irix b/src/makefiles/Makefile.irix
index 4062161d9ef58587b5a68a0683e656ddf8db705d..4486ed05e09d57481052442edbfd22bedd7d0b2f 100644
--- a/src/makefiles/Makefile.irix
+++ b/src/makefiles/Makefile.irix
@@ -1,6 +1,6 @@
 MK_NO_LORDER= true
 AROPT = crs
-rpath = -Wl,-rpath,$(libdir)
+rpath = -Wl,-rpath,$(rpathdir)
 shlib_symbolic = -Wl,-B,symbolic
 
 DLSUFFIX = .so
diff --git a/src/makefiles/Makefile.linux b/src/makefiles/Makefile.linux
index e48ad5a6b105015b973ecef105c22166addf8e71..c473214466e2aa6c459d79955f52f80c65e7a154 100644
--- a/src/makefiles/Makefile.linux
+++ b/src/makefiles/Makefile.linux
@@ -1,6 +1,6 @@
 AROPT = crs
 export_dynamic = -Wl,-E
-rpath = -Wl,-rpath,$(libdir)
+rpath = -Wl,-rpath,$(rpathdir)
 shlib_symbolic = -Wl,-Bsymbolic
 allow_nonpic_in_shlib = yes
 DLSUFFIX = .so
diff --git a/src/makefiles/Makefile.netbsd b/src/makefiles/Makefile.netbsd
index 531fc1356b5f77433e7013f9298239634bfa7a20..2b6a1e13fd25560f1df6b3a49f47bdb2aa0507cb 100644
--- a/src/makefiles/Makefile.netbsd
+++ b/src/makefiles/Makefile.netbsd
@@ -2,10 +2,10 @@ AROPT = cr
 
 ifdef ELF_SYSTEM
 export_dynamic = -Wl,-E
-rpath = -Wl,-R$(libdir)
+rpath = -Wl,-R$(rpathdir)
 shlib_symbolic = -Wl,-Bsymbolic -lc
 else
-rpath = -R$(libdir)
+rpath = -R$(rpathdir)
 endif
 
 DLSUFFIX = .so
diff --git a/src/makefiles/Makefile.openbsd b/src/makefiles/Makefile.openbsd
index 66671e675fb074a64dc5c5b1c1e16586d8c23ed7..e35739573cdba6080611899b52bb4fdfb49f583a 100644
--- a/src/makefiles/Makefile.openbsd
+++ b/src/makefiles/Makefile.openbsd
@@ -2,7 +2,7 @@ AROPT = cr
 
 ifdef ELF_SYSTEM
 export_dynamic = -Wl,-E
-rpath = -R$(libdir)
+rpath = -R$(rpathdir)
 shlib_symbolic = -Wl,-Bsymbolic
 endif
 
diff --git a/src/makefiles/Makefile.osf b/src/makefiles/Makefile.osf
index 4ee46ccd756b19cefc8692f75a937bdbb1591317..ebd6c30149bcd8c51640fcdd6deca29c896af131 100644
--- a/src/makefiles/Makefile.osf
+++ b/src/makefiles/Makefile.osf
@@ -1,7 +1,7 @@
 AROPT = crs
 DLSUFFIX = .so
 CFLAGS_SL =
-rpath = -rpath $(libdir)
+rpath = -rpath $(rpathdir)
 
 %.so: %.o
 	$(LD) -shared -expect_unresolved '*' -o $@ $<
diff --git a/src/makefiles/Makefile.solaris b/src/makefiles/Makefile.solaris
index d6fb7d8a7e7f250ea402ea0d751a65bf25e63131..2ff7e28c90756a65c4d38d1276fe831ff73b9942 100644
--- a/src/makefiles/Makefile.solaris
+++ b/src/makefiles/Makefile.solaris
@@ -1,12 +1,12 @@
-# $PostgreSQL: pgsql/src/makefiles/Makefile.solaris,v 1.10 2003/11/29 19:52:12 pgsql Exp $
+# $PostgreSQL: pgsql/src/makefiles/Makefile.solaris,v 1.11 2004/11/19 00:41:39 tgl Exp $
 
 AROPT = crs
 
 ifeq ($(with_gnu_ld), yes)
 export_dynamic = -Wl,-E
-rpath = -Wl,-rpath,$(libdir)
+rpath = -Wl,-rpath,$(rpathdir)
 else
-rpath = -R$(libdir)
+rpath = -R$(rpathdir)
 endif
 shlib_symbolic = -Wl,-Bsymbolic
 
diff --git a/src/makefiles/Makefile.unixware b/src/makefiles/Makefile.unixware
index 3372a8e5747003cf61f01cd75e00a5388002267b..e8953756a678110f79db17b92a1edad2593c2240 100644
--- a/src/makefiles/Makefile.unixware
+++ b/src/makefiles/Makefile.unixware
@@ -7,9 +7,9 @@ endif
 
 ifeq ($(ld_R_works), yes)
 ifeq ($(with_gnu_ld), yes)
-	rpath = -Wl,-rpath,$(libdir)
+	rpath = -Wl,-rpath,$(rpathdir)
 else
-	rpath = -Wl,-R$(libdir)
+	rpath = -Wl,-R$(rpathdir)
 endif
 endif
 shlib_symbolic = -Wl,-Bsymbolic