aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Paquier <michael@paquier.xyz>2019-07-03 08:57:39 +0900
committerMichael Paquier <michael@paquier.xyz>2019-07-03 08:57:39 +0900
commit721963f24ae8c2097bb7c44cc0f428740f6cf2a7 (patch)
tree6ef2a85e86e890d9cc48609ceefdb64b8dd1bd91 /src
parent074add6ed286a02256a1b03137ff6dd7c8126f25 (diff)
downloadpostgresql-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.pm25
-rw-r--r--src/tools/msvc/README13
-rw-r--r--src/tools/msvc/Solution.pm28
-rw-r--r--src/tools/msvc/VSObjectFactory.pm54
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)
{