| 
					
				 | 
			
			
				@@ -70,7 +70,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 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -146,10 +148,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, 
			 |