Make Windows 10 the minimal runtime requirement for WIN32
authorMichael Paquier <[email protected]>
Thu, 7 Jul 2022 04:25:45 +0000 (13:25 +0900)
committerMichael Paquier <[email protected]>
Thu, 7 Jul 2022 04:25:45 +0000 (13:25 +0900)
This commit bumps the runtime value of _WIN32_WINNT to be 0x0A00 for any
builds on Windows.  Hence, this makes Windows 10 the minimal requirement
when running PostgreSQL under WIN32, be it for builds of Cygwin, MinGW
or Visual Studio.

The previous minimal runtime version was either Windows Vista when
building with at least Visual Studio 2015 or Windows XP for the rest.

Windows 10 is the most modern version supported by Microsoft, and per
discussion, as we don't have buildfarm members that run older versions
anymore, this is the minimal supported version that suits better for our
needs.  This will actually make easier the development of some patches,
two being async I/O and large page handling by avoiding a lot of
compatibility gotchas, on platforms that have most likely few users
anyway.

It is possible to remove MIN_WINNT in win32.h and the macros
IsWindowsXXXOrGreater() that were used in the code at runtime to check
which version of Windows was getting used.  The change in pg_locale.c
comes from Juan.  Note that all my tests passed, and that the CI is
green.  The buildfarm will quickly tell if this needs more adjustments.

Author: Michael Paquier, Juan José Santamaría Flecha
Reviewed-by: Thomas Munro
Discussion: https://postgr.es/m/[email protected]

doc/src/sgml/install-windows.sgml
doc/src/sgml/installation.sgml
src/backend/main/main.c
src/backend/utils/adt/pg_locale.c
src/bin/pg_ctl/pg_ctl.c
src/include/port/win32.h

index bcfd5a1a106e5404052df03c11ab3285b4142e2e..66567d17a0455b6f992142c3b04b393bcc314443 100644 (file)
   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
-  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 2013</productname> and above.
    <!--
        For 2013 requirements:
        https://docs.microsoft.com/en-us/visualstudio/productinfo/vs2013-sysrequirements-vs
@@ -358,8 +354,7 @@ $ENV{MSBFLAGS}="/m";
   <title>Special Considerations for 64-Bit Windows</title>
 
   <para>
-   PostgreSQL will only build for the x64 architecture on 64-bit Windows, there
-   is no support for Itanium processors.
+   PostgreSQL will only build for the x64 architecture on 64-bit Windows.
   </para>
 
   <para>
index c5850780291310e650f2c1b2c60f5900c543b1ec..c12de7896c5c91a36ca3bf10e4e89705c8d89aa2 100644 (file)
@@ -2136,7 +2136,7 @@ export MANPATH
 
   <para>
    <productname>PostgreSQL</productname> can be expected to work on these operating
-   systems: Linux (all recent distributions), Windows (XP and later),
+   systems: Linux (all recent distributions), Windows (10 and later),
    FreeBSD, OpenBSD, NetBSD, macOS, AIX, HP/UX, and Solaris.
    Other Unix-like systems may also work but are not currently
    being tested.  In most cases, all CPU architectures supported by
@@ -2323,16 +2323,15 @@ ERROR:  could not load library "/opt/dbs/pgsql/lib/plperl.so": Bad address
      <listitem>
       <para>
        The <command>adduser</command> command is not supported; use
-       the appropriate user management application on Windows NT,
-       2000, or XP.  Otherwise, skip this step.
+       the appropriate user management application on Windows.
+       Otherwise, skip this step.
       </para>
      </listitem>
 
      <listitem>
       <para>
        The <command>su</command> command is not supported; use ssh to
-       simulate su on Windows NT, 2000, or XP. Otherwise, skip this
-       step.
+       simulate su on Windows. Otherwise, skip this step.
       </para>
      </listitem>
 
index c43a527d3f99ab1428142f0d16cec80336be621d..dd82722ee3107d6e0dc470684c6c840b01ef19b4 100644 (file)
@@ -290,23 +290,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 */
 
index ea42e70e43bb9f82b19c23147bc3b1292e817763..5cf5dd5f87d8bb0428288afeb3bceabf1a6cd332 100644 (file)
@@ -1719,7 +1719,7 @@ get_collation_actual_version(char collprovider, const char *collcollate)
        else
            ereport(ERROR,
                    (errmsg("could not load locale \"%s\"", collcollate)));
-#elif defined(WIN32) && _WIN32_WINNT >= 0x0600
+#elif defined(WIN32)
        /*
         * If we are targeting Windows Vista and above, we can ask for a name
         * given a collation name (earlier versions required a location code
@@ -1747,7 +1747,7 @@ get_collation_actual_version(char collprovider, const char *collcollate)
                            collcollate,
                            GetLastError())));
        }
-       collversion = psprintf("%d.%d,%d.%d",
+       collversion = psprintf("%ld.%ld,%ld.%ld",
                               (version.dwNLSVersion >> 8) & 0xFFFF,
                               version.dwNLSVersion & 0xFF,
                               (version.dwDefinedVersion >> 8) & 0xFFFF,
index dd78e5bc660de28ac6c65d36fa662d3901543b1f..ef58883a5c2121ffd3969e8698e4f1df0a3092b8 100644 (file)
@@ -1896,17 +1896,8 @@ CreateRestrictedProcess(char *cmd, PROCESS_INFORMATION *processInfo, bool as_ser
    /* Verify that we found all functions */
    if (_IsProcessInJob == NULL || _CreateJobObject == NULL || _SetInformationJobObject == NULL || _AssignProcessToJobObject == NULL || _QueryInformationJobObject == NULL)
    {
-       /*
-        * IsProcessInJob() is not available on < WinXP, so there is no need
-        * to log the error every time in that case
-        */
-       if (IsWindowsXPOrGreater())
-
-           /*
-            * Log error if we can't get version, or if we're on WinXP/2003 or
-            * newer
-            */
-           write_stderr(_("%s: WARNING: could not locate all job object functions in system API\n"), progname);
+       /* Log error if we can't get version */
+       write_stderr(_("%s: WARNING: could not locate all job object functions in system API\n"), progname);
    }
    else
    {
@@ -1946,19 +1937,6 @@ CreateRestrictedProcess(char *cmd, PROCESS_INFORMATION *processInfo, bool as_ser
                        JOB_OBJECT_UILIMIT_EXITWINDOWS | JOB_OBJECT_UILIMIT_READCLIPBOARD |
                        JOB_OBJECT_UILIMIT_SYSTEMPARAMETERS | JOB_OBJECT_UILIMIT_WRITECLIPBOARD;
 
-                   if (as_service)
-                   {
-                       if (!IsWindows7OrGreater())
-                       {
-                           /*
-                            * On Windows 7 (and presumably later),
-                            * JOB_OBJECT_UILIMIT_HANDLES prevents us from
-                            * starting as a service. So we only enable it on
-                            * Vista and earlier (version <= 6.0)
-                            */
-                           uiRestrictions.UIRestrictionsClass |= JOB_OBJECT_UILIMIT_HANDLES;
-                       }
-                   }
                    _SetInformationJobObject(job, JobObjectBasicUIRestrictions, &uiRestrictions, sizeof(uiRestrictions));
 
                    securityLimit.SecurityLimitFlags = JOB_OBJECT_SECURITY_NO_ADMIN | JOB_OBJECT_SECURITY_ONLY_TOKEN;
index c6213c77c3aee8e239de6a7c2ec0fed5140ef9ae..5f3b17a50086b267e040f9b849843e9686ffc817 100644 (file)
 
 /*
  * 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.  The minimum requirement is Windows 10.
  */
-#if defined(_MSC_VER) && _MSC_VER >= 1900
-#define MIN_WINNT 0x0600
-#else
-#define MIN_WINNT 0x0501
-#endif
-
-#if defined(_WIN32_WINNT) && _WIN32_WINNT < MIN_WINNT
+#ifdef _WIN32_WINNT
 #undef _WIN32_WINNT
 #endif
 
-#ifndef _WIN32_WINNT
-#define _WIN32_WINNT MIN_WINNT
-#endif
+#define _WIN32_WINNT 0x0A00
 
 /*
  * We need to prevent <crtdefs.h> from defining a symbol conflicting with