[Python-checkins] r63395 - in python/trunk: Lib/ctypes/util.py Misc/NEWS

thomas.heller python-checkins at python.org
Fri May 16 22:06:31 CEST 2008


Author: thomas.heller
Date: Fri May 16 22:06:31 2008
New Revision: 63395

Log:
Issue 1793: Add ctypes.util.find_msvcrt() function (on Windows).




Modified:
   python/trunk/Lib/ctypes/util.py
   python/trunk/Misc/NEWS

Modified: python/trunk/Lib/ctypes/util.py
==============================================================================
--- python/trunk/Lib/ctypes/util.py	(original)
+++ python/trunk/Lib/ctypes/util.py	Fri May 16 22:06:31 2008
@@ -5,7 +5,50 @@
 
 # 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)

Modified: python/trunk/Misc/NEWS
==============================================================================
--- python/trunk/Misc/NEWS	(original)
+++ python/trunk/Misc/NEWS	Fri May 16 22:06:31 2008
@@ -41,6 +41,11 @@
 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


More information about the Python-checkins mailing list