From 95ba13fa85664f4451c4962e19048d105571ca25 Mon Sep 17 00:00:00 2001 From: Thomas Heller Date: Fri, 16 May 2008 20:06:31 +0000 Subject: [PATCH] Issue 1793: Add ctypes.util.find_msvcrt() function (on Windows). --- Lib/ctypes/util.py | 43 +++++++++++++++++++++++++++++++++++++++++++ Misc/NEWS | 5 +++++ 2 files changed, 48 insertions(+) diff --git a/Lib/ctypes/util.py b/Lib/ctypes/util.py index fc17a2f93a..82ff66218e 100644 --- a/Lib/ctypes/util.py +++ b/Lib/ctypes/util.py @@ -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) diff --git a/Misc/NEWS b/Misc/NEWS index dc9b6eec20..f11293dc81 100644 --- 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 -- 2.40.0