On Thu, Mar 12, 2015 at 8:50 AM, Peter Eisentraut wrote:
> On 3/11/15 10:00 AM, Andres Freund wrote:
>> On 2015-03-10 22:06:37 -0300, Alvaro Herrera wrote:
>>> I don't think we care one bit whether these modules use pgxs, at least
>>> not currently.  If we find any issues later on, it should be an easy fix
>>> anyway.
>>
>> I personally find it quite ugly to use pgxs for stuff in
>> src/bin. pgxs.mk says:
>> # This file contains generic rules to build many kinds of simple
>> # extension modules.  You only need to set a few variables and include
>> # this file, the rest will be done here.
>
> Let's get history straight.  pgxs was not initially an external
> extension building framework.  It was a refactoring of our own internal
> makefile rules, because a lot of code under contrib had the same rules
> copy-and-pasted.  It was only much later that it was rebranded for
> external use.  It's debatable why it wasn't expanded to also be used in
> src/bin/, but I attribute that to a combination of boredom, complicated
> special cases under src/bin/, less frequent additions under src/bin/,
> and said rebranding -- not because it would have been a bad idea.
>
> You effectively suggest that we are not allowed to use our own code and
> propose that we undo that refactoring, and then what?  I'll just
> resubmit the same patch from 2001 to refactor it again?
>
>> I don't object at all to introducing more generic rules for src/bin, but
>> that seems like a separate task. And one that should be done right not
>> just use some convenient hack. And you can't tell me that
>> +NO_PGXS = 1
>> +include $(top_srcdir)/src/makefiles/pgxs.mk
>> isn't a hack...
>
> Well, that's unfortunate, but I'd rather live with one line of hack for
> a while that I can easily fix later, instead of writing completely new
> makefiles from scratch.  Who is going to want to debug those, by the
> way?  The turnaround time for makefile changes in this project is one
> month per line, because we can't get anything reviewed across all
> platforms any faster.

Well, TBH, I am on Andres' and Tom's side for this stuff. It feels
that using a PGXS rule like that is a trap for circular dependencies
and I am sure we do not want that. I think as well that we should
involve all the other utilities in src/bin if we do such a
refactoring, so that's definitely a next step, not this one obviously.

Attached is a series of patch rebased on current HEAD, there were some
conflicts after perl-tidying the refactoring patch for MSVC. Note that
this series still uses PGXS in the Makefiles, I am fine to update them
if necessary once this matter is set (already did this stuff upthread
with a previous version).
-- 
Michael
From 8c2ff9e47b8047351b503ff82c908199eb31ad6c Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <pete...@gmx.net>
Date: Tue, 10 Mar 2015 20:42:28 -0700
Subject: [PATCH 1/7] Move pg_archivecleanup from contrib/ to src/bin/

---
 contrib/Makefile                                   |  1 -
 contrib/pg_archivecleanup/Makefile                 | 18 ---------------
 doc/src/sgml/contrib.sgml                          |  1 -
 doc/src/sgml/filelist.sgml                         |  1 -
 doc/src/sgml/ref/allfiles.sgml                     |  1 +
 doc/src/sgml/{ => ref}/pgarchivecleanup.sgml       | 10 +--------
 doc/src/sgml/reference.sgml                        |  1 +
 src/bin/Makefile                                   |  1 +
 {contrib => src/bin}/pg_archivecleanup/.gitignore  |  0
 src/bin/pg_archivecleanup/Makefile                 | 14 ++++++++++++
 .../bin}/pg_archivecleanup/pg_archivecleanup.c     |  2 +-
 src/tools/msvc/Mkvcbuild.pm                        | 26 +++++++++++-----------
 12 files changed, 32 insertions(+), 44 deletions(-)
 delete mode 100644 contrib/pg_archivecleanup/Makefile
 rename doc/src/sgml/{ => ref}/pgarchivecleanup.sgml (97%)
 rename {contrib => src/bin}/pg_archivecleanup/.gitignore (100%)
 create mode 100644 src/bin/pg_archivecleanup/Makefile
 rename {contrib => src/bin}/pg_archivecleanup/pg_archivecleanup.c (99%)

diff --git a/contrib/Makefile b/contrib/Makefile
index 195d447..c56050e 100644
--- a/contrib/Makefile
+++ b/contrib/Makefile
@@ -28,7 +28,6 @@ SUBDIRS = \
 		oid2name	\
 		pageinspect	\
 		passwordcheck	\
-		pg_archivecleanup \
 		pg_buffercache	\
 		pg_freespacemap \
 		pg_prewarm	\
diff --git a/contrib/pg_archivecleanup/Makefile b/contrib/pg_archivecleanup/Makefile
deleted file mode 100644
index ab52390..0000000
diff --git a/doc/src/sgml/contrib.sgml b/doc/src/sgml/contrib.sgml
index a698d0f..f21fa14 100644
--- a/doc/src/sgml/contrib.sgml
+++ b/doc/src/sgml/contrib.sgml
@@ -202,7 +202,6 @@ pages.
    part of the core <productname>PostgreSQL</productname> distribution.
   </para>
 
- &pgarchivecleanup;
  &pgstandby;
  &pgtestfsync;
  &pgtesttiming;
diff --git a/doc/src/sgml/filelist.sgml b/doc/src/sgml/filelist.sgml
index f03b72a..5e3c34b 100644
--- a/doc/src/sgml/filelist.sgml
+++ b/doc/src/sgml/filelist.sgml
@@ -125,7 +125,6 @@
 <!ENTITY pageinspect     SYSTEM "pageinspect.sgml">
 <!ENTITY passwordcheck   SYSTEM "passwordcheck.sgml">
 <!ENTITY pgbench         SYSTEM "pgbench.sgml">
-<!ENTITY pgarchivecleanup SYSTEM "pgarchivecleanup.sgml">
 <!ENTITY pgbuffercache   SYSTEM "pgbuffercache.sgml">
 <!ENTITY pgcrypto        SYSTEM "pgcrypto.sgml">
 <!ENTITY pgfreespacemap  SYSTEM "pgfreespacemap.sgml">
diff --git a/doc/src/sgml/ref/allfiles.sgml b/doc/src/sgml/ref/allfiles.sgml
index 7aa3128..cbe4611 100644
--- a/doc/src/sgml/ref/allfiles.sgml
+++ b/doc/src/sgml/ref/allfiles.sgml
@@ -179,6 +179,7 @@ Complete list of usable sgml source files in this directory.
 <!ENTITY dropuser           SYSTEM "dropuser.sgml">
 <!ENTITY ecpgRef            SYSTEM "ecpg-ref.sgml">
 <!ENTITY initdb             SYSTEM "initdb.sgml">
+<!ENTITY pgarchivecleanup   SYSTEM "pgarchivecleanup.sgml">
 <!ENTITY pgBasebackup       SYSTEM "pg_basebackup.sgml">
 <!ENTITY pgConfig           SYSTEM "pg_config-ref.sgml">
 <!ENTITY pgControldata      SYSTEM "pg_controldata.sgml">
diff --git a/doc/src/sgml/pgarchivecleanup.sgml b/doc/src/sgml/ref/pgarchivecleanup.sgml
similarity index 97%
rename from doc/src/sgml/pgarchivecleanup.sgml
rename to doc/src/sgml/ref/pgarchivecleanup.sgml
index fdf0cbb..779159d 100644
--- a/doc/src/sgml/pgarchivecleanup.sgml
+++ b/doc/src/sgml/ref/pgarchivecleanup.sgml
@@ -1,4 +1,4 @@
-<!-- doc/src/sgml/pgarchivecleanup.sgml -->
+<!-- doc/src/sgml/ref/pgarchivecleanup.sgml -->
 
 <refentry id="pgarchivecleanup">
  <indexterm zone="pgarchivecleanup">
@@ -194,14 +194,6 @@ archive_cleanup_command = 'pg_archivecleanup -d /mnt/standby/archive %r 2>>clean
  </refsect1>
 
  <refsect1>
-  <title>Author</title>
-
-  <para>
-   Simon Riggs <email>si...@2ndquadrant.com</email>
-  </para>
- </refsect1>
-
- <refsect1>
   <title>See Also</title>
 
   <simplelist type="inline">
diff --git a/doc/src/sgml/reference.sgml b/doc/src/sgml/reference.sgml
index 10c9a6d..62267db 100644
--- a/doc/src/sgml/reference.sgml
+++ b/doc/src/sgml/reference.sgml
@@ -257,6 +257,7 @@
   </partintro>
 
    &initdb;
+   &pgarchivecleanup;
    &pgControldata;
    &pgCtl;
    &pgResetxlog;
diff --git a/src/bin/Makefile b/src/bin/Makefile
index 90ca1a8..2347076 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -15,6 +15,7 @@ include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
 	initdb \
+	pg_archivecleanup \
 	pg_basebackup \
 	pg_config \
 	pg_controldata \
