Commit ae7e588c authored by Stefan Behnel's avatar Stefan Behnel

prevent double refactoring when testing an installed Cython version in Py3

parent 0f5d3a6a
...@@ -683,6 +683,27 @@ class FileListExcluder: ...@@ -683,6 +683,27 @@ class FileListExcluder:
def __call__(self, testname): def __call__(self, testname):
return testname in self.excludes or testname.split('.')[-1] in self.excludes return testname in self.excludes or testname.split('.')[-1] in self.excludes
def refactor_for_py3(distdir, cy3_dir):
# need to convert Cython sources first
import lib2to3.refactor
from distutils.util import copydir_run_2to3
fixers = [ fix for fix in lib2to3.refactor.get_fixers_from_package("lib2to3.fixes")
if fix.split('fix_')[-1] not in ('next',)
]
if not os.path.exists(cy3_dir):
os.makedirs(cy3_dir)
import distutils.log as dlog
dlog.set_threshold(dlog.DEBUG)
copydir_run_2to3(distdir, cy3_dir, fixer_names=fixers,
template = '''
global-exclude *
graft Cython
recursive-exclude Cython *
recursive-include Cython *.py *.pyx *.pxd
''')
sys.path.insert(0, cy3_dir)
if __name__ == '__main__': if __name__ == '__main__':
from optparse import OptionParser from optparse import OptionParser
parser = OptionParser() parser = OptionParser()
...@@ -755,49 +776,37 @@ if __name__ == '__main__': ...@@ -755,49 +776,37 @@ if __name__ == '__main__':
ROOTDIR = os.path.join(DISTDIR, 'tests') ROOTDIR = os.path.join(DISTDIR, 'tests')
WORKDIR = os.path.join(os.getcwd(), 'BUILD') WORKDIR = os.path.join(os.getcwd(), 'BUILD')
if sys.version_info >= (3,1): if sys.version_info[0] >= 3:
options.doctests = False options.doctests = False
options.unittests = False options.pyregr = False
options.pyregr = False
if options.with_cython: if options.with_cython:
# need to convert Cython sources first try:
import lib2to3.refactor # try if Cython is installed in a Py3 version
from distutils.util import copydir_run_2to3 import Cython.Compiler.Main
fixers = [ fix for fix in lib2to3.refactor.get_fixers_from_package("lib2to3.fixes") except Exception:
if fix.split('fix_')[-1] not in ('next',) cy_modules = [ name for name in sys.modules
] if name.startswith('Cython') ]
cy3_dir = os.path.join(WORKDIR, 'Cy3') for name in cy_modules:
if not os.path.exists(cy3_dir): del sys.modules[name]
os.makedirs(cy3_dir) # hasn't been refactored yet - do it now
import distutils.log as dlog cy3_dir = os.path.join(WORKDIR, 'Cy3')
dlog.set_threshold(dlog.DEBUG) if sys.version_info >= (3,1):
copydir_run_2to3(DISTDIR, cy3_dir, fixer_names=fixers, refactor_for_py3(DISTDIR, cy3_dir)
template = ''' elif os.path.isdir(cy3_dir):
global-exclude * sys.path.insert(0, cy3_dir)
graft Cython else:
recursive-exclude Cython * options.with_cython = False
recursive-include Cython *.py *.pyx *.pxd
''')
sys.path.insert(0, cy3_dir)
elif sys.version_info[0] >= 3:
# make sure we do not import (or run) Cython itself (unless
# 2to3 was already run)
cy3_dir = os.path.join(WORKDIR, 'Cy3')
if os.path.isdir(cy3_dir):
sys.path.insert(0, cy3_dir)
else:
options.with_cython = False
options.doctests = False
options.unittests = False
options.pyregr = False
if options.coverage:
import coverage
coverage.erase()
coverage.start()
WITH_CYTHON = options.with_cython WITH_CYTHON = options.with_cython
if options.coverage:
if not WITH_CYTHON:
options.coverage = False
else:
import coverage
coverage.erase()
coverage.start()
if WITH_CYTHON: if WITH_CYTHON:
from Cython.Compiler.Main import \ from Cython.Compiler.Main import \
CompilationOptions, \ CompilationOptions, \
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment