[Python-Dev] Handling support for newer OS features at run time

Trent Nelson trent at snakebite.org
Tue Nov 27 23:49:28 CET 2012


    The hackiest part of my WSAPoll patch is this:

--- a/PC/pyconfig.h     Sun Nov 18 10:42:42 2012 +0000
+++ b/PC/pyconfig.h     Sun Nov 18 17:27:29 2012 -0500
@@ -158,12 +158,12 @@
 /* set the version macros for the windows headers */
 #ifdef MS_WINX64
 /* 64 bit only runs on XP or greater */
-#define Py_WINVER 0x0501 /* _WIN32_WINNT_WINXP */
-#define Py_NTDDI NTDDI_WINXP
+#define Py_WINVER 0x0600 /* _WIN32_WINNT_WINXP */
+#define Py_NTDDI NTDDI_WIN6
 #else
 /* Python 2.6+ requires Windows 2000 or greater */
-#define Py_WINVER 0x0500 /* _WIN32_WINNT_WIN2K */
-#define Py_NTDDI NTDDI_WIN2KSP4
+#define Py_WINVER 0x0600 /* _WIN32_WINNT_WIN2K */
+#define Py_NTDDI NTDDI_WIN6
 #endif

    Basically, because of the way our build is currently configured, I
    had to bump the minimum supported Windows version from XP to Vista
    just to get access to the WSAPoll headers.

        (Issue: http://bugs.python.org/issue16507
         Patch: http://bugs.python.org/file28038/wsapoll.patch)

    Ideally, a Windows binary should make WSAPoll/select.poll()
    available if running on Vista or above, without impacting
    the ability to run on XP.

    I don't think we've currently got the ability to do this, right?
    Is there a precedent set anywhere else?  I suspect it's not as
    much of an issue on *NIX platforms as you'll typically compile
    from source.  Windows, not so much.

    Thoughts?  A single binary that dynamically loads applicable
    modules seems cleaner but will obviously take more work.  Other
    approach would be to start distributing multiple versions of
    Python based on the underlying Windows version.  Not the nicest
    approach.

        Trent.


More information about the Python-Dev mailing list