aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndrew Dunstan <andrew@dunslane.net>2017-09-25 08:03:05 -0400
committerAndrew Dunstan <andrew@dunslane.net>2017-09-25 08:03:05 -0400
commitf2ab3898f3a25ef431db4ea90a8d128b974dbffe (patch)
tree16557bc4b20220583225c7bd29411a332ee77227 /src
parent8485a25a8c9a419ff3e0d30e43e4abd5e680cc65 (diff)
downloadpostgresql-f2ab3898f3a25ef431db4ea90a8d128b974dbffe.tar.gz
postgresql-f2ab3898f3a25ef431db4ea90a8d128b974dbffe.zip
Support building with Visual Studio 2017
Haribabu Kommi, reviewed by Takeshi Ideriha and Christian Ullrich Backpatch to 9.6
Diffstat (limited to 'src')
-rw-r--r--src/tools/msvc/MSBuildProject.pm23
-rw-r--r--src/tools/msvc/README13
-rw-r--r--src/tools/msvc/Solution.pm26
-rw-r--r--src/tools/msvc/VSObjectFactory.pm13
4 files changed, 69 insertions, 6 deletions
diff --git a/src/tools/msvc/MSBuildProject.pm b/src/tools/msvc/MSBuildProject.pm
index 27329f9e361..7a287bd0bda 100644
--- a/src/tools/msvc/MSBuildProject.pm
+++ b/src/tools/msvc/MSBuildProject.pm
@@ -483,4 +483,27 @@ sub new
return $self;
}
+package VC2017Project;
+
+#
+# Package that encapsulates a Visual C++ 2017 project file
+#
+
+use strict;
+use warnings;
+use base qw(VC2012Project);
+
+sub new
+{
+ my $classname = shift;
+ my $self = $classname->SUPER::_new(@_);
+ bless($self, $classname);
+
+ $self->{vcver} = '15.00';
+ $self->{PlatformToolset} = 'v141';
+ $self->{ToolsVersion} = '15.0';
+
+ return $self;
+}
+
1;
diff --git a/src/tools/msvc/README b/src/tools/msvc/README
index b61ddb87913..48082cab90a 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 - 2011. This builds the whole backend, not just
+Microsoft Visual Studio 2005 - 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.
@@ -92,11 +92,12 @@ 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, 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 from MSBuildProject.pm)
-to it.
+a VS2008Solution, a VS2010Solution or a VS2012Solution or 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.
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 or vcbuild)
diff --git a/src/tools/msvc/Solution.pm b/src/tools/msvc/Solution.pm
index 5d5f716b6f0..0925bef139e 100644
--- a/src/tools/msvc/Solution.pm
+++ b/src/tools/msvc/Solution.pm
@@ -849,6 +849,32 @@ sub new
return $self;
}
+package VS2017Solution;
+
+#
+# Package that encapsulates a Visual Studio 2017 solution file
+#
+
+use Carp;
+use strict;
+use warnings;
+use base qw(Solution);
+
+sub new
+{
+ my $classname = shift;
+ my $self = $classname->SUPER::_new(@_);
+ bless($self, $classname);
+
+ $self->{solutionFileVersion} = '12.00';
+ $self->{vcver} = '15.00';
+ $self->{visualStudioName} = 'Visual Studio 2017';
+ $self->{VisualStudioVersion} = '15.0.26730.3';
+ $self->{MinimumVisualStudioVersion} = '10.0.40219.1';
+
+ return $self;
+}
+
sub GetAdditionalHeaders
{
my ($self, $f) = @_;
diff --git a/src/tools/msvc/VSObjectFactory.pm b/src/tools/msvc/VSObjectFactory.pm
index 4190ada6184..2f3480a1f60 100644
--- a/src/tools/msvc/VSObjectFactory.pm
+++ b/src/tools/msvc/VSObjectFactory.pm
@@ -53,8 +53,14 @@ sub CreateSolution
{
return new VS2015Solution(@_);
}
+ # visual 2017 hasn't changed the nmake version to 15, so adjust the check to support it.
+ elsif (($visualStudioVersion ge '14.10') or ($visualStudioVersion eq '15.00'))
+ {
+ return new VS2017Solution(@_);
+ }
else
{
+ croak $visualStudioVersion;
croak "The requested Visual Studio version is not supported.";
}
}
@@ -92,8 +98,14 @@ sub CreateProject
{
return new VC2015Project(@_);
}
+ # visual 2017 hasn't changed the nmake version to 15, so adjust the check to support it.
+ elsif (($visualStudioVersion ge '14.10') or ($visualStudioVersion eq '15.00'))
+ {
+ return new VC2017Project(@_);
+ }
else
{
+ croak $visualStudioVersion;
croak "The requested Visual Studio version is not supported.";
}
}
@@ -120,6 +132,7 @@ sub DetermineVisualStudioVersion
sub _GetVisualStudioVersion
{
my ($major, $minor) = @_;
+ # visual 2017 hasn't changed the nmake version to 15, so still using the older version for comparison.
if ($major > 14)
{
carp