diff --git a/contrib/pg_archivecleanup/.gitignore b/src/bin/pg_archivecleanup/.gitignore
similarity index 100%
rename from contrib/pg_archivecleanup/.gitignore
rename to src/bin/pg_archivecleanup/.gitignore
diff --git a/src/bin/pg_archivecleanup/Makefile b/src/bin/pg_archivecleanup/Makefile
new file mode 100644
index 0000000..5df86eb
--- /dev/null
+++ b/src/bin/pg_archivecleanup/Makefile
@@ -0,0 +1,14 @@
+# src/bin/pg_archivecleanup/Makefile
+
+PGFILEDESC = "pg_archivecleanup - cleans archive when used with streaming replication"
+PGAPPICON = win32
+
+subdir = src/bin/pg_archivecleanup
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PROGRAM = pg_archivecleanup
+OBJS	= pg_archivecleanup.o $(WIN32RES)
+
+NO_PGXS = 1
+include $(top_srcdir)/src/makefiles/pgxs.mk
diff --git a/contrib/pg_archivecleanup/pg_archivecleanup.c b/src/bin/pg_archivecleanup/pg_archivecleanup.c
similarity index 99%
rename from contrib/pg_archivecleanup/pg_archivecleanup.c
rename to src/bin/pg_archivecleanup/pg_archivecleanup.c
index 97225a8..2ff2a27 100644
--- a/contrib/pg_archivecleanup/pg_archivecleanup.c
+++ b/src/bin/pg_archivecleanup/pg_archivecleanup.c
@@ -1,5 +1,5 @@
 /*
- * contrib/pg_archivecleanup/pg_archivecleanup.c
+ * src/bin/pg_archivecleanup/pg_archivecleanup.c
  *
  * pg_archivecleanup.c
  *
diff --git a/src/tools/msvc/Mkvcbuild.pm b/src/tools/msvc/Mkvcbuild.pm
index 989a2ec..b00f335 100644
--- a/src/tools/msvc/Mkvcbuild.pm
+++ b/src/tools/msvc/Mkvcbuild.pm
@@ -34,17 +34,15 @@ my $contrib_defines = { 'refint' => 'REFINT_VERBOSE' };
 my @contrib_uselibpq =
   ('dblink', 'oid2name', 'pgbench', 'pg_upgrade', 'postgres_fdw', 'vacuumlo');
 my @contrib_uselibpgport = (
-	'oid2name',      'pgbench',
-	'pg_standby',    'pg_archivecleanup',
-	'pg_test_fsync', 'pg_test_timing',
-	'pg_upgrade',    'pg_xlogdump',
-	'vacuumlo');
+	'oid2name',       'pgbench',
+	'pg_standby',     'pg_test_fsync',
+	'pg_test_timing', 'pg_upgrade',
+	'pg_xlogdump',    'vacuumlo');
 my @contrib_uselibpgcommon = (
-	'oid2name',      'pgbench',
-	'pg_standby',    'pg_archivecleanup',
-	'pg_test_fsync', 'pg_test_timing',
-	'pg_upgrade',    'pg_xlogdump',
-	'vacuumlo');
+	'oid2name',       'pgbench',
+	'pg_standby',     'pg_test_fsync',
+	'pg_test_timing', 'pg_upgrade',
+	'pg_xlogdump',    'vacuumlo');
 my $contrib_extralibs = { 'pgbench' => ['ws2_32.lib'] };
 my $contrib_extraincludes =
   { 'tsearch2' => ['contrib/tsearch2'], 'dblink' => ['src/backend'] };
@@ -58,6 +56,8 @@ my @contrib_excludes = ('pgcrypto', 'intagg', 'sepgsql');
 # Set of variables for frontend modules
 my $frontend_defines = { 'initdb' => 'FRONTEND' };
 my @frontend_uselibpq = ('pg_ctl', 'psql');
+my @frontend_uselibpgport = ( 'pg_archivecleanup' );
+my @frontend_uselibpgcommon = ( 'pg_archivecleanup' );
 my $frontend_extralibs = {
 	'initdb'     => ['ws2_32.lib'],
 	'pg_restore' => ['ws2_32.lib'],
@@ -766,9 +766,9 @@ sub AdjustContribProj
 sub AdjustFrontendProj
 {
 	my $proj = shift;
-	AdjustModule($proj, $frontend_defines, \@frontend_uselibpq, undef,
-		undef, $frontend_extralibs,
-		$frontend_extrasource, $frontend_extraincludes);
+	AdjustModule($proj, $frontend_defines, \@frontend_uselibpq,
+		\@frontend_uselibpgport, \@frontend_uselibpgcommon,
+		$frontend_extralibs, $frontend_extrasource, $frontend_extraincludes);
 }
 
 sub AdjustModule
-- 
2.3.1

From 01db6f19c6621c16ca9229dc3c5d1e91446bfa7f Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <pete...@gmx.net>
Date: Tue, 10 Mar 2015 22:33:24 -0400
Subject: [PATCH 2/7] Move pg_xlogdump from contrib/ to src/bin/

---
 contrib/Makefile                               |  1 -
 doc/src/sgml/contrib.sgml                      |  1 -
 doc/src/sgml/filelist.sgml                     |  1 -
 doc/src/sgml/ref/allfiles.sgml                 |  1 +
 doc/src/sgml/{ => ref}/pg_xlogdump.sgml        |  0
 doc/src/sgml/reference.sgml                    |  1 +
 src/bin/Makefile                               |  1 +
 {contrib => src/bin}/pg_xlogdump/.gitignore    |  0
 {contrib => src/bin}/pg_xlogdump/Makefile      | 19 ++++++--------
 {contrib => src/bin}/pg_xlogdump/compat.c      |  2 +-
 {contrib => src/bin}/pg_xlogdump/pg_xlogdump.c |  2 +-
 {contrib => src/bin}/pg_xlogdump/rmgrdesc.c    |  2 +-
 {contrib => src/bin}/pg_xlogdump/rmgrdesc.h    |  2 +-
 src/tools/msvc/Mkvcbuild.pm                    | 36 ++++++++++++--------------
 src/tools/msvc/clean.bat                       |  4 +--
 15 files changed, 34 insertions(+), 39 deletions(-)
 rename doc/src/sgml/{ => ref}/pg_xlogdump.sgml (100%)
 rename {contrib => src/bin}/pg_xlogdump/.gitignore (100%)
 rename {contrib => src/bin}/pg_xlogdump/Makefile (76%)
 rename {contrib => src/bin}/pg_xlogdump/compat.c (98%)
 rename {contrib => src/bin}/pg_xlogdump/pg_xlogdump.c (99%)
 rename {contrib => src/bin}/pg_xlogdump/rmgrdesc.c (96%)
 rename {contrib => src/bin}/pg_xlogdump/rmgrdesc.h (91%)

diff --git a/contrib/Makefile b/contrib/Makefile
index c56050e..d9557b8 100644
--- a/contrib/Makefile
+++ b/contrib/Makefile
@@ -42,7 +42,6 @@ SUBDIRS = \
 		pgcrypto	\
 		pgrowlocks	\
 		pgstattuple	\
-		pg_xlogdump	\
 		postgres_fdw	\
 		seg		\
 		spi		\
diff --git a/doc/src/sgml/contrib.sgml b/doc/src/sgml/contrib.sgml
index f21fa14..d0e1446 100644
--- a/doc/src/sgml/contrib.sgml
+++ b/doc/src/sgml/contrib.sgml
@@ -206,6 +206,5 @@ pages.
  &pgtestfsync;
  &pgtesttiming;
  &pgupgrade;
- &pgxlogdump;
  </sect1>
 </appendix>
diff --git a/doc/src/sgml/filelist.sgml b/doc/src/sgml/filelist.sgml
index 5e3c34b..3b26a70 100644
--- a/doc/src/sgml/filelist.sgml
+++ b/doc/src/sgml/filelist.sgml
@@ -137,7 +137,6 @@
 <!ENTITY pgtesttiming    SYSTEM "pgtesttiming.sgml">
 <!ENTITY pgtrgm          SYSTEM "pgtrgm.sgml">
 <!ENTITY pgupgrade       SYSTEM "pgupgrade.sgml">
-<!ENTITY pgxlogdump      SYSTEM "pg_xlogdump.sgml">
 <!ENTITY postgres-fdw    SYSTEM "postgres-fdw.sgml">
 <!ENTITY seg             SYSTEM "seg.sgml">
 <!ENTITY contrib-spi     SYSTEM "contrib-spi.sgml">
diff --git a/doc/src/sgml/ref/allfiles.sgml b/doc/src/sgml/ref/allfiles.sgml
index cbe4611..17260b9 100644
--- a/doc/src/sgml/ref/allfiles.sgml
+++ b/doc/src/sgml/ref/allfiles.sgml
@@ -191,6 +191,7 @@ Complete list of usable sgml source files in this directory.
 <!ENTITY pgRecvlogical      SYSTEM "pg_recvlogical.sgml">
 <!ENTITY pgResetxlog        SYSTEM "pg_resetxlog.sgml">
 <!ENTITY pgRestore          SYSTEM "pg_restore.sgml">
+<!ENTITY pgxlogdump         SYSTEM "pg_xlogdump.sgml">
 <!ENTITY postgres           SYSTEM "postgres-ref.sgml">
 <!ENTITY postmaster         SYSTEM "postmaster.sgml">
 <!ENTITY psqlRef            SYSTEM "psql-ref.sgml">
diff --git a/doc/src/sgml/pg_xlogdump.sgml b/doc/src/sgml/ref/pg_xlogdump.sgml
similarity index 100%
rename from doc/src/sgml/pg_xlogdump.sgml
rename to doc/src/sgml/ref/pg_xlogdump.sgml
diff --git a/doc/src/sgml/reference.sgml b/doc/src/sgml/reference.sgml
index 62267db..07c923b 100644
--- a/doc/src/sgml/reference.sgml
+++ b/doc/src/sgml/reference.sgml
@@ -261,6 +261,7 @@
    &pgControldata;
    &pgCtl;
    &pgResetxlog;
+   &pgxlogdump;
    &postgres;
    &postmaster;
 
diff --git a/src/bin/Makefile b/src/bin/Makefile
index 2347076..469798e 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -22,6 +22,7 @@ SUBDIRS = \
 	pg_ctl \
 	pg_dump \
 	pg_resetxlog \
+	pg_xlogdump \
 	psql \
 	scripts
 
diff --git a/contrib/pg_xlogdump/.gitignore b/src/bin/pg_xlogdump/.gitignore
similarity index 100%
rename from contrib/pg_xlogdump/.gitignore
rename to src/bin/pg_xlogdump/.gitignore
diff --git a/contrib/pg_xlogdump/Makefile b/src/bin/pg_xlogdump/Makefile
similarity index 76%
rename from contrib/pg_xlogdump/Makefile
rename to src/bin/pg_xlogdump/Makefile
index 30a8706..ab8597b 100644
--- a/contrib/pg_xlogdump/Makefile
+++ b/src/bin/pg_xlogdump/Makefile
@@ -1,28 +1,25 @@
-# contrib/pg_xlogdump/Makefile
+# src/bin/pg_xlogdump/Makefile
 
 PGFILEDESC = "pg_xlogdump - decode and display WAL"
 PGAPPICON=win32
 
+subdir = src/bin/pg_xlogdump
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
 PROGRAM = pg_xlogdump
 OBJS = pg_xlogdump.o compat.o xlogreader.o rmgrdesc.o \
 	$(RMGRDESCOBJS) $(WIN32RES)
+override CPPFLAGS := -DFRONTEND $(CPPFLAGS)
 
 RMGRDESCSOURCES = $(notdir $(wildcard $(top_srcdir)/src/backend/access/rmgrdesc/*desc.c))
 RMGRDESCOBJS = $(patsubst %.c,%.o,$(RMGRDESCSOURCES))
 
 EXTRA_CLEAN = $(RMGRDESCSOURCES) xlogreader.c
 
-ifdef USE_PGXS
-$(error "pg_xlogdump cannot be built with PGXS")
-endif
+NO_PGXS = 1
+include $(top_srcdir)/src/makefiles/pgxs.mk
 
-subdir = contrib/pg_xlogdump
-top_builddir = ../..
-include $(top_builddir)/src/Makefile.global
-include $(top_srcdir)/contrib/contrib-global.mk
-
-
-override CPPFLAGS := -DFRONTEND $(CPPFLAGS)
 
 xlogreader.c: % : $(top_srcdir)/src/backend/access/transam/%
 	rm -f $@ && $(LN_S) $< .
diff --git a/contrib/pg_xlogdump/compat.c b/src/bin/pg_xlogdump/compat.c
similarity index 98%
rename from contrib/pg_xlogdump/compat.c
rename to src/bin/pg_xlogdump/compat.c
index 4f5cad6..3d8ce30 100644
--- a/contrib/pg_xlogdump/compat.c
+++ b/src/bin/pg_xlogdump/compat.c
@@ -6,7 +6,7 @@
  * Portions Copyright (c) 2013-2015, PostgreSQL Global Development Group
  *
  * IDENTIFICATION
- *		contrib/pg_xlogdump/compat.c
+ *		src/bin/pg_xlogdump/compat.c
  *
  * This file contains client-side implementations for various backend
  * functions that the rm_desc functions in *desc.c files rely on.
diff --git a/contrib/pg_xlogdump/pg_xlogdump.c b/src/bin/pg_xlogdump/pg_xlogdump.c
similarity index 99%
rename from contrib/pg_xlogdump/pg_xlogdump.c
rename to src/bin/pg_xlogdump/pg_xlogdump.c
index 15805be..701ca3b 100644
--- a/contrib/pg_xlogdump/pg_xlogdump.c
+++ b/src/bin/pg_xlogdump/pg_xlogdump.c
@@ -5,7 +5,7 @@
  * Copyright (c) 2013-2015, PostgreSQL Global Development Group
  *
  * IDENTIFICATION
- *		  contrib/pg_xlogdump/pg_xlogdump.c
+ *		  src/bin/pg_xlogdump/pg_xlogdump.c
  *-------------------------------------------------------------------------
  */
 
diff --git a/contrib/pg_xlogdump/rmgrdesc.c b/src/bin/pg_xlogdump/rmgrdesc.c
similarity index 96%
rename from contrib/pg_xlogdump/rmgrdesc.c
rename to src/bin/pg_xlogdump/rmgrdesc.c
index bd3344c..2205d6e 100644
--- a/contrib/pg_xlogdump/rmgrdesc.c
+++ b/src/bin/pg_xlogdump/rmgrdesc.c
@@ -3,7 +3,7 @@
  *
  * pg_xlogdump resource managers definition
  *
- * contrib/pg_xlogdump/rmgrdesc.c
+ * src/bin/pg_xlogdump/rmgrdesc.c
  */
 #define FRONTEND 1
 #include "postgres.h"
diff --git a/contrib/pg_xlogdump/rmgrdesc.h b/src/bin/pg_xlogdump/rmgrdesc.h
similarity index 91%
rename from contrib/pg_xlogdump/rmgrdesc.h
rename to src/bin/pg_xlogdump/rmgrdesc.h
index aec4418..5440f94 100644
--- a/contrib/pg_xlogdump/rmgrdesc.h
+++ b/src/bin/pg_xlogdump/rmgrdesc.h
@@ -3,7 +3,7 @@
  *
  * pg_xlogdump resource managers declaration
  *
- * contrib/pg_xlogdump/rmgrdesc.h
+ * src/bin/pg_xlogdump/rmgrdesc.h
  */
 #ifndef RMGRDESC_H
 #define RMGRDESC_H
diff --git a/src/tools/msvc/Mkvcbuild.pm b/src/tools/msvc/Mkvcbuild.pm
index b00f335..de4c194 100644
--- a/src/tools/msvc/Mkvcbuild.pm
+++ b/src/tools/msvc/Mkvcbuild.pm
@@ -37,12 +37,12 @@ my @contrib_uselibpgport = (
 	'oid2name',       'pgbench',
 	'pg_standby',     'pg_test_fsync',
 	'pg_test_timing', 'pg_upgrade',
-	'pg_xlogdump',    'vacuumlo');
+	'vacuumlo');
 my @contrib_uselibpgcommon = (
 	'oid2name',       'pgbench',
 	'pg_standby',     'pg_test_fsync',
 	'pg_test_timing', 'pg_upgrade',
-	'pg_xlogdump',    'vacuumlo');
+	'vacuumlo');
 my $contrib_extralibs = { 'pgbench' => ['ws2_32.lib'] };
 my $contrib_extraincludes =
   { 'tsearch2' => ['contrib/tsearch2'], 'dblink' => ['src/backend'] };
@@ -66,7 +66,8 @@ my $frontend_extraincludes = {
 	'initdb' => ['src\timezone'],
 	'psql'   => [ 'src\bin\pg_dump', 'src\backend' ] };
 my $frontend_extrasource = { 'psql' => ['src\bin\psql\psqlscan.l'] };
-my @frontend_excludes = ('pgevent', 'pg_basebackup', 'pg_dump', 'scripts');
+my @frontend_excludes = ('pgevent', 'pg_basebackup', 'pg_dump',
+						 'pg_xlogdump','scripts');
 
 sub mkvcbuild
 {
@@ -465,6 +466,19 @@ sub mkvcbuild
 	$pgrestore->AddFile('src\backend\parser\kwlookup.c');
 	$pgrestore->AddLibrary('ws2_32.lib');
 
+	# Get necessary files for pg_xlogdump as files symlinked
+	# on Linux are copied on Windows.
+	my $pgxlogdump = AddSimpleFrontend('pg_xlogdump');
+	$pgxlogdump->AddDefine('FRONTEND');
+	foreach my $xf (glob('src/backend/access/rmgrdesc/*desc.c'))
+	{
+		my $bf = basename $xf;
+		copy($xf, "src/bin/pg_xlogdump/$bf");
+		$pgxlogdump->AddFile("src\\bin\\pg_xlogdump\\$bf");
+	}
+	copy('src/backend/access/transam/xlogreader.c',
+		 'src/bin/pg_xlogdump/xlogreader.c');
+
 	my $zic = $solution->AddProject('zic', 'exe', 'utils');
 	$zic->AddFiles('src\timezone', 'zic.c', 'ialloc.c', 'scheck.c',
 		'localtime.c');
@@ -622,22 +636,6 @@ sub mkvcbuild
 	$pgregress->AddDirResourceFile('src\test\regress');
 	$pgregress->AddReference($libpgcommon, $libpgport);
 
-	# fix up pg_xlogdump once it's been set up
-	# files symlinked on Unix are copied on windows
-	my $pg_xlogdump =
-	  (grep { $_->{name} eq 'pg_xlogdump' }
-		  @{ $solution->{projects}->{contrib} })[0];
-	$pg_xlogdump->AddDefine('FRONTEND');
-	foreach my $xf (glob('src/backend/access/rmgrdesc/*desc.c'))
-	{
-		my $bf = basename $xf;
-		copy($xf, "contrib/pg_xlogdump/$bf");
-		$pg_xlogdump->AddFile("contrib\\pg_xlogdump\\$bf");
-	}
-	copy(
-		'src/backend/access/transam/xlogreader.c',
-		'contrib/pg_xlogdump/xlogreader.c');
-
 	$solution->Save();
 	return $solution->{vcver};
 }
diff --git a/src/tools/msvc/clean.bat b/src/tools/msvc/clean.bat
index 9c7ea42..c48fb25 100755
--- a/src/tools/msvc/clean.bat
+++ b/src/tools/msvc/clean.bat
@@ -93,8 +93,8 @@ REM cd contrib
 REM for /r %%f in (*.sql) do if exist %%f.in del %%f
 
 REM clean up files copied into contrib\pg_xlogdump
-if exist contrib\pg_xlogdump\xlogreader.c del /q contrib\pg_xlogdump\xlogreader.c
-for %%f in (contrib\pg_xlogdump\*desc.c) do if not %%f==contrib\pg_xlogdump\rmgrdesc.c del /q %%f
+if exist src\bin\pg_xlogdump\xlogreader.c del /q src\bin\pg_xlogdump\xlogreader.c
+for %%f in (src\bin\pg_xlogdump\*desc.c) do if not %%f==src\bin\pg_xlogdump\rmgrdesc.c del /q %%f
 
 
 cd %D%
-- 
2.3.1

From 9d3085bffe74a0c2f4de1d8d27d383eba20523bf Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <pete...@gmx.net>
Date: Tue, 10 Mar 2015 21:10:50 -0700
Subject: [PATCH 3/7] Move pgbench from contrib/ to src/bin/

---
 contrib/Makefile                         |  1 -
 doc/src/sgml/contrib.sgml                |  1 -
 doc/src/sgml/filelist.sgml               |  1 -
 doc/src/sgml/ref/allfiles.sgml           |  1 +
 doc/src/sgml/{ => ref}/pgbench.sgml      |  2 +-
 doc/src/sgml/reference.sgml              |  1 +
 src/bin/Makefile                         |  1 +
 {contrib => src/bin}/pgbench/.gitignore  |  0
 {contrib => src/bin}/pgbench/Makefile    | 18 +++++++-----------
 {contrib => src/bin}/pgbench/exprparse.y |  0
 {contrib => src/bin}/pgbench/exprscan.l  |  0
 {contrib => src/bin}/pgbench/pgbench.c   |  2 +-
 {contrib => src/bin}/pgbench/pgbench.h   |  0
 src/tools/msvc/Mkvcbuild.pm              | 32 ++++++++++++++++----------------
 14 files changed, 28 insertions(+), 32 deletions(-)
 rename doc/src/sgml/{ => ref}/pgbench.sgml (99%)
 rename {contrib => src/bin}/pgbench/.gitignore (100%)
 rename {contrib => src/bin}/pgbench/Makefile (68%)
 rename {contrib => src/bin}/pgbench/exprparse.y (100%)
 rename {contrib => src/bin}/pgbench/exprscan.l (100%)
 rename {contrib => src/bin}/pgbench/pgbench.c (99%)
 rename {contrib => src/bin}/pgbench/pgbench.h (100%)

diff --git a/contrib/Makefile b/contrib/Makefile
index d9557b8..bd677d1 100644
--- a/contrib/Makefile
+++ b/contrib/Makefile
@@ -38,7 +38,6 @@ SUBDIRS = \
 		pg_trgm		\
 		pg_upgrade	\
 		pg_upgrade_support \
-		pgbench		\
 		pgcrypto	\
 		pgrowlocks	\
 		pgstattuple	\
diff --git a/doc/src/sgml/contrib.sgml b/doc/src/sgml/contrib.sgml
index d0e1446..577791b 100644
--- a/doc/src/sgml/contrib.sgml
+++ b/doc/src/sgml/contrib.sgml
@@ -187,7 +187,6 @@ pages.
   </para>
 
  &oid2name;
- &pgbench;
  &vacuumlo;
  </sect1>
 
diff --git a/doc/src/sgml/filelist.sgml b/doc/src/sgml/filelist.sgml
index 3b26a70..5bdde7b 100644
--- a/doc/src/sgml/filelist.sgml
+++ b/doc/src/sgml/filelist.sgml
@@ -124,7 +124,6 @@
 <!ENTITY oid2name        SYSTEM "oid2name.sgml">
 <!ENTITY pageinspect     SYSTEM "pageinspect.sgml">
 <!ENTITY passwordcheck   SYSTEM "passwordcheck.sgml">
-<!ENTITY pgbench         SYSTEM "pgbench.sgml">
 <!ENTITY pgbuffercache   SYSTEM "pgbuffercache.sgml">
 <!ENTITY pgcrypto        SYSTEM "pgcrypto.sgml">
 <!ENTITY pgfreespacemap  SYSTEM "pgfreespacemap.sgml">
diff --git a/doc/src/sgml/ref/allfiles.sgml b/doc/src/sgml/ref/allfiles.sgml
index 17260b9..61462da 100644
--- a/doc/src/sgml/ref/allfiles.sgml
+++ b/doc/src/sgml/ref/allfiles.sgml
@@ -181,6 +181,7 @@ Complete list of usable sgml source files in this directory.
 <!ENTITY initdb             SYSTEM "initdb.sgml">
 <!ENTITY pgarchivecleanup   SYSTEM "pgarchivecleanup.sgml">
 <!ENTITY pgBasebackup       SYSTEM "pg_basebackup.sgml">
+<!ENTITY pgbench            SYSTEM "pgbench.sgml">
 <!ENTITY pgConfig           SYSTEM "pg_config-ref.sgml">
 <!ENTITY pgControldata      SYSTEM "pg_controldata.sgml">
 <!ENTITY pgCtl              SYSTEM "pg_ctl-ref.sgml">
diff --git a/doc/src/sgml/pgbench.sgml b/doc/src/sgml/ref/pgbench.sgml
similarity index 99%
rename from doc/src/sgml/pgbench.sgml
rename to doc/src/sgml/ref/pgbench.sgml
index ed12e27..a808546 100644
--- a/doc/src/sgml/pgbench.sgml
+++ b/doc/src/sgml/ref/pgbench.sgml
@@ -1,4 +1,4 @@
-<!-- doc/src/sgml/pgbench.sgml -->
+<!-- doc/src/sgml/ref/pgbench.sgml -->
 
 <refentry id="pgbench">
  <indexterm zone="pgbench">
diff --git a/doc/src/sgml/reference.sgml b/doc/src/sgml/reference.sgml
index 07c923b..d939d01 100644
--- a/doc/src/sgml/reference.sgml
+++ b/doc/src/sgml/reference.sgml
@@ -230,6 +230,7 @@
    &dropuser;
    &ecpgRef;
    &pgBasebackup;
+   &pgbench;
    &pgConfig;
    &pgDump;
    &pgDumpall;
diff --git a/src/bin/Makefile b/src/bin/Makefile
index 469798e..3ce7707 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -23,6 +23,7 @@ SUBDIRS = \
 	pg_dump \
 	pg_resetxlog \
 	pg_xlogdump \
+	pgbench \
 	psql \
 	scripts
 
diff --git a/contrib/pgbench/.gitignore b/src/bin/pgbench/.gitignore
similarity index 100%
rename from contrib/pgbench/.gitignore
rename to src/bin/pgbench/.gitignore
diff --git a/contrib/pgbench/Makefile b/src/bin/pgbench/Makefile
similarity index 68%
rename from contrib/pgbench/Makefile
rename to src/bin/pgbench/Makefile
index a18130b..86fd757 100644
--- a/contrib/pgbench/Makefile
+++ b/src/bin/pgbench/Makefile
@@ -1,26 +1,22 @@
-# contrib/pgbench/Makefile
+# src/bin/pgbench/Makefile
 
 PGFILEDESC = "pgbench - a simple program for running benchmark tests"
 PGAPPICON = win32
 
+subdir = src/bin/pgbench
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
 PROGRAM = pgbench
 OBJS	= pgbench.o exprparse.o $(WIN32RES)
 
 PG_CPPFLAGS = -I$(libpq_srcdir)
 PG_LIBS = $(libpq_pgport) $(PTHREAD_LIBS)
 
-ifdef USE_PGXS
-PG_CONFIG = pg_config
-PGXS := $(shell $(PG_CONFIG) --pgxs)
-include $(PGXS)
-else
-subdir = contrib/pgbench
-top_builddir = ../..
-include $(top_builddir)/src/Makefile.global
-include $(top_srcdir)/contrib/contrib-global.mk
+NO_PGXS = 1
+include $(top_srcdir)/src/makefiles/pgxs.mk
 
 distprep: exprparse.c exprscan.c
-endif
 
 ifneq ($(PORTNAME), win32)
 override CFLAGS += $(PTHREAD_CFLAGS)
diff --git a/contrib/pgbench/exprparse.y b/src/bin/pgbench/exprparse.y
similarity index 100%
rename from contrib/pgbench/exprparse.y
rename to src/bin/pgbench/exprparse.y
diff --git a/contrib/pgbench/exprscan.l b/src/bin/pgbench/exprscan.l
similarity index 100%
rename from contrib/pgbench/exprscan.l
rename to src/bin/pgbench/exprscan.l
diff --git a/contrib/pgbench/pgbench.c b/src/bin/pgbench/pgbench.c
similarity index 99%
rename from contrib/pgbench/pgbench.c
rename to src/bin/pgbench/pgbench.c
index 706fdf5..43df747 100644
--- a/contrib/pgbench/pgbench.c
+++ b/src/bin/pgbench/pgbench.c
@@ -4,7 +4,7 @@
  * A simple benchmark program for PostgreSQL
  * Originally written by Tatsuo Ishii and enhanced by many contributors.
  *
- * contrib/pgbench/pgbench.c
+ * src/bin/pgbench/pgbench.c
  * Copyright (c) 2000-2015, PostgreSQL Global Development Group
  * ALL RIGHTS RESERVED;
  *
diff --git a/contrib/pgbench/pgbench.h b/src/bin/pgbench/pgbench.h
similarity index 100%
rename from contrib/pgbench/pgbench.h
rename to src/bin/pgbench/pgbench.h
diff --git a/src/tools/msvc/Mkvcbuild.pm b/src/tools/msvc/Mkvcbuild.pm
index de4c194..0a0469a 100644
--- a/src/tools/msvc/Mkvcbuild.pm
+++ b/src/tools/msvc/Mkvcbuild.pm
@@ -32,40 +32,40 @@ my $libpq;
 # Set of variables for contrib modules
 my $contrib_defines = { 'refint' => 'REFINT_VERBOSE' };
 my @contrib_uselibpq =
-  ('dblink', 'oid2name', 'pgbench', 'pg_upgrade', 'postgres_fdw', 'vacuumlo');
+  ('dblink', 'oid2name', 'pg_upgrade', 'postgres_fdw', 'vacuumlo');
 my @contrib_uselibpgport = (
-	'oid2name',       'pgbench',
-	'pg_standby',     'pg_test_fsync',
-	'pg_test_timing', 'pg_upgrade',
-	'vacuumlo');
+	'oid2name',      'pg_standby',
+	'pg_test_fsync', 'pg_test_timing',
+	'pg_upgrade',    'vacuumlo');
 my @contrib_uselibpgcommon = (
-	'oid2name',       'pgbench',
-	'pg_standby',     'pg_test_fsync',
-	'pg_test_timing', 'pg_upgrade',
-	'vacuumlo');
-my $contrib_extralibs = { 'pgbench' => ['ws2_32.lib'] };
+	'oid2name',      'pg_standby',
+	'pg_test_fsync', 'pg_test_timing',
+	'pg_upgrade',    'vacuumlo');
+my $contrib_extralibs = undef;
 my $contrib_extraincludes =
   { 'tsearch2' => ['contrib/tsearch2'], 'dblink' => ['src/backend'] };
 my $contrib_extrasource = {
 	'cube' => [ 'contrib\cube\cubescan.l', 'contrib\cube\cubeparse.y' ],
-	'pgbench' =>
-	  [ 'contrib\pgbench\exprscan.l', 'contrib\pgbench\exprparse.y' ],
 	'seg' => [ 'contrib\seg\segscan.l', 'contrib\seg\segparse.y' ], };
 my @contrib_excludes = ('pgcrypto', 'intagg', 'sepgsql');
 
 # Set of variables for frontend modules
 my $frontend_defines = { 'initdb' => 'FRONTEND' };
-my @frontend_uselibpq = ('pg_ctl', 'psql');
-my @frontend_uselibpgport = ( 'pg_archivecleanup' );
-my @frontend_uselibpgcommon = ( 'pg_archivecleanup' );
+my @frontend_uselibpq = ('pg_ctl', 'pgbench', 'psql');
+my @frontend_uselibpgport = ( 'pg_archivecleanup', 'pgbench' );
+my @frontend_uselibpgcommon = ( 'pg_archivecleanup', 'pgbench' );
 my $frontend_extralibs = {
 	'initdb'     => ['ws2_32.lib'],
 	'pg_restore' => ['ws2_32.lib'],
+	'pgbench'    => ['ws2_32.lib'],
 	'psql'       => ['ws2_32.lib'] };
 my $frontend_extraincludes = {
 	'initdb' => ['src\timezone'],
 	'psql'   => [ 'src\bin\pg_dump', 'src\backend' ] };
-my $frontend_extrasource = { 'psql' => ['src\bin\psql\psqlscan.l'] };
+my $frontend_extrasource = {
+	'pgbench' => [ 'src\bin\pgbench\exprscan.l',
+				   'src\bin\pgbench\exprparse.y' ],
+	'psql'    => [ 'src\bin\psql\psqlscan.l' ]};
 my @frontend_excludes = ('pgevent', 'pg_basebackup', 'pg_dump',
 						 'pg_xlogdump','scripts');
 
-- 
2.3.1

From ad236d6733434ac965b3b792e06f98e9ba90fe19 Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <pete...@gmx.net>
Date: Tue, 10 Mar 2015 21:32:35 -0700
Subject: [PATCH 4/7] Move pg_test_fsync from contrib/ to src/bin/

---
 contrib/Makefile                                   |  1 -
 contrib/pg_test_fsync/Makefile                     | 18 ------------------
 doc/src/sgml/contrib.sgml                          |  1 -
 doc/src/sgml/filelist.sgml                         |  1 -
 doc/src/sgml/ref/allfiles.sgml                     |  1 +
 doc/src/sgml/{ => ref}/pgtestfsync.sgml            | 10 +---------
 doc/src/sgml/reference.sgml                        |  1 +
 src/bin/Makefile                                   |  1 +
 {contrib => src/bin}/pg_test_fsync/.gitignore      |  0
 src/bin/pg_test_fsync/Makefile                     | 14 ++++++++++++++
 {contrib => src/bin}/pg_test_fsync/pg_test_fsync.c |  0
 src/tools/msvc/Mkvcbuild.pm                        | 20 ++++++++++++--------
 12 files changed, 30 insertions(+), 38 deletions(-)
 delete mode 100644 contrib/pg_test_fsync/Makefile
 rename doc/src/sgml/{ => ref}/pgtestfsync.sgml (95%)
 rename {contrib => src/bin}/pg_test_fsync/.gitignore (100%)
 create mode 100644 src/bin/pg_test_fsync/Makefile
 rename {contrib => src/bin}/pg_test_fsync/pg_test_fsync.c (100%)

diff --git a/contrib/Makefile b/contrib/Makefile
index bd677d1..ed6ebae 100644
--- a/contrib/Makefile
+++ b/contrib/Makefile
@@ -33,7 +33,6 @@ SUBDIRS = \
 		pg_prewarm	\
 		pg_standby	\
 		pg_stat_statements \
-		pg_test_fsync	\
 		pg_test_timing	\
 		pg_trgm		\
 		pg_upgrade	\
diff --git a/contrib/pg_test_fsync/Makefile b/contrib/pg_test_fsync/Makefile
deleted file mode 100644
index 15afba7..0000000
diff --git a/doc/src/sgml/contrib.sgml b/doc/src/sgml/contrib.sgml
index 577791b..68cbf78 100644
--- a/doc/src/sgml/contrib.sgml
+++ b/doc/src/sgml/contrib.sgml
@@ -202,7 +202,6 @@ pages.
   </para>
 
  &pgstandby;
- &pgtestfsync;
  &pgtesttiming;
  &pgupgrade;
  </sect1>
diff --git a/doc/src/sgml/filelist.sgml b/doc/src/sgml/filelist.sgml
index 5bdde7b..c14e737 100644
--- a/doc/src/sgml/filelist.sgml
+++ b/doc/src/sgml/filelist.sgml
@@ -132,7 +132,6 @@
 <!ENTITY pgstandby       SYSTEM "pgstandby.sgml">
 <!ENTITY pgstatstatements SYSTEM "pgstatstatements.sgml">
 <!ENTITY pgstattuple     SYSTEM "pgstattuple.sgml">
-<!ENTITY pgtestfsync     SYSTEM "pgtestfsync.sgml">
 <!ENTITY pgtesttiming    SYSTEM "pgtesttiming.sgml">
 <!ENTITY pgtrgm          SYSTEM "pgtrgm.sgml">
 <!ENTITY pgupgrade       SYSTEM "pgupgrade.sgml">
diff --git a/doc/src/sgml/ref/allfiles.sgml b/doc/src/sgml/ref/allfiles.sgml
index 61462da..572032c 100644
--- a/doc/src/sgml/ref/allfiles.sgml
+++ b/doc/src/sgml/ref/allfiles.sgml
@@ -192,6 +192,7 @@ Complete list of usable sgml source files in this directory.
 <!ENTITY pgRecvlogical      SYSTEM "pg_recvlogical.sgml">
 <!ENTITY pgResetxlog        SYSTEM "pg_resetxlog.sgml">
 <!ENTITY pgRestore          SYSTEM "pg_restore.sgml">
+<!ENTITY pgtestfsync        SYSTEM "pgtestfsync.sgml">
 <!ENTITY pgxlogdump         SYSTEM "pg_xlogdump.sgml">
 <!ENTITY postgres           SYSTEM "postgres-ref.sgml">
 <!ENTITY postmaster         SYSTEM "postmaster.sgml">
diff --git a/doc/src/sgml/pgtestfsync.sgml b/doc/src/sgml/ref/pgtestfsync.sgml
similarity index 95%
rename from doc/src/sgml/pgtestfsync.sgml
rename to doc/src/sgml/ref/pgtestfsync.sgml
index c4b4014..5dcabe4 100644
--- a/doc/src/sgml/pgtestfsync.sgml
+++ b/doc/src/sgml/ref/pgtestfsync.sgml
@@ -1,4 +1,4 @@
-<!-- doc/src/sgml/pgtestfsync.sgml -->
+<!-- doc/src/sgml/ref/pgtestfsync.sgml -->
 
 <refentry id="pgtestfsync">
  <indexterm zone="pgtestfsync">
@@ -104,14 +104,6 @@
  </refsect1>
 
  <refsect1>
-  <title>Author</title>
-
-  <para>
-   Bruce Momjian <email>br...@momjian.us</email>
-  </para>
- </refsect1>
-
- <refsect1>
   <title>See Also</title>
 
   <simplelist type="inline">
diff --git a/doc/src/sgml/reference.sgml b/doc/src/sgml/reference.sgml
index d939d01..be7ca70 100644
--- a/doc/src/sgml/reference.sgml
+++ b/doc/src/sgml/reference.sgml
@@ -262,6 +262,7 @@
    &pgControldata;
    &pgCtl;
    &pgResetxlog;
+   &pgtestfsync;
    &pgxlogdump;
    &postgres;
    &postmaster;
diff --git a/src/bin/Makefile b/src/bin/Makefile
index 3ce7707..497f9ee 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -22,6 +22,7 @@ SUBDIRS = \
 	pg_ctl \
 	pg_dump \
 	pg_resetxlog \
+	pg_test_fsync \
 	pg_xlogdump \
 	pgbench \
 	psql \
diff --git a/contrib/pg_test_fsync/.gitignore b/src/bin/pg_test_fsync/.gitignore
similarity index 100%
rename from contrib/pg_test_fsync/.gitignore
rename to src/bin/pg_test_fsync/.gitignore
diff --git a/src/bin/pg_test_fsync/Makefile b/src/bin/pg_test_fsync/Makefile
new file mode 100644
index 0000000..e8d1952
--- /dev/null
+++ b/src/bin/pg_test_fsync/Makefile
@@ -0,0 +1,14 @@
+# src/bin/pg_test_fsync/Makefile
+
+PGFILEDESC = "pg_test_fsync - test various disk sync methods"
+PGAPPICON = win32
+
+subdir = src/bin/pg_test_fsync
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PROGRAM  = pg_test_fsync
+OBJS = pg_test_fsync.o $(WIN32RES)
+
+NO_PGXS = 1
+include $(top_srcdir)/src/makefiles/pgxs.mk
diff --git a/contrib/pg_test_fsync/pg_test_fsync.c b/src/bin/pg_test_fsync/pg_test_fsync.c
similarity index 100%
rename from contrib/pg_test_fsync/pg_test_fsync.c
rename to src/bin/pg_test_fsync/pg_test_fsync.c
diff --git a/src/tools/msvc/Mkvcbuild.pm b/src/tools/msvc/Mkvcbuild.pm
index 0a0469a..a915abc 100644
--- a/src/tools/msvc/Mkvcbuild.pm
+++ b/src/tools/msvc/Mkvcbuild.pm
@@ -34,13 +34,13 @@ my $contrib_defines = { 'refint' => 'REFINT_VERBOSE' };
 my @contrib_uselibpq =
   ('dblink', 'oid2name', 'pg_upgrade', 'postgres_fdw', 'vacuumlo');
 my @contrib_uselibpgport = (
-	'oid2name',      'pg_standby',
-	'pg_test_fsync', 'pg_test_timing',
-	'pg_upgrade',    'vacuumlo');
+	'oid2name',       'pg_standby',
+	'pg_test_timing', 'pg_upgrade',
+	'vacuumlo');
 my @contrib_uselibpgcommon = (
-	'oid2name',      'pg_standby',
-	'pg_test_fsync', 'pg_test_timing',
-	'pg_upgrade',    'vacuumlo');
+	'oid2name',       'pg_standby',
+	'pg_test_timing', 'pg_upgrade',
+	'vacuumlo');
 my $contrib_extralibs = undef;
 my $contrib_extraincludes =
   { 'tsearch2' => ['contrib/tsearch2'], 'dblink' => ['src/backend'] };
@@ -52,8 +52,12 @@ my @contrib_excludes = ('pgcrypto', 'intagg', 'sepgsql');
 # Set of variables for frontend modules
 my $frontend_defines = { 'initdb' => 'FRONTEND' };
 my @frontend_uselibpq = ('pg_ctl', 'pgbench', 'psql');
-my @frontend_uselibpgport = ( 'pg_archivecleanup', 'pgbench' );
-my @frontend_uselibpgcommon = ( 'pg_archivecleanup', 'pgbench' );
+my @frontend_uselibpgport = (
+	'pg_archivecleanup', 'pg_test_fsync',
+	'pgbench' );
+my @frontend_uselibpgcommon = (
+	'pg_archivecleanup', 'pg_test_fsync',
+	'pgbench' );
 my $frontend_extralibs = {
 	'initdb'     => ['ws2_32.lib'],
 	'pg_restore' => ['ws2_32.lib'],
-- 
2.3.1

From 6b0cddf42ec8e1a638ccc5c3916991cfe0f65dba Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <pete...@gmx.net>
Date: Tue, 10 Mar 2015 21:56:39 -0700
Subject: [PATCH 5/7] Move pg_test_timing from contrib/ to src/bin/

---
 contrib/Makefile                                     |  1 -
 contrib/pg_test_timing/Makefile                      | 18 ------------------
 doc/src/sgml/contrib.sgml                            |  1 -
 doc/src/sgml/filelist.sgml                           |  1 -
 doc/src/sgml/ref/allfiles.sgml                       |  1 +
 doc/src/sgml/{ => ref}/pgtesttiming.sgml             | 10 +---------
 doc/src/sgml/reference.sgml                          |  1 +
 src/bin/Makefile                                     |  1 +
 {contrib => src/bin}/pg_test_timing/.gitignore       |  0
 src/bin/pg_test_timing/Makefile                      | 14 ++++++++++++++
 {contrib => src/bin}/pg_test_timing/pg_test_timing.c |  0
 src/tools/msvc/Mkvcbuild.pm                          | 14 ++++++--------
 12 files changed, 24 insertions(+), 38 deletions(-)
 delete mode 100644 contrib/pg_test_timing/Makefile
 rename doc/src/sgml/{ => ref}/pgtesttiming.sgml (98%)
 rename {contrib => src/bin}/pg_test_timing/.gitignore (100%)
 create mode 100644 src/bin/pg_test_timing/Makefile
 rename {contrib => src/bin}/pg_test_timing/pg_test_timing.c (100%)

diff --git a/contrib/Makefile b/contrib/Makefile
index ed6ebae..60475c4 100644
--- a/contrib/Makefile
+++ b/contrib/Makefile
@@ -33,7 +33,6 @@ SUBDIRS = \
 		pg_prewarm	\
 		pg_standby	\
 		pg_stat_statements \
-		pg_test_timing	\
 		pg_trgm		\
 		pg_upgrade	\
 		pg_upgrade_support \
diff --git a/contrib/pg_test_timing/Makefile b/contrib/pg_test_timing/Makefile
deleted file mode 100644
index 8b37aa8..0000000
diff --git a/doc/src/sgml/contrib.sgml b/doc/src/sgml/contrib.sgml
index 68cbf78..885a096 100644
--- a/doc/src/sgml/contrib.sgml
+++ b/doc/src/sgml/contrib.sgml
@@ -202,7 +202,6 @@ pages.
   </para>
 
  &pgstandby;
- &pgtesttiming;
  &pgupgrade;
  </sect1>
 </appendix>
diff --git a/doc/src/sgml/filelist.sgml b/doc/src/sgml/filelist.sgml
index c14e737..d6120e3 100644
--- a/doc/src/sgml/filelist.sgml
+++ b/doc/src/sgml/filelist.sgml
@@ -132,7 +132,6 @@
 <!ENTITY pgstandby       SYSTEM "pgstandby.sgml">
 <!ENTITY pgstatstatements SYSTEM "pgstatstatements.sgml">
 <!ENTITY pgstattuple     SYSTEM "pgstattuple.sgml">
-<!ENTITY pgtesttiming    SYSTEM "pgtesttiming.sgml">
 <!ENTITY pgtrgm          SYSTEM "pgtrgm.sgml">
 <!ENTITY pgupgrade       SYSTEM "pgupgrade.sgml">
 <!ENTITY postgres-fdw    SYSTEM "postgres-fdw.sgml">
diff --git a/doc/src/sgml/ref/allfiles.sgml b/doc/src/sgml/ref/allfiles.sgml
index 572032c..39e0244 100644
--- a/doc/src/sgml/ref/allfiles.sgml
+++ b/doc/src/sgml/ref/allfiles.sgml
@@ -193,6 +193,7 @@ Complete list of usable sgml source files in this directory.
 <!ENTITY pgResetxlog        SYSTEM "pg_resetxlog.sgml">
 <!ENTITY pgRestore          SYSTEM "pg_restore.sgml">
 <!ENTITY pgtestfsync        SYSTEM "pgtestfsync.sgml">
+<!ENTITY pgtesttiming       SYSTEM "pgtesttiming.sgml">
 <!ENTITY pgxlogdump         SYSTEM "pg_xlogdump.sgml">
 <!ENTITY postgres           SYSTEM "postgres-ref.sgml">
 <!ENTITY postmaster         SYSTEM "postmaster.sgml">
diff --git a/doc/src/sgml/pgtesttiming.sgml b/doc/src/sgml/ref/pgtesttiming.sgml
similarity index 98%
rename from doc/src/sgml/pgtesttiming.sgml
rename to doc/src/sgml/ref/pgtesttiming.sgml
index a6ab9b1..d5e231f 100644
--- a/doc/src/sgml/pgtesttiming.sgml
+++ b/doc/src/sgml/ref/pgtesttiming.sgml
@@ -1,4 +1,4 @@
-<!-- doc/src/sgml/pgtesttiming.sgml -->
+<!-- doc/src/sgml/ref/pgtesttiming.sgml -->
 
 <refentry id="pgtesttiming">
  <indexterm zone="pgtesttiming">
@@ -291,14 +291,6 @@ Histogram of timing durations:
  </refsect1>
 
  <refsect1>
-  <title>Author</title>
-
-  <para>
-   Ants Aasma <email>ants.aa...@eesti.ee</email>
-  </para>
- </refsect1>
-
- <refsect1>
   <title>See Also</title>
 
   <simplelist type="inline">
diff --git a/doc/src/sgml/reference.sgml b/doc/src/sgml/reference.sgml
index be7ca70..99bfcda 100644
--- a/doc/src/sgml/reference.sgml
+++ b/doc/src/sgml/reference.sgml
@@ -263,6 +263,7 @@
    &pgCtl;
    &pgResetxlog;
    &pgtestfsync;
+   &pgtesttiming;
    &pgxlogdump;
    &postgres;
    &postmaster;
diff --git a/src/bin/Makefile b/src/bin/Makefile
index 497f9ee..253119a 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -23,6 +23,7 @@ SUBDIRS = \
 	pg_dump \
 	pg_resetxlog \
 	pg_test_fsync \
+	pg_test_timing \
 	pg_xlogdump \
 	pgbench \
 	psql \
diff --git a/contrib/pg_test_timing/.gitignore b/src/bin/pg_test_timing/.gitignore
similarity index 100%
rename from contrib/pg_test_timing/.gitignore
rename to src/bin/pg_test_timing/.gitignore
diff --git a/src/bin/pg_test_timing/Makefile b/src/bin/pg_test_timing/Makefile
new file mode 100644
index 0000000..f96d2e9
--- /dev/null
+++ b/src/bin/pg_test_timing/Makefile
@@ -0,0 +1,14 @@
+# src/bin/pg_test_timing/Makefile
+
+PGFILEDESC = "pg_test_timing - test timing overhead"
+PGAPPICON = win32
+
+subdir = src/bin/pg_test_timing
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PROGRAM  = pg_test_timing
+OBJS = pg_test_timing.o $(WIN32RES)
+
+NO_PGXS = 1
+include $(top_srcdir)/src/makefiles/pgxs.mk
diff --git a/contrib/pg_test_timing/pg_test_timing.c b/src/bin/pg_test_timing/pg_test_timing.c
similarity index 100%
rename from contrib/pg_test_timing/pg_test_timing.c
rename to src/bin/pg_test_timing/pg_test_timing.c
diff --git a/src/tools/msvc/Mkvcbuild.pm b/src/tools/msvc/Mkvcbuild.pm
index a915abc..09ec8b7 100644
--- a/src/tools/msvc/Mkvcbuild.pm
+++ b/src/tools/msvc/Mkvcbuild.pm
@@ -34,13 +34,11 @@ my $contrib_defines = { 'refint' => 'REFINT_VERBOSE' };
 my @contrib_uselibpq =
   ('dblink', 'oid2name', 'pg_upgrade', 'postgres_fdw', 'vacuumlo');
 my @contrib_uselibpgport = (
-	'oid2name',       'pg_standby',
-	'pg_test_timing', 'pg_upgrade',
-	'vacuumlo');
+	'oid2name',   'pg_standby',
+	'pg_upgrade', 'vacuumlo');
 my @contrib_uselibpgcommon = (
-	'oid2name',       'pg_standby',
-	'pg_test_timing', 'pg_upgrade',
-	'vacuumlo');
+	'oid2name',   'pg_standby',
+	'pg_upgrade', 'vacuumlo');
 my $contrib_extralibs = undef;
 my $contrib_extraincludes =
   { 'tsearch2' => ['contrib/tsearch2'], 'dblink' => ['src/backend'] };
