diff options
author | kpayson64 <kpayson@google.com> | 2016-07-25 18:41:25 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-07-25 18:41:25 -0700 |
commit | 8a1247a42c355332e0fc0233c90e1a95009d87a1 (patch) | |
tree | 0ec4a3ba0046c1cc1c8a3fd354ee69580f952d56 /setup.py | |
parent | 6914abab5f2d7fca0fc5f90915e539fd8a913a31 (diff) | |
parent | fd9cc106f3e06722c2f101b40b7ac14f67836c74 (diff) |
Merge pull request #7497 from soltanmm/be-nicer
Be more intelligent about Cython in grpcio
Diffstat (limited to 'setup.py')
-rw-r--r-- | setup.py | 65 |
1 files changed, 23 insertions, 42 deletions
@@ -168,55 +168,27 @@ if 'darwin' in sys.platform and PY3: r'macosx-10.7-\1', util.get_platform()) - -def cython_extensions(): - module_names = list(CYTHON_EXTENSION_MODULE_NAMES) - extra_sources = list(CYTHON_HELPER_C_FILES) + list(CORE_C_FILES) - include_dirs = list(EXTENSION_INCLUDE_DIRECTORIES) - libraries = list(EXTENSION_LIBRARIES) - define_macros = list(DEFINE_MACROS) - build_with_cython = bool(BUILD_WITH_CYTHON) - # Set compiler directives linetrace argument only if we care about tracing; - # this is due to Cython having different behavior between linetrace being - # False and linetrace being unset. See issue #5689. - cython_compiler_directives = {} - if ENABLE_CYTHON_TRACING: - define_macros = define_macros + [('CYTHON_TRACE_NOGIL', 1)] - cython_compiler_directives['linetrace'] = True - pyx_module_files = [os.path.join(PYTHON_STEM, - name.replace('.', '/') + '.pyx') - for name in module_names] - c_module_files = [os.path.join(PYTHON_STEM, - name.replace('.', '/') + '.c') - for name in module_names] - if not build_with_cython: - for module_file in c_module_files: - if not os.path.isfile(module_file): - sys.stderr.write('Cython-generated files are missing; ' - 'forcing Cython build...\n') - build_with_cython = True - break - module_files = pyx_module_files if build_with_cython else c_module_files +def cython_extensions_and_necessity(): + cython_module_files = [os.path.join(PYTHON_STEM, + name.replace('.', '/') + '.pyx') + for name in CYTHON_EXTENSION_MODULE_NAMES] extensions = [ _extension.Extension( name=module_name, - sources=[module_file] + extra_sources, - include_dirs=include_dirs, libraries=libraries, - define_macros=define_macros, + sources=[module_file] + list(CYTHON_HELPER_C_FILES) + list(CORE_C_FILES), + include_dirs=list(EXTENSION_INCLUDE_DIRECTORIES), + libraries=list(EXTENSION_LIBRARIES), + define_macros=list(DEFINE_MACROS), extra_compile_args=list(CFLAGS), extra_link_args=list(LDFLAGS), - ) for (module_name, module_file) in zip(module_names, module_files) + ) for (module_name, module_file) in zip(list(CYTHON_EXTENSION_MODULE_NAMES), cython_module_files) ] - if build_with_cython: - import Cython.Build - return Cython.Build.cythonize( - extensions, - include_path=include_dirs, - compiler_directives=cython_compiler_directives) - else: - return extensions + need_cython = BUILD_WITH_CYTHON + if not BUILD_WITH_CYTHON: + need_cython = need_cython or not commands.check_and_update_cythonization(extensions) + return commands.try_cythonize(extensions, linetracing=ENABLE_CYTHON_TRACING, mandatory=BUILD_WITH_CYTHON), need_cython -CYTHON_EXTENSION_MODULES = cython_extensions() +CYTHON_EXTENSION_MODULES, need_cython = cython_extensions_and_necessity() PACKAGE_DIRECTORIES = { '': PYTHON_STEM, @@ -236,6 +208,15 @@ SETUP_REQUIRES = INSTALL_REQUIRES + ( 'sphinx_rtd_theme>=0.1.8', 'six>=1.10', ) +if BUILD_WITH_CYTHON: + sys.stderr.write( + "You requested a Cython build via GRPC_PYTHON_BUILD_WITH_CYTHON, " + "but do not have Cython installed. We won't stop you from using " + "other commands, but the extension files will fail to build.\n") +elif need_cython: + sys.stderr.write( + 'We could not find Cython. Setup may take 10-20 minutes.\n') + SETUP_REQUIRES += ('cython>=0.23',) COMMAND_CLASS = { 'doc': commands.SphinxDocumentation, |