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

This commit is contained in:
Thomas Heller 2008-05-16 20:06:31 +00:00
parent 3c4971c40e
commit 95ba13fa85
2 changed files with 48 additions and 0 deletions

View File

@ -5,7 +5,50 @@ import sys, os
# find_library(name) returns the pathname of a library, or None. # find_library(name) returns the pathname of a library, or None.
if os.name == "nt": 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): def find_library(name):
if name in ('c', 'm'):
return find_msvcrt()
# See MSDN for the REAL search order. # See MSDN for the REAL search order.
for directory in os.environ['PATH'].split(os.pathsep): for directory in os.environ['PATH'].split(os.pathsep):
fname = os.path.join(directory, name) fname = os.path.join(directory, name)

View File

@ -41,6 +41,11 @@ Extension Modules
Library 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 - The Tkinter module has been made a package and renamed 'tkinter'. All
Tkinter-related modules (like Tix, ScrolledText, turtle etc.) are now Tkinter-related modules (like Tix, ScrolledText, turtle etc.) are now
submodules of that package and have been renamed to conform to PEP 8 submodules of that package and have been renamed to conform to PEP 8