@@ -54,10 +52,10 @@ my $frontend_defines = { 'initdb' => 'FRONTEND' };
 my @frontend_uselibpq = ('pg_ctl', 'pgbench', 'psql');
 my @frontend_uselibpgport = (
 	'pg_archivecleanup', 'pg_test_fsync',
-	'pgbench' );
+	'pg_test_timing',    'pgbench' );
 my @frontend_uselibpgcommon = (
 	'pg_archivecleanup', 'pg_test_fsync',
-	'pgbench' );
+	'pg_test_timing',    'pgbench' );
 my $frontend_extralibs = {
 	'initdb'     => ['ws2_32.lib'],
 	'pg_restore' => ['ws2_32.lib'],
-- 
2.3.1

From 23ef0395e1b6efbbb18d7bdbaaee776804bfe584 Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <pete...@gmx.net>
Date: Tue, 10 Mar 2015 22:33:25 -0400
Subject: [PATCH 6/7] Integrate pg_upgrade_support module into backend

Previously, these functions were created in a schema "binary_upgrade",
which was deleted after pg_upgrade was finished.  Because we don't want
to keep that schema around permanently, move them to pg_catalog but
rename them with a binary_upgrade_... prefix.

The provided functions are only small wrappers around global variables
that were added specifically for pg_upgrade use, so keeping the module
separate does not create any modularity.

The functions still check that they are only called in binary upgrade
mode, so it is not possible to call these during normal operation.
---
 contrib/Makefile                                   |   1 -
 contrib/pg_upgrade/dump.c                          |   2 +-
 contrib/pg_upgrade/function.c                      | 113 ---------------------
 contrib/pg_upgrade/pg_upgrade.c                    |  27 -----
 contrib/pg_upgrade/pg_upgrade.h                    |   2 -
 contrib/pg_upgrade/test.sh                         |   1 -
 contrib/pg_upgrade_support/Makefile                |  16 ---
 doc/src/sgml/pgupgrade.sgml                        |   5 +-
 src/backend/catalog/heap.c                         |   2 +-
 src/backend/catalog/index.c                        |   2 +-
 src/backend/catalog/pg_enum.c                      |   2 +-
 src/backend/catalog/pg_type.c                      |   2 +-
 src/backend/catalog/toasting.c                     |   2 +-
 src/backend/commands/typecmds.c                    |   2 +-
 src/backend/commands/user.c                        |   2 +-
 src/backend/utils/adt/Makefile                     |   3 +-
 .../backend/utils/adt}/pg_upgrade_support.c        |  45 ++++----
 src/bin/pg_dump/pg_dump.c                          |  18 ++--
 src/bin/pg_dump/pg_dumpall.c                       |   2 +-
 src/include/catalog/pg_proc.h                      |  20 ++++
 20 files changed, 61 insertions(+), 208 deletions(-)
 delete mode 100644 contrib/pg_upgrade_support/Makefile
 rename {contrib/pg_upgrade_support => src/backend/utils/adt}/pg_upgrade_support.c (73%)

diff --git a/contrib/Makefile b/contrib/Makefile
index 60475c4..39e8f1d 100644
--- a/contrib/Makefile
+++ b/contrib/Makefile
@@ -35,7 +35,6 @@ SUBDIRS = \
 		pg_stat_statements \
 		pg_trgm		\
 		pg_upgrade	\
-		pg_upgrade_support \
 		pgcrypto	\
 		pgrowlocks	\
 		pgstattuple	\
diff --git a/contrib/pg_upgrade/dump.c b/contrib/pg_upgrade/dump.c
index 941c4bb..906e85f 100644
--- a/contrib/pg_upgrade/dump.c
+++ b/contrib/pg_upgrade/dump.c
@@ -121,7 +121,7 @@ optionally_create_toast_tables(void)
 		for (rowno = 0; rowno < ntups; rowno++)
 		{
 			/* enable auto-oid-numbered TOAST creation if needed */
-			PQclear(executeQueryOrDie(conn, "SELECT binary_upgrade.set_next_toast_pg_class_oid('%d'::pg_catalog.oid);",
+			PQclear(executeQueryOrDie(conn, "SELECT pg_catalog.binary_upgrade_set_next_toast_pg_class_oid('%d'::pg_catalog.oid);",
 					OPTIONALLY_CREATE_TOAST_OID));
 
 			/* dummy command that also triggers check for required TOAST table */
diff --git a/contrib/pg_upgrade/function.c b/contrib/pg_upgrade/function.c
index deffe04..d8009d1 100644
--- a/contrib/pg_upgrade/function.c
+++ b/contrib/pg_upgrade/function.c
@@ -13,112 +13,6 @@
 
 #include "access/transam.h"
 
-#define PG_UPGRADE_SUPPORT	"$libdir/pg_upgrade_support"
-
-/*
- * install_support_functions_in_new_db()
- *
- * pg_upgrade requires some support functions that enable it to modify
- * backend behavior.
- */
-void
-install_support_functions_in_new_db(const char *db_name)
-{
-	PGconn	   *conn = connectToServer(&new_cluster, db_name);
-
-	/* suppress NOTICE of dropped objects */
-	PQclear(executeQueryOrDie(conn,
-							  "SET client_min_messages = warning;"));
-	PQclear(executeQueryOrDie(conn,
-						   "DROP SCHEMA IF EXISTS binary_upgrade CASCADE;"));
-	PQclear(executeQueryOrDie(conn,
-							  "RESET client_min_messages;"));
-
-	PQclear(executeQueryOrDie(conn,
-							  "CREATE SCHEMA binary_upgrade;"));
-
-	PQclear(executeQueryOrDie(conn,
-							  "CREATE OR REPLACE FUNCTION "
-							  "binary_upgrade.set_next_pg_type_oid(OID) "
-							  "RETURNS VOID "
-							  "AS '$libdir/pg_upgrade_support' "
-							  "LANGUAGE C STRICT;"));
-	PQclear(executeQueryOrDie(conn,
-							  "CREATE OR REPLACE FUNCTION "
-							"binary_upgrade.set_next_array_pg_type_oid(OID) "
-							  "RETURNS VOID "
-							  "AS '$libdir/pg_upgrade_support' "
-							  "LANGUAGE C STRICT;"));
-	PQclear(executeQueryOrDie(conn,
-							  "CREATE OR REPLACE FUNCTION "
-							"binary_upgrade.set_next_toast_pg_type_oid(OID) "
-							  "RETURNS VOID "
-							  "AS '$libdir/pg_upgrade_support' "
-							  "LANGUAGE C STRICT;"));
-	PQclear(executeQueryOrDie(conn,
-							  "CREATE OR REPLACE FUNCTION "
-							"binary_upgrade.set_next_heap_pg_class_oid(OID) "
-							  "RETURNS VOID "
-							  "AS '$libdir/pg_upgrade_support' "
-							  "LANGUAGE C STRICT;"));
-	PQclear(executeQueryOrDie(conn,
-							  "CREATE OR REPLACE FUNCTION "
-						   "binary_upgrade.set_next_index_pg_class_oid(OID) "
-							  "RETURNS VOID "
-							  "AS '$libdir/pg_upgrade_support' "
-							  "LANGUAGE C STRICT;"));
-	PQclear(executeQueryOrDie(conn,
-							  "CREATE OR REPLACE FUNCTION "
-						   "binary_upgrade.set_next_toast_pg_class_oid(OID) "
-							  "RETURNS VOID "
-							  "AS '$libdir/pg_upgrade_support' "
-							  "LANGUAGE C STRICT;"));
-	PQclear(executeQueryOrDie(conn,
-							  "CREATE OR REPLACE FUNCTION "
-							  "binary_upgrade.set_next_pg_enum_oid(OID) "
-							  "RETURNS VOID "
-							  "AS '$libdir/pg_upgrade_support' "
-							  "LANGUAGE C STRICT;"));
-	PQclear(executeQueryOrDie(conn,
-							  "CREATE OR REPLACE FUNCTION "
-							  "binary_upgrade.set_next_pg_authid_oid(OID) "
-							  "RETURNS VOID "
-							  "AS '$libdir/pg_upgrade_support' "
-							  "LANGUAGE C STRICT;"));
-	PQclear(executeQueryOrDie(conn,
-							  "CREATE OR REPLACE FUNCTION "
-							  "binary_upgrade.create_empty_extension(text, text, bool, text, oid[], text[], text[]) "
-							  "RETURNS VOID "
-							  "AS '$libdir/pg_upgrade_support' "
-							  "LANGUAGE C;"));
-	PQfinish(conn);
-}
-
-
-void
-uninstall_support_functions_from_new_cluster(void)
-{
-	int			dbnum;
-
-	prep_status("Removing support functions from new cluster");
-
-	for (dbnum = 0; dbnum < new_cluster.dbarr.ndbs; dbnum++)
-	{
-		DbInfo	   *new_db = &new_cluster.dbarr.dbs[dbnum];
-		PGconn	   *conn = connectToServer(&new_cluster, new_db->db_name);
-
-		/* suppress NOTICE of dropped objects */
-		PQclear(executeQueryOrDie(conn,
-								  "SET client_min_messages = warning;"));
-		PQclear(executeQueryOrDie(conn,
-								  "DROP SCHEMA binary_upgrade CASCADE;"));
-		PQclear(executeQueryOrDie(conn,
-								  "RESET client_min_messages;"));
-		PQfinish(conn);
-	}
-	check_ok();
-}
-
 
 /*
  * get_loadable_libraries()
@@ -218,8 +112,6 @@ get_loadable_libraries(void)
 	if (found_public_plpython_handler)
 		pg_fatal("Remove the problem functions from the old cluster to continue.\n");
 
-	totaltups++;				/* reserve for pg_upgrade_support */
-
 	/* Allocate what's certainly enough space */
 	os_info.libraries = (char **) pg_malloc(totaltups * sizeof(char *));
 
@@ -228,7 +120,6 @@ get_loadable_libraries(void)
 	 * there probably aren't enough entries to matter.
 	 */
 	totaltups = 0;
-	os_info.libraries[totaltups++] = pg_strdup(PG_UPGRADE_SUPPORT);
 
 	for (dbnum = 0; dbnum < old_cluster.dbarr.ndbs; dbnum++)
 	{
@@ -321,10 +212,6 @@ check_loadable_libraries(void)
 		{
 			found = true;
 
-			/* exit and report missing support library with special message */
-			if (strcmp(lib, PG_UPGRADE_SUPPORT) == 0)
-				pg_fatal("The pg_upgrade_support module must be created and installed in the new cluster.\n");
-
 			if (script == NULL && (script = fopen_priv(output_path, "w")) == NULL)
 				pg_fatal("Could not open file \"%s\": %s\n",
 						 output_path, getErrorText(errno));
diff --git a/contrib/pg_upgrade/pg_upgrade.c b/contrib/pg_upgrade/pg_upgrade.c
index ed7de80..1ff01a7 100644
--- a/contrib/pg_upgrade/pg_upgrade.c
+++ b/contrib/pg_upgrade/pg_upgrade.c
@@ -276,14 +276,6 @@ prepare_new_databases(void)
 	prep_status("Restoring global objects in the new cluster");
 
 	/*
-	 * Install support functions in the global-object restore database to
-	 * preserve pg_authid.oid.  pg_dumpall uses 'template0' as its template
-	 * database so objects we add into 'template1' are not propogated.  They
-	 * are removed on pg_upgrade exit.
-	 */
-	install_support_functions_in_new_db("template1");
-
-	/*
 	 * We have to create the databases first so we can install support
 	 * functions in all the other databases.  Ideally we could create the
 	 * support functions in template1 but pg_dumpall creates database using
@@ -305,23 +297,6 @@ create_new_objects(void)
 {
 	int			dbnum;
 
-	prep_status("Adding support functions to new cluster");
-
-	/*
-	 * Technically, we only need to install these support functions in new
-	 * databases that also exist in the old cluster, but for completeness we
-	 * process all new databases.
-	 */
-	for (dbnum = 0; dbnum < new_cluster.dbarr.ndbs; dbnum++)
-	{
-		DbInfo	   *new_db = &new_cluster.dbarr.dbs[dbnum];
-
-		/* skip db we already installed */
-		if (strcmp(new_db->db_name, "template1") != 0)
-			install_support_functions_in_new_db(new_db->db_name);
-	}
-	check_ok();
-
 	prep_status("Restoring database schemas in the new cluster\n");
 
 	for (dbnum = 0; dbnum < old_cluster.dbarr.ndbs; dbnum++)
@@ -365,8 +340,6 @@ create_new_objects(void)
 
 	/* regenerate now that we have objects in the databases */
 	get_db_and_rel_infos(&new_cluster);
-
-	uninstall_support_functions_from_new_cluster();
 }
 
 /*
diff --git a/contrib/pg_upgrade/pg_upgrade.h b/contrib/pg_upgrade/pg_upgrade.h
index 9b873ad..1e88345 100644
--- a/contrib/pg_upgrade/pg_upgrade.h
+++ b/contrib/pg_upgrade/pg_upgrade.h
@@ -406,8 +406,6 @@ FILE	   *fopen_priv(const char *path, const char *mode);
 
 /* function.c */
 
-void		install_support_functions_in_new_db(const char *db_name);
-void		uninstall_support_functions_from_new_cluster(void);
 void		get_loadable_libraries(void);
 void		check_loadable_libraries(void);
 
diff --git a/contrib/pg_upgrade/test.sh b/contrib/pg_upgrade/test.sh
index 75b6357..2e9f976 100644
--- a/contrib/pg_upgrade/test.sh
+++ b/contrib/pg_upgrade/test.sh
@@ -70,7 +70,6 @@ if [ "$1" = '--install' ]; then
 	libdir=$temp_install/$libdir
 
 	"$MAKE" -s -C ../.. install DESTDIR="$temp_install"
-	"$MAKE" -s -C ../pg_upgrade_support install DESTDIR="$temp_install"
 	"$MAKE" -s -C . install DESTDIR="$temp_install"
 
 	# platform-specific magic to find the shared libraries; see pg_regress.c
diff --git a/contrib/pg_upgrade_support/Makefile b/contrib/pg_upgrade_support/Makefile
deleted file mode 100644
index f7def16..0000000
diff --git a/doc/src/sgml/pgupgrade.sgml b/doc/src/sgml/pgupgrade.sgml
index e1cd260..8d70727 100644
--- a/doc/src/sgml/pgupgrade.sgml
+++ b/doc/src/sgml/pgupgrade.sgml
@@ -253,11 +253,10 @@ make prefix=/usr/local/pgsql.new install
    </step>
 
    <step>
-    <title>Install pg_upgrade and pg_upgrade_support</title>
+    <title>Install pg_upgrade</title>
 
     <para>
-     Install the <application>pg_upgrade</> binary and
-     <application>pg_upgrade_support</> library in the new PostgreSQL
+     Install the <application>pg_upgrade</> binary in the new PostgreSQL
      installation.
     </para>
    </step>
diff --git a/src/backend/catalog/heap.c b/src/backend/catalog/heap.c
index 5ce4395..eb4f37c 100644
--- a/src/backend/catalog/heap.c
+++ b/src/backend/catalog/heap.c
@@ -76,7 +76,7 @@
 #include "utils/tqual.h"
 
 
-/* Potentially set by contrib/pg_upgrade_support functions */
+/* Potentially set by pg_upgrade_support functions */
 Oid			binary_upgrade_next_heap_pg_class_oid = InvalidOid;
 Oid			binary_upgrade_next_toast_pg_class_oid = InvalidOid;
 
diff --git a/src/backend/catalog/index.c b/src/backend/catalog/index.c
index f85ed93..197cd52 100644
--- a/src/backend/catalog/index.c
+++ b/src/backend/catalog/index.c
@@ -69,7 +69,7 @@
 #include "utils/tqual.h"
 
 
-/* Potentially set by contrib/pg_upgrade_support functions */
+/* Potentially set by pg_upgrade_support functions */
 Oid			binary_upgrade_next_index_pg_class_oid = InvalidOid;
 
 /* state info for validate_index bulkdelete callback */
diff --git a/src/backend/catalog/pg_enum.c b/src/backend/catalog/pg_enum.c
index d87090a..c880486 100644
--- a/src/backend/catalog/pg_enum.c
+++ b/src/backend/catalog/pg_enum.c
@@ -31,7 +31,7 @@
 #include "utils/tqual.h"
 
 
-/* Potentially set by contrib/pg_upgrade_support functions */
+/* Potentially set by pg_upgrade_support functions */
 Oid			binary_upgrade_next_pg_enum_oid = InvalidOid;
 
 static void RenumberEnumType(Relation pg_enum, HeapTuple *existing, int nelems);
diff --git a/src/backend/catalog/pg_type.c b/src/backend/catalog/pg_type.c
index d1ed53f..32453c3 100644
--- a/src/backend/catalog/pg_type.c
+++ b/src/backend/catalog/pg_type.c
@@ -36,7 +36,7 @@
 #include "utils/rel.h"
 #include "utils/syscache.h"
 
-/* Potentially set by contrib/pg_upgrade_support functions */
+/* Potentially set by pg_upgrade_support functions */
 Oid			binary_upgrade_next_pg_type_oid = InvalidOid;
 
 /* ----------------------------------------------------------------
diff --git a/src/backend/catalog/toasting.c b/src/backend/catalog/toasting.c
index d14c33c..c99d353 100644
--- a/src/backend/catalog/toasting.c
+++ b/src/backend/catalog/toasting.c
@@ -32,7 +32,7 @@
 #include "utils/rel.h"
 #include "utils/syscache.h"
 
-/* Potentially set by contrib/pg_upgrade_support functions */
+/* Potentially set by pg_upgrade_support functions */
 Oid			binary_upgrade_next_toast_pg_type_oid = InvalidOid;
 
 static void CheckAndCreateToastTable(Oid relOid, Datum reloptions,
diff --git a/src/backend/commands/typecmds.c b/src/backend/commands/typecmds.c
index 67e2ae2..907ba11 100644
--- a/src/backend/commands/typecmds.c
+++ b/src/backend/commands/typecmds.c
@@ -80,7 +80,7 @@ typedef struct
 	/* atts[] is of allocated length RelationGetNumberOfAttributes(rel) */
 } RelToCheck;
 
-/* Potentially set by contrib/pg_upgrade_support functions */
+/* Potentially set by pg_upgrade_support functions */
 Oid			binary_upgrade_next_array_pg_type_oid = InvalidOid;
 
 static void makeRangeConstructors(const char *name, Oid namespace,
diff --git a/src/backend/commands/user.c b/src/backend/commands/user.c
index 75f1b3c..456c27e 100644
--- a/src/backend/commands/user.c
+++ b/src/backend/commands/user.c
@@ -38,7 +38,7 @@
 #include "utils/timestamp.h"
 #include "utils/tqual.h"
 
-/* Potentially set by contrib/pg_upgrade_support functions */
+/* Potentially set by pg_upgrade_support functions */
 Oid			binary_upgrade_next_pg_authid_oid = InvalidOid;
 
 
diff --git a/src/backend/utils/adt/Makefile b/src/backend/utils/adt/Makefile
index 20e5ff1..1f1bee7 100644
--- a/src/backend/utils/adt/Makefile
+++ b/src/backend/utils/adt/Makefile
@@ -25,7 +25,8 @@ OBJS = acl.o arrayfuncs.o array_selfuncs.o array_typanalyze.o \
 	jsonfuncs.o like.o lockfuncs.o mac.o misc.o nabstime.o name.o \
 	network.o network_gist.o network_selfuncs.o \
 	numeric.o numutils.o oid.o oracle_compat.o \
-	orderedsetaggs.o pg_locale.o pg_lsn.o pgstatfuncs.o \
+	orderedsetaggs.o pg_locale.o pg_lsn.o pg_upgrade_support.o \
+	pgstatfuncs.o \
 	pseudotypes.o quote.o rangetypes.o rangetypes_gist.o \
 	rangetypes_selfuncs.o rangetypes_spgist.o rangetypes_typanalyze.o \
 	regexp.o regproc.o ri_triggers.o rowtypes.o ruleutils.o \
diff --git a/contrib/pg_upgrade_support/pg_upgrade_support.c b/src/backend/utils/adt/pg_upgrade_support.c
similarity index 73%
rename from contrib/pg_upgrade_support/pg_upgrade_support.c
rename to src/backend/utils/adt/pg_upgrade_support.c
index f477973..d69fa53 100644
--- a/contrib/pg_upgrade_support/pg_upgrade_support.c
+++ b/src/backend/utils/adt/pg_upgrade_support.c
@@ -6,7 +6,7 @@
  *	hacks needed for pg_upgrade.
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade_support/pg_upgrade_support.c
+ *	src/backend/utils/adt/pg_upgrade_support.c
  */
 
 #include "postgres.h"
@@ -19,24 +19,17 @@
 #include "utils/array.h"
 #include "utils/builtins.h"
 
-/* THIS IS USED ONLY FOR PG >= 9.0 */
 
-#ifdef PG_MODULE_MAGIC
-PG_MODULE_MAGIC;
-#endif
+Datum binary_upgrade_set_next_pg_type_oid(PG_FUNCTION_ARGS);
+Datum binary_upgrade_set_next_array_pg_type_oid(PG_FUNCTION_ARGS);
+Datum binary_upgrade_set_next_toast_pg_type_oid(PG_FUNCTION_ARGS);
+Datum binary_upgrade_set_next_heap_pg_class_oid(PG_FUNCTION_ARGS);
+Datum binary_upgrade_set_next_index_pg_class_oid(PG_FUNCTION_ARGS);
+Datum binary_upgrade_set_next_toast_pg_class_oid(PG_FUNCTION_ARGS);
+Datum binary_upgrade_set_next_pg_enum_oid(PG_FUNCTION_ARGS);
+Datum binary_upgrade_set_next_pg_authid_oid(PG_FUNCTION_ARGS);
+Datum binary_upgrade_create_empty_extension(PG_FUNCTION_ARGS);
 
-PG_FUNCTION_INFO_V1(set_next_pg_type_oid);
-PG_FUNCTION_INFO_V1(set_next_array_pg_type_oid);
-PG_FUNCTION_INFO_V1(set_next_toast_pg_type_oid);
-
-PG_FUNCTION_INFO_V1(set_next_heap_pg_class_oid);
-PG_FUNCTION_INFO_V1(set_next_index_pg_class_oid);
-PG_FUNCTION_INFO_V1(set_next_toast_pg_class_oid);
-
-PG_FUNCTION_INFO_V1(set_next_pg_enum_oid);
-PG_FUNCTION_INFO_V1(set_next_pg_authid_oid);
-
-PG_FUNCTION_INFO_V1(create_empty_extension);
 
 #define CHECK_IS_BINARY_UPGRADE 								\
 do { 															\
@@ -47,7 +40,7 @@ do { 															\
 } while (0)
 
 Datum
-set_next_pg_type_oid(PG_FUNCTION_ARGS)
+binary_upgrade_set_next_pg_type_oid(PG_FUNCTION_ARGS)
 {
 	Oid			typoid = PG_GETARG_OID(0);
 
@@ -58,7 +51,7 @@ set_next_pg_type_oid(PG_FUNCTION_ARGS)
 }
 
 Datum
-set_next_array_pg_type_oid(PG_FUNCTION_ARGS)
+binary_upgrade_set_next_array_pg_type_oid(PG_FUNCTION_ARGS)
 {
 	Oid			typoid = PG_GETARG_OID(0);
 
@@ -69,7 +62,7 @@ set_next_array_pg_type_oid(PG_FUNCTION_ARGS)
 }
 
 Datum
-set_next_toast_pg_type_oid(PG_FUNCTION_ARGS)
+binary_upgrade_set_next_toast_pg_type_oid(PG_FUNCTION_ARGS)
 {
 	Oid			typoid = PG_GETARG_OID(0);
 
@@ -80,7 +73,7 @@ set_next_toast_pg_type_oid(PG_FUNCTION_ARGS)
 }
 
 Datum
-set_next_heap_pg_class_oid(PG_FUNCTION_ARGS)
+binary_upgrade_set_next_heap_pg_class_oid(PG_FUNCTION_ARGS)
 {
 	Oid			reloid = PG_GETARG_OID(0);
 
@@ -91,7 +84,7 @@ set_next_heap_pg_class_oid(PG_FUNCTION_ARGS)
 }
 
 Datum
-set_next_index_pg_class_oid(PG_FUNCTION_ARGS)
+binary_upgrade_set_next_index_pg_class_oid(PG_FUNCTION_ARGS)
 {
 	Oid			reloid = PG_GETARG_OID(0);
 
@@ -102,7 +95,7 @@ set_next_index_pg_class_oid(PG_FUNCTION_ARGS)
 }
 
 Datum
-set_next_toast_pg_class_oid(PG_FUNCTION_ARGS)
+binary_upgrade_set_next_toast_pg_class_oid(PG_FUNCTION_ARGS)
 {
 	Oid			reloid = PG_GETARG_OID(0);
 
@@ -113,7 +106,7 @@ set_next_toast_pg_class_oid(PG_FUNCTION_ARGS)
 }
 
 Datum
-set_next_pg_enum_oid(PG_FUNCTION_ARGS)
+binary_upgrade_set_next_pg_enum_oid(PG_FUNCTION_ARGS)
 {
 	Oid			enumoid = PG_GETARG_OID(0);
 
@@ -124,7 +117,7 @@ set_next_pg_enum_oid(PG_FUNCTION_ARGS)
 }
 
 Datum
-set_next_pg_authid_oid(PG_FUNCTION_ARGS)
+binary_upgrade_set_next_pg_authid_oid(PG_FUNCTION_ARGS)
 {
 	Oid			authoid = PG_GETARG_OID(0);
 
@@ -134,7 +127,7 @@ set_next_pg_authid_oid(PG_FUNCTION_ARGS)
 }
 
 Datum
-create_empty_extension(PG_FUNCTION_ARGS)
+binary_upgrade_create_empty_extension(PG_FUNCTION_ARGS)
 {
 	text	   *extName = PG_GETARG_TEXT_PP(0);
 	text	   *schemaName = PG_GETARG_TEXT_PP(1);
diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c
index fdfb431..41d2eec 100644
--- a/src/bin/pg_dump/pg_dump.c
+++ b/src/bin/pg_dump/pg_dump.c
@@ -3045,7 +3045,7 @@ binary_upgrade_set_type_oids_by_type_oid(Archive *fout,
 
 	appendPQExpBufferStr(upgrade_buffer, "\n-- For binary upgrade, must preserve pg_type oid\n");
 	appendPQExpBuffer(upgrade_buffer,
-	 "SELECT binary_upgrade.set_next_pg_type_oid('%u'::pg_catalog.oid);\n\n",
+	 "SELECT pg_catalog.binary_upgrade_set_next_pg_type_oid('%u'::pg_catalog.oid);\n\n",
 					  pg_type_oid);
 
 	/* we only support old >= 8.3 for binary upgrades */
@@ -3064,7 +3064,7 @@ binary_upgrade_set_type_oids_by_type_oid(Archive *fout,
 		appendPQExpBufferStr(upgrade_buffer,
 			   "\n-- For binary upgrade, must preserve pg_type array oid\n");
 		appendPQExpBuffer(upgrade_buffer,
-						  "SELECT binary_upgrade.set_next_array_pg_type_oid('%u'::pg_catalog.oid);\n\n",
+						  "SELECT pg_catalog.binary_upgrade_set_next_array_pg_type_oid('%u'::pg_catalog.oid);\n\n",
 						  pg_type_array_oid);
 	}
 
@@ -3106,7 +3106,7 @@ binary_upgrade_set_type_oids_by_rel_oid(Archive *fout,
 
 		appendPQExpBufferStr(upgrade_buffer, "\n-- For binary upgrade, must preserve pg_type toast oid\n");
 		appendPQExpBuffer(upgrade_buffer,
-						  "SELECT binary_upgrade.set_next_toast_pg_type_oid('%u'::pg_catalog.oid);\n\n",
+						  "SELECT pg_catalog.binary_upgrade_set_next_toast_pg_type_oid('%u'::pg_catalog.oid);\n\n",
 						  pg_type_toast_oid);
 
 		toast_set = true;
@@ -3146,7 +3146,7 @@ binary_upgrade_set_pg_class_oids(Archive *fout,
 	if (!is_index)
 	{
 		appendPQExpBuffer(upgrade_buffer,
-						  "SELECT binary_upgrade.set_next_heap_pg_class_oid('%u'::pg_catalog.oid);\n",
+						  "SELECT pg_catalog.binary_upgrade_set_next_heap_pg_class_oid('%u'::pg_catalog.oid);\n",
 						  pg_class_oid);
 		/* only tables have toast tables, not indexes */
 		if (OidIsValid(pg_class_reltoastrelid))
@@ -3161,18 +3161,18 @@ binary_upgrade_set_pg_class_oids(Archive *fout,
 			 */
 
 			appendPQExpBuffer(upgrade_buffer,
-							  "SELECT binary_upgrade.set_next_toast_pg_class_oid('%u'::pg_catalog.oid);\n",
+							  "SELECT pg_catalog.binary_upgrade_set_next_toast_pg_class_oid('%u'::pg_catalog.oid);\n",
 							  pg_class_reltoastrelid);
 
 			/* every toast table has an index */
 			appendPQExpBuffer(upgrade_buffer,
-							  "SELECT binary_upgrade.set_next_index_pg_class_oid('%u'::pg_catalog.oid);\n",
+							  "SELECT pg_catalog.binary_upgrade_set_next_index_pg_class_oid('%u'::pg_catalog.oid);\n",
 							  pg_index_indexrelid);
 		}
 	}
 	else
 		appendPQExpBuffer(upgrade_buffer,
-						  "SELECT binary_upgrade.set_next_index_pg_class_oid('%u'::pg_catalog.oid);\n",
+						  "SELECT pg_catalog.binary_upgrade_set_next_index_pg_class_oid('%u'::pg_catalog.oid);\n",
 						  pg_class_oid);
 
 	appendPQExpBufferChar(upgrade_buffer, '\n');
@@ -8352,7 +8352,7 @@ dumpExtension(Archive *fout, DumpOptions *dopt, ExtensionInfo *extinfo)
 		appendPQExpBuffer(q, "DROP EXTENSION IF EXISTS %s;\n", qextname);
 
 		appendPQExpBufferStr(q,
-							 "SELECT binary_upgrade.create_empty_extension(");
+							 "SELECT pg_catalog.binary_upgrade_create_empty_extension(");
 		appendStringLiteralAH(q, extinfo->dobj.name, fout);
 		appendPQExpBufferStr(q, ", ");
 		appendStringLiteralAH(q, extinfo->namespace, fout);
@@ -8530,7 +8530,7 @@ dumpEnumType(Archive *fout, DumpOptions *dopt, TypeInfo *tyinfo)
 			if (i == 0)
 				appendPQExpBufferStr(q, "\n-- For binary upgrade, must preserve pg_enum oids\n");
 			appendPQExpBuffer(q,
-							  "SELECT binary_upgrade.set_next_pg_enum_oid('%u'::pg_catalog.oid);\n",
+							  "SELECT pg_catalog.binary_upgrade_set_next_pg_enum_oid('%u'::pg_catalog.oid);\n",
 							  enum_oid);
 			appendPQExpBuffer(q, "ALTER TYPE %s.",
 							  fmtId(tyinfo->dobj.namespace->dobj.name));
diff --git a/src/bin/pg_dump/pg_dumpall.c b/src/bin/pg_dump/pg_dumpall.c
index 6a7a641..7169ad0 100644
--- a/src/bin/pg_dump/pg_dumpall.c
+++ b/src/bin/pg_dump/pg_dumpall.c
@@ -781,7 +781,7 @@ dumpRoles(PGconn *conn)
 		{
 			appendPQExpBufferStr(buf, "\n-- For binary upgrade, must preserve pg_authid.oid\n");
 			appendPQExpBuffer(buf,
-							  "SELECT binary_upgrade.set_next_pg_authid_oid('%u'::pg_catalog.oid);\n\n",
+							  "SELECT pg_catalog.binary_upgrade_set_next_pg_authid_oid('%u'::pg_catalog.oid);\n\n",
 							  auth_oid);
 		}
 
diff --git a/src/include/catalog/pg_proc.h b/src/include/catalog/pg_proc.h
index b8a3660..c7dd22c 100644
--- a/src/include/catalog/pg_proc.h
+++ b/src/include/catalog/pg_proc.h
@@ -5149,6 +5149,26 @@ DESCR("rank of hypothetical row without gaps");
 DATA(insert OID = 3993 ( dense_rank_final	PGNSP PGUID 12 1 0 2276 0 f f f f f f i 2 0 20 "2281 2276" "{2281,2276}" "{i,v}" _null_ _null_	hypothetical_dense_rank_final _null_ _null_ _null_ ));
 DESCR("aggregate final function");
 
+/* pg_upgrade support */
+DATA(insert OID = 3582 ( binary_upgrade_set_next_pg_type_oid PGNSP PGUID  12 1 0 0 0 f f f f t f v 1 0 2278 "26" _null_ _null_ _null_ _null_ binary_upgrade_set_next_pg_type_oid _null_ _null_ _null_ ));
+DESCR("for use by pg_upgrade");
+DATA(insert OID = 3584 ( binary_upgrade_set_next_array_pg_type_oid PGNSP PGUID  12 1 0 0 0 f f f f t f v 1 0 2278 "26" _null_ _null_ _null_ _null_ binary_upgrade_set_next_array_pg_type_oid _null_ _null_ _null_ ));
+DESCR("for use by pg_upgrade");
+DATA(insert OID = 3585 ( binary_upgrade_set_next_toast_pg_type_oid PGNSP PGUID  12 1 0 0 0 f f f f t f v 1 0 2278 "26" _null_ _null_ _null_ _null_ binary_upgrade_set_next_toast_pg_type_oid _null_ _null_ _null_ ));
+DESCR("for use by pg_upgrade");
+DATA(insert OID = 3586 ( binary_upgrade_set_next_heap_pg_class_oid PGNSP PGUID  12 1 0 0 0 f f f f t f v 1 0 2278 "26" _null_ _null_ _null_ _null_ binary_upgrade_set_next_heap_pg_class_oid _null_ _null_ _null_ ));
+DESCR("for use by pg_upgrade");
+DATA(insert OID = 3587 ( binary_upgrade_set_next_index_pg_class_oid PGNSP PGUID  12 1 0 0 0 f f f f t f v 1 0 2278 "26" _null_ _null_ _null_ _null_ binary_upgrade_set_next_index_pg_class_oid _null_ _null_ _null_ ));
+DESCR("for use by pg_upgrade");
+DATA(insert OID = 3588 ( binary_upgrade_set_next_toast_pg_class_oid PGNSP PGUID  12 1 0 0 0 f f f f t f v 1 0 2278 "26" _null_ _null_ _null_ _null_ binary_upgrade_set_next_toast_pg_class_oid _null_ _null_ _null_ ));
+DESCR("for use by pg_upgrade");
+DATA(insert OID = 3589 ( binary_upgrade_set_next_pg_enum_oid PGNSP PGUID  12 1 0 0 0 f f f f t f v 1 0 2278 "26" _null_ _null_ _null_ _null_ binary_upgrade_set_next_pg_enum_oid _null_ _null_ _null_ ));
+DESCR("for use by pg_upgrade");
+DATA(insert OID = 3590 ( binary_upgrade_set_next_pg_authid_oid PGNSP PGUID  12 1 0 0 0 f f f f t f v 1 0 2278 "26" _null_ _null_ _null_ _null_ binary_upgrade_set_next_pg_authid_oid _null_ _null_ _null_ ));
+DESCR("for use by pg_upgrade");
+DATA(insert OID = 3591 ( binary_upgrade_create_empty_extension PGNSP PGUID  12 1 0 0 0 f f f f t f v 7 0 2278 "25 25 16 25 1028 1009 1009" _null_ _null_ _null_ _null_ binary_upgrade_create_empty_extension _null_ _null_ _null_ ));
+DESCR("for use by pg_upgrade");
+
 
 /*
  * Symbolic values for provolatile column: these indicate whether the result
-- 
2.3.1

From b49a6b6799d128981e93f7a6a19ed33d9eec56ca Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <pete...@gmx.net>
Date: Tue, 10 Mar 2015 22:33:25 -0400
Subject: [PATCH 7/7] Move pg_upgrade from contrib/ to src/bin/

---
 contrib/Makefile                               |  1 -
 doc/src/sgml/contrib.sgml                      |  1 -
 doc/src/sgml/filelist.sgml                     |  1 -
 doc/src/sgml/ref/allfiles.sgml                 |  1 +
 doc/src/sgml/{ => ref}/pgupgrade.sgml          | 14 +++-----------
 doc/src/sgml/reference.sgml                    |  1 +
 src/bin/Makefile                               |  1 +
 {contrib => src/bin}/pg_upgrade/.gitignore     |  0
 {contrib => src/bin}/pg_upgrade/IMPLEMENTATION |  2 --
 {contrib => src/bin}/pg_upgrade/Makefile       | 18 +++++++-----------
 {contrib => src/bin}/pg_upgrade/TESTING        |  2 --
 {contrib => src/bin}/pg_upgrade/check.c        |  2 +-
 {contrib => src/bin}/pg_upgrade/controldata.c  |  2 +-
 {contrib => src/bin}/pg_upgrade/dump.c         |  2 +-
 {contrib => src/bin}/pg_upgrade/exec.c         |  2 +-
 {contrib => src/bin}/pg_upgrade/file.c         |  2 +-
 {contrib => src/bin}/pg_upgrade/function.c     |  2 +-
 {contrib => src/bin}/pg_upgrade/info.c         |  2 +-
 {contrib => src/bin}/pg_upgrade/option.c       |  2 +-
 {contrib => src/bin}/pg_upgrade/page.c         |  2 +-
 {contrib => src/bin}/pg_upgrade/parallel.c     |  2 +-
 {contrib => src/bin}/pg_upgrade/pg_upgrade.c   |  2 +-
 {contrib => src/bin}/pg_upgrade/pg_upgrade.h   |  2 +-
 {contrib => src/bin}/pg_upgrade/relfilenode.c  |  2 +-
 {contrib => src/bin}/pg_upgrade/server.c       |  2 +-
 {contrib => src/bin}/pg_upgrade/tablespace.c   |  2 +-
 {contrib => src/bin}/pg_upgrade/test.sh        |  8 ++++----
 {contrib => src/bin}/pg_upgrade/util.c         |  2 +-
 {contrib => src/bin}/pg_upgrade/version.c      |  2 +-
 src/tools/msvc/Mkvcbuild.pm                    | 14 ++++++++------
 src/tools/msvc/vcregress.pl                    |  6 +++---
 31 files changed, 45 insertions(+), 59 deletions(-)
 rename doc/src/sgml/{ => ref}/pgupgrade.sgml (98%)
 rename {contrib => src/bin}/pg_upgrade/.gitignore (100%)
 rename {contrib => src/bin}/pg_upgrade/IMPLEMENTATION (99%)
 rename {contrib => src/bin}/pg_upgrade/Makefile (79%)
 rename {contrib => src/bin}/pg_upgrade/TESTING (99%)
 rename {contrib => src/bin}/pg_upgrade/check.c (99%)
 rename {contrib => src/bin}/pg_upgrade/controldata.c (99%)
 rename {contrib => src/bin}/pg_upgrade/dump.c (99%)
 rename {contrib => src/bin}/pg_upgrade/exec.c (99%)
 rename {contrib => src/bin}/pg_upgrade/file.c (99%)
 rename {contrib => src/bin}/pg_upgrade/function.c (99%)
 rename {contrib => src/bin}/pg_upgrade/info.c (99%)
 rename {contrib => src/bin}/pg_upgrade/option.c (99%)
 rename {contrib => src/bin}/pg_upgrade/page.c (99%)
 rename {contrib => src/bin}/pg_upgrade/parallel.c (99%)
 rename {contrib => src/bin}/pg_upgrade/pg_upgrade.c (99%)
 rename {contrib => src/bin}/pg_upgrade/pg_upgrade.h (99%)
 rename {contrib => src/bin}/pg_upgrade/relfilenode.c (99%)
 rename {contrib => src/bin}/pg_upgrade/server.c (99%)
 rename {contrib => src/bin}/pg_upgrade/tablespace.c (98%)
 rename {contrib => src/bin}/pg_upgrade/test.sh (97%)
 rename {contrib => src/bin}/pg_upgrade/util.c (99%)
 rename {contrib => src/bin}/pg_upgrade/version.c (99%)

diff --git a/contrib/Makefile b/contrib/Makefile
index 39e8f1d..e2c4e27 100644
--- a/contrib/Makefile
+++ b/contrib/Makefile
@@ -34,7 +34,6 @@ SUBDIRS = \
 		pg_standby	\
 		pg_stat_statements \
 		pg_trgm		\
-		pg_upgrade	\
 		pgcrypto	\
 		pgrowlocks	\
 		pgstattuple	\
diff --git a/doc/src/sgml/contrib.sgml b/doc/src/sgml/contrib.sgml
index 885a096..49a6ce8 100644
--- a/doc/src/sgml/contrib.sgml
+++ b/doc/src/sgml/contrib.sgml
@@ -202,6 +202,5 @@ pages.
   </para>
 
  &pgstandby;
- &pgupgrade;
  </sect1>
 </appendix>
diff --git a/doc/src/sgml/filelist.sgml b/doc/src/sgml/filelist.sgml
index d6120e3..a240d7e 100644
--- a/doc/src/sgml/filelist.sgml
+++ b/doc/src/sgml/filelist.sgml
@@ -133,7 +133,6 @@
 <!ENTITY pgstatstatements SYSTEM "pgstatstatements.sgml">
 <!ENTITY pgstattuple     SYSTEM "pgstattuple.sgml">
 <!ENTITY pgtrgm          SYSTEM "pgtrgm.sgml">
-<!ENTITY pgupgrade       SYSTEM "pgupgrade.sgml">
 <!ENTITY postgres-fdw    SYSTEM "postgres-fdw.sgml">
 <!ENTITY seg             SYSTEM "seg.sgml">
 <!ENTITY contrib-spi     SYSTEM "contrib-spi.sgml">
diff --git a/doc/src/sgml/ref/allfiles.sgml b/doc/src/sgml/ref/allfiles.sgml
index 39e0244..0a35b4c 100644
--- a/doc/src/sgml/ref/allfiles.sgml
+++ b/doc/src/sgml/ref/allfiles.sgml
@@ -194,6 +194,7 @@ Complete list of usable sgml source files in this directory.
 <!ENTITY pgRestore          SYSTEM "pg_restore.sgml">
 <!ENTITY pgtestfsync        SYSTEM "pgtestfsync.sgml">
 <!ENTITY pgtesttiming       SYSTEM "pgtesttiming.sgml">
+<!ENTITY pgupgrade          SYSTEM "pgupgrade.sgml">
 <!ENTITY pgxlogdump         SYSTEM "pg_xlogdump.sgml">
 <!ENTITY postgres           SYSTEM "postgres-ref.sgml">
 <!ENTITY postmaster         SYSTEM "postmaster.sgml">
diff --git a/doc/src/sgml/pgupgrade.sgml b/doc/src/sgml/ref/pgupgrade.sgml
similarity index 98%
rename from doc/src/sgml/pgupgrade.sgml
rename to doc/src/sgml/ref/pgupgrade.sgml
index 8d70727..8b3912d 100644
--- a/doc/src/sgml/pgupgrade.sgml
+++ b/doc/src/sgml/ref/pgupgrade.sgml
@@ -1,4 +1,4 @@
-<!-- doc/src/sgml/pgupgrade.sgml -->
+<!-- doc/src/sgml/ref/pgupgrade.sgml -->
 
 <refentry id="pgupgrade">
  <indexterm zone="pgupgrade">
@@ -240,7 +240,8 @@ mv /usr/local/pgsql /usr/local/pgsql.old
     <title>Install the new PostgreSQL binaries</title>
 
     <para>
-     Install the new server's binaries and support files.
+     Install the new server's binaries and support
+     files.  <application>pg_upgrade</> is included in a default installation.
     </para>
 
     <para>
@@ -253,15 +254,6 @@ make prefix=/usr/local/pgsql.new install
    </step>
 
    <step>
-    <title>Install pg_upgrade</title>
-
-    <para>
-     Install the <application>pg_upgrade</> binary in the new PostgreSQL
-     installation.
-    </para>
-   </step>
-
-   <step>
     <title>Initialize the new PostgreSQL cluster</title>
 
     <para>
diff --git a/doc/src/sgml/reference.sgml b/doc/src/sgml/reference.sgml
index 99bfcda..e1484f4 100644
--- a/doc/src/sgml/reference.sgml
+++ b/doc/src/sgml/reference.sgml
@@ -264,6 +264,7 @@
    &pgResetxlog;
    &pgtestfsync;
    &pgtesttiming;
+   &pgupgrade;
    &pgxlogdump;
    &postgres;
    &postmaster;
diff --git a/src/bin/Makefile b/src/bin/Makefile
index 253119a..47ef00c 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -24,6 +24,7 @@ SUBDIRS = \
 	pg_resetxlog \
 	pg_test_fsync \
 	pg_test_timing \
+	pg_upgrade \
 	pg_xlogdump \
 	pgbench \
 	psql \
diff --git a/contrib/pg_upgrade/.gitignore b/src/bin/pg_upgrade/.gitignore
similarity index 100%
rename from contrib/pg_upgrade/.gitignore
rename to src/bin/pg_upgrade/.gitignore
diff --git a/contrib/pg_upgrade/IMPLEMENTATION b/src/bin/pg_upgrade/IMPLEMENTATION
similarity index 99%
rename from contrib/pg_upgrade/IMPLEMENTATION
rename to src/bin/pg_upgrade/IMPLEMENTATION
index a0cfcf1..9b5ff72 100644
--- a/contrib/pg_upgrade/IMPLEMENTATION
+++ b/src/bin/pg_upgrade/IMPLEMENTATION
@@ -1,5 +1,3 @@
-contrib/pg_upgrade/IMPLEMENTATION
-
 ------------------------------------------------------------------------------
 PG_UPGRADE: IN-PLACE UPGRADES FOR POSTGRESQL
 ------------------------------------------------------------------------------
diff --git a/contrib/pg_upgrade/Makefile b/src/bin/pg_upgrade/Makefile
similarity index 79%
rename from contrib/pg_upgrade/Makefile
rename to src/bin/pg_upgrade/Makefile
index 87da4b8..c22daa5 100644
--- a/contrib/pg_upgrade/Makefile
+++ b/src/bin/pg_upgrade/Makefile
@@ -1,8 +1,12 @@
-# contrib/pg_upgrade/Makefile
+# src/bin/pg_upgrade/Makefile
 
 PGFILEDESC = "pg_upgrade - an in-place binary upgrade utility"
 PGAPPICON = win32
 
+subdir = src/bin/pg_upgrade
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
 PROGRAM  = pg_upgrade
 OBJS = check.o controldata.o dump.o exec.o file.o function.o info.o \
        option.o page.o parallel.o pg_upgrade.o relfilenode.o server.o \
@@ -15,16 +19,8 @@ EXTRA_CLEAN = analyze_new_cluster.sh delete_old_cluster.sh log/ tmp_check/ \
               pg_upgrade_dump_globals.sql \
               pg_upgrade_dump_*.custom pg_upgrade_*.log
 
-ifdef USE_PGXS
-PG_CONFIG = pg_config
-PGXS := $(shell $(PG_CONFIG) --pgxs)
-include $(PGXS)
-else
-subdir = contrib/pg_upgrade
-top_builddir = ../..
-include $(top_builddir)/src/Makefile.global
-include $(top_srcdir)/contrib/contrib-global.mk
-endif
+NO_PGXS = 1
+include $(top_srcdir)/src/makefiles/pgxs.mk
 
 check: test.sh all
 	MAKE=$(MAKE) bindir=$(bindir) libdir=$(libdir) EXTRA_REGRESS_OPTS="$(EXTRA_REGRESS_OPTS)" $(SHELL) $< --install
diff --git a/contrib/pg_upgrade/TESTING b/src/bin/pg_upgrade/TESTING
similarity index 99%
rename from contrib/pg_upgrade/TESTING
rename to src/bin/pg_upgrade/TESTING
index 359688c..4ecfc57 100644
--- a/contrib/pg_upgrade/TESTING
+++ b/src/bin/pg_upgrade/TESTING
@@ -1,5 +1,3 @@
-contrib/pg_upgrade/TESTING
-
 The most effective way to test pg_upgrade, aside from testing on user
 data, is by upgrading the PostgreSQL regression database.
 
diff --git a/contrib/pg_upgrade/check.c b/src/bin/pg_upgrade/check.c
similarity index 99%
rename from contrib/pg_upgrade/check.c
rename to src/bin/pg_upgrade/check.c
index 6a498c3..647bf34 100644
--- a/contrib/pg_upgrade/check.c
+++ b/src/bin/pg_upgrade/check.c
@@ -4,7 +4,7 @@
  *	server checks and output routines
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/check.c
+ *	src/bin/pg_upgrade/check.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/controldata.c b/src/bin/pg_upgrade/controldata.c
similarity index 99%
rename from contrib/pg_upgrade/controldata.c
rename to src/bin/pg_upgrade/controldata.c
index 0e70b6f..bf53db0 100644
--- a/contrib/pg_upgrade/controldata.c
+++ b/src/bin/pg_upgrade/controldata.c
@@ -4,7 +4,7 @@
  *	controldata functions
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/controldata.c
+ *	src/bin/pg_upgrade/controldata.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/dump.c b/src/bin/pg_upgrade/dump.c
similarity index 99%
rename from contrib/pg_upgrade/dump.c
rename to src/bin/pg_upgrade/dump.c
index 906e85f..2c20e84 100644
--- a/contrib/pg_upgrade/dump.c
+++ b/src/bin/pg_upgrade/dump.c
@@ -4,7 +4,7 @@
  *	dump functions
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/dump.c
+ *	src/bin/pg_upgrade/dump.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/exec.c b/src/bin/pg_upgrade/exec.c
similarity index 99%
rename from contrib/pg_upgrade/exec.c
rename to src/bin/pg_upgrade/exec.c
index bf87419..7d31912 100644
--- a/contrib/pg_upgrade/exec.c
+++ b/src/bin/pg_upgrade/exec.c
@@ -4,7 +4,7 @@
  *	execution functions
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/exec.c
+ *	src/bin/pg_upgrade/exec.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/file.c b/src/bin/pg_upgrade/file.c
similarity index 99%
rename from contrib/pg_upgrade/file.c
rename to src/bin/pg_upgrade/file.c
index 5a8d17a..79d9390 100644
--- a/contrib/pg_upgrade/file.c
+++ b/src/bin/pg_upgrade/file.c
@@ -4,7 +4,7 @@
  *	file system operations
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/file.c
+ *	src/bin/pg_upgrade/file.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/function.c b/src/bin/pg_upgrade/function.c
similarity index 99%
rename from contrib/pg_upgrade/function.c
rename to src/bin/pg_upgrade/function.c
index d8009d1..04492a5 100644
--- a/contrib/pg_upgrade/function.c
+++ b/src/bin/pg_upgrade/function.c
@@ -4,7 +4,7 @@
  *	server-side function support
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/function.c
+ *	src/bin/pg_upgrade/function.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/info.c b/src/bin/pg_upgrade/info.c
similarity index 99%
rename from contrib/pg_upgrade/info.c
rename to src/bin/pg_upgrade/info.c
index 1254934..c0a5601 100644
--- a/contrib/pg_upgrade/info.c
+++ b/src/bin/pg_upgrade/info.c
@@ -4,7 +4,7 @@
  *	information support functions
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/info.c
+ *	src/bin/pg_upgrade/info.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/option.c b/src/bin/pg_upgrade/option.c
similarity index 99%
rename from contrib/pg_upgrade/option.c
rename to src/bin/pg_upgrade/option.c
index 9b387be..ce339ce 100644
--- a/contrib/pg_upgrade/option.c
+++ b/src/bin/pg_upgrade/option.c
@@ -4,7 +4,7 @@
  *	options functions
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/option.c
+ *	src/bin/pg_upgrade/option.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/page.c b/src/bin/pg_upgrade/page.c
similarity index 99%
rename from contrib/pg_upgrade/page.c
rename to src/bin/pg_upgrade/page.c
index 1cfc10f..3f4c697 100644
--- a/contrib/pg_upgrade/page.c
+++ b/src/bin/pg_upgrade/page.c
@@ -4,7 +4,7 @@
  *	per-page conversion operations
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/page.c
+ *	src/bin/pg_upgrade/page.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/parallel.c b/src/bin/pg_upgrade/parallel.c
similarity index 99%
rename from contrib/pg_upgrade/parallel.c
rename to src/bin/pg_upgrade/parallel.c
index 6da9965..c6978b5 100644
--- a/contrib/pg_upgrade/parallel.c
+++ b/src/bin/pg_upgrade/parallel.c
@@ -4,7 +4,7 @@
  *	multi-process support
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/parallel.c
+ *	src/bin/pg_upgrade/parallel.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/pg_upgrade.c b/src/bin/pg_upgrade/pg_upgrade.c
similarity index 99%
rename from contrib/pg_upgrade/pg_upgrade.c
rename to src/bin/pg_upgrade/pg_upgrade.c
index 1ff01a7..0333a91 100644
--- a/contrib/pg_upgrade/pg_upgrade.c
+++ b/src/bin/pg_upgrade/pg_upgrade.c
@@ -4,7 +4,7 @@
  *	main source file
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/pg_upgrade.c
+ *	src/bin/pg_upgrade/pg_upgrade.c
  */
 
 /*
diff --git a/contrib/pg_upgrade/pg_upgrade.h b/src/bin/pg_upgrade/pg_upgrade.h
similarity index 99%
rename from contrib/pg_upgrade/pg_upgrade.h
rename to src/bin/pg_upgrade/pg_upgrade.h
index 1e88345..fbc9aa1 100644
--- a/contrib/pg_upgrade/pg_upgrade.h
+++ b/src/bin/pg_upgrade/pg_upgrade.h
@@ -2,7 +2,7 @@
  *	pg_upgrade.h
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/pg_upgrade.h
+ *	src/bin/pg_upgrade/pg_upgrade.h
  */
 
 #include <unistd.h>
diff --git a/contrib/pg_upgrade/relfilenode.c b/src/bin/pg_upgrade/relfilenode.c
similarity index 99%
rename from contrib/pg_upgrade/relfilenode.c
rename to src/bin/pg_upgrade/relfilenode.c
index 423802b..fe05880 100644
--- a/contrib/pg_upgrade/relfilenode.c
+++ b/src/bin/pg_upgrade/relfilenode.c
@@ -4,7 +4,7 @@
  *	relfilenode functions
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/relfilenode.c
+ *	src/bin/pg_upgrade/relfilenode.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/server.c b/src/bin/pg_upgrade/server.c
similarity index 99%
rename from contrib/pg_upgrade/server.c
rename to src/bin/pg_upgrade/server.c
index c5f66f0..8d8e7d7 100644
--- a/contrib/pg_upgrade/server.c
+++ b/src/bin/pg_upgrade/server.c
@@ -4,7 +4,7 @@
  *	database server functions
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/server.c
+ *	src/bin/pg_upgrade/server.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/tablespace.c b/src/bin/pg_upgrade/tablespace.c
similarity index 98%
rename from contrib/pg_upgrade/tablespace.c
rename to src/bin/pg_upgrade/tablespace.c
index eecdf4b..ce7097e 100644
--- a/contrib/pg_upgrade/tablespace.c
+++ b/src/bin/pg_upgrade/tablespace.c
@@ -4,7 +4,7 @@
  *	tablespace functions
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/tablespace.c
+ *	src/bin/pg_upgrade/tablespace.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/test.sh b/src/bin/pg_upgrade/test.sh
similarity index 97%
rename from contrib/pg_upgrade/test.sh
rename to src/bin/pg_upgrade/test.sh
index 2e9f976..0903f30 100644
--- a/contrib/pg_upgrade/test.sh
+++ b/src/bin/pg_upgrade/test.sh
@@ -1,6 +1,6 @@
 #!/bin/sh
 
-# contrib/pg_upgrade/test.sh
+# src/bin/pg_upgrade/test.sh
 #
 # Test driver for pg_upgrade.  Initializes a new database cluster,
 # runs the regression tests (to put in some data), runs pg_dumpall,
@@ -21,7 +21,7 @@ unset MAKELEVEL
 # authentication configuration.
 standard_initdb() {
 	"$1" -N
-	../../src/test/regress/pg_regress --config-auth "$PGDATA"
+	../../test/regress/pg_regress --config-auth "$PGDATA"
 }
 
 # Establish how the server will listen for connections
@@ -92,9 +92,9 @@ fi
 
 : ${oldbindir=$bindir}
 
-: ${oldsrc=../..}
+: ${oldsrc=../../..}
 oldsrc=`cd "$oldsrc" && pwd`
-newsrc=`cd ../.. && pwd`
+newsrc=`cd ../../.. && pwd`
 
 PATH=$bindir:$PATH
 export PATH
diff --git a/contrib/pg_upgrade/util.c b/src/bin/pg_upgrade/util.c
similarity index 99%
rename from contrib/pg_upgrade/util.c
rename to src/bin/pg_upgrade/util.c
index ce17aa0..2743bc0 100644
--- a/contrib/pg_upgrade/util.c
+++ b/src/bin/pg_upgrade/util.c
@@ -4,7 +4,7 @@
  *	utility functions
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/util.c
+ *	src/bin/pg_upgrade/util.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/version.c b/src/bin/pg_upgrade/version.c
similarity index 99%
rename from contrib/pg_upgrade/version.c
rename to src/bin/pg_upgrade/version.c
index 4ae9511..e3e7387 100644
--- a/contrib/pg_upgrade/version.c
+++ b/src/bin/pg_upgrade/version.c
@@ -4,7 +4,7 @@
  *	Postgres-version-specific routines
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/version.c
+ *	src/bin/pg_upgrade/version.c
  */
 
 #include "postgres_fe.h"
diff --git a/src/tools/msvc/Mkvcbuild.pm b/src/tools/msvc/Mkvcbuild.pm
index 09ec8b7..38ea0f3 100644
--- a/src/tools/msvc/Mkvcbuild.pm
+++ b/src/tools/msvc/Mkvcbuild.pm
@@ -32,13 +32,13 @@ my $libpq;
 # Set of variables for contrib modules
 my $contrib_defines = { 'refint' => 'REFINT_VERBOSE' };
 my @contrib_uselibpq =
-  ('dblink', 'oid2name', 'pg_upgrade', 'postgres_fdw', 'vacuumlo');
+  ('dblink', 'oid2name', 'postgres_fdw', 'vacuumlo');
 my @contrib_uselibpgport = (
 	'oid2name',   'pg_standby',
-	'pg_upgrade', 'vacuumlo');
+	'vacuumlo');
 my @contrib_uselibpgcommon = (
 	'oid2name',   'pg_standby',
-	'pg_upgrade', 'vacuumlo');
+	'vacuumlo');
 my $contrib_extralibs = undef;
 my $contrib_extraincludes =
   { 'tsearch2' => ['contrib/tsearch2'], 'dblink' => ['src/backend'] };
@@ -49,13 +49,15 @@ my @contrib_excludes = ('pgcrypto', 'intagg', 'sepgsql');
 
 # Set of variables for frontend modules
 my $frontend_defines = { 'initdb' => 'FRONTEND' };
-my @frontend_uselibpq = ('pg_ctl', 'pgbench', 'psql');
+my @frontend_uselibpq = ('pg_ctl', 'pg_upgrade', 'pgbench', 'psql');
 my @frontend_uselibpgport = (
 	'pg_archivecleanup', 'pg_test_fsync',
-	'pg_test_timing',    'pgbench' );
+	'pg_test_timing',    'pg_upgrade',
+	'pgbench' );
 my @frontend_uselibpgcommon = (
 	'pg_archivecleanup', 'pg_test_fsync',
-	'pg_test_timing',    'pgbench' );
+	'pg_test_timing',    'pg_upgrade',
+	'pgbench' );
 my $frontend_extralibs = {
 	'initdb'     => ['ws2_32.lib'],
 	'pg_restore' => ['ws2_32.lib'],
diff --git a/src/tools/msvc/vcregress.pl b/src/tools/msvc/vcregress.pl
index bd3dd2c..4812a03 100644
--- a/src/tools/msvc/vcregress.pl
+++ b/src/tools/msvc/vcregress.pl
@@ -269,7 +269,7 @@ sub upgradecheck
 
 	$ENV{PGHOST} = 'localhost';
 	$ENV{PGPORT} ||= 50432;
-	my $tmp_root = "$topdir/contrib/pg_upgrade/tmp_check";
+	my $tmp_root = "$topdir/src/bin/pg_upgrade/tmp_check";
 	(mkdir $tmp_root || die $!) unless -d $tmp_root;
 	my $tmp_install = "$tmp_root/install";
 	print "Setting up temp install\n\n";
@@ -282,7 +282,7 @@ sub upgradecheck
 	$ENV{PATH} = "$bindir;$ENV{PATH}";
 	my $data = "$tmp_root/data";
 	$ENV{PGDATA} = "$data.old";
-	my $logdir = "$topdir/contrib/pg_upgrade/log";
+	my $logdir = "$topdir/src/bin/pg_upgrade/log";
 	(mkdir $logdir || die $!) unless -d $logdir;
 	print "\nRunning initdb on old cluster\n\n";
 	standard_initdb() or exit 1;
@@ -292,7 +292,7 @@ sub upgradecheck
 	installcheck();
 
 	# now we can chdir into the source dir
-	chdir "$topdir/contrib/pg_upgrade";
+	chdir "$topdir/src/bin/pg_upgrade";
 	print "\nDumping old cluster\n\n";
 	system("pg_dumpall -f $tmp_root/dump1.sql") == 0 or exit 1;
 	print "\nStopping old cluster\n\n";
-- 
2.3.1

-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to