Commit 917923d1 authored by Stefan Behnel's avatar Stefan Behnel

Merge branch '0.23.x'

Conflicts:
	setup.py
parents 0be536e5 64da2480
from __future__ import absolute_import from __future__ import absolute_import
import copy
import cython import cython
cython.declare(PyrexTypes=object, Naming=object, ExprNodes=object, Nodes=object, cython.declare(PyrexTypes=object, Naming=object, ExprNodes=object, Nodes=object,
Options=object, UtilNodes=object, LetNode=object, Options=object, UtilNodes=object, LetNode=object,
LetRefNode=object, TreeFragment=object, EncodedString=object, LetRefNode=object, TreeFragment=object, EncodedString=object,
error=object, warning=object, copy=object, _unicode=object) error=object, warning=object, copy=object, _unicode=object)
import copy
from . import PyrexTypes from . import PyrexTypes
from . import Naming from . import Naming
from . import ExprNodes from . import ExprNodes
......
...@@ -67,10 +67,7 @@ install: ...@@ -67,10 +67,7 @@ install:
build: off build: off
build_script: build_script:
- "%WITH_ENV% %PYTHON%\\python.exe setup.py build" - "%WITH_ENV% %PYTHON%\\python.exe setup.py bdist_wheel"
- "%WITH_ENV% %PYTHON%\\python.exe setup.py --quiet bdist_wheel"
- "%WITH_ENV% %PYTHON%\\python.exe setup.py --quiet bdist_msi"
- "%WITH_ENV% %PYTHON%\\python.exe setup.py --quiet bdist_wininst"
test: off test: off
test_script: test_script:
......
...@@ -147,124 +147,73 @@ def compile_cython_modules(profile=False, compile_more=False, cython_with_refnan ...@@ -147,124 +147,73 @@ def compile_cython_modules(profile=False, compile_more=False, cython_with_refnan
defines.append(('CYTHON_REFNANNY', '1')) defines.append(('CYTHON_REFNANNY', '1'))
extensions = [] extensions = []
if sys.version_info[0] >= 3: for module in compiled_modules:
from Cython.Distutils import build_ext as build_ext_orig source_file = os.path.join(source_root, *module.split('.'))
for module in compiled_modules: if os.path.exists(source_file + ".py"):
source_file = os.path.join(source_root, *module.split('.')) pyx_source_file = source_file + ".py"
if os.path.exists(source_file + ".py"): else:
pyx_source_file = source_file + ".py" pyx_source_file = source_file + ".pyx"
else: dep_files = []
pyx_source_file = source_file + ".pyx" if os.path.exists(source_file + '.pxd'):
dep_files = [] dep_files.append(source_file + '.pxd')
if os.path.exists(source_file + '.pxd'): if '.refnanny' in module:
dep_files.append(source_file + '.pxd') defines_for_module = []
if '.refnanny' in module: else:
defines_for_module = [] defines_for_module = defines
else: extensions.append(Extension(
defines_for_module = defines module, sources=[pyx_source_file],
extensions.append( define_macros=defines_for_module,
Extension(module, sources = [pyx_source_file], depends=dep_files))
define_macros = defines_for_module, # XXX hack around setuptools quirk for '*.pyx' sources
depends = dep_files) extensions[-1].sources[0] = pyx_source_file
)
if sys.version_info[:2] == (3, 2):
class build_ext(build_ext_orig): # Python 3.2: can only run Cython *after* running 2to3
# we must keep the original modules alive to make sure _defer_cython_compilation_in_py32(source_root, profile)
# their code keeps working when we remove them from else:
# sys.modules if profile:
dead_modules = [] from Cython.Compiler.Options import directive_defaults
directive_defaults['profile'] = True
def build_extensions(self): print("Enabled profiling for the Cython binary modules")
if sys.version_info[:2] == (3, 2):
# add path where 2to3 installed the transformed sources from Cython.Build import cythonize
# and make sure Python (re-)imports them from there extensions = cythonize(extensions)
already_imported = [
module for module in sys.modules setup_args['ext_modules'] = extensions
if module == 'Cython' or module.startswith('Cython.')
]
keep_alive = self.dead_modules.append def _defer_cython_compilation_in_py32(source_root, profile=False):
for module in already_imported: # Python 3.2: can only run Cython *after* running 2to3
keep_alive(sys.modules[module]) # => hook into build_ext
del sys.modules[module] from Cython.Distutils import build_ext as build_ext_orig
sys.path.insert(0, os.path.join(source_root, self.build_lib))
class build_ext(build_ext_orig):
if profile: # we must keep the original modules alive to make sure
from Cython.Compiler.Options import directive_defaults # their code keeps working when we remove them from
directive_defaults['profile'] = True # sys.modules
print("Enabled profiling for the Cython binary modules") dead_modules = []
build_ext_orig.build_extensions(self)
def build_extensions(self):
setup_args['ext_modules'] = extensions # add path where 2to3 installed the transformed sources
add_command_class("build_ext", build_ext) # and make sure Python (re-)imports them from there
already_imported = [
else: # Python 2.x module for module in sys.modules
from distutils.command.build_ext import build_ext as build_ext_orig if module == 'Cython' or module.startswith('Cython.')
try: ]
class build_ext(build_ext_orig): keep_alive = self.dead_modules.append
def build_extension(self, ext, *args, **kargs): for module in already_imported:
try: keep_alive(sys.modules[module])
build_ext_orig.build_extension(self, ext, *args, **kargs) del sys.modules[module]
except Exception: sys.path.insert(0, os.path.join(source_root, self.build_lib))
print("Compilation of '%s' failed" % ext.sources[0])
from Cython.Compiler.Main import compile
from Cython import Utils
if profile: if profile:
from Cython.Compiler.Options import directive_defaults from Cython.Compiler.Options import directive_defaults
directive_defaults['profile'] = True directive_defaults['profile'] = True
print("Enabled profiling for the Cython binary modules") print("Enabled profiling for the Cython binary modules")
source_root = os.path.dirname(__file__) build_ext_orig.build_extensions(self)
for module in compiled_modules:
source_file = os.path.join(source_root, *module.split('.')) add_command_class("build_ext", build_ext)
if os.path.exists(source_file + ".py"):
pyx_source_file = source_file + ".py"
else:
pyx_source_file = source_file + ".pyx"
c_source_file = source_file + ".c"
source_is_newer = False
if not os.path.exists(c_source_file):
source_is_newer = True
else:
c_last_modified = Utils.modification_time(c_source_file)
if Utils.file_newer_than(pyx_source_file, c_last_modified):
source_is_newer = True
else:
pxd_source_file = source_file + ".pxd"
if os.path.exists(pxd_source_file) and Utils.file_newer_than(pxd_source_file, c_last_modified):
source_is_newer = True
if source_is_newer:
print("Compiling module %s ..." % module)
result = compile(pyx_source_file)
c_source_file = result.c_file
if c_source_file:
# Py2 distutils can't handle unicode file paths
if isinstance(c_source_file, unicode):
filename_encoding = sys.getfilesystemencoding()
if filename_encoding is None:
filename_encoding = sys.getdefaultencoding()
c_source_file = c_source_file.encode(filename_encoding)
if '.refnanny' in module:
defines_for_module = []
else:
defines_for_module = defines
extensions.append(
Extension(module, sources = [c_source_file],
define_macros = defines_for_module)
)
else:
print("Compilation failed")
if extensions:
setup_args['ext_modules'] = extensions
add_command_class("build_ext", build_ext)
except Exception:
print('''
ERROR: %s
Extension module compilation failed, looks like Cython cannot run
properly on this system. To work around this, pass the option
"--no-cython-compile". This will install a pure Python version of
Cython without compiling its own sources.
''' % sys.exc_info()[1])
raise
cython_profile = '--cython-profile' in sys.argv cython_profile = '--cython-profile' in sys.argv
if cython_profile: if cython_profile:
......
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