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
From 7502f8c9a114ac483e553f444301a23e5c65cc2c Mon Sep 17 00:00:00 2001 From: Michael Paquier <mich...@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.h index 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.h index 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.c index 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.c index 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.c index 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.c index 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.sgml index 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.pm index 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/README index 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.pm index 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.pm index 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
Description: PGP signature