]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Issue 1793: Add ctypes.util.find_msvcrt() function (on Windows).
authorThomas Heller <theller@ctypes.org>
Fri, 16 May 2008 20:06:31 +0000 (20:06 +0000)
committerThomas Heller <theller@ctypes.org>
Fri, 16 May 2008 20:06:31 +0000 (20:06 +0000)
Lib/ctypes/util.py
Misc/NEWS

index fc17a2f93a1e43693f8c9d2cff459dc68e597905..82ff66218e63fc06124c41c9f06435f89d83bf08 100644 (file)
@@ -5,7 +5,50 @@ import sys, os
 
 # find_library(name) returns the pathname of a library, or None.
 if os.name == "nt":
+
+    def _get_build_version():
+        """Return the version of MSVC that was used to build Python.
+
+        For Python 2.3 and up, the version number is included in
+        sys.version.  For earlier versions, assume the compiler is MSVC 6.
+        """
+        # This function was copied from Lib/distutils/msvccompiler.py
+        prefix = "MSC v."
+        i = sys.version.find(prefix)
+        if i == -1:
+            return 6
+        i = i + len(prefix)
+        s, rest = sys.version[i:].split(" ", 1)
+        majorVersion = int(s[:-2]) - 6
+        minorVersion = int(s[2:3]) / 10.0
+        # I don't think paths are affected by minor version in version 6
+        if majorVersion == 6:
+            minorVersion = 0
+        if majorVersion >= 6:
+            return majorVersion + minorVersion
+        # else we don't know what version of the compiler this is
+        return None
+
+    def find_msvcrt():
+        """Return the name of the VC runtime dll"""
+        version = _get_build_version()
+        if version is None:
+            # better be safe than sorry
+            return None
+        if version <= 6:
+            clibname = 'msvcrt'
+        else:
+            clibname = 'msvcr%d' % (version * 10)
+
+        # If python was built with in debug mode
+        import imp
+        if imp.get_suffixes()[0][0] == '_d.pyd':
+            clibname += 'd'
+        return clibname+'.dll'
+
     def find_library(name):
+        if name in ('c', 'm'):
+            return find_msvcrt()
         # See MSDN for the REAL search order.
         for directory in os.environ['PATH'].split(os.pathsep):
             fname = os.path.join(directory, name)
index dc9b6eec200dfa9afeaf1c5ece33c1138aec9220..f11293dc81c63605b1f4a64f668392d823eab551 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -41,6 +41,11 @@ Extension Modules
 Library
 -------
 
+- Issue 1793: Function ctypes.util.find_msvcrt() added that returns
+  the name of the C runtime library that Python uses.
+  ctypes.util.find_library(name) now call this function when name is
+  'm' or 'c'.
+
 - The Tkinter module has been made a package and renamed 'tkinter'.  All
   Tkinter-related modules (like Tix, ScrolledText, turtle etc.) are now
   submodules of that package and have been renamed to conform to PEP 8