From 5f6bedf514c9fa30ce5f3f3e88e95f77a2bde91c Mon Sep 17 00:00:00 2001
From: Andres Freund <andres@anarazel.de>
Date: Wed, 22 Aug 2018 16:04:47 -0700
Subject: [PATCH v1 2/4] Remove test for VA_ARGS, implied by C99.

Author: Andres Freund
Discussion: https://postgr.es/m/97d4b165-192d-3605-749c-f614a0c4e783@2ndquadrant.com
---
 config/c-compiler.m4              |  19 --
 configure                         |  34 +---
 configure.in                      |   1 -
 doc/src/sgml/install-windows.sgml |  26 +--
 src/include/pg_config.h.in        |   3 -
 src/include/pg_config.h.win32     |   3 -
 src/include/utils/elog.h          |   8 +-
 src/pl/plpython/plpy_elog.h       |   4 -
 src/tools/msvc/MSBuildProject.pm  |  76 +-------
 src/tools/msvc/README             |  12 +-
 src/tools/msvc/Solution.pm        | 102 ----------
 src/tools/msvc/VCBuildProject.pm  | 309 ------------------------------
 src/tools/msvc/VSObjectFactory.pm |  37 +---
 13 files changed, 27 insertions(+), 607 deletions(-)
 delete mode 100644 src/tools/msvc/VCBuildProject.pm

diff --git a/config/c-compiler.m4 b/config/c-compiler.m4
index 67675a31bb6..eedaf12d69c 100644
--- a/config/c-compiler.m4
+++ b/config/c-compiler.m4
@@ -415,25 +415,6 @@ fi])# PGAC_C_COMPUTED_GOTO
 
 
 
-# PGAC_C_VA_ARGS
-# --------------
-# Check if the C compiler understands C99-style variadic macros,
-# and define HAVE__VA_ARGS if so.
-AC_DEFUN([PGAC_C_VA_ARGS],
-[AC_CACHE_CHECK(for __VA_ARGS__, pgac_cv__va_args,
-[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <stdio.h>],
-[#define debug(...) fprintf(stderr, __VA_ARGS__)
-debug("%s", "blarg");
-])],
-[pgac_cv__va_args=yes],
-[pgac_cv__va_args=no])])
-if test x"$pgac_cv__va_args" = xyes ; then
-AC_DEFINE(HAVE__VA_ARGS, 1,
-          [Define to 1 if your compiler understands __VA_ARGS__ in macros.])
-fi])# PGAC_C_VA_ARGS
-
-
-
 # PGAC_PROG_VARCC_VARFLAGS_OPT
 # -----------------------
 # Given a compiler, variable name and a string, check if the compiler
diff --git a/configure b/configure
index dd439ddd2f6..af090ffb08f 100755
--- a/configure
+++ b/configure
@@ -13962,38 +13962,6 @@ if test x"$pgac_cv_computed_goto" = xyes ; then
 
 $as_echo "#define HAVE_COMPUTED_GOTO 1" >>confdefs.h
 
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for __VA_ARGS__" >&5
-$as_echo_n "checking for __VA_ARGS__... " >&6; }
-if ${pgac_cv__va_args+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdio.h>
-int
-main ()
-{
-#define debug(...) fprintf(stderr, __VA_ARGS__)
-debug("%s", "blarg");
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  pgac_cv__va_args=yes
-else
-  pgac_cv__va_args=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv__va_args" >&5
-$as_echo "$pgac_cv__va_args" >&6; }
-if test x"$pgac_cv__va_args" = xyes ; then
-
-$as_echo "#define HAVE__VA_ARGS 1" >>confdefs.h
-
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct tm is in sys/time.h or time.h" >&5
 $as_echo_n "checking whether struct tm is in sys/time.h or time.h... " >&6; }
@@ -19635,7 +19603,7 @@ PostgreSQL config.status 12devel
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
-Copyright (C) 2012 Free Software Foundation, Inc.
+Copyright (C)  Free Software Foundation, Inc.
 This config.status script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it."
 
