diff options
author | Michael Paquier <michael@paquier.xyz> | 2019-07-03 08:57:39 +0900 |
---|---|---|
committer | Michael Paquier <michael@paquier.xyz> | 2019-07-03 08:57:39 +0900 |
commit | 721963f24ae8c2097bb7c44cc0f428740f6cf2a7 (patch) | |
tree | 6ef2a85e86e890d9cc48609ceefdb64b8dd1bd91 /src | |
parent | 074add6ed286a02256a1b03137ff6dd7c8126f25 (diff) | |
download | postgresql-721963f24ae8c2097bb7c44cc0f428740f6cf2a7.tar.gz postgresql-721963f24ae8c2097bb7c44cc0f428740f6cf2a7.zip |
Add support for Visual Studio 2019 in build scripts
This adjusts 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
Diffstat (limited to 'src')
-rw-r--r-- | src/tools/msvc/MSBuildProject.pm | 25 | ||||
-rw-r--r-- | src/tools/msvc/README | 13 | ||||
-rw-r--r-- | src/tools/msvc/Solution.pm | 28 | ||||
-rw-r--r-- | src/tools/msvc/VSObjectFactory.pm | 54 |
4 files changed, 101 insertions, 19 deletions
diff --git a/src/tools/msvc/MSBuildProject.pm b/src/tools/msvc/MSBuildProject.pm index 47252533a1b..3edb11b9b5f 100644 --- a/src/tools/msvc/MSBuildProject.pm +++ b/src/tools/msvc/MSBuildProject.pm @@ -535,4 +535,29 @@ sub new return $self; } +package VC2019Project; + +# +# Package that encapsulates a Visual C++ 2019 project file +# + +use strict; +use warnings; +use base qw(VC2012Project); + +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; diff --git a/src/tools/msvc/README b/src/tools/msvc/README index 48082cab90a..c6db875730c 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 2005 - 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. @@ -93,11 +93,12 @@ These configuration arguments are passed over to Mkvcbuild::mkvcbuild 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, -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. +or a VS2015Solution or a VS2017Solution or a VS2019Solution, 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 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 or vcbuild) diff --git a/src/tools/msvc/Solution.pm b/src/tools/msvc/Solution.pm index 5cf20f9d7a2..c59cfd50238 100644 --- a/src/tools/msvc/Solution.pm +++ b/src/tools/msvc/Solution.pm @@ -1037,6 +1037,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) = @_; diff --git a/src/tools/msvc/VSObjectFactory.pm b/src/tools/msvc/VSObjectFactory.pm index 92a4fb6841f..73990ede399 100644 --- a/src/tools/msvc/VSObjectFactory.pm +++ b/src/tools/msvc/VSObjectFactory.pm @@ -56,16 +56,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."; } } @@ -103,16 +116,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."; } } @@ -139,12 +165,14 @@ 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) { |