import gc
import codecs
import shutil
+import time
import unittest
import doctest
import operator
threading = None
WITH_CYTHON = True
+CY3_DIR = None
from distutils.dist import Distribution
from distutils.core import Extension
os.path.join('Cython', 'Debugger', 'libpython.py'),
]
-
+COMPILER = None
INCLUDE_DIRS = [ d for d in os.getenv('INCLUDE', '').split(os.pathsep) if d ]
CFLAGS = os.getenv('CFLAGS', '').split()
continue
suite.addTest(
self.handle_directory(path, filename))
- if sys.platform not in ['win32'] and sys.version_info[0] < 3:
- # Non-Windows makefile, can't run Cython under Py3.
+ if sys.platform not in ['win32']:
+ # Non-Windows makefile.
if [1 for selector in self.selectors if selector("embedded")] \
and not [1 for selector in self.exclude_selectors if selector("embedded")]:
suite.addTest(unittest.makeSuite(EmbedTest))
filenames = os.listdir(path)
filenames.sort()
for filename in filenames:
- if context == "build" and filename.endswith(".srctree"):
+ if filename.endswith(".srctree"):
if not [ 1 for match in self.selectors if match(filename) ]:
continue
if self.exclude_selectors:
if incdir:
build_extension.include_dirs.append(incdir)
build_extension.finalize_options()
+ if COMPILER:
+ build_extension.compiler = COMPILER
ext_include_dirs = []
for match, get_additional_include_dirs in EXT_DEP_INCLUDES:
if match(module):
ext_include_dirs += get_additional_include_dirs()
- self.copy_related_files(test_directory, workdir, module)
-
+ ext_compile_flags = CFLAGS[:]
+ if build_extension.compiler == 'mingw32':
+ ext_compile_flags.append('-Wno-format')
if extra_extension_args is None:
extra_extension_args = {}
+ self.copy_related_files(test_directory, workdir, module)
extension = Extension(
module,
sources = self.find_source_files(workdir, module),
include_dirs = ext_include_dirs,
- extra_compile_args = CFLAGS,
+ extra_compile_args = ext_compile_flags,
**extra_extension_args
)
if self.language == 'cpp':
if include_debugger:
skipped_dirs = []
else:
- cython_dir = os.path.dirname(os.path.abspath(__file__))
- skipped_dirs = [os.path.join(cython_dir, 'Cython', 'Debugger')]
+ skipped_dirs = ['Cython' + os.path.sep + 'Debugger' + os.path.sep]
for dirpath, dirnames, filenames in os.walk(path):
if dirpath != path and "__init__.py" not in filenames:
def tearDown(self):
if self.cleanup_workdir:
- shutil.rmtree(self.workdir)
+ for trial in range(5):
+ try:
+ shutil.rmtree(self.workdir)
+ except OSError:
+ time.sleep(0.1)
+ else:
+ break
os.chdir(self.old_dir)
def runTest(self):
if not os.path.isdir(libdir) or libname not in os.listdir(libdir):
# report the error for the original directory
libdir = sysconfig.get_config_var('LIBDIR')
+ cython = 'cython.py'
+ if sys.version_info[0] >=3:
+ cython = os.path.join(CY3_DIR, cython)
+ cython = os.path.abspath(os.path.join('..', '..', cython))
self.assert_(os.system(
- "make PYTHON='%s' LIBDIR1='%s' test > make.output" % (sys.executable, libdir)) == 0)
+ "make PYTHON='%s' CYTHON='%s' LIBDIR1='%s' test > make.output" % (sys.executable, cython, libdir)) == 0)
try:
os.remove('make.output')
except OSError:
recursive-include Cython *.py *.pyx *.pxd
recursive-include Cython/Debugger/Tests *
include runtests.py
+ include cython.py
''')
sys.path.insert(0, cy3_dir)
parser.add_option("--no-cython", dest="with_cython",
action="store_false", default=True,
help="do not run the Cython compiler, only the C compiler")
+ parser.add_option("--compiler", dest="compiler", default=None,
+ help="C compiler type")
parser.add_option("--no-c", dest="use_c",
action="store_false", default=True,
help="do not test C compilation")
for name in cy_modules:
del sys.modules[name]
# hasn't been refactored yet - do it now
- cy3_dir = os.path.join(WORKDIR, 'Cy3')
+ global CY3_DIR
+ CY3_DIR = cy3_dir = os.path.join(WORKDIR, 'Cy3')
if sys.version_info >= (3,1):
refactor_for_py3(DISTDIR, cy3_dir)
elif os.path.isdir(cy3_dir):
if sys.platform in ['win32', 'cygwin'] and sys.version_info < (2,6):
exclude_selectors += [ lambda x: x == "run.specialfloat" ]
+ global COMPILER
+ if options.compiler:
+ COMPILER = options.compiler
languages = []
if options.use_c:
languages.append('c')