1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-28 23:42:10 +03:00

Support building with Visual Studio 2017

Haribabu Kommi, reviewed by Takeshi Ideriha and Christian Ullrich

Backpatch to 9.6
This commit is contained in:
Andrew Dunstan
2017-09-25 08:03:05 -04:00
parent 8485a25a8c
commit f2ab3898f3
5 changed files with 78 additions and 13 deletions

View File

@ -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;

View File

@ -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)

View File

@ -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) = @_;

View File

@ -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