mirror of
https://github.com/postgres/postgres.git
synced 2026-10-23 13:29:09 +03:00
Add support for Visual Studio 2026 in pre-17 build scripts
Documentation and any code paths related to VS are updated to keep the whole consistent. Similar to what was done for VS 2017, 2019 and 2022. Reviewed-by: Michael Paquier <michael@paquier.xyz> Backpatch: 14 through 16 Discussion: https://postgr.es/m/CAD5tBc+nFmaqqCaxDdQUMtOmtTb3nrvXn2TiVjLQyy0FV1BcUQ@mail.gmail.com
This commit is contained in:
@@ -20,9 +20,9 @@
|
||||
<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 2022</productname>
|
||||
Microsoft tools is to install <productname>Visual Studio 2026</productname>
|
||||
and use the included compiler. It is also possible to build with the full
|
||||
<productname>Microsoft Visual C++ 2013 to 2022</productname>.
|
||||
<productname>Microsoft Visual C++ 2013 to 2026</productname>.
|
||||
In some cases that requires the installation of the
|
||||
<productname>Windows SDK</productname> in addition to the compiler.
|
||||
</para>
|
||||
@@ -69,7 +69,7 @@
|
||||
<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 2022</productname> or those in the
|
||||
<productname>Visual Studio 2026</productname> or those in the
|
||||
<productname>Windows SDK 10</productname>, which are both free downloads
|
||||
from Microsoft.
|
||||
</para>
|
||||
@@ -78,7 +78,7 @@
|
||||
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 2022</productname>,
|
||||
<productname>Visual Studio 2026</productname>,
|
||||
as well as standalone Windows SDK releases 8.1a to 10.
|
||||
64-bit PostgreSQL builds are supported with
|
||||
<productname>Microsoft Windows SDK</productname> version 8.1a to 10 or
|
||||
@@ -86,7 +86,7 @@
|
||||
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 2022</productname>.
|
||||
<productname>Visual Studio 2026</productname>.
|
||||
<!--
|
||||
For 2013 requirements:
|
||||
https://docs.microsoft.com/en-us/visualstudio/productinfo/vs2013-sysrequirements-vs
|
||||
@@ -98,6 +98,8 @@
|
||||
https://docs.microsoft.com/en-us/visualstudio/releases/2019/system-requirements
|
||||
For 2022 requirements:
|
||||
https://docs.microsoft.com/en-us/visualstudio/releases/2022/system-requirements
|
||||
For 2026 requirements:
|
||||
https://docs.microsoft.com/en-us/visualstudio/releases/2026/vs-system-requirements
|
||||
-->
|
||||
</para>
|
||||
|
||||
|
||||
@@ -533,4 +533,29 @@ sub new
|
||||
return $self;
|
||||
}
|
||||
|
||||
package VC2026Project;
|
||||
|
||||
#
|
||||
# Package that encapsulates a Visual C++ 2026 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} = '18.00';
|
||||
$self->{PlatformToolset} = 'v145';
|
||||
$self->{ToolsVersion} = '18.0';
|
||||
|
||||
return $self;
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
@@ -4,7 +4,7 @@ MSVC build
|
||||
==========
|
||||
|
||||
This directory contains the tools required to build PostgreSQL using
|
||||
Microsoft Visual Studio 2013 - 2022. This builds the whole backend, not just
|
||||
Microsoft Visual Studio 2013 - 2026. 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,11 +89,12 @@ 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 VS2013Solution,
|
||||
VS2015Solution, VS2017Solution, VS2019Solution or VS2022Solution, all in
|
||||
Solution.pm, depending on the user's build environment) and adding objects
|
||||
implementing the corresponding Project interface (VC2013Project,
|
||||
VC2015Project, VC2017Project, VC2019Project or VC2022Project from
|
||||
MSBuildProject.pm) to it. When Solution::Save is called, the implementations
|
||||
VS2015Solution, VS2017Solution, VS2019Solution, VS2022Solution or
|
||||
VS2026Solution, all in Solution.pm, depending on the user's build
|
||||
environment) and adding objects implementing the corresponding Project
|
||||
interface (VC2013Project, VC2015Project, VC2017Project, VC2019Project,
|
||||
VC2022Project or VC2026Project 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
|
||||
performed in build.pl again.
|
||||
|
||||
@@ -1357,6 +1357,34 @@ sub new
|
||||
return $self;
|
||||
}
|
||||
|
||||
package VS2026Solution;
|
||||
|
||||
#
|
||||
# Package that encapsulates a Visual Studio 2026 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} = '18.00';
|
||||
$self->{visualStudioName} = 'Visual Studio 2026';
|
||||
$self->{VisualStudioVersion} = '18.7.11925.98';
|
||||
$self->{MinimumVisualStudioVersion} = '10.0.40219.1';
|
||||
|
||||
return $self;
|
||||
}
|
||||
|
||||
sub GetAdditionalHeaders
|
||||
{
|
||||
my ($self, $f) = @_;
|
||||
|
||||
@@ -63,14 +63,24 @@ sub CreateSolution
|
||||
}
|
||||
|
||||
# The version of nmake bundled in Visual Studio 2022 is greater
|
||||
# than 14.30 and less than 14.40. And the version number is
|
||||
# than 14.30 and less than 14.50. And the version number is
|
||||
# actually 17.00.
|
||||
elsif (
|
||||
($visualStudioVersion ge '14.30' && $visualStudioVersion lt '14.40')
|
||||
($visualStudioVersion ge '14.30' && $visualStudioVersion lt '14.50')
|
||||
|| $visualStudioVersion eq '17.00')
|
||||
{
|
||||
return new VS2022Solution(@_);
|
||||
}
|
||||
|
||||
# The version of nmake bundled in Visual Studio 2026 is greater
|
||||
# than 14.50 and less than 14.60. And the version number is
|
||||
# actually 18.00.
|
||||
elsif (
|
||||
($visualStudioVersion ge '14.50' && $visualStudioVersion lt '14.60')
|
||||
|| $visualStudioVersion eq '18.00')
|
||||
{
|
||||
return new VS2026Solution(@_);
|
||||
}
|
||||
else
|
||||
{
|
||||
croak
|
||||
@@ -117,14 +127,24 @@ sub CreateProject
|
||||
}
|
||||
|
||||
# The version of nmake bundled in Visual Studio 2022 is greater
|
||||
# than 14.30 and less than 14.40. And the version number is
|
||||
# than 14.30 and less than 14.50. And the version number is
|
||||
# actually 17.00.
|
||||
elsif (
|
||||
($visualStudioVersion ge '14.30' && $visualStudioVersion lt '14.40')
|
||||
($visualStudioVersion ge '14.30' && $visualStudioVersion lt '14.50')
|
||||
|| $visualStudioVersion eq '17.00')
|
||||
{
|
||||
return new VC2022Project(@_);
|
||||
}
|
||||
|
||||
# The version of nmake bundled in Visual Studio 2026 is greater
|
||||
# than 14.50 and less than 14.60. And the version number is
|
||||
# actually 18.00.
|
||||
elsif (
|
||||
($visualStudioVersion ge '14.50' && $visualStudioVersion lt '14.60')
|
||||
|| $visualStudioVersion eq '18.00')
|
||||
{
|
||||
return new VC2026Project(@_);
|
||||
}
|
||||
else
|
||||
{
|
||||
croak
|
||||
@@ -154,7 +174,7 @@ sub DetermineVisualStudioVersion
|
||||
else
|
||||
{
|
||||
# fake version
|
||||
return '17.00';
|
||||
return '18.00';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -163,13 +183,13 @@ sub _GetVisualStudioVersion
|
||||
my ($major, $minor) = @_;
|
||||
|
||||
# The major visual studio that is supported has nmake
|
||||
# version <= 14.40, so stick with it as the latest version
|
||||
# version <= 14.60, so stick with it as the latest version
|
||||
# if bumping on something even newer.
|
||||
if ($major >= 14 && $minor >= 40)
|
||||
if ($major >= 14 && $minor >= 60)
|
||||
{
|
||||
carp
|
||||
"The determined version of Visual Studio is newer than the latest supported version. Returning the latest supported version instead.";
|
||||
return '14.30';
|
||||
return '14.50';
|
||||
}
|
||||
elsif ($major < 12)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user