mirror of
https://github.com/python/cpython.git
synced 2025-07-23 03:05:38 +00:00
Merged revisions 63395-63396,63511,63522-63523 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk ........ r63395 | thomas.heller | 2008-05-16 22:06:31 +0200 (Fr, 16 Mai 2008) | 4 lines Issue 1793: Add ctypes.util.find_msvcrt() function (on Windows). ........ r63396 | thomas.heller | 2008-05-16 22:19:07 +0200 (Fr, 16 Mai 2008) | 4 lines Very simple test for ctypes.util.find_library on Windows. ........ r63511 | thomas.heller | 2008-05-20 21:53:47 +0200 (Di, 20 Mai 2008) | 6 lines On HPUX, -fPIC must be used for linking. _ctypes now builds on HP-UX IA64 and PA machines. The ctypes unittests work fine on the IA64, but dump core in test_qsort on the PA. ........ r63522 | thomas.heller | 2008-05-21 20:47:02 +0200 (Mi, 21 Mai 2008) | 2 lines The -x <test1[,test2...]> flag allows to exclude tests. ........ r63523 | thomas.heller | 2008-05-21 21:47:44 +0200 (Mi, 21 Mai 2008) | 2 lines Oops, get_tests may be called with 3 arguments. ........
This commit is contained in:
parent
ab081cfbb1
commit
3eaaeb437f
6 changed files with 64 additions and 6 deletions
|
@ -50,11 +50,16 @@ def find_package_modules(package, mask):
|
||||||
if fnmatch.fnmatchcase(fnm, mask):
|
if fnmatch.fnmatchcase(fnm, mask):
|
||||||
yield "%s.%s" % (package.__name__, os.path.splitext(fnm)[0])
|
yield "%s.%s" % (package.__name__, os.path.splitext(fnm)[0])
|
||||||
|
|
||||||
def get_tests(package, mask, verbosity):
|
def get_tests(package, mask, verbosity, exclude=()):
|
||||||
"""Return a list of skipped test modules, and a list of test cases."""
|
"""Return a list of skipped test modules, and a list of test cases."""
|
||||||
tests = []
|
tests = []
|
||||||
skipped = []
|
skipped = []
|
||||||
for modname in find_package_modules(package, mask):
|
for modname in find_package_modules(package, mask):
|
||||||
|
if modname.split(".")[-1] in exclude:
|
||||||
|
skipped.append(modname)
|
||||||
|
if verbosity > 1:
|
||||||
|
print >> sys.stderr, "Skipped %s: excluded" % modname
|
||||||
|
continue
|
||||||
try:
|
try:
|
||||||
mod = __import__(modname, globals(), locals(), ['*'])
|
mod = __import__(modname, globals(), locals(), ['*'])
|
||||||
except ResourceDenied as detail:
|
except ResourceDenied as detail:
|
||||||
|
@ -151,12 +156,13 @@ class TestRunner(unittest.TextTestRunner):
|
||||||
|
|
||||||
def main(*packages):
|
def main(*packages):
|
||||||
try:
|
try:
|
||||||
opts, args = getopt.getopt(sys.argv[1:], "rqvu:")
|
opts, args = getopt.getopt(sys.argv[1:], "rqvu:x:")
|
||||||
except getopt.error:
|
except getopt.error:
|
||||||
return usage()
|
return usage()
|
||||||
|
|
||||||
verbosity = 1
|
verbosity = 1
|
||||||
search_leaks = False
|
search_leaks = False
|
||||||
|
exclude = []
|
||||||
for flag, value in opts:
|
for flag, value in opts:
|
||||||
if flag == "-q":
|
if flag == "-q":
|
||||||
verbosity -= 1
|
verbosity -= 1
|
||||||
|
@ -171,17 +177,19 @@ def main(*packages):
|
||||||
search_leaks = True
|
search_leaks = True
|
||||||
elif flag == "-u":
|
elif flag == "-u":
|
||||||
use_resources.extend(value.split(","))
|
use_resources.extend(value.split(","))
|
||||||
|
elif flag == "-x":
|
||||||
|
exclude.append(value.split(","))
|
||||||
|
|
||||||
mask = "test_*.py"
|
mask = "test_*.py"
|
||||||
if args:
|
if args:
|
||||||
mask = args[0]
|
mask = args[0]
|
||||||
|
|
||||||
for package in packages:
|
for package in packages:
|
||||||
run_tests(package, mask, verbosity, search_leaks)
|
run_tests(package, mask, verbosity, search_leaks, exclude)
|
||||||
|
|
||||||
|
|
||||||
def run_tests(package, mask, verbosity, search_leaks):
|
def run_tests(package, mask, verbosity, search_leaks, exclude):
|
||||||
skipped, testcases = get_tests(package, mask, verbosity)
|
skipped, testcases = get_tests(package, mask, verbosity, exclude)
|
||||||
runner = TestRunner(verbosity=verbosity)
|
runner = TestRunner(verbosity=verbosity)
|
||||||
|
|
||||||
suites = [unittest.makeSuite(o) for o in testcases]
|
suites = [unittest.makeSuite(o) for o in testcases]
|
||||||
|
|
|
@ -8,6 +8,8 @@ Command line flags:
|
||||||
Add resources to the lits of allowed resources. '*' allows all
|
Add resources to the lits of allowed resources. '*' allows all
|
||||||
resources.
|
resources.
|
||||||
-v verbose mode: print the test currently executed
|
-v verbose mode: print the test currently executed
|
||||||
|
-x<test1[,test2...]>
|
||||||
|
Exclude specified tests.
|
||||||
mask mask to select filenames containing testcases, wildcards allowed
|
mask mask to select filenames containing testcases, wildcards allowed
|
||||||
"""
|
"""
|
||||||
import sys
|
import sys
|
||||||
|
|
|
@ -6,7 +6,7 @@ from ctypes.test import is_resource_enabled
|
||||||
|
|
||||||
libc_name = None
|
libc_name = None
|
||||||
if os.name == "nt":
|
if os.name == "nt":
|
||||||
libc_name = "msvcrt"
|
libc_name = find_library("c")
|
||||||
elif os.name == "ce":
|
elif os.name == "ce":
|
||||||
libc_name = "coredll"
|
libc_name = "coredll"
|
||||||
elif sys.platform == "cygwin":
|
elif sys.platform == "cygwin":
|
||||||
|
@ -43,6 +43,7 @@ class LoaderTest(unittest.TestCase):
|
||||||
|
|
||||||
if os.name in ("nt", "ce"):
|
if os.name in ("nt", "ce"):
|
||||||
def test_load_library(self):
|
def test_load_library(self):
|
||||||
|
self.failIf(libc_name is None)
|
||||||
if is_resource_enabled("printing"):
|
if is_resource_enabled("printing"):
|
||||||
print(find_library("kernel32"))
|
print(find_library("kernel32"))
|
||||||
print(find_library("user32"))
|
print(find_library("user32"))
|
||||||
|
|
|
@ -2,7 +2,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)
|
||||||
|
|
|
@ -25,6 +25,7 @@ ffi_platforms = {
|
||||||
'SH64': ['src/sh64/sysv.S', 'src/sh64/ffi.c'],
|
'SH64': ['src/sh64/sysv.S', 'src/sh64/ffi.c'],
|
||||||
'PA': ['src/pa/linux.S', 'src/pa/ffi.c'],
|
'PA': ['src/pa/linux.S', 'src/pa/ffi.c'],
|
||||||
'PA_LINUX': ['src/pa/linux.S', 'src/pa/ffi.c'],
|
'PA_LINUX': ['src/pa/linux.S', 'src/pa/ffi.c'],
|
||||||
|
'PA_HPUX': ['src/pa/hpux32.s', 'src/pa/ffi.c'],
|
||||||
}
|
}
|
||||||
|
|
||||||
ffi_srcdir = '@srcdir@'
|
ffi_srcdir = '@srcdir@'
|
||||||
|
|
3
setup.py
3
setup.py
|
@ -1408,6 +1408,9 @@ class PyBuildExt(build_ext):
|
||||||
# finding some -z option for the Sun compiler.
|
# finding some -z option for the Sun compiler.
|
||||||
extra_link_args.append('-mimpure-text')
|
extra_link_args.append('-mimpure-text')
|
||||||
|
|
||||||
|
elif sys.platform.startswith('hpux'):
|
||||||
|
extra_link_args.append('-fPIC')
|
||||||
|
|
||||||
ext = Extension('_ctypes',
|
ext = Extension('_ctypes',
|
||||||
include_dirs=include_dirs,
|
include_dirs=include_dirs,
|
||||||
extra_compile_args=extra_compile_args,
|
extra_compile_args=extra_compile_args,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue