mirror of
https://github.com/postgres/postgres.git
synced 2025-07-05 07:21:24 +03:00
Add support for Visual Studio 2019 in build scripts
This fixes at the same time a set of inconsistencies in the documentation and the scripts related to the versions of Windows SDK supported. Author: Haribabu Kommi Reviewed-by: Andrew Dunstan, Juan José Santamaría Flecha, Michael Paquier Discussion: https://postgr.es/m/CAJrrPGcfqXhfPyMrny9apoDU7M1t59dzVAvoJ9AeAh5BJi+UzA@mail.gmail.com Backpatch-through: 9.4
This commit is contained in:
@ -467,4 +467,29 @@ sub new
|
||||
return $self;
|
||||
}
|
||||
|
||||
package VC2019Project;
|
||||
|
||||
#
|
||||
# Package that encapsulates a Visual C++ 2019 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} = '16.00';
|
||||
$self->{PlatformToolset} = 'v142';
|
||||
$self->{ToolsVersion} = '16.0';
|
||||
|
||||
return $self;
|
||||
}
|
||||
|
||||
1;
|
||||
|
@ -4,7 +4,7 @@ MSVC build
|
||||
==========
|
||||
|
||||
This directory contains the tools required to build PostgreSQL using
|
||||
Microsoft Visual Studio 2013 - 2017. This builds the whole backend, not just
|
||||
Microsoft Visual Studio 2013 - 2019. 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.
|
||||
|
||||
@ -16,7 +16,7 @@ has to be installed. Since this is not included in the product
|
||||
originally, extra steps are needed to make it work.
|
||||
|
||||
First, download and install a supported version of the Microsoft Windows SDK
|
||||
from www.microsoft.com (v6.0 or greater).
|
||||
from www.microsoft.com (v8.1a or greater).
|
||||
|
||||
Locate the files vcprojectengine.dll.express.config and
|
||||
vcprojectengine.dll.config in the vc\vcpackages directory of
|
||||
@ -88,11 +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 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 (VC2013Project or VC2015Project or VC2017Project from
|
||||
MSBuildProject.pm) to it.
|
||||
implementing the Solution interface (this could be either VS2013Solution,
|
||||
VS2015Solution, VS2017Solution or VS2019Solution, all in Solution.pm,
|
||||
depending on the user's build environment) and adding objects implementing
|
||||
the corresponding Project interface (VC2013Project, VC2015Project,
|
||||
VC2017Project or VC2019Project 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
|
||||
|
@ -969,6 +969,34 @@ sub new
|
||||
return $self;
|
||||
}
|
||||
|
||||
package VS2019Solution;
|
||||
|
||||
#
|
||||
# Package that encapsulates a Visual Studio 2019 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} = '16.00';
|
||||
$self->{visualStudioName} = 'Visual Studio 2019';
|
||||
$self->{VisualStudioVersion} = '16.0.28729.10';
|
||||
$self->{MinimumVisualStudioVersion} = '10.0.40219.1';
|
||||
|
||||
return $self;
|
||||
}
|
||||
|
||||
sub GetAdditionalHeaders
|
||||
{
|
||||
my ($self, $f) = @_;
|
||||
|
@ -39,16 +39,29 @@ 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'))
|
||||
# The version of nmake bundled in Visual Studio 2017 is greater
|
||||
# than 14.10 and less than 14.20. And the version number is
|
||||
# actually 15.00.
|
||||
elsif (
|
||||
($visualStudioVersion ge '14.10' && $visualStudioVersion lt '14.20')
|
||||
|| $visualStudioVersion eq '15.00')
|
||||
{
|
||||
return new VS2017Solution(@_);
|
||||
}
|
||||
|
||||
# The version of nmake bundled in Visual Studio 2019 is greater
|
||||
# than 14.20 and less than 14.30. And the version number is
|
||||
# actually 16.00.
|
||||
elsif (
|
||||
($visualStudioVersion ge '14.20' && $visualStudioVersion lt '14.30')
|
||||
|| $visualStudioVersion eq '16.00')
|
||||
{
|
||||
return new VS2019Solution(@_);
|
||||
}
|
||||
else
|
||||
{
|
||||
croak $visualStudioVersion;
|
||||
croak "The requested Visual Studio version is not supported.";
|
||||
croak
|
||||
"The requested Visual Studio version $visualStudioVersion is not supported.";
|
||||
}
|
||||
}
|
||||
|
||||
@ -70,16 +83,29 @@ 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'))
|
||||
# The version of nmake bundled in Visual Studio 2017 is greater
|
||||
# than 14.10 and less than 14.20. And the version number is
|
||||
# actually 15.00.
|
||||
elsif (
|
||||
($visualStudioVersion ge '14.10' && $visualStudioVersion lt '14.20')
|
||||
|| $visualStudioVersion eq '15.00')
|
||||
{
|
||||
return new VC2017Project(@_);
|
||||
}
|
||||
|
||||
# The version of nmake bundled in Visual Studio 2019 is greater
|
||||
# than 14.20 and less than 14.30. And the version number is
|
||||
# actually 16.00.
|
||||
elsif (
|
||||
($visualStudioVersion ge '14.20' && $visualStudioVersion lt '14.30')
|
||||
|| $visualStudioVersion eq '16.00')
|
||||
{
|
||||
return new VC2019Project(@_);
|
||||
}
|
||||
else
|
||||
{
|
||||
croak $visualStudioVersion;
|
||||
croak "The requested Visual Studio version is not supported.";
|
||||
croak
|
||||
"The requested Visual Studio version $visualStudioVersion is not supported.";
|
||||
}
|
||||
}
|
||||
|
||||
@ -106,17 +132,19 @@ 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)
|
||||
# The major visual studio that is supported has nmake
|
||||
# version <= 14.30, so stick with it as the latest version
|
||||
# if bumping on something even newer.
|
||||
if ($major >= 14 && $minor >= 30)
|
||||
{
|
||||
carp
|
||||
"The determined version of Visual Studio is newer than the latest supported version. Returning the latest supported version instead.";
|
||||
return '14.00';
|
||||
return '14.20';
|
||||
}
|
||||
elsif ($major < 6)
|
||||
elsif ($major < 12)
|
||||
{
|
||||
croak
|
||||
"Unable to determine Visual Studio version: Visual Studio versions before 6.0 aren't supported.";
|
||||
"Unable to determine Visual Studio version: Visual Studio versions before 12.0 aren't supported.";
|
||||
}
|
||||
return "$major.$minor";
|
||||
}
|
||||
|
Reference in New Issue
Block a user