summaryrefslogtreecommitdiffstats
path: root/Lib/test/setup_testcppext.py
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@python.org>2022-05-12 22:20:13 (GMT)
committerGitHub <noreply@github.com>2022-05-12 22:20:13 (GMT)
commit4e283777229ade11012b590624bd2cf04c42436d (patch)
tree4775693153b585eef6635babcc658062994f4d47 /Lib/test/setup_testcppext.py
parent8cf2906828b4ea281ea5381bf59b9052bae99f53 (diff)
downloadcpython-4e283777229ade11012b590624bd2cf04c42436d.zip
cpython-4e283777229ade11012b590624bd2cf04c42436d.tar.gz
cpython-4e283777229ade11012b590624bd2cf04c42436d.tar.bz2
gh-92584: test_cppext uses setuptools (#92639)
Rewrite test_cppext to run in a virtual environment and to build the C++ extension with setuptools rather than distutils.
Diffstat (limited to 'Lib/test/setup_testcppext.py')
-rw-r--r--Lib/test/setup_testcppext.py42
1 files changed, 42 insertions, 0 deletions
diff --git a/Lib/test/setup_testcppext.py b/Lib/test/setup_testcppext.py
new file mode 100644
index 0000000..780cb7b
--- /dev/null
+++ b/Lib/test/setup_testcppext.py
@@ -0,0 +1,42 @@
+# 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 = [
+ # Python currently targets C++11
+ '-std=c++11',
+ # 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',
+ # Warn on old-style cast (C cast) like: (PyObject*)op
+ '-Wold-style-cast',
+ # Warn when using NULL rather than _Py_NULL in static inline functions
+ '-Wzero-as-null-pointer-constant',
+ ]
+else:
+ # Don't pass any compiler flag to MSVC
+ CPPFLAGS = []
+
+
+def main():
+ cpp_ext = Extension(
+ '_testcppext',
+ sources=[SOURCE],
+ language='c++',
+ extra_compile_args=CPPFLAGS)
+ setup(name="_testcppext", ext_modules=[cpp_ext])
+
+
+if __name__ == "__main__":
+ main()