0001-Support-building-with-visual-studio-2019.patch
application/x-patch
Filename: 0001-Support-building-with-visual-studio-2019.patch
Type: application/x-patch
Part: 2
Patch
Format: format-patch
Series: patch 0001
Subject: Support building with visual studio 2019
| File | + | − |
|---|---|---|
| doc/src/sgml/install-windows.sgml | 11 | 9 |
| src/tools/msvc/MSBuildProject.pm | 25 | 0 |
| src/tools/msvc/README | 5 | 5 |
| src/tools/msvc/Solution.pm | 28 | 0 |
| src/tools/msvc/VSObjectFactory.pm | 35 | 9 |
From e360bc8ee3d392441ec3765347f6beda3bfb9c3b Mon Sep 17 00:00:00 2001
From: Hari Babu <kommi.haribabu@gmail.com>
Date: Wed, 20 Mar 2019 18:35:56 +1100
Subject: [PATCH] Support building with visual studio 2019
---
doc/src/sgml/install-windows.sgml | 20 +++++++-------
src/tools/msvc/MSBuildProject.pm | 25 ++++++++++++++++++
src/tools/msvc/README | 10 +++----
src/tools/msvc/Solution.pm | 28 ++++++++++++++++++++
src/tools/msvc/VSObjectFactory.pm | 44 ++++++++++++++++++++++++-------
5 files changed, 104 insertions(+), 23 deletions(-)
diff --git a/doc/src/sgml/install-windows.sgml b/doc/src/sgml/install-windows.sgml
index 22a2ffd55e..0bbb314c3b 100644
--- a/doc/src/sgml/install-windows.sgml
+++ b/doc/src/sgml/install-windows.sgml
@@ -19,10 +19,10 @@
<para>
There are several different ways of building PostgreSQL on
<productname>Windows</productname>. The simplest way to build with
- Microsoft tools is to install <productname>Visual Studio Express 2017
+ Microsoft tools is to install <productname>Visual Studio Express 2019
for Windows Desktop</productname> and use the included
compiler. It is also possible to build with the full
- <productname>Microsoft Visual C++ 2013 to 2017</productname>.
+ <productname>Microsoft Visual C++ 2013 to 2019</productname>.
In some cases that requires the installation of the
<productname>Windows SDK</productname> in addition to the compiler.
</para>
@@ -69,24 +69,24 @@
<productname>Visual Studio Express</productname> or some versions of the
<productname>Microsoft Windows SDK</productname>. If you do not already have a
<productname>Visual Studio</productname> environment set up, the easiest
- ways are to use the compilers from <productname>Visual Studio Express 2017
+ ways are to use the compilers from <productname>Visual Studio Express 2019
for Windows Desktop</productname> or those in the <productname>Windows SDK
- 8.1</productname>, which are both free downloads from Microsoft.
+ 10</productname>, which are both free downloads from Microsoft.
</para>
<para>
Both 32-bit and 64-bit builds are possible with the Microsoft Compiler suite.
32-bit PostgreSQL builds are possible with
<productname>Visual Studio 2013</productname> to
- <productname>Visual Studio 2017</productname> (including Express editions),
- as well as standalone Windows SDK releases 6.0 to 8.1.
+ <productname>Visual Studio 2019</productname> (including Express editions),
+ as well as standalone Windows SDK releases 8.1a to 10.
64-bit PostgreSQL builds are supported with
- <productname>Microsoft Windows SDK</productname> version 6.0a to 8.1 or
+ <productname>Microsoft Windows SDK</productname> version 8.1a to 10 or
<productname>Visual Studio 2013</productname> and above. Compilation
is supported down to <productname>Windows 7</productname> and
<productname>Windows Server 2008 R2 SP1</productname> when building with
<productname>Visual Studio 2013</productname> to
- <productname>Visual Studio 2017</productname>.
+ <productname>Visual Studio 2019</productname>.
<!--
For 2013 requirements:
https://docs.microsoft.com/en-us/visualstudio/productinfo/vs2013-sysrequirements-vs
@@ -94,6 +94,8 @@
https://docs.microsoft.com/en-us/visualstudio/productinfo/vs2015-sysrequirements-vs
For 2017 requirements:
https://docs.microsoft.com/en-us/visualstudio/productinfo/vs2017-system-requirements-vs
+ For 2019 requirements:
+ https://docs.microsoft.com/en-us/visualstudio/releases/2019/system-requirements
-->
</para>
@@ -166,7 +168,7 @@ $ENV{MSBFLAGS}="/m";
If your build environment doesn't ship with a supported version of the
<productname>Microsoft Windows SDK</productname> it
is recommended that you upgrade to the latest version (currently
- version 7.1), available for download from
+ version 10), available for download from
<ulink url="https://www.microsoft.com/download"></ulink>.
</para>
<para>
diff --git a/src/tools/msvc/MSBuildProject.pm b/src/tools/msvc/MSBuildProject.pm
index 149213378c..ca965bdf1a 100644
--- a/src/tools/msvc/MSBuildProject.pm
+++ b/src/tools/msvc/MSBuildProject.pm
@@ -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;
diff --git a/src/tools/msvc/README b/src/tools/msvc/README
index 4ab81d3402..45d71541fc 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 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.
@@ -89,10 +89,10 @@ 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.
+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 (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) is
diff --git a/src/tools/msvc/Solution.pm b/src/tools/msvc/Solution.pm
index 2ea224d770..ee999c0990 100644
--- a/src/tools/msvc/Solution.pm
+++ b/src/tools/msvc/Solution.pm
@@ -871,6 +871,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.32.32432';
+ $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 1a94cd866e..c5c0b11004 100644
--- a/src/tools/msvc/VSObjectFactory.pm
+++ b/src/tools/msvc/VSObjectFactory.pm
@@ -39,15 +39,28 @@ 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')
+ # visual studio 2017 nmake version is greather than 14.10 and less than 14.20.
+ # but the version number is 15.00
+ # so adjust the check to support it.
+ elsif ((($visualStudioVersion ge '14.10')
+ and ($visualStudioVersion lt '14.20'))
or ($visualStudioVersion eq '15.00'))
{
return new VS2017Solution(@_);
}
+
+ # visual studio 2019 nmake version is greather than 14.20 and less than 14.30 (expected).
+ # but the version number is 16.00
+ # so adjust the check to support it.
+ elsif ((($visualStudioVersion ge '14.20')
+ and ($visualStudioVersion lt '14.30'))
+ or ($visualStudioVersion eq '16.00'))
+ {
+ return new VS2019Solution(@_);
+ }
else
{
- croak $visualStudioVersion;
+ carp $visualStudioVersion;
croak "The requested Visual Studio version is not supported.";
}
}
@@ -70,15 +83,28 @@ 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')
+ # visual studio 2017 nmake version is greather than 14.10 and less than 14.20.
+ # but the version number is 15.00
+ # so adjust the check to support it.
+ elsif ((($visualStudioVersion ge '14.10')
+ and ($visualStudioVersion lt '14.20'))
or ($visualStudioVersion eq '15.00'))
{
return new VC2017Project(@_);
}
+
+ # visual studio 2019 nmake version is greather than 14.20 and less than 14.30 (expected).
+ # but the version number is 16.00
+ # so adjust the check to support it.
+ elsif ((($visualStudioVersion ge '14.20')
+ and ($visualStudioVersion lt '14.30'))
+ or ($visualStudioVersion eq '16.00'))
+ {
+ return new VC2019Project(@_);
+ }
else
{
- croak $visualStudioVersion;
+ carp $visualStudioVersion;
croak "The requested Visual Studio version is not supported.";
}
}
@@ -106,17 +132,17 @@ sub _GetVisualStudioVersion
{
my ($major, $minor) = @_;
- # visual 2017 hasn't changed the nmake version to 15, so still using the older version for comparison.
+ # The major visual stuido that is suppored has nmake version >= 14.20 and < 15.
if ($major > 14)
{
carp
"The determined version of Visual Studio is newer than the latest supported version. Returning the latest supported version instead.";
return '14.00';
}
- 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";
}
--
2.20.1.windows.1