| 
									
										
										
										
											2022-05-13 00:20:13 +02:00
										 |  |  | # gh-91321: Build a basic C++ test extension to check that the Python C API is | 
					
						
							|  |  |  | # compatible with C++ and does not emit C++ compiler warnings. | 
					
						
							|  |  |  | import sys | 
					
						
							|  |  |  | from test import support | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from setuptools import setup, Extension | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | MS_WINDOWS = (sys.platform == 'win32') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | SOURCE = support.findfile('_testcppext.cpp') | 
					
						
							|  |  |  | if not MS_WINDOWS: | 
					
						
							|  |  |  |     # C++ compiler flags for GCC and clang | 
					
						
							|  |  |  |     CPPFLAGS = [ | 
					
						
							|  |  |  |         # gh-91321: The purpose of _testcppext extension is to check that building | 
					
						
							|  |  |  |         # a C++ extension using the Python C API does not emit C++ compiler | 
					
						
							|  |  |  |         # warnings | 
					
						
							|  |  |  |         '-Werror', | 
					
						
							|  |  |  |     ] | 
					
						
							|  |  |  | else: | 
					
						
							|  |  |  |     # Don't pass any compiler flag to MSVC | 
					
						
							|  |  |  |     CPPFLAGS = [] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def main(): | 
					
						
							| 
									
										
										
										
											2022-06-14 11:43:08 +02:00
										 |  |  |     cppflags = list(CPPFLAGS) | 
					
						
							|  |  |  |     if '-std=c++03' in sys.argv: | 
					
						
							|  |  |  |         sys.argv.remove('-std=c++03') | 
					
						
							|  |  |  |         std = 'c++03' | 
					
						
							|  |  |  |         name = '_testcpp03ext' | 
					
						
							|  |  |  |     else: | 
					
						
							|  |  |  |         # Python currently targets C++11 | 
					
						
							|  |  |  |         std = 'c++11' | 
					
						
							|  |  |  |         name = '_testcpp11ext' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     cppflags = [*CPPFLAGS, f'-std={std}'] | 
					
						
							| 
									
										
										
										
											2022-06-16 14:39:00 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-05-13 00:20:13 +02:00
										 |  |  |     cpp_ext = Extension( | 
					
						
							| 
									
										
										
										
											2022-06-14 11:43:08 +02:00
										 |  |  |         name, | 
					
						
							| 
									
										
										
										
											2022-05-13 00:20:13 +02:00
										 |  |  |         sources=[SOURCE], | 
					
						
							|  |  |  |         language='c++', | 
					
						
							| 
									
										
										
										
											2022-06-14 11:43:08 +02:00
										 |  |  |         extra_compile_args=cppflags) | 
					
						
							| 
									
										
										
										
											2022-07-12 17:06:05 +02:00
										 |  |  |     setup(name='internal' + name, version='0.0', ext_modules=[cpp_ext]) | 
					
						
							| 
									
										
										
										
											2022-05-13 00:20:13 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if __name__ == "__main__": | 
					
						
							|  |  |  |     main() |