1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-30 11:03:19 +03:00

Add support for Visual Studio 2022 in build scripts

Documentation and any code paths related to VS are updated to keep the
whole consistent.  Similarly to 2017 and 2019, the version of VS and the
version of nmake that we use to determine which code paths to use for
the build are still inconsistent in their own way.

Backpatch down to 10, so as buildfarm members are able to use this new
version of Visual Studio on all the stable branches supported.

Author: Hans Buschmann
Discussion: https://postgr.es/m/1633101364685.39218@nidsa.net
Backpatch-through: 10
This commit is contained in:
Michael Paquier
2021-11-24 13:04:12 +09:00
parent 2b36973d95
commit 82881a9b9d
5 changed files with 88 additions and 15 deletions

View File

@ -19,9 +19,9 @@
<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 2019</productname> Microsoft tools is to install <productname>Visual Studio 2022</productname>
and use the included compiler. It is also possible to build with the full and use the included compiler. It is also possible to build with the full
<productname>Microsoft Visual C++ 2005 to 2019</productname>. <productname>Microsoft Visual C++ 2005 to 2022</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,7 +69,7 @@
<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 ways are to use the compilers from
<productname>Visual Studio 2019</productname> or those in the <productname>Visual Studio 2022</productname> or those in the
<productname>Windows SDK 10</productname>, which are both free downloads <productname>Windows SDK 10</productname>, which are both free downloads
from Microsoft. from Microsoft.
</para> </para>
@ -78,7 +78,7 @@
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 2019</productname>, <productname>Visual Studio 2022</productname>,
as well as standalone Windows SDK releases 6.0 to 10. 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 10 or <productname>Microsoft Windows SDK</productname> version 6.0a to 10 or
@ -89,8 +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> and Building with <productname>Visual Studio 2017</productname> to
<productname>Visual Studio 2019</productname> is supported <productname>Visual Studio 2022</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>

View File

@ -546,4 +546,29 @@ sub new
return $self; return $self;
} }
package VC2022Project;
#
# Package that encapsulates a Visual C++ 2022 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} = '17.00';
$self->{PlatformToolset} = 'v143';
$self->{ToolsVersion} = '17.0';
return $self;
}
1; 1;

View File

@ -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 - 2019. This builds the whole backend, not just Microsoft Visual Studio 2005 - 2022. 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.
@ -92,13 +92,13 @@ These configuration arguments are passed over to Mkvcbuild::mkvcbuild
(Mkvcbuild.pm) which creates the Visual Studio project and solution files. (Mkvcbuild.pm) which creates the Visual Studio project and solution files.
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, a VS2012Solution, a VS2013Solution,
or a VS2015Solution or a VS2017Solution or a VS2019Solution, all in a VS2015Solution, a VS2017Solution, a VS2019Solution or a VS2022Solution, all
Solution.pm, depending on the user's build environment) and adding objects in Solution.pm, depending on the user's build environment) and adding objects
implementing the corresponding Project interface (VC2005Project or implementing the corresponding Project interface (VC2005Project or
VC2008Project from VCBuildProject.pm or VC2010Project or VC2012Project or VC2008Project from VCBuildProject.pm or VC2010Project or VC2012Project or
VC2013Project or VC2015Project or VC2017Project or VC2019Project from VC2013Project or VC2015Project or VC2017Project or VC2019Project or
MSBuildProject.pm) to it. VC2022Project 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)

View File

@ -1021,6 +1021,34 @@ sub new
return $self; return $self;
} }
package VS2022Solution;
#
# Package that encapsulates a Visual Studio 2022 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} = '17.00';
$self->{visualStudioName} = 'Visual Studio 2022';
$self->{VisualStudioVersion} = '17.0.31903.59';
$self->{MinimumVisualStudioVersion} = '10.0.40219.1';
return $self;
}
sub GetAdditionalHeaders sub GetAdditionalHeaders
{ {
my ($self, $f) = @_; my ($self, $f) = @_;

View File

@ -73,6 +73,16 @@ sub CreateSolution
{ {
return new VS2019Solution(@_); return new VS2019Solution(@_);
} }
# The version of nmake bundled in Visual Studio 2022 is greater
# than 14.30 and less than 14.40. And the version number is
# actually 17.00.
elsif (
($visualStudioVersion ge '14.30' && $visualStudioVersion lt '14.40')
|| $visualStudioVersion eq '17.00')
{
return new VS2022Solution(@_);
}
else else
{ {
croak croak
@ -133,6 +143,16 @@ sub CreateProject
{ {
return new VC2019Project(@_); return new VC2019Project(@_);
} }
# The version of nmake bundled in Visual Studio 2022 is greater
# than 14.30 and less than 14.40. And the version number is
# actually 17.00.
elsif (
($visualStudioVersion ge '14.30' && $visualStudioVersion lt '14.40')
|| $visualStudioVersion eq '17.00')
{
return new VC2022Project(@_);
}
else else
{ {
croak croak
@ -164,13 +184,13 @@ sub _GetVisualStudioVersion
my ($major, $minor) = @_; my ($major, $minor) = @_;
# The major visual studio that is supported has nmake # The major visual studio that is supported has nmake
# version <= 14.30, so stick with it as the latest version # version <= 14.40, so stick with it as the latest version
# if bumping on something even newer. # if bumping on something even newer.
if ($major >= 14 && $minor >= 30) if ($major >= 14 && $minor >= 40)
{ {
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.20'; return '14.30';
} }
elsif ($major < 6) elsif ($major < 6)
{ {