diff --git a/doc/src/sgml/regress.sgml b/doc/src/sgml/regress.sgml
index 9d65e4e0f4acd378f7845e7cadff0cf9fe74e6f9..d09137fcc0f14489354de31f33e2d3f371275b53 100644
--- a/doc/src/sgml/regress.sgml
+++ b/doc/src/sgml/regress.sgml
@@ -1,4 +1,4 @@
-<!-- $PostgreSQL: pgsql/doc/src/sgml/regress.sgml,v 1.58 2007/06/12 17:49:12 mha Exp $ -->
+<!-- $PostgreSQL: pgsql/doc/src/sgml/regress.sgml,v 1.59 2008/05/30 00:04:32 tgl Exp $ -->
 
  <chapter id="regress">
   <title id="regress-title">Regression Tests</title>
@@ -48,9 +48,9 @@ gmake check
    script.  At the end you should see something like
 <screen>
 <computeroutput>
-======================
- All 100 tests passed.
-======================
+=======================
+ All 115 tests passed.
+=======================
 </computeroutput>
 </screen>
    or otherwise a note about which tests failed.  See <xref
@@ -67,7 +67,6 @@ gmake check
     For example
 <screen>
 <prompt>root# </prompt><userinput>chmod -R a+w src/test/regress</userinput>
-<prompt>root# </prompt><userinput>chmod -R a+w contrib/spi</userinput>
 <prompt>root# </prompt><userinput>su - joeuser</userinput>
 <prompt>joeuser$ </prompt><userinput>cd <replaceable>top-level build directory</></userinput>
 <prompt>joeuser$ </prompt><userinput>gmake check</userinput>
diff --git a/src/test/regress/GNUmakefile b/src/test/regress/GNUmakefile
index f8eb07e8b7adc7a427128f0b448052b0f80a80ef..deef2c60f6afa2709c9e17adbe36a6c4813dcf73 100644
--- a/src/test/regress/GNUmakefile
+++ b/src/test/regress/GNUmakefile
@@ -6,7 +6,7 @@
 # Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group
 # Portions Copyright (c) 1994, Regents of the University of California
 #
-# $PostgreSQL: pgsql/src/test/regress/GNUmakefile,v 1.73 2008/04/07 14:15:58 petere Exp $
+# $PostgreSQL: pgsql/src/test/regress/GNUmakefile,v 1.74 2008/05/30 00:04:32 tgl Exp $
 #
 #-------------------------------------------------------------------------
 
@@ -14,8 +14,6 @@ subdir = src/test/regress
 top_builddir = ../../..
 include $(top_builddir)/src/Makefile.global
 
-contribdir = $(top_builddir)/contrib
-
 # port number for temp-installation test postmaster
 TEMP_PORT = 5$(DEF_PGPORT)
 
@@ -115,20 +113,33 @@ $(remaining_files_build): $(abs_builddir)/%: $(srcdir)/%
 endif
 
 
-# And finally some extra C modules...
+# Get some extra C modules from contrib/spi...
+
+all: refint$(DLSUFFIX) autoinc$(DLSUFFIX)
+
+refint$(DLSUFFIX): $(top_builddir)/contrib/spi/refint$(DLSUFFIX)
+	cp $< $@
+
+autoinc$(DLSUFFIX): $(top_builddir)/contrib/spi/autoinc$(DLSUFFIX)
+	cp $< $@
 
-all: all-spi tablespace-setup
+$(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)
 
-.PHONY: all-spi
-all-spi:
-	$(MAKE) -C $(contribdir)/spi refint$(DLSUFFIX) autoinc$(DLSUFFIX)
 
 # Tablespace setup
+
+all: tablespace-setup
+
 .PHONY: tablespace-setup
 tablespace-setup:
 	rm -rf ./testtablespace
 	mkdir ./testtablespace
 
+
 ##
 ## Run tests
 ##
@@ -162,8 +173,7 @@ bigcheck: all
 
 clean distclean maintainer-clean: clean-lib
 # things built by `all' target
-	rm -f $(OBJS)
-	$(MAKE) -C $(contribdir)/spi clean
+	rm -f $(OBJS) refint$(DLSUFFIX) autoinc$(DLSUFFIX)
 	rm -f $(output_files) $(input_files) pg_regress_main.o pg_regress.o pg_regress$(X)
 # things created by various check targets
 	rm -rf testtablespace
diff --git a/src/test/regress/input/create_function_1.source b/src/test/regress/input/create_function_1.source
index fb357d93b07c4d8805d1ab2286a02e86d3f373af..15de37ca26324ad8f71cca69f36352a3533e2ecb 100644
--- a/src/test/regress/input/create_function_1.source
+++ b/src/test/regress/input/create_function_1.source
@@ -24,17 +24,17 @@ CREATE FUNCTION int44out(city_budget)
 
 CREATE FUNCTION check_primary_key ()
 	RETURNS trigger
