| 
									
										
										
										
											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. | 
					
						
							| 
									
										
										
										
											2023-04-12 23:17:36 -05:00
										 |  |  | import os | 
					
						
							| 
									
										
										
										
											2023-08-23 04:52:56 +02:00
										 |  |  | import shlex | 
					
						
							| 
									
										
										
										
											2022-05-13 00:20:13 +02:00
										 |  |  | import sys | 
					
						
							| 
									
										
										
										
											2023-08-23 04:52:56 +02:00
										 |  |  | import sysconfig | 
					
						
							| 
									
										
										
										
											2023-10-06 02:37:28 +02:00
										 |  |  | from test import support | 
					
						
							| 
									
										
										
										
											2022-05-13 00:20:13 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | from setuptools import setup, Extension | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-08-22 20:30:18 +02:00
										 |  |  | SOURCE = 'extension.cpp' | 
					
						
							| 
									
										
										
										
											2023-10-06 02:37:28 +02:00
										 |  |  | if not support.MS_WINDOWS: | 
					
						
							| 
									
										
										
										
											2022-05-13 00:20:13 +02:00
										 |  |  |     # 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) | 
					
						
							| 
									
										
										
										
											2023-04-12 23:17:36 -05:00
										 |  |  |     std = os.environ["CPYTHON_TEST_CPP_STD"] | 
					
						
							|  |  |  |     name = os.environ["CPYTHON_TEST_EXT_NAME"] | 
					
						
							| 
									
										
										
										
											2022-06-14 11:43:08 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     cppflags = [*CPPFLAGS, f'-std={std}'] | 
					
						
							| 
									
										
										
										
											2022-06-16 14:39:00 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-08-23 04:52:56 +02:00
										 |  |  |     # gh-105776: When "gcc -std=11" is used as the C++ compiler, -std=c11 | 
					
						
							|  |  |  |     # option emits a C++ compiler warning. Remove "-std11" option from the | 
					
						
							|  |  |  |     # CC command. | 
					
						
							|  |  |  |     cmd = (sysconfig.get_config_var('CC') or '') | 
					
						
							|  |  |  |     if cmd is not None: | 
					
						
							|  |  |  |         cmd = shlex.split(cmd) | 
					
						
							|  |  |  |         cmd = [arg for arg in cmd if not arg.startswith('-std=')] | 
					
						
							|  |  |  |         cmd = shlex.join(cmd) | 
					
						
							|  |  |  |         # CC env var overrides sysconfig CC variable in setuptools | 
					
						
							|  |  |  |         os.environ['CC'] = cmd | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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() |