On Mon, May 30, 2022 at 04:48:22PM +0900, Michael Paquier wrote: > After looking at that again, the whole comment related to VS in > strtof.c can be removed. I have noticed while on it more places that > still referred to VS2013 in ./configure[.ac] and win32_langinfo() got > an overall incorrect description. This leads to v2 as of the > attached.
And with 495ed0e now in place, attached is a rebased version. -- Michael
From c685a8f1617e585e88a16689f7b4f4e338417bca Mon Sep 17 00:00:00 2001 From: Michael Paquier <mich...@paquier.xyz> Date: Thu, 7 Jul 2022 16:45:32 +0900 Subject: [PATCH v3] Remove support for VS 2013 --- src/include/port/win32_port.h | 7 +---- src/backend/main/main.c | 5 ---- src/backend/optimizer/path/costsize.c | 4 +-- src/backend/utils/adt/float.c | 6 +--- src/backend/utils/adt/pg_locale.c | 40 --------------------------- src/port/chklocale.c | 33 ++++------------------ src/port/strtof.c | 9 ------ doc/src/sgml/install-windows.sgml | 8 ++---- configure | 7 ++--- configure.ac | 7 ++--- src/tools/msvc/MSBuildProject.pm | 27 +----------------- src/tools/msvc/README | 8 +++--- src/tools/msvc/Solution.pm | 28 ------------------- src/tools/msvc/VSObjectFactory.pm | 12 ++------ 14 files changed, 24 insertions(+), 177 deletions(-) diff --git a/src/include/port/win32_port.h b/src/include/port/win32_port.h index dbbf88f8e8..5121c0c626 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 dd82722ee3..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" diff --git a/src/backend/optimizer/path/costsize.c b/src/backend/optimizer/path/costsize.c index fcc26b01a4..5e5732f6e1 100644 --- a/src/backend/optimizer/path/costsize.c +++ b/src/backend/optimizer/path/costsize.c @@ -5445,10 +5445,8 @@ calc_joinrel_size_estimate(PlannerInfo *root, double outer_rows, double inner_rows, SpecialJoinInfo *sjinfo, - List *restrictlist_in) + List *restrictlist) { - /* This apparently-useless variable dodges a compiler bug in VS2013: */ - List *restrictlist = restrictlist_in; JoinType jointype = sjinfo->jointype; Selectivity fkselec; Selectivity jselec; 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 5cf5dd5f87..607a4b7340 100644 --- a/src/backend/utils/adt/pg_locale.c +++ b/src/backend/utils/adt/pg_locale.c @@ -950,7 +950,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(). * @@ -1100,7 +1099,6 @@ get_iso_localename(const char *winlocname) return NULL; } -#endif /* _MSC_VER >= 1900 */ static char * IsoLocaleName(const char *winlocname) @@ -1115,46 +1113,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..2aaf2ae8c0 100644 --- a/src/port/chklocale.c +++ b/src/port/chklocale.c @@ -191,19 +191,10 @@ static const struct encoding_match encoding_match_list[] = { /* * On Windows, use CP<code page number> instead of the nl_langinfo() result * - * Visual Studio 2012 expanded the set of valid LC_CTYPE values, so have its - * locale machinery determine the code page. See comments at IsoLocaleName(). - * For other compilers, follow the locale's predictable format. - * - * Visual Studio 2015 should still be able to do the same, but the declaration - * of lc_codepage is missing in _locale_t, causing this code compilation to - * fail, hence this falls back instead on GetLocaleInfoEx. VS 2015 may be an - * exception and post-VS2015 versions should be able to handle properly the - * codepage number using _create_locale(). So, instead of the same logic as - * VS 2012 and VS 2013, this routine uses GetLocaleInfoEx to parse short - * locale names like "de-DE", "fr-FR", etc. If those cannot be parsed correctly - * process falls back to the pre-VS-2010 manual parsing done with - * using <Language>_<Country>.<CodePage> as a base. + * This routine uses GetLocaleInfoEx() to parse short locale names like + * "de-DE", "fr-FR", etc. If those cannot be parsed correctly process falls + * back to the pre-VS-2010 manual parsing done with using + * <Language>_<Country>.<CodePage> as a base. * * Returns a malloc()'d string for the caller to free. */ @@ -211,22 +202,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 +257,6 @@ win32_langinfo(const char *ctype) } } } -#endif return r; } diff --git a/src/port/strtof.c b/src/port/strtof.c index 7da05be687..314fcc9851 100644 --- a/src/port/strtof.c +++ b/src/port/strtof.c @@ -54,15 +54,6 @@ strtof(const char *nptr, char **endptr) #elif HAVE_BUGGY_STRTOF /* - * On Windows, there's a slightly different problem: VS2013 has a strtof() - * that returns the correct results for valid input, but may fail to report an - * error for underflow or overflow, returning 0 instead. Work around that by - * trying strtod() when strtof() returns 0.0 or [+-]Inf, and calling it an - * error if the result differs. Also, strtof() doesn't handle subnormal input - * well, so prefer to round the strtod() result in such cases. (Normally we'd - * just say "too bad" if strtof() doesn't support subnormals, but since we're - * already in here fixing stuff, we might as well do the best fix we can.) - * * Cygwin has a strtof() which is literally just (float)strtod(), which means * we can't avoid the double-rounding problem; but using this wrapper does get * us proper over/underflow checks. (Also, if they fix their strtof(), the diff --git a/doc/src/sgml/install-windows.sgml b/doc/src/sgml/install-windows.sgml index 66567d17a0..afb004b5cf 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,15 +77,13 @@ <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. + <productname>Visual Studio 2015</productname> and above. <!-- - 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/configure b/configure index da177403ef..e64f5c4802 100755 --- a/configure +++ b/configure @@ -16904,10 +16904,9 @@ fi if test "$PORTNAME" = "win32" -o "$PORTNAME" = "cygwin"; then # Cygwin and (apparently, based on test results) Mingw both - # have a broken strtof(), so substitute the same replacement - # code we use with VS2013. That's not a perfect fix, since - # (unlike with VS2013) it doesn't avoid double-rounding, but - # we have no better options. To get that, though, we have to + # have a broken strtof(), so substitute its implementation. + # That's not a perfect fix, since it doesn't avoid double-rounding, + # but we have no better options. To get that, though, we have to # force the file to be compiled despite HAVE_STRTOF. case " $LIBOBJS " in *" strtof.$ac_objext "* ) ;; diff --git a/configure.ac b/configure.ac index 6c6f997ee3..f6e831ee26 100644 --- a/configure.ac +++ b/configure.ac @@ -1927,10 +1927,9 @@ fi if test "$PORTNAME" = "win32" -o "$PORTNAME" = "cygwin"; then # Cygwin and (apparently, based on test results) Mingw both - # have a broken strtof(), so substitute the same replacement - # code we use with VS2013. That's not a perfect fix, since - # (unlike with VS2013) it doesn't avoid double-rounding, but - # we have no better options. To get that, though, we have to + # have a broken strtof(), so substitute its implementation. + # That's not a perfect fix, since it doesn't avoid double-rounding, + # but we have no better options. To get that, though, we have to # force the file to be compiled despite HAVE_STRTOF. AC_LIBOBJ([strtof]) AC_MSG_NOTICE([On $host_os we will use our strtof wrapper.]) 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.1
signature.asc
Description: PGP signature