-	AS '@abs_builddir@/../../../contrib/spi/refint@DLSUFFIX@'
+	AS '@abs_builddir@/refint@DLSUFFIX@'
 	LANGUAGE C;
 
 CREATE FUNCTION check_foreign_key ()
 	RETURNS trigger
-	AS '@abs_builddir@/../../../contrib/spi/refint@DLSUFFIX@'
+	AS '@abs_builddir@/refint@DLSUFFIX@'
 	LANGUAGE C;
 
 CREATE FUNCTION autoinc ()
 	RETURNS trigger
-	AS '@abs_builddir@/../../../contrib/spi/autoinc@DLSUFFIX@'
+	AS '@abs_builddir@/autoinc@DLSUFFIX@'
 	LANGUAGE C;
 
 CREATE FUNCTION funny_dup17 ()
diff --git a/src/test/regress/output/create_function_1.source b/src/test/regress/output/create_function_1.source
index 1b309cf11a7815b5bb744c5fe8b1102e7413feb0..5c3779a2250a0b6c4747e3610776324d9a62e9f1 100644
--- a/src/test/regress/output/create_function_1.source
+++ b/src/test/regress/output/create_function_1.source
@@ -25,15 +25,15 @@ CREATE FUNCTION int44out(city_budget)
 NOTICE:  argument type city_budget is only a shell
 CREATE FUNCTION check_primary_key ()
 	RETURNS trigger
-	AS '@abs_builddir@/../../../contrib/spi/refint@DLSUFFIX@'
+	AS '@abs_builddir@/refint@DLSUFFIX@'
 	LANGUAGE C;
 CREATE FUNCTION check_foreign_key ()
 	RETURNS trigger
-	AS '@abs_builddir@/../../../contrib/spi/refint@DLSUFFIX@'
+	AS '@abs_builddir@/refint@DLSUFFIX@'
 	LANGUAGE C;
 CREATE FUNCTION autoinc ()
 	RETURNS trigger
-	AS '@abs_builddir@/../../../contrib/spi/autoinc@DLSUFFIX@'
+	AS '@abs_builddir@/autoinc@DLSUFFIX@'
 	LANGUAGE C;
 CREATE FUNCTION funny_dup17 ()
         RETURNS trigger
diff --git a/src/tools/msvc/clean.bat b/src/tools/msvc/clean.bat
index 9b3b278bad90eb3e57c7f85ab035c766005f7169..d061f7c57f5dd8c65fac5872aaefd5b612c2fd0c 100755
--- a/src/tools/msvc/clean.bat
+++ b/src/tools/msvc/clean.bat
@@ -1,5 +1,5 @@
 @echo off
-REM $PostgreSQL: pgsql/src/tools/msvc/clean.bat,v 1.10 2008/02/06 15:13:25 mha Exp $
+REM $PostgreSQL: pgsql/src/tools/msvc/clean.bat,v 1.11 2008/05/30 00:04:32 tgl Exp $
 
 set DIST=0
 if "%1"=="dist" set DIST=1
@@ -65,6 +65,8 @@ if exist src\test\regress\tmp_check rd /s /q src\test\regress\tmp_check
 if exist contrib\spi\refint.dll del /q contrib\spi\refint.dll
 if exist contrib\spi\autoinc.dll del /q contrib\spi\autoinc.dll
 if exist src\test\regress\regress.dll del /q src\test\regress\regress.dll
+if exist src\test\regress\refint.dll del /q src\test\regress\refint.dll
+if exist src\test\regress\autoinc.dll del /q src\test\regress\autoinc.dll
 
 REM Clean up datafiles built with contrib
 REM cd contrib
diff --git a/src/tools/msvc/vcregress.pl b/src/tools/msvc/vcregress.pl
index 32e2548e976a3a107f3958b9b2b916d617dc9420..53f6c59501f95d1c004aa7f3ea1b1db6a3bb4c37 100644
--- a/src/tools/msvc/vcregress.pl
+++ b/src/tools/msvc/vcregress.pl
@@ -1,7 +1,7 @@
 
 # -*-perl-*- hey - emacs - this is a perl file
 
-# $PostgreSQL: pgsql/src/tools/msvc/vcregress.pl,v 1.6 2007/11/13 22:49:47 tgl Exp $
+# $PostgreSQL: pgsql/src/tools/msvc/vcregress.pl,v 1.7 2008/05/30 00:04:32 tgl Exp $
 
 use strict;
 
@@ -36,8 +36,8 @@ else
 # use a capital C here because config.pl has $config
 my $Config = -e "release/postgres/postgres.exe" ? "Release" : "Debug";
 
-copy("$Config/refint/refint.dll","contrib/spi");
-copy("$Config/autoinc/autoinc.dll","contrib/spi");
+copy("$Config/refint/refint.dll","src/test/regress");
+copy("$Config/autoinc/autoinc.dll","src/test/regress");
 copy("$Config/regress/regress.dll","src/test/regress");
 
 $ENV{PATH} = "../../../$Config/libpq;../../$Config/libpq;$ENV{PATH}";