@ -64,7 +64,9 @@ LICENSE = '3-clause BSD'
# Environment variable to determine whether or not the Cython extension should
# *use* Cython or use the generated C files. Note that this requires the C files
# to have been generated by building first *with* Cython support.
# to have been generated by building first *with* Cython support. Even if this
# is set to false, if the script detects that the generated `.c` file isn't
# present, then it will still attempt to use Cython.
BUILD_WITH_CYTHON = os . environ . get ( ' GRPC_PYTHON_BUILD_WITH_CYTHON ' , False )
# Environment variable to determine whether or not to enable coverage analysis
@ -129,10 +131,20 @@ def cython_extensions(module_names, extra_sources, include_dirs,
if ENABLE_CYTHON_TRACING :
define_macros = define_macros + [ ( ' CYTHON_TRACE_NOGIL ' , 1 ) ]
cython_compiler_directives [ ' linetrace ' ] = True
file_extension = ' pyx ' if build_with_cython else ' c '
module_files = [ os . path . join ( PYTHON_STEM ,
name . replace ( ' . ' , ' / ' ) + ' . ' + file_extension )
for name in module_names ]
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
extensions = [
_extension . Extension (
name = module_name ,