mirror of
https://github.com/postgres/postgres.git
synced 2025-04-21 12:05:57 +03:00
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
This commit is contained in:
parent
90434e6f2c
commit
0ce8e49b22
@ -19,10 +19,10 @@
|
|||||||
<para>
|
<para>
|
||||||
There are several different ways of building PostgreSQL on
|
There are several different ways of building PostgreSQL on
|
||||||
<productname>Windows</productname>. The simplest way to build with
|
<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
|
for Windows Desktop</productname> and use the included
|
||||||
compiler. It is also possible to build with the full
|
compiler. It is also possible to build with the full
|
||||||
<productname>Microsoft Visual C++ 2005 to 2017</productname>.
|
<productname>Microsoft Visual C++ 2005 to 2019</productname>.
|
||||||
In some cases that requires the installation of the
|
In some cases that requires the installation of the
|
||||||
<productname>Windows SDK</productname> in addition to the compiler.
|
<productname>Windows SDK</productname> in addition to the compiler.
|
||||||
</para>
|
</para>
|
||||||
@ -69,19 +69,19 @@
|
|||||||
<productname>Visual Studio Express</productname> or some versions of the
|
<productname>Visual Studio Express</productname> or some versions of the
|
||||||
<productname>Microsoft Windows SDK</productname>. If you do not already have a
|
<productname>Microsoft Windows SDK</productname>. If you do not already have a
|
||||||
<productname>Visual Studio</productname> environment set up, the easiest
|
<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
|
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>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
Both 32-bit and 64-bit builds are possible with the Microsoft Compiler suite.
|
Both 32-bit and 64-bit builds are possible with the Microsoft Compiler suite.
|
||||||
32-bit PostgreSQL builds are possible with
|
32-bit PostgreSQL builds are possible with
|
||||||
<productname>Visual Studio 2005</productname> to
|
<productname>Visual Studio 2005</productname> to
|
||||||
<productname>Visual Studio 2017</productname> (including Express editions),
|
<productname>Visual Studio 2019</productname> (including Express editions),
|
||||||
as well as standalone Windows SDK releases 6.0 to 8.1.
|
as well as standalone Windows SDK releases 6.0 to 10.
|
||||||
64-bit PostgreSQL builds are supported with
|
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 6.0a to 10 or
|
||||||
<productname>Visual Studio 2008</productname> and above. Compilation
|
<productname>Visual Studio 2008</productname> and above. Compilation
|
||||||
is supported down to <productname>Windows XP</productname> and
|
is supported down to <productname>Windows XP</productname> and
|
||||||
<productname>Windows Server 2003</> when building with
|
<productname>Windows Server 2003</> when building with
|
||||||
@ -89,7 +89,8 @@
|
|||||||
<productname>Visual Studio 2013</productname>. Building with
|
<productname>Visual Studio 2013</productname>. Building with
|
||||||
<productname>Visual Studio 2015</productname> is supported down to
|
<productname>Visual Studio 2015</productname> is supported down to
|
||||||
<productname>Windows Vista</> and <productname>Windows Server 2008</>.
|
<productname>Windows Vista</> and <productname>Windows Server 2008</>.
|
||||||
Building with <productname>Visual Studio 2017</productname> is supported
|
Building with <productname>Visual Studio 2017</productname> and
|
||||||
|
<productname>Visual Studio 2019</productname> is supported
|
||||||
down to <productname>Windows 7 SP1</> and <productname>Windows Server 2008 R2 SP1</>.
|
down to <productname>Windows 7 SP1</> and <productname>Windows Server 2008 R2 SP1</>.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
@ -162,7 +163,7 @@ $ENV{MSBFLAGS}="/m";
|
|||||||
If your build environment doesn't ship with a supported version of the
|
If your build environment doesn't ship with a supported version of the
|
||||||
<productname>Microsoft Windows SDK</productname> it
|
<productname>Microsoft Windows SDK</productname> it
|
||||||
is recommended that you upgrade to the latest version (currently
|
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 url="https://www.microsoft.com/download"></>.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
|
@ -508,4 +508,29 @@ sub new
|
|||||||
return $self;
|
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;
|
1;
|
||||||
|
@ -4,7 +4,7 @@ MSVC build
|
|||||||
==========
|
==========
|
||||||
|
|
||||||
This directory contains the tools required to build PostgreSQL using
|
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
|
the libpq frontend library. For more information, see the documentation
|
||||||
chapter "Installation on Windows" and the description below.
|
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
|
It does this by using VSObjectFactory::CreateSolution to create an object
|
||||||
implementing the Solution interface (this could be either a VS2005Solution,
|
implementing the Solution interface (this could be either a VS2005Solution,
|
||||||
a VS2008Solution, a VS2010Solution or a VS2012Solution or a VS2013Solution,
|
a VS2008Solution, a VS2010Solution or a VS2012Solution or a VS2013Solution,
|
||||||
or a VS2015Solution or a VS2017Solution, all in Solution.pm, depending on
|
or a VS2015Solution or a VS2017Solution or a VS2019Solution, all in
|
||||||
the user's build environment) and adding objects implementing the corresponding
|
Solution.pm, depending on the user's build environment) and adding objects
|
||||||
Project interface (VC2005Project or VC2008Project from VCBuildProject.pm or
|
implementing the corresponding Project interface (VC2005Project or
|
||||||
VC2010Project or VC2012Project or VC2013Project or VC2015Project or VC2017Project
|
VC2008Project from VCBuildProject.pm or VC2010Project or VC2012Project or
|
||||||
from MSBuildProject.pm) to it.
|
VC2013Project or VC2015Project or VC2017Project or VC2019Project from
|
||||||
|
MSBuildProject.pm) to it.
|
||||||
When Solution::Save is called, the implementations of Solution and Project
|
When Solution::Save is called, the implementations of Solution and Project
|
||||||
save their content in the appropriate format.
|
save their content in the appropriate format.
|
||||||
The final step of starting the appropriate build program (msbuild or vcbuild)
|
The final step of starting the appropriate build program (msbuild or vcbuild)
|
||||||
|
@ -972,6 +972,34 @@ sub new
|
|||||||
return $self;
|
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
|
sub GetAdditionalHeaders
|
||||||
{
|
{
|
||||||
my ($self, $f) = @_;
|
my ($self, $f) = @_;
|
||||||
|
@ -53,15 +53,30 @@ sub CreateSolution
|
|||||||
{
|
{
|
||||||
return new VS2015Solution(@_);
|
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(@_);
|
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
|
else
|
||||||
{
|
{
|
||||||
croak $visualStudioVersion;
|
croak
|
||||||
croak "The requested Visual Studio version is not supported.";
|
"The requested Visual Studio version $visualStudioVersion is not supported.";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -98,15 +113,30 @@ sub CreateProject
|
|||||||
{
|
{
|
||||||
return new VC2015Project(@_);
|
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(@_);
|
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
|
else
|
||||||
{
|
{
|
||||||
croak $visualStudioVersion;
|
croak
|
||||||
croak "The requested Visual Studio version is not supported.";
|
"The requested Visual Studio version $visualStudioVersion is not supported.";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -132,12 +162,15 @@ sub DetermineVisualStudioVersion
|
|||||||
sub _GetVisualStudioVersion
|
sub _GetVisualStudioVersion
|
||||||
{
|
{
|
||||||
my ($major, $minor) = @_;
|
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
|
carp
|
||||||
"The determined version of Visual Studio is newer than the latest supported version. Returning the latest supported version instead.";
|
"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 < 6)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user