diff --git a/configure.in b/configure.in
index 5869ab7c5bc..3280afa0dab 100644
--- a/configure.in
+++ b/configure.in
@@ -1434,7 +1434,6 @@ PGAC_C_BUILTIN_BSWAP64
 PGAC_C_BUILTIN_CONSTANT_P
 PGAC_C_BUILTIN_UNREACHABLE
 PGAC_C_COMPUTED_GOTO
-PGAC_C_VA_ARGS
 PGAC_STRUCT_TIMEZONE
 PGAC_UNION_SEMUN
 PGAC_STRUCT_SOCKADDR_UN
diff --git a/doc/src/sgml/install-windows.sgml b/doc/src/sgml/install-windows.sgml
index 9597bc35a14..22a2ffd55ee 100644
--- a/doc/src/sgml/install-windows.sgml
+++ b/doc/src/sgml/install-windows.sgml
@@ -22,7 +22,7 @@
   Microsoft tools is to install <productname>Visual Studio Express 2017
   for Windows Desktop</productname> and use the included
   compiler. It is also possible to build with the full
-  <productname>Microsoft Visual C++ 2005 to 2017</productname>.
+  <productname>Microsoft Visual C++ 2013 to 2017</productname>.
   In some cases that requires the installation of the
   <productname>Windows SDK</productname> in addition to the compiler.
  </para>
@@ -77,20 +77,24 @@
  <para>
   Both 32-bit and 64-bit builds are possible with the Microsoft Compiler suite.
   32-bit PostgreSQL builds are possible with
-  <productname>Visual Studio 2005</productname> to
+  <productname>Visual Studio 2013</productname> to
   <productname>Visual Studio 2017</productname> (including Express editions),
   as well as standalone Windows SDK releases 6.0 to 8.1.
   64-bit PostgreSQL builds are supported with
   <productname>Microsoft Windows SDK</productname> version 6.0a to 8.1 or
-  <productname>Visual Studio 2008</productname> and above. Compilation
-  is supported down to <productname>Windows XP</productname> and
-  <productname>Windows Server 2003</productname> when building with
-  <productname>Visual Studio 2005</productname> to
-  <productname>Visual Studio 2013</productname>. Building with
-  <productname>Visual Studio 2015</productname> is supported down to
-  <productname>Windows Vista</productname> and <productname>Windows Server 2008</productname>.
-   Building with <productname>Visual Studio 2017</productname> is supported
-   down to <productname>Windows 7 SP1</productname> and <productname>Windows Server 2008 R2 SP1</productname>.
+  <productname>Visual Studio 2013</productname> and above. Compilation
+  is supported down to <productname>Windows 7</productname> and
+  <productname>Windows Server 2008 R2 SP1</productname> when building with
+  <productname>Visual Studio 2013</productname> to
+  <productname>Visual Studio 2017</productname>.
+   <!--
+       For 2013 requirements:
+       https://docs.microsoft.com/en-us/visualstudio/productinfo/vs2013-sysrequirements-vs
+       For 2015 requirements:
+       https://docs.microsoft.com/en-us/visualstudio/productinfo/vs2015-sysrequirements-vs
+       For 2017 requirements:
+       https://docs.microsoft.com/en-us/visualstudio/productinfo/vs2017-system-requirements-vs
+   -->
  </para>
 
  <para>
diff --git a/src/include/pg_config.h.in b/src/include/pg_config.h.in
index 827574ee40d..37649d77d67 100644
--- a/src/include/pg_config.h.in
+++ b/src/include/pg_config.h.in
@@ -754,9 +754,6 @@
 /* Define to 1 if your compiler understands _Static_assert. */
 #undef HAVE__STATIC_ASSERT
 
-/* Define to 1 if your compiler understands __VA_ARGS__ in macros. */
-#undef HAVE__VA_ARGS
-
 /* Define to 1 if you have the `__strtoll' function. */
 #undef HAVE___STRTOLL
 
diff --git a/src/include/pg_config.h.win32 b/src/include/pg_config.h.win32
index 46ce49def2f..4e2bd3c1352 100644
--- a/src/include/pg_config.h.win32
+++ b/src/include/pg_config.h.win32
@@ -597,9 +597,6 @@
 /* Define to 1 if your compiler understands _Static_assert. */
 /* #undef HAVE__STATIC_ASSERT */
 
-/* Define to 1 if your compiler understands __VA_ARGS__ in macros. */
-#define HAVE__VA_ARGS 1
-
 /* Define to the appropriate printf length modifier for 64-bit ints. */
 #define INT64_MODIFIER "ll"
 
diff --git a/src/include/utils/elog.h b/src/include/utils/elog.h
index 4350b120aab..33c6b53e278 100644
--- a/src/include/utils/elog.h
+++ b/src/include/utils/elog.h
@@ -207,9 +207,8 @@ extern int	getinternalerrposition(void);
  *		elog(ERROR, "portal \"%s\" not found", stmt->portalname);
  *----------
  */
-#ifdef HAVE__VA_ARGS
 /*
- * If we have variadic macros, we can give the compiler a hint about the
+ * Using variadic macros, we can give the compiler a hint about the
  * call not returning when elevel >= ERROR.  See comments for ereport().
  * Note that historically elog() has called elog_start (which saves errno)
  * before evaluating "elevel", so we preserve that behavior here.
@@ -236,11 +235,6 @@ extern int	getinternalerrposition(void);
 		} \
 	} while(0)
 #endif							/* HAVE__BUILTIN_CONSTANT_P */
-#else							/* !HAVE__VA_ARGS */
-#define elog  \
-	elog_start(__FILE__, __LINE__, PG_FUNCNAME_MACRO), \
-	elog_finish
-#endif							/* HAVE__VA_ARGS */
 
 extern void elog_start(const char *filename, int lineno, const char *funcname);
 extern void elog_finish(int elevel, const char *fmt,...) pg_attribute_printf(2, 3);
diff --git a/src/pl/plpython/plpy_elog.h b/src/pl/plpython/plpy_elog.h
index e4b30c3cca1..b56ac412476 100644
--- a/src/pl/plpython/plpy_elog.h
+++ b/src/pl/plpython/plpy_elog.h
@@ -15,7 +15,6 @@ extern PyObject *PLy_exc_spi_error;
  *
  * See comments at elog() about the compiler hinting.
  */
-#ifdef HAVE__VA_ARGS
 #ifdef HAVE__BUILTIN_CONSTANT_P
 #define PLy_elog(elevel, ...) \
 	do { \
@@ -32,9 +31,6 @@ extern PyObject *PLy_exc_spi_error;
 			pg_unreachable(); \
 	} while(0)
 #endif							/* HAVE__BUILTIN_CONSTANT_P */
-#else							/* !HAVE__VA_ARGS */
-#define PLy_elog PLy_elog_impl
-#endif							/* HAVE__VA_ARGS */
 
 extern void PLy_elog_impl(int elevel, const char *fmt,...) pg_attribute_printf(2, 3);
 
diff --git a/src/tools/msvc/MSBuildProject.pm b/src/tools/msvc/MSBuildProject.pm
index dd6a610e5b2..149213378cf 100644
--- a/src/tools/msvc/MSBuildProject.pm
+++ b/src/tools/msvc/MSBuildProject.pm
@@ -257,6 +257,7 @@ sub WriteConfigurationPropertyGroup
     <UseOfMfc>false</UseOfMfc>
     <CharacterSet>MultiByte</CharacterSet>
     <WholeProgramOptimization>$p->{wholeopt}</WholeProgramOptimization>
+    <PlatformToolset>$self->{PlatformToolset}</PlatformToolset>
   </PropertyGroup>
 EOF
 	return;
@@ -391,75 +392,6 @@ EOF
 	return;
 }
 
-package VC2010Project;
-
-#
-# Package that encapsulates a Visual C++ 2010 project file
-#
-
-use strict;
-use warnings;
-use base qw(MSBuildProject);
-
-no warnings qw(redefine);    ## no critic
-
-sub new
-{
-	my $classname = shift;
-	my $self      = $classname->SUPER::_new(@_);
-	bless($self, $classname);
-
-	$self->{vcver} = '10.00';
-
-	return $self;
-}
-
-package VC2012Project;
-
-#
-# Package that encapsulates a Visual C++ 2012 project file
-#
-
-use strict;
-use warnings;
-use base qw(MSBuildProject);
-
-no warnings qw(redefine);    ## no critic
-
-sub new
-{
-	my $classname = shift;
-	my $self      = $classname->SUPER::_new(@_);
-	bless($self, $classname);
-
-	$self->{vcver}           = '11.00';
-	$self->{PlatformToolset} = 'v110';
-
-	return $self;
-}
-
-# This override adds the <PlatformToolset> element
-# to the PropertyGroup labeled "Configuration"
-sub WriteConfigurationPropertyGroup
-{
-	my ($self, $f, $cfgname, $p) = @_;
-	my $cfgtype =
-	  ($self->{type} eq "exe")
-	  ? 'Application'
-	  : ($self->{type} eq "dll" ? 'DynamicLibrary' : 'StaticLibrary');
-
-	print $f <<EOF;
-  <PropertyGroup Condition="'\$(Configuration)|\$(Platform)'=='$cfgname|$self->{platform}'" Label="Configuration">
-    <ConfigurationType>$cfgtype</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-    <CharacterSet>MultiByte</CharacterSet>
-    <WholeProgramOptimization>$p->{wholeopt}</WholeProgramOptimization>
-    <PlatformToolset>$self->{PlatformToolset}</PlatformToolset>
-  </PropertyGroup>
-EOF
-	return;
-}
-
 package VC2013Project;
 
 #
@@ -468,7 +400,7 @@ package VC2013Project;
 
 use strict;
 use warnings;
-use base qw(VC2012Project);
+use base qw(MSBuildProject);
 
 no warnings qw(redefine);    ## no critic
 
@@ -493,7 +425,7 @@ package VC2015Project;
 
 use strict;
 use warnings;
-use base qw(VC2012Project);
+use base qw(MSBuildProject);
 
 no warnings qw(redefine);    ## no critic
 
@@ -518,7 +450,7 @@ package VC2017Project;
 
 use strict;
 use warnings;
-use base qw(VC2012Project);
+use base qw(MSBuildProject);
 
 no warnings qw(redefine);    ## no critic
 
diff --git a/src/tools/msvc/README b/src/tools/msvc/README
index 2827d76b2d1..4ab81d3402f 100644
--- a/src/tools/msvc/README
+++ b/src/tools/msvc/README
@@ -4,7 +4,7 @@ MSVC build
 ==========
 
 This directory contains the tools required to build PostgreSQL using
-Microsoft Visual Studio 2005 - 2017. This builds the whole backend, not just
+Microsoft Visual Studio 2013 - 2017. This builds the whole backend, not just
 the libpq frontend library. For more information, see the documentation
 chapter "Installation on Windows" and the description below.
 
@@ -73,8 +73,6 @@ Project.pm             module containing the common code to generate the
                        common interface of all project file generators
 Solution.pm            module containing the code to generate the Visual
                        Studio solution files.
-VCBuildProject.pm      module containing the code to generate VCBuild based
-                       project files (Visual Studio 2005/2008)
 VSObjectFactory.pm     factory module providing the code to create the
                        appropriate project/solution files for the current
                        environment
@@ -90,13 +88,11 @@ config_default.pl to create the configuration arguments.
 These configuration arguments are passed over to Mkvcbuild::mkvcbuild
 (Mkvcbuild.pm) which creates the Visual Studio project and solution files.
 It does this by using VSObjectFactory::CreateSolution to create an object
-implementing the Solution interface (this could be either a VS2005Solution,
-a VS2008Solution, a VS2010Solution or a VS2012Solution or a VS2013Solution,
+implementing the Solution interface (this could be either a VS2013Solution,
 or a VS2015Solution or a VS2017Solution, all in Solution.pm, depending on
 the user's build environment) and adding objects implementing the corresponding
-Project interface (VC2005Project or VC2008Project from VCBuildProject.pm or
-VC2010Project or VC2012Project or VC2013Project or VC2015Project or VC2017Project
-from MSBuildProject.pm) to it.
+Project interface (VC2013Project or VC2015Project or VC2017Project from
+MSBuildProject.pm) to it.
 When Solution::Save is called, the implementations of Solution and Project
 save their content in the appropriate format.
 The final step of starting the appropriate build program (msbuild) is
diff --git a/src/tools/msvc/Solution.pm b/src/tools/msvc/Solution.pm
index 78db247b291..7d7ce8b0312 100644
--- a/src/tools/msvc/Solution.pm
+++ b/src/tools/msvc/Solution.pm
@@ -760,108 +760,6 @@ sub GetFakeConfigure
 	return $cfg;
 }
 
-package VS2005Solution;
-
-#
-# Package that encapsulates a Visual Studio 2005 solution file
-#
-
-use strict;
-use warnings;
-use base qw(Solution);
-
-no warnings qw(redefine);    ## no critic
-
-sub new
-{
-	my $classname = shift;
-	my $self      = $classname->SUPER::_new(@_);
-	bless($self, $classname);
-
-	$self->{solutionFileVersion} = '9.00';
-	$self->{vcver}               = '8.00';
-	$self->{visualStudioName}    = 'Visual Studio 2005';
-
-	return $self;
-}
-
-package VS2008Solution;
-
-#
-# Package that encapsulates a Visual Studio 2008 solution file
-#
-
-use strict;
-use warnings;
-use base qw(Solution);
-
-no warnings qw(redefine);    ## no critic
-
-sub new
-{
-	my $classname = shift;
-	my $self      = $classname->SUPER::_new(@_);
-	bless($self, $classname);
-
-	$self->{solutionFileVersion} = '10.00';
-	$self->{vcver}               = '9.00';
-	$self->{visualStudioName}    = 'Visual Studio 2008';
-
-	return $self;
-}
-
-package VS2010Solution;
-
-#
-# Package that encapsulates a Visual Studio 2010 solution file
-#
-
-use Carp;
-use strict;
-use warnings;
-use base qw(Solution);
-
-no warnings qw(redefine);    ## no critic
-
-sub new
-{
-	my $classname = shift;
-	my $self      = $classname->SUPER::_new(@_);
-	bless($self, $classname);
-
-	$self->{solutionFileVersion} = '11.00';
-	$self->{vcver}               = '10.00';
-	$self->{visualStudioName}    = 'Visual Studio 2010';
-
-	return $self;
-}
-
-package VS2012Solution;
-
-#
-# Package that encapsulates a Visual Studio 2012 solution file
-#
-
-use Carp;
-use strict;
-use warnings;
-use base qw(Solution);
-
-no warnings qw(redefine);    ## no critic
-
-sub new
-{
-	my $classname = shift;
-	my $self      = $classname->SUPER::_new(@_);
-	bless($self, $classname);
-
-	$self->{solutionFileVersion} = '12.00';
-	$self->{vcver}               = '11.00';
-	$self->{visualStudioName}    = 'Visual Studio 2012';
-
-	return $self;
-}
-
 package VS2013Solution;
 
 #
diff --git a/src/tools/msvc/VCBuildProject.pm b/src/tools/msvc/VCBuildProject.pm
deleted file mode 100644
index 6cdf822a637..00000000000
--- a/src/tools/msvc/VCBuildProject.pm
+++ /dev/null
@@ -1,309 +0,0 @@
-package VCBuildProject;
-
-#
-# Package that encapsulates a VCBuild (Visual C++ 2005/2008) project file
-#
-# src/tools/msvc/VCBuildProject.pm
-#
-
-use Carp;
-use strict;
-use warnings;
-use base qw(Project);
-
-no warnings qw(redefine);    ## no critic
-
-sub _new
-{
-	my $classname = shift;
-	my $self      = $classname->SUPER::_new(@_);
-	bless($self, $classname);
-
-	$self->{filenameExtension} = '.vcproj';
-
-	return $self;
-}
-
-sub WriteHeader
-{
-	my ($self, $f) = @_;
-
-	print $f <<EOF;
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject ProjectType="Visual C++" Version="$self->{vcver}" Name="$self->{name}" ProjectGUID="$self->{guid}">
- <Platforms><Platform Name="$self->{platform}"/></Platforms>
- <Configurations>
-EOF
-
-	$self->WriteConfiguration(
-		$f, 'Debug',
-		{
-			defs     => "_DEBUG;DEBUG=1",
-			wholeopt => 0,
-			opt      => 0,
-			strpool  => 'false',
-			runtime  => 3
-		});
-	$self->WriteConfiguration(
-		$f,
-		'Release',
-		{
-			defs     => "",
-			wholeopt => 0,
-			opt      => 3,
-			strpool  => 'true',
-			runtime  => 2
-		});
-	print $f <<EOF;
- </Configurations>
-EOF
-	$self->WriteReferences($f);
-	return;
-}
-
-sub WriteFiles
-{
-	my ($self, $f) = @_;
-	print $f <<EOF;
- <Files>
-EOF
-	my @dirstack = ();
-	my %uniquefiles;
-	foreach my $fileNameWithPath (sort keys %{ $self->{files} })
-	{
-		confess "Bad format filename '$fileNameWithPath'\n"
-		  unless ($fileNameWithPath =~ m!^(.*)/([^/]+)\.(c|cpp|y|l|rc)$!);
-		my $dir  = $1;
-		my $file = $2;
-
-		# Walk backwards down the directory stack and close any dirs
-		# we're done with.
-		while ($#dirstack >= 0)
-		{
-			if (join('/', @dirstack) eq
-				substr($dir, 0, length(join('/', @dirstack))))
-			{
-				last if (length($dir) == length(join('/', @dirstack)));
-				last
-				  if (substr($dir, length(join('/', @dirstack)), 1) eq '/');
-			}
-			print $f ' ' x $#dirstack . "  </Filter>\n";
-			pop @dirstack;
-		}
-
-		# Now walk forwards and create whatever directories are needed
-		while (join('/', @dirstack) ne $dir)
-		{
-			my $left = substr($dir, length(join('/', @dirstack)));
-			$left =~ s/^\///;
-			my @pieces = split /\//, $left;
-			push @dirstack, $pieces[0];
-			print $f ' ' x $#dirstack
-			  . "  <Filter Name=\"$pieces[0]\" Filter=\"\">\n";
-		}
-
-		# VC builds do not like file paths with forward slashes.
-		my $fileNameWithPathFormatted = $fileNameWithPath;
-		$fileNameWithPathFormatted =~ s/\//\\/g;
-
-		print $f ' ' x $#dirstack
-		  . "   <File RelativePath=\"$fileNameWithPathFormatted\"";
-		if ($fileNameWithPath =~ /\.y$/)
-		{
-			my $of = $fileNameWithPath;
-			$of =~ s/\.y$/.c/;
-			$of =~
-			  s{^src/pl/plpgsql/src/gram.c$}{src/pl/plpgsql/src/pl_gram.c};
-			print $f '>'
-			  . $self->GenerateCustomTool(
-				'Running bison on ' . $fileNameWithPath,
-				"perl src/tools/msvc/pgbison.pl $fileNameWithPath", $of)
-			  . '</File>' . "\n";
-		}
-		elsif ($fileNameWithPath =~ /\.l$/)
-		{
-			my $of = $fileNameWithPath;
-			$of =~ s/\.l$/.c/;
-			print $f '>'
-			  . $self->GenerateCustomTool(
-				'Running flex on ' . $fileNameWithPath,
-				"perl src/tools/msvc/pgflex.pl $fileNameWithPath", $of)
-			  . '</File>' . "\n";
-		}
-		elsif (defined($uniquefiles{$file}))
-		{
-
-			# File already exists, so fake a new name
-			my $obj = $dir;
-			$obj =~ s!/!_!g;
-			print $f
-			  "><FileConfiguration Name=\"Debug|$self->{platform}\"><Tool Name=\"VCCLCompilerTool\" ObjectFile=\".\\debug\\$self->{name}\\$obj"
-			  . "_$file.obj\" /></FileConfiguration><FileConfiguration Name=\"Release|$self->{platform}\"><Tool Name=\"VCCLCompilerTool\" ObjectFile=\".\\release\\$self->{name}\\$obj"
-			  . "_$file.obj\" /></FileConfiguration></File>\n";
-		}
-		else
-		{
-			$uniquefiles{$file} = 1;
-			print $f " />\n";
-		}
-	}
-	while ($#dirstack >= 0)
-	{
-		print $f ' ' x $#dirstack . "  </Filter>\n";
-		pop @dirstack;
-	}
-	print $f <<EOF;
- </Files>
-EOF
-	return;
-}
-
-sub Footer
-{
-	my ($self, $f) = @_;
-
-	print $f <<EOF;
- <Globals/>
-</VisualStudioProject>
-EOF
-	return;
-}
-
-sub WriteConfiguration
-{
-	my ($self, $f, $cfgname, $p) = @_;
-	my $cfgtype =
-	  ($self->{type} eq "exe") ? 1 : ($self->{type} eq "dll" ? 2 : 4);
-	my $libs = $self->GetAdditionalLinkerDependencies($cfgname, ' ');
-
-	my $targetmachine = $self->{platform} eq 'Win32' ? 1 : 17;
-
-	print $f <<EOF;
-  <Configuration Name="$cfgname|$self->{platform}" OutputDirectory=".\\$cfgname\\$self->{name}" IntermediateDirectory=".\\$cfgname\\$self->{name}"
-	ConfigurationType="$cfgtype" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="FALSE" CharacterSet="2" WholeProgramOptimization="$p->{wholeopt}">
-	<Tool Name="VCCLCompilerTool" Optimization="$p->{opt}"
-		AdditionalIncludeDirectories="$self->{prefixincludes}src/include;src/include/port/win32;src/include/port/win32_msvc;$self->{includes}"
-		PreprocessorDefinitions="WIN32;_WINDOWS;__WINDOWS__;__WIN32__;EXEC_BACKEND;WIN32_STACK_RLIMIT=4194304;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE$self->{defines}$p->{defs}"
-		StringPooling="$p->{strpool}"
-		RuntimeLibrary="$p->{runtime}" DisableSpecificWarnings="$self->{disablewarnings}"
-		AdditionalOptions="/MP"
-EOF
-	print $f <<EOF;
-		AssemblerOutput="0" AssemblerListingLocation=".\\$cfgname\\$self->{name}\\" ObjectFile=".\\$cfgname\\$self->{name}\\"
-		ProgramDataBaseFileName=".\\$cfgname\\$self->{name}\\" BrowseInformation="0"
-		WarningLevel="3" SuppressStartupBanner="TRUE" DebugInformationFormat="3" CompileAs="0"/>
-	<Tool Name="VCLinkerTool" OutputFile=".\\$cfgname\\$self->{name}\\$self->{name}.$self->{type}"
-		AdditionalDependencies="$libs"
-		LinkIncremental="0" SuppressStartupBanner="TRUE" AdditionalLibraryDirectories="" IgnoreDefaultLibraryNames="libc"
-		StackReserveSize="4194304" DisableSpecificWarnings="$self->{disablewarnings}"
-		GenerateDebugInformation="TRUE" ProgramDatabaseFile=".\\$cfgname\\$self->{name}\\$self->{name}.pdb"
-		GenerateMapFile="FALSE" MapFileName=".\\$cfgname\\$self->{name}\\$self->{name}.map"
-		RandomizedBaseAddress="FALSE"
-		SubSystem="1" TargetMachine="$targetmachine"
-EOF
-	if ($self->{disablelinkerwarnings})
-	{
-		print $f
-		  "\t\tAdditionalOptions=\"/ignore:$self->{disablelinkerwarnings}\"\n";
-	}
-	if ($self->{implib})
-	{
-		my $l = $self->{implib};
-		$l =~ s/__CFGNAME__/$cfgname/g;
-		print $f "\t\tImportLibrary=\"$l\"\n";
-	}
-	if ($self->{def})
-	{
-		my $d = $self->{def};
-		$d =~ s/__CFGNAME__/$cfgname/g;
-		print $f "\t\tModuleDefinitionFile=\"$d\"\n";
-	}
-
-	print $f "\t/>\n";
-	print $f
-	  "\t<Tool Name=\"VCLibrarianTool\" OutputFile=\".\\$cfgname\\$self->{name}\\$self->{name}.lib\" IgnoreDefaultLibraryNames=\"libc\" />\n";
-	print $f
-	  "\t<Tool Name=\"VCResourceCompilerTool\" AdditionalIncludeDirectories=\"src\\include\" />\n";
-	if ($self->{builddef})
-	{
-		print $f
-		  "\t<Tool Name=\"VCPreLinkEventTool\" Description=\"Generate DEF file\" CommandLine=\"perl src\\tools\\msvc\\gendef.pl $cfgname\\$self->{name} $self->{platform}\" />\n";
-	}
-	print $f <<EOF;
-  </Configuration>
-EOF
-	return;
-}
-
-sub WriteReferences
-{
-	my ($self, $f) = @_;
-	print $f " <References>\n";
-	foreach my $ref (@{ $self->{references} })
-	{
-		print $f
-		  "  <ProjectReference ReferencedProjectIdentifier=\"$ref->{guid}\" Name=\"$ref->{name}\" />\n";
-	}
-	print $f " </References>\n";
-	return;
-}
-
-sub GenerateCustomTool
-{
-	my ($self, $desc, $tool, $output, $cfg) = @_;
-	if (!defined($cfg))
-	{
-		return $self->GenerateCustomTool($desc, $tool, $output, 'Debug')
-		  . $self->GenerateCustomTool($desc, $tool, $output, 'Release');
-	}
-	return
-	  "<FileConfiguration Name=\"$cfg|$self->{platform}\"><Tool Name=\"VCCustomBuildTool\" Description=\"$desc\" CommandLine=\"$tool\" AdditionalDependencies=\"\" Outputs=\"$output\" /></FileConfiguration>";
-}
-
-package VC2005Project;
-
-#
-# Package that encapsulates a Visual C++ 2005 project file
-#
-
-use strict;
-use warnings;
-use base qw(VCBuildProject);
-
-no warnings qw(redefine);    ## no critic
-
-sub new
-{
-	my $classname = shift;
-	my $self      = $classname->SUPER::_new(@_);
-	bless($self, $classname);
-
-	$self->{vcver} = '8.00';
-
-	return $self;
-}
-
-package VC2008Project;
-
-#
-# Package that encapsulates a Visual C++ 2008 project file
-#
-
-use strict;
-use warnings;
-use base qw(VCBuildProject);
-
-no warnings qw(redefine);    ## no critic
-
-sub new
-{
-	my $classname = shift;
-	my $self      = $classname->SUPER::_new(@_);
-	bless($self, $classname);
-
-	$self->{vcver} = '9.00';
-
-	return $self;
-}
-
-1;
diff --git a/src/tools/msvc/VSObjectFactory.pm b/src/tools/msvc/VSObjectFactory.pm
index 92a4fb6841f..1a94cd866ee 100644
--- a/src/tools/msvc/VSObjectFactory.pm
+++ b/src/tools/msvc/VSObjectFactory.pm
@@ -13,7 +13,6 @@ use warnings;
 use Exporter;
 use Project;
 use Solution;
-use VCBuildProject;
 use MSBuildProject;
 
 our (@ISA, @EXPORT);
@@ -31,23 +30,7 @@ sub CreateSolution
 		$visualStudioVersion = DetermineVisualStudioVersion();
 	}
 
-	if ($visualStudioVersion eq '8.00')
-	{
-		return new VS2005Solution(@_);
-	}
-	elsif ($visualStudioVersion eq '9.00')
-	{
-		return new VS2008Solution(@_);
-	}
-	elsif ($visualStudioVersion eq '10.00')
-	{
-		return new VS2010Solution(@_);
-	}
-	elsif ($visualStudioVersion eq '11.00')
-	{
-		return new VS2012Solution(@_);
-	}
-	elsif ($visualStudioVersion eq '12.00')
+	if ($visualStudioVersion eq '12.00')
 	{
 		return new VS2013Solution(@_);
 	}
@@ -78,23 +61,7 @@ sub CreateProject
 		$visualStudioVersion = DetermineVisualStudioVersion();
 	}
 
-	if ($visualStudioVersion eq '8.00')
-	{
-		return new VC2005Project(@_);
-	}
-	elsif ($visualStudioVersion eq '9.00')
-	{
-		return new VC2008Project(@_);
-	}
-	elsif ($visualStudioVersion eq '10.00')
-	{
-		return new VC2010Project(@_);
-	}
-	elsif ($visualStudioVersion eq '11.00')
-	{
-		return new VC2012Project(@_);
-	}
-	elsif ($visualStudioVersion eq '12.00')
+	if ($visualStudioVersion eq '12.00')
 	{
 		return new VC2013Project(@_);
 	}
-- 
2.18.0.rc2.dirty

