From: Michael Paquier <michael@paquier.xyz>
To: Postgres hackers <pgsql-hackers@lists.postgresql.org>
Subject: Remove support for Visual Studio 2013
Date: Mon, 16 May 2022 15:58:40 +0900
Message-ID: <YoH2IMtxcS3ncWn+@paquier.xyz> (raw)
Hi all,
Cutting support for now-unsupported versions of Windows is in the air
for a couple of months, and while looking at the code a first cleanup
that looked rather obvious to me is the removal of support for VS
2013, as of something to do for v16~.
The website of Microsoft has only documentation for VS >= 2015 as far
as I can see. Note also that VS can be downloaded down to 2012 on
their official website, and that the buildfarm members only use VS >=
2017.
The patch attached cleans up the following things proper to VS 2013:
- Locale handling.
- MIN_WINNT assignment.
- Some strtof() business, as of win32_port.h.
- Removal of _set_FMA3_enable() in main.c related to floating-point
operations.
- MSVC scripts, but that's less interesting considering the work done
with meson.
A nice result is that this completely removes all the checks related
to the version number of _MSC_VER from the core code, making the code
depend only on the definition if the flag.
Thanks,
--
Michael
Attachments:0001-Remove-support-for-VS-2013.patch (text/x-diff, 13.9K) download
From 7502f8c9a114ac483e553f444301a23e5c65cc2c Mon Sep 17 00:00:00 2001
From: Michael Paquier <michael@paquier.xyz>
Date: Mon, 16 May 2022 15:20:26 +0900
Subject: [PATCH] Remove support for VS 2013
---
src/include/port/win32.h | 10 ++++----
src/include/port/win32_port.h | 7 +-----
src/backend/main/main.c | 22 -----------------
src/backend/utils/adt/float.c | 6 +----
src/backend/utils/adt/pg_locale.c | 40 -------------------------------
src/port/chklocale.c | 16 +------------
doc/src/sgml/install-windows.sgml | 10 ++++----
src/tools/msvc/MSBuildProject.pm | 27 +--------------------
src/tools/msvc/README | 8 +++----
src/tools/msvc/Solution.pm | 28 ----------------------
src/tools/msvc/VSObjectFactory.pm | 12 ++--------
11 files changed, 19 insertions(+), 167 deletions(-)
diff --git a/src/include/port/win32.h b/src/include/port/win32.hindex c6213c77c3..539f3ec6d1 100644--- a/src/include/port/win32.h+++ b/src/include/port/win32.h@@ -11,12 +11,12 @@
/*
* Make sure _WIN32_WINNT has the minimum required value.
- * Leave a higher value in place. When building with at least Visual- * Studio 2015 the minimum requirement is Windows Vista (0x0600) to- * get support for GetLocaleInfoEx() with locales. For everything else- * the minimum version is Windows XP (0x0501).+ * Leave a higher value in place. When building with Visual Studio the+ * minimum requirement is Windows Vista (0x0600) to get support for+ * GetLocaleInfoEx() with locales. For everything else the minimum+ * version is Windows XP (0x0501).
*/
-#if defined(_MSC_VER) && _MSC_VER >= 1900+#ifdef _MSC_VER
#define MIN_WINNT 0x0600
#else
#define MIN_WINNT 0x0501
diff --git a/src/include/port/win32_port.h b/src/include/port/win32_port.hindex dbbf88f8e8..c0225603f2 100644--- a/src/include/port/win32_port.h+++ b/src/include/port/win32_port.h@@ -531,13 +531,8 @@ typedef unsigned short mode_t;
#endif /* _MSC_VER */
-#if (defined(_MSC_VER) && (_MSC_VER < 1900)) || \- defined(__MINGW32__) || defined(__MINGW64__)+#if defined(__MINGW32__) || defined(__MINGW64__)
/*
- * VS2013 has a strtof() that seems to give correct answers for valid input,- * even on the rounding edge cases, but which doesn't handle out-of-range- * input correctly. Work around that.- *
* Mingw claims to have a strtof, and my reading of its source code suggests
* that it ought to work (and not need this hack), but the regression test
* results disagree with me; whether this is a version issue or not is not
diff --git a/src/backend/main/main.c b/src/backend/main/main.cindex c43a527d3f..bb782fa1ec 100644--- a/src/backend/main/main.c+++ b/src/backend/main/main.c@@ -30,11 +30,6 @@
#include <sys/param.h>
#endif
-#if defined(_M_AMD64) && _MSC_VER == 1800-#include <math.h>-#include <versionhelpers.h>-#endif-
#include "bootstrap/bootstrap.h"
#include "common/username.h"
#include "port/atomics.h"
@@ -290,23 +285,6 @@ startup_hacks(const char *progname)
_CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDERR);
_CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE | _CRTDBG_MODE_DEBUG);
_CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDERR);
--#if defined(_M_AMD64) && _MSC_VER == 1800-- /*----------- * Avoid crashing in certain floating-point operations if we were- * compiled for x64 with MS Visual Studio 2013 and are running on- * Windows prior to 7/2008R2 SP1 on an AVX2-capable CPU.- *- * Ref: https://connect.microsoft.com/VisualStudio/feedback/details/811093/visual-studio-2013-rtm-c-x64-code-generation-bug-for-avx2-instructions- *----------- */- if (!IsWindows7SP1OrGreater())- {- _set_FMA3_enable(0);- }-#endif /* defined(_M_AMD64) && _MSC_VER == 1800 */-
}
#endif /* WIN32 */
diff --git a/src/backend/utils/adt/float.c b/src/backend/utils/adt/float.cindex 63bb0f2277..fc8f39a7a9 100644--- a/src/backend/utils/adt/float.c+++ b/src/backend/utils/adt/float.c@@ -249,13 +249,9 @@ float4in(PG_FUNCTION_ARGS)
* precision). We'd prefer not to throw error for that, so try to
* detect whether it's a "real" out-of-range condition by checking
* to see if the result is zero or huge.
- *- * Use isinf() rather than HUGE_VALF on VS2013 because it- * generates a spurious overflow warning for -HUGE_VALF. Also use- * isinf() if HUGE_VALF is missing.
*/
if (val == 0.0 ||
-#if !defined(HUGE_VALF) || (defined(_MSC_VER) && (_MSC_VER < 1900))+#if !defined(HUGE_VALF)
isinf(val)
#else
(val >= HUGE_VALF || val <= -HUGE_VALF)
diff --git a/src/backend/utils/adt/pg_locale.c b/src/backend/utils/adt/pg_locale.cindex a0490a7522..34bd8d424e 100644--- a/src/backend/utils/adt/pg_locale.c+++ b/src/backend/utils/adt/pg_locale.c@@ -960,7 +960,6 @@ cache_locale_time(void)
* [2] https://docs.microsoft.com/en-us/windows/win32/intl/locale-names
*/
-#if _MSC_VER >= 1900
/*
* Callback function for EnumSystemLocalesEx() in get_iso_localename().
*
@@ -1110,7 +1109,6 @@ get_iso_localename(const char *winlocname)
return NULL;
}
-#endif /* _MSC_VER >= 1900 */
static char *
IsoLocaleName(const char *winlocname)
@@ -1125,46 +1123,8 @@ IsoLocaleName(const char *winlocname)
return iso_lc_messages;
}
else
- {-#if (_MSC_VER >= 1900) /* Visual Studio 2015 or later */
return get_iso_localename(winlocname);
-#else- _locale_t loct;- loct = _create_locale(LC_CTYPE, winlocname);- if (loct != NULL)- {- size_t rc;- char *hyphen;-- /* Locale names use only ASCII, any conversion locale suffices. */- rc = wchar2char(iso_lc_messages, loct->locinfo->locale_name[LC_CTYPE],- sizeof(iso_lc_messages), NULL);- _free_locale(loct);- if (rc == -1 || rc == sizeof(iso_lc_messages))- return NULL;-- /*- * Since the message catalogs sit on a case-insensitive- * filesystem, we need not standardize letter case here. So long- * as we do not ship message catalogs for which it would matter,- * we also need not translate the script/variant portion, e.g.- * uz-Cyrl-UZ to uz_UZ@cyrillic. Simply replace the hyphen with- * an underscore.- *- * Note that the locale name can be less-specific than the value- * we would derive under earlier Visual Studio releases. For- * example, French_France.1252 yields just "fr". This does not- * affect any of the country-specific message catalogs available- * as of this writing (pt_BR, zh_CN, zh_TW).- */- hyphen = strchr(iso_lc_messages, '-');- if (hyphen)- *hyphen = '_';- return iso_lc_messages;- }-#endif /* Visual Studio 2015 or later */- }
#endif /* defined(_MSC_VER) */
return NULL; /* Not supported on this version of msvc/mingw */
}
diff --git a/src/port/chklocale.c b/src/port/chklocale.cindex c85d8da3c8..fdb137640c 100644--- a/src/port/chklocale.c+++ b/src/port/chklocale.c@@ -211,22 +211,9 @@ static char *
win32_langinfo(const char *ctype)
{
char *r = NULL;
--#if defined(_MSC_VER) && (_MSC_VER < 1900)- _locale_t loct = NULL;-- loct = _create_locale(LC_CTYPE, ctype);- if (loct != NULL)- {- r = malloc(16); /* excess */- if (r != NULL)- sprintf(r, "CP%u", loct->locinfo->lc_codepage);- _free_locale(loct);- }-#else
char *codepage;
-#if defined(_MSC_VER) && (_MSC_VER >= 1900)+#if defined(_MSC_VER)
uint32 cp;
WCHAR wctype[LOCALE_NAME_MAX_LENGTH];
@@ -279,7 +266,6 @@ win32_langinfo(const char *ctype)
}
}
}
-#endif
return r;
}
diff --git a/doc/src/sgml/install-windows.sgml b/doc/src/sgml/install-windows.sgmlindex bcfd5a1a10..ef30e797e3 100644--- a/doc/src/sgml/install-windows.sgml+++ b/doc/src/sgml/install-windows.sgml@@ -22,7 +22,7 @@
<productname>Windows</productname>. The simplest way to build with
Microsoft tools is to install <productname>Visual Studio 2022</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++ 2015 to 2022</productname>.
In some cases that requires the installation of the
<productname>Windows SDK</productname> in addition to the compiler.
</para>
@@ -77,19 +77,17 @@
<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 2015</productname> to
<productname>Visual Studio 2022</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
- <productname>Visual Studio 2013</productname> and above. Compilation+ <productname>Visual Studio 2015</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 2015</productname> to
<productname>Visual Studio 2022</productname>.
<!--
- For 2013 requirements:- https://docs.microsoft.com/en-us/visualstudio/productinfo/vs2013-sysrequirements-vs
For 2015 requirements:
https://docs.microsoft.com/en-us/visualstudio/productinfo/vs2015-sysrequirements-vs
For 2017 requirements:
diff --git a/src/tools/msvc/MSBuildProject.pm b/src/tools/msvc/MSBuildProject.pmindex f24d9e5348..62acdda3a1 100644--- a/src/tools/msvc/MSBuildProject.pm+++ b/src/tools/msvc/MSBuildProject.pm@@ -4,7 +4,7 @@
package MSBuildProject;
#
-# Package that encapsulates a MSBuild project file (Visual C++ 2013 or greater)+# Package that encapsulates a MSBuild project file (Visual C++ 2015 or greater)
#
# src/tools/msvc/MSBuildProject.pm
#
@@ -405,31 +405,6 @@ EOF
return;
}
-package VC2013Project;--#-# Package that encapsulates a Visual C++ 2013 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} = '12.00';- $self->{PlatformToolset} = 'v120';- $self->{ToolsVersion} = '12.0';-- return $self;-}-
package VC2015Project;
#
diff --git a/src/tools/msvc/README b/src/tools/msvc/READMEindex 473d6f425b..1c36925258 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 - 2022. This builds the whole backend, not just+Microsoft Visual Studio 2015 - 2022. 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.
@@ -67,7 +67,7 @@ Install.pm module containing the install logic
Mkvcbuild.pm module containing the code to generate the Visual
Studio build (project/solution) files
MSBuildProject.pm module containing the code to generate MSBuild based
- project files (Visual Studio 2013 or greater)+ project files (Visual Studio 2015 or greater)
Project.pm module containing the common code to generate the
Visual Studio project files. Also provides the
common interface of all project file generators
@@ -88,10 +88,10 @@ config_default.pl to create the configuration arguments.
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,+implementing the Solution interface (this could be either
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,+implementing the corresponding Project interface (
VC2015Project, VC2017Project, VC2019Project or VC2022Project from
MSBuildProject.pm) to it. When Solution::Save is called, the implementations
of Solution and Project save their content in the appropriate format.
diff --git a/src/tools/msvc/Solution.pm b/src/tools/msvc/Solution.pmindex d30e8fcb11..a4a2c637ff 100644--- a/src/tools/msvc/Solution.pm+++ b/src/tools/msvc/Solution.pm@@ -1218,34 +1218,6 @@ sub GetFakeConfigure
return $cfg;
}
-package VS2013Solution;--#-# Package that encapsulates a Visual Studio 2013 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} = '12.00';- $self->{visualStudioName} = 'Visual Studio 2013';- $self->{VisualStudioVersion} = '12.0.21005.1';- $self->{MinimumVisualStudioVersion} = '10.0.40219.1';-- return $self;-}-
package VS2015Solution;
#
diff --git a/src/tools/msvc/VSObjectFactory.pm b/src/tools/msvc/VSObjectFactory.pmindex 9f9712b793..975ccf2ee5 100644--- a/src/tools/msvc/VSObjectFactory.pm+++ b/src/tools/msvc/VSObjectFactory.pm@@ -33,11 +33,7 @@ sub CreateSolution
$visualStudioVersion = DetermineVisualStudioVersion();
}
- if ($visualStudioVersion eq '12.00')- {- return new VS2013Solution(@_);- }- elsif ($visualStudioVersion eq '14.00')+ if ($visualStudioVersion eq '14.00')
{
return new VS2015Solution(@_);
}
@@ -87,11 +83,7 @@ sub CreateProject
$visualStudioVersion = DetermineVisualStudioVersion();
}
- if ($visualStudioVersion eq '12.00')- {- return new VC2013Project(@_);- }- elsif ($visualStudioVersion eq '14.00')+ if ($visualStudioVersion eq '14.00')
{
return new VC2015Project(@_);
}
--
2.36.0
signature.asc (application/pgp-signature, 832B) download
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: pgsql-hackers@postgresql.org
Cc: michael@paquier.xyz, pgsql-hackers@lists.postgresql.org
Subject: Re: Remove support for Visual Studio 2013
In-Reply-To: <YoH2IMtxcS3ncWn+@paquier.xyz>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox