diff --git a/contrib/dummy_seclabel/Makefile b/contrib/dummy_seclabel/Makefile
index 105400f..3a5f968 100644
*** a/contrib/dummy_seclabel/Makefile
--- b/contrib/dummy_seclabel/Makefile
*************** top_builddir = ../..
*** 12,14 ****
--- 12,24 ----
  include $(top_builddir)/src/Makefile.global
  include $(top_srcdir)/contrib/contrib-global.mk
  endif
+ 
+ # Build/install only the files needed for regression test support
+ REGRESSION_MODULES = dummy_seclabel
+ 
+ .PHONY: regression-modules install-regression-modules
+ 
+ regression-modules: $(addsuffix $(DLSUFFIX), $(REGRESSION_MODULES))
+ 
+ install-regression-modules: $(addsuffix $(DLSUFFIX), $(REGRESSION_MODULES))
+ 	$(INSTALL_SHLIB) $(addsuffix $(DLSUFFIX), $(REGRESSION_MODULES)) '$(DESTDIR)$(pkglibdir)/'
diff --git a/contrib/spi/Makefile b/contrib/spi/Makefile
index 0c11bfc..83578fb 100644
*** a/contrib/spi/Makefile
--- b/contrib/spi/Makefile
*************** top_builddir = ../..
*** 28,30 ****
--- 28,40 ----
  include $(top_builddir)/src/Makefile.global
  include $(top_srcdir)/contrib/contrib-global.mk
  endif
+ 
+ # Build/install only the files needed for regression test support
+ REGRESSION_MODULES = autoinc refint
+ 
+ .PHONY: regression-modules install-regression-modules
+ 
+ regression-modules: $(addsuffix $(DLSUFFIX), $(REGRESSION_MODULES))
+ 
+ install-regression-modules: $(addsuffix $(DLSUFFIX), $(REGRESSION_MODULES))
+ 	$(INSTALL_SHLIB) $(addsuffix $(DLSUFFIX), $(REGRESSION_MODULES)) '$(DESTDIR)$(pkglibdir)/'
diff --git a/src/test/regress/GNUmakefile b/src/test/regress/GNUmakefile
index 90aea6c..96839db 100644
*** a/src/test/regress/GNUmakefile
--- b/src/test/regress/GNUmakefile
*************** EXTRADEFS = '-DHOST_TUPLE="$(host_tuple)
*** 41,47 ****
  
  # Build regression test driver
  
! all: pg_regress$(X)
  
  pg_regress$(X): pg_regress.o pg_regress_main.o | submake-libpgport
  	$(CC) $(CFLAGS) $^ $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@
--- 41,47 ----
  
  # Build regression test driver
  
! all: pg_regress$(X) regression-modules
  
  pg_regress$(X): pg_regress.o pg_regress_main.o | submake-libpgport
  	$(CC) $(CFLAGS) $^ $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@
*************** pg_regress.o: pg_regress.c $(top_builddi
*** 53,65 ****
  $(top_builddir)/src/port/pg_config_paths.h: $(top_builddir)/src/Makefile.global
  	$(MAKE) -C $(top_builddir)/src/port pg_config_paths.h
  
! install: all installdirs
  	$(INSTALL_PROGRAM) pg_regress$(X) '$(DESTDIR)$(pgxsdir)/$(subdir)/pg_regress$(X)'
  
  installdirs:
  	$(MKDIR_P) '$(DESTDIR)$(pgxsdir)/$(subdir)'
  
! uninstall:
  	rm -f '$(DESTDIR)$(pgxsdir)/$(subdir)/pg_regress$(X)'
  
  
--- 53,65 ----
  $(top_builddir)/src/port/pg_config_paths.h: $(top_builddir)/src/Makefile.global
  	$(MAKE) -C $(top_builddir)/src/port pg_config_paths.h
  
! install: all install-lib install-regression-modules installdirs
  	$(INSTALL_PROGRAM) pg_regress$(X) '$(DESTDIR)$(pgxsdir)/$(subdir)/pg_regress$(X)'
  
  installdirs:
  	$(MKDIR_P) '$(DESTDIR)$(pgxsdir)/$(subdir)'
  
! uninstall: uninstall-lib
  	rm -f '$(DESTDIR)$(pgxsdir)/$(subdir)/pg_regress$(X)'
  
  
*************** regress_data_files = \
*** 88,94 ****
  	$(wildcard $(srcdir)/data/*.data) \
  	$(srcdir)/parallel_schedule $(srcdir)/serial_schedule $(srcdir)/resultmap
  
! install-tests: all install install-lib installdirs-tests
  	$(MAKE) -C $(top_builddir)/contrib/spi install
  	for file in $(regress_data_files); do \
  	  $(INSTALL_DATA) $$file '$(DESTDIR)$(pkglibdir)/regress/'$$file || exit; \
--- 88,94 ----
  	$(wildcard $(srcdir)/data/*.data) \
  	$(srcdir)/parallel_schedule $(srcdir)/serial_schedule $(srcdir)/resultmap
  
! install-tests: all install installdirs-tests
  	$(MAKE) -C $(top_builddir)/contrib/spi install
  	for file in $(regress_data_files); do \
  	  $(INSTALL_DATA) $$file '$(DESTDIR)$(pkglibdir)/regress/'$$file || exit; \
*************** installdirs-tests: installdirs
*** 100,124 ****
  
  # Get some extra C modules from contrib/spi and contrib/dummy_seclabel...
  
! all: refint$(DLSUFFIX) autoinc$(DLSUFFIX) dummy_seclabel$(DLSUFFIX)
! 
! refint$(DLSUFFIX): $(top_builddir)/contrib/spi/refint$(DLSUFFIX)
! 	cp $< $@
! 
! autoinc$(DLSUFFIX): $(top_builddir)/contrib/spi/autoinc$(DLSUFFIX)
! 	cp $< $@
! 
! dummy_seclabel$(DLSUFFIX): $(top_builddir)/contrib/dummy_seclabel/dummy_seclabel$(DLSUFFIX)
! 	cp $< $@
! 
! $(top_builddir)/contrib/spi/refint$(DLSUFFIX): $(top_srcdir)/contrib/spi/refint.c
! 	$(MAKE) -C $(top_builddir)/contrib/spi refint$(DLSUFFIX)
  
! $(top_builddir)/contrib/spi/autoinc$(DLSUFFIX): $(top_srcdir)/contrib/spi/autoinc.c
! 	$(MAKE) -C $(top_builddir)/contrib/spi autoinc$(DLSUFFIX)
  
! $(top_builddir)/contrib/dummy_seclabel/dummy_seclabel$(DLSUFFIX): $(top_builddir)/contrib/dummy_seclabel/dummy_seclabel.c
! 	$(MAKE) -C $(top_builddir)/contrib/dummy_seclabel dummy_seclabel$(DLSUFFIX)
  
  # Tablespace setup
  
--- 100,114 ----
  
  # Get some extra C modules from contrib/spi and contrib/dummy_seclabel...
  
! .PHONY: regression-modules install-regression-modules
  
! regression-modules:
! 	$(MAKE) -C $(top_builddir)/contrib/spi regression-modules
! 	$(MAKE) -C $(top_builddir)/contrib/dummy_seclabel regression-modules
  
! install-regression-modules:
! 	$(MAKE) -C $(top_builddir)/contrib/spi install-regression-modules
! 	$(MAKE) -C $(top_builddir)/contrib/dummy_seclabel install-regression-modules
  
  # Tablespace setup
  
*************** tablespace-setup:
*** 132,139 ****
  ## Run tests
  ##
  
- REGRESS_OPTS = --dlpath=.
- 
  check: all tablespace-setup
  	$(pg_regress_check) $(REGRESS_OPTS) --schedule=$(srcdir)/parallel_schedule $(MAXCONNOPT) $(TEMP_CONF) $(EXTRA_TESTS)
  
--- 122,127 ----
*************** bigcheck: all tablespace-setup
*** 165,171 ****
  
  clean distclean maintainer-clean: clean-lib
  # things built by `all' target
! 	rm -f $(OBJS) refint$(DLSUFFIX) autoinc$(DLSUFFIX) dummy_seclabel$(DLSUFFIX)
  	rm -f pg_regress_main.o pg_regress.o pg_regress$(X)
  # things created by various check targets
  	rm -f $(output_files) $(input_files)
--- 153,159 ----
  
  clean distclean maintainer-clean: clean-lib
  # things built by `all' target
! 	rm -f $(OBJS)
  	rm -f pg_regress_main.o pg_regress.o pg_regress$(X)
  # things created by various check targets
  	rm -f $(output_files) $(input_files)
diff --git a/src/test/regress/input/create_function_1.source b/src/test/regress/input/create_function_1.source
index a72dd98..0bebcdd 100644
*** a/src/test/regress/input/create_function_1.source
--- b/src/test/regress/input/create_function_1.source
***************
*** 4,55 ****
  
  CREATE FUNCTION widget_in(cstring)
     RETURNS widget
!    AS '@libdir@/regress@DLSUFFIX@'
     LANGUAGE C STRICT;
  
  CREATE FUNCTION widget_out(widget)
     RETURNS cstring
!    AS '@libdir@/regress@DLSUFFIX@'
     LANGUAGE C STRICT;
  
  CREATE FUNCTION int44in(cstring)
     RETURNS city_budget
!    AS '@libdir@/regress@DLSUFFIX@'
     LANGUAGE C STRICT;
  
  CREATE FUNCTION int44out(city_budget)
     RETURNS cstring
!    AS '@libdir@/regress@DLSUFFIX@'
     LANGUAGE C STRICT;
  
  CREATE FUNCTION check_primary_key ()
  	RETURNS trigger
! 	AS '@libdir@/refint@DLSUFFIX@'
  	LANGUAGE C;
  
  CREATE FUNCTION check_foreign_key ()
  	RETURNS trigger
! 	AS '@libdir@/refint@DLSUFFIX@'
  	LANGUAGE C;
  
  CREATE FUNCTION autoinc ()
  	RETURNS trigger
! 	AS '@libdir@/autoinc@DLSUFFIX@'
  	LANGUAGE C;
  
  CREATE FUNCTION funny_dup17 ()
          RETURNS trigger
!         AS '@libdir@/regress@DLSUFFIX@'
          LANGUAGE C;
  
  CREATE FUNCTION ttdummy ()
          RETURNS trigger
!         AS '@libdir@/regress@DLSUFFIX@'
          LANGUAGE C;
  
  CREATE FUNCTION set_ttdummy (int4)
          RETURNS int4
!         AS '@libdir@/regress@DLSUFFIX@'
          LANGUAGE C STRICT;
  
  -- Things that shouldn't work:
--- 4,55 ----
  
  CREATE FUNCTION widget_in(cstring)
     RETURNS widget
!    AS '$libdir/regress'
     LANGUAGE C STRICT;
  
  CREATE FUNCTION widget_out(widget)
     RETURNS cstring
!    AS '$libdir/regress'
     LANGUAGE C STRICT;
  
  CREATE FUNCTION int44in(cstring)
     RETURNS city_budget
!    AS '$libdir/regress'
     LANGUAGE C STRICT;
  
  CREATE FUNCTION int44out(city_budget)
     RETURNS cstring
!    AS '$libdir/regress'
     LANGUAGE C STRICT;
  
  CREATE FUNCTION check_primary_key ()
  	RETURNS trigger
! 	AS '$libdir/refint'
  	LANGUAGE C;
  
  CREATE FUNCTION check_foreign_key ()
  	RETURNS trigger
! 	AS '$libdir/refint'
  	LANGUAGE C;
  
  CREATE FUNCTION autoinc ()
  	RETURNS trigger
! 	AS '$libdir/autoinc'
  	LANGUAGE C;
  
  CREATE FUNCTION funny_dup17 ()
          RETURNS trigger
!         AS '$libdir/regress'
          LANGUAGE C;
  
  CREATE FUNCTION ttdummy ()
          RETURNS trigger
!         AS '$libdir/regress'
          LANGUAGE C;
  
  CREATE FUNCTION set_ttdummy (int4)
          RETURNS int4
!         AS '$libdir/regress'
          LANGUAGE C STRICT;
  
  -- Things that shouldn't work:
*************** CREATE FUNCTION test1 (int) RETURNS int 
*** 73,79 ****
      AS 'nosuchfile';
  
  CREATE FUNCTION test1 (int) RETURNS int LANGUAGE C
!     AS '@libdir@/regress@DLSUFFIX@', 'nosuchsymbol';
  
  CREATE FUNCTION test1 (int) RETURNS int LANGUAGE internal
      AS 'nosuch';
--- 73,79 ----
      AS 'nosuchfile';
  
  CREATE FUNCTION test1 (int) RETURNS int LANGUAGE C
!     AS '$libdir/regress', 'nosuchsymbol';
  
  CREATE FUNCTION test1 (int) RETURNS int LANGUAGE internal
      AS 'nosuch';
diff --git a/src/test/regress/input/create_function_2.source b/src/test/regress/input/create_function_2.source
index 6aed5f0..3d077a1 100644
*** a/src/test/regress/input/create_function_2.source
--- b/src/test/regress/input/create_function_2.source
*************** CREATE FUNCTION user_relns()
*** 36,70 ****
  
  CREATE FUNCTION pt_in_widget(point, widget)
     RETURNS bool
!    AS '@libdir@/regress@DLSUFFIX@'
     LANGUAGE C;
  
  CREATE FUNCTION overpaid(emp)
     RETURNS bool
!    AS '@libdir@/regress@DLSUFFIX@'
     LANGUAGE C;
  
  CREATE FUNCTION boxarea(box)
     RETURNS float8
!    AS '@libdir@/regress@DLSUFFIX@'
     LANGUAGE C;
  
  CREATE FUNCTION interpt_pp(path, path)
     RETURNS point
!    AS '@libdir@/regress@DLSUFFIX@'
     LANGUAGE C;
  
  CREATE FUNCTION reverse_name(name)
     RETURNS name
!    AS '@libdir@/regress@DLSUFFIX@'
     LANGUAGE C;
  
  CREATE FUNCTION oldstyle_length(int4, text)
     RETURNS int4
!    AS '@libdir@/regress@DLSUFFIX@'
     LANGUAGE C;
  
  --
  -- Function dynamic loading
  --
! LOAD '@libdir@/regress@DLSUFFIX@';
--- 36,70 ----
  
  CREATE FUNCTION pt_in_widget(point, widget)
     RETURNS bool
!    AS '$libdir/regress'
     LANGUAGE C;
  
  CREATE FUNCTION overpaid(emp)
     RETURNS bool
!    AS '$libdir/regress'
     LANGUAGE C;
  
  CREATE FUNCTION boxarea(box)
     RETURNS float8
!    AS '$libdir/regress'
     LANGUAGE C;
  
  CREATE FUNCTION interpt_pp(path, path)
     RETURNS point
!    AS '$libdir/regress'
     LANGUAGE C;
  
  CREATE FUNCTION reverse_name(name)
     RETURNS name
!    AS '$libdir/regress'
     LANGUAGE C;
  
  CREATE FUNCTION oldstyle_length(int4, text)
     RETURNS int4
!    AS '$libdir/regress'
     LANGUAGE C;
  
  --
  -- Function dynamic loading
  --
! LOAD '$libdir/regress';
diff --git a/src/test/regress/input/security_label.source b/src/test/regress/input/security_label.source
index 70771d7..a77ff09 100644
*** a/src/test/regress/input/security_label.source
--- b/src/test/regress/input/security_label.source
*************** SECURITY LABEL ON ROLE seclabel_user1 IS
*** 40,46 ****
  SECURITY LABEL ON ROLE seclabel_user3 IS 'unclassified';			-- fail
  
  -- Load dummy external security provider
! LOAD '@libdir@/dummy_seclabel@DLSUFFIX@';
  
  --
  -- Test of SECURITY LABEL statement with a plugin
--- 40,46 ----
  SECURITY LABEL ON ROLE seclabel_user3 IS 'unclassified';			-- fail
  
  -- Load dummy external security provider
! LOAD '$libdir/dummy_seclabel';
  
  --
  -- Test of SECURITY LABEL statement with a plugin
diff --git a/src/test/regress/output/create_function_1.source b/src/test/regress/output/create_function_1.source
index 61b87ed..62d34d6 100644
*** a/src/test/regress/output/create_function_1.source
--- b/src/test/regress/output/create_function_1.source
***************
*** 3,51 ****
  --
  CREATE FUNCTION widget_in(cstring)
     RETURNS widget
!    AS '@libdir@/regress@DLSUFFIX@'
     LANGUAGE C STRICT;
  NOTICE:  type "widget" is not yet defined
  DETAIL:  Creating a shell type definition.
  CREATE FUNCTION widget_out(widget)
     RETURNS cstring
!    AS '@libdir@/regress@DLSUFFIX@'
     LANGUAGE C STRICT;
  NOTICE:  argument type widget is only a shell
  CREATE FUNCTION int44in(cstring)
     RETURNS city_budget
!    AS '@libdir@/regress@DLSUFFIX@'
     LANGUAGE C STRICT;
  NOTICE:  type "city_budget" is not yet defined
  DETAIL:  Creating a shell type definition.
  CREATE FUNCTION int44out(city_budget)
     RETURNS cstring
!    AS '@libdir@/regress@DLSUFFIX@'
     LANGUAGE C STRICT;
  NOTICE:  argument type city_budget is only a shell
  CREATE FUNCTION check_primary_key ()
  	RETURNS trigger
! 	AS '@libdir@/refint@DLSUFFIX@'
  	LANGUAGE C;
  CREATE FUNCTION check_foreign_key ()
  	RETURNS trigger
! 	AS '@libdir@/refint@DLSUFFIX@'
  	LANGUAGE C;
  CREATE FUNCTION autoinc ()
  	RETURNS trigger
! 	AS '@libdir@/autoinc@DLSUFFIX@'
  	LANGUAGE C;
  CREATE FUNCTION funny_dup17 ()
          RETURNS trigger
!         AS '@libdir@/regress@DLSUFFIX@'
          LANGUAGE C;
  CREATE FUNCTION ttdummy ()
          RETURNS trigger
!         AS '@libdir@/regress@DLSUFFIX@'
          LANGUAGE C;
  CREATE FUNCTION set_ttdummy (int4)
          RETURNS int4
!         AS '@libdir@/regress@DLSUFFIX@'
          LANGUAGE C STRICT;
  -- Things that shouldn't work:
  CREATE FUNCTION test1 (int) RETURNS int LANGUAGE SQL
--- 3,51 ----
  --
  CREATE FUNCTION widget_in(cstring)
     RETURNS widget
!    AS '$libdir/regress'
     LANGUAGE C STRICT;
  NOTICE:  type "widget" is not yet defined
  DETAIL:  Creating a shell type definition.
  CREATE FUNCTION widget_out(widget)
     RETURNS cstring
!    AS '$libdir/regress'
     LANGUAGE C STRICT;
  NOTICE:  argument type widget is only a shell
  CREATE FUNCTION int44in(cstring)
     RETURNS city_budget
!    AS '$libdir/regress'
     LANGUAGE C STRICT;
  NOTICE:  type "city_budget" is not yet defined
  DETAIL:  Creating a shell type definition.
  CREATE FUNCTION int44out(city_budget)
     RETURNS cstring
!    AS '$libdir/regress'
     LANGUAGE C STRICT;
  NOTICE:  argument type city_budget is only a shell
  CREATE FUNCTION check_primary_key ()
  	RETURNS trigger
! 	AS '$libdir/refint'
  	LANGUAGE C;
  CREATE FUNCTION check_foreign_key ()
  	RETURNS trigger
! 	AS '$libdir/refint'
  	LANGUAGE C;
  CREATE FUNCTION autoinc ()
  	RETURNS trigger
! 	AS '$libdir/autoinc'
  	LANGUAGE C;
  CREATE FUNCTION funny_dup17 ()
          RETURNS trigger
!         AS '$libdir/regress'
          LANGUAGE C;
  CREATE FUNCTION ttdummy ()
          RETURNS trigger
!         AS '$libdir/regress'
          LANGUAGE C;
  CREATE FUNCTION set_ttdummy (int4)
          RETURNS int4
!         AS '$libdir/regress'
          LANGUAGE C STRICT;
  -- Things that shouldn't work:
  CREATE FUNCTION test1 (int) RETURNS int LANGUAGE SQL
*************** CREATE FUNCTION test1 (int) RETURNS int 
*** 75,81 ****
      AS 'nosuchfile';
  ERROR:  could not access file "nosuchfile": No such file or directory
  CREATE FUNCTION test1 (int) RETURNS int LANGUAGE C
!     AS '@libdir@/regress@DLSUFFIX@', 'nosuchsymbol';
  ERROR:  could not find function "nosuchsymbol" in file "@libdir@/regress@DLSUFFIX@"
  CREATE FUNCTION test1 (int) RETURNS int LANGUAGE internal
      AS 'nosuch';
--- 75,81 ----
      AS 'nosuchfile';
  ERROR:  could not access file "nosuchfile": No such file or directory
  CREATE FUNCTION test1 (int) RETURNS int LANGUAGE C
!     AS '$libdir/regress', 'nosuchsymbol';
  ERROR:  could not find function "nosuchsymbol" in file "@libdir@/regress@DLSUFFIX@"
  CREATE FUNCTION test1 (int) RETURNS int LANGUAGE internal
      AS 'nosuch';
diff --git a/src/test/regress/output/create_function_2.source b/src/test/regress/output/create_function_2.source
index 94ab7eb..8987c2a 100644
*** a/src/test/regress/output/create_function_2.source
--- b/src/test/regress/output/create_function_2.source
*************** CREATE FUNCTION user_relns()
*** 29,57 ****
     LANGUAGE SQL;
  CREATE FUNCTION pt_in_widget(point, widget)
     RETURNS bool
!    AS '@libdir@/regress@DLSUFFIX@'
     LANGUAGE C;
  CREATE FUNCTION overpaid(emp)
     RETURNS bool
!    AS '@libdir@/regress@DLSUFFIX@'
     LANGUAGE C;
  CREATE FUNCTION boxarea(box)
     RETURNS float8
!    AS '@libdir@/regress@DLSUFFIX@'
     LANGUAGE C;
  CREATE FUNCTION interpt_pp(path, path)
     RETURNS point
!    AS '@libdir@/regress@DLSUFFIX@'
     LANGUAGE C;
  CREATE FUNCTION reverse_name(name)
     RETURNS name
!    AS '@libdir@/regress@DLSUFFIX@'
     LANGUAGE C;
  CREATE FUNCTION oldstyle_length(int4, text)
     RETURNS int4
!    AS '@libdir@/regress@DLSUFFIX@'
     LANGUAGE C;
  --
  -- Function dynamic loading
  --
! LOAD '@libdir@/regress@DLSUFFIX@';
--- 29,57 ----
     LANGUAGE SQL;
  CREATE FUNCTION pt_in_widget(point, widget)
     RETURNS bool
!    AS '$libdir/regress'
     LANGUAGE C;
  CREATE FUNCTION overpaid(emp)
     RETURNS bool
!    AS '$libdir/regress'
     LANGUAGE C;
  CREATE FUNCTION boxarea(box)
     RETURNS float8
!    AS '$libdir/regress'
     LANGUAGE C;
  CREATE FUNCTION interpt_pp(path, path)
     RETURNS point
!    AS '$libdir/regress'
     LANGUAGE C;
  CREATE FUNCTION reverse_name(name)
     RETURNS name
!    AS '$libdir/regress'
     LANGUAGE C;
  CREATE FUNCTION oldstyle_length(int4, text)
     RETURNS int4
!    AS '$libdir/regress'
     LANGUAGE C;
  --
  -- Function dynamic loading
  --
! LOAD '$libdir/regress';
diff --git a/src/test/regress/output/security_label.source b/src/test/regress/output/security_label.source
index 6994d19..b86b29b 100644
*** a/src/test/regress/output/security_label.source
--- b/src/test/regress/output/security_label.source
*************** ERROR:  no security label providers have
*** 38,44 ****
  SECURITY LABEL ON ROLE seclabel_user3 IS 'unclassified';			-- fail
  ERROR:  no security label providers have been loaded
  -- Load dummy external security provider
! LOAD '@abs_builddir@/dummy_seclabel@DLSUFFIX@';
  --
  -- Test of SECURITY LABEL statement with a plugin
  --
--- 38,44 ----
  SECURITY LABEL ON ROLE seclabel_user3 IS 'unclassified';			-- fail
  ERROR:  no security label providers have been loaded
  -- Load dummy external security provider
! LOAD '$libdir/dummy_seclabel';
  --
  -- Test of SECURITY LABEL statement with a plugin
  --
diff --git a/src/test/regress/pg_regress.c b/src/test/regress/pg_regress.c
index d9cd053..c4d56f2 100644
*** a/src/test/regress/pg_regress.c
--- b/src/test/regress/pg_regress.c
*************** typedef struct _resultmap
*** 54,59 ****
--- 54,60 ----
   */
  char	   *bindir = PGBINDIR;
  char	   *libdir = LIBDIR;
+ char	   *pkglibdir = PKGLIBDIR;
  char	   *datadir = PGSHAREDIR;
  char	   *host_platform = HOST_TUPLE;
  
*************** static bool use_existing = false;
*** 99,105 ****
  static char *hostname = NULL;
  static int	port = -1;
  static bool port_specified_by_user = false;
! static char *dlpath = PKGLIBDIR;
  static char *user = NULL;
  static _stringlist *extraroles = NULL;
  static _stringlist *extra_install = NULL;
--- 100,106 ----
  static char *hostname = NULL;
  static int	port = -1;
  static bool port_specified_by_user = false;
! static char *dlpath = NULL;
  static char *user = NULL;
  static _stringlist *extraroles = NULL;
  static _stringlist *extra_install = NULL;
*************** convert_sourcefiles_in(char *source_subd
*** 507,513 ****
  			replace_string(line, "@abs_srcdir@", inputdir);
  			replace_string(line, "@abs_builddir@", outputdir);
  			replace_string(line, "@testtablespace@", testtablespace);
! 			replace_string(line, "@libdir@", dlpath);
  			replace_string(line, "@DLSUFFIX@", DLSUFFIX);
  			fputs(line, outfile);
  		}
--- 508,514 ----
  			replace_string(line, "@abs_srcdir@", inputdir);
  			replace_string(line, "@abs_builddir@", outputdir);
  			replace_string(line, "@testtablespace@", testtablespace);
! 			replace_string(line, "@libdir@", dlpath ? dlpath : pkglibdir);
  			replace_string(line, "@DLSUFFIX@", DLSUFFIX);
  			fputs(line, outfile);
  		}
*************** initialize_environment(void)
*** 795,808 ****
--- 796,817 ----
  		 */
  		tmp = malloc(strlen(temp_install) + 32 + strlen(bindir));
  		sprintf(tmp, "%s/install/%s", temp_install, bindir);
+ 		canonicalize_path(tmp);
  		bindir = tmp;
  
  		tmp = malloc(strlen(temp_install) + 32 + strlen(libdir));
  		sprintf(tmp, "%s/install/%s", temp_install, libdir);
+ 		canonicalize_path(tmp);
  		libdir = tmp;
  
+ 		tmp = malloc(strlen(temp_install) + 32 + strlen(pkglibdir));
+ 		sprintf(tmp, "%s/install/%s", temp_install, pkglibdir);
+ 		canonicalize_path(tmp);
+ 		pkglibdir = tmp;
+ 
  		tmp = malloc(strlen(temp_install) + 32 + strlen(datadir));
  		sprintf(tmp, "%s/install/%s", temp_install, datadir);
+ 		canonicalize_path(tmp);
  		datadir = tmp;
  
  		/* psql will be installed into temp-install bindir */
*************** make_absolute_path(const char *in)
*** 1857,1862 ****
--- 1866,1879 ----
  			}
  		}
  
+ 		/*
+ 		 * We don't bother with fully normalizing the joined path, but at
+ 		 * least get rid of "./" prefixed to the input.  (Probably
+ 		 * canonicalize_path ought to handle that, but it doesn't.)
+ 		 */
+ 		if (strncmp(in, "./", 2) == 0)
+ 			in += 2;
+ 
  		result = malloc(strlen(cwdbuf) + strlen(in) + 2);
  		sprintf(result, "%s/%s", cwdbuf, in);
  	}
*************** regression_main(int argc, char *argv[], 
*** 2076,2082 ****
  
  	inputdir = make_absolute_path(inputdir);
  	outputdir = make_absolute_path(outputdir);
! 	dlpath = make_absolute_path(dlpath);
  
  	/*
  	 * Initialization
--- 2093,2100 ----
  
  	inputdir = make_absolute_path(inputdir);
  	outputdir = make_absolute_path(outputdir);
! 	if (dlpath)
! 		dlpath = make_absolute_path(dlpath);
  
  	/*
  	 * Initialization
