#ifdef TEST_INTERNAL_C_API
// gh-135906: Check for compiler warnings in the internal C API.
- // - Cython uses pycore_frame.h.
+ // - Cython uses pycore_critical_section.h, pycore_frame.h and
+ // pycore_template.h.
// - greenlet uses pycore_frame.h, pycore_interpframe_structs.h and
// pycore_interpframe.h.
+# include "internal/pycore_critical_section.h"
# include "internal/pycore_frame.h"
# include "internal/pycore_gc.h"
# include "internal/pycore_interp.h"
# include "internal/pycore_interpframe_structs.h"
# include "internal/pycore_object.h"
# include "internal/pycore_pystate.h"
+# include "internal/pycore_template.h"
#endif
#ifndef MODULE_NAME
import shlex
import shutil
import subprocess
+import sys
import unittest
from test import support
class BaseTests:
TEST_INTERNAL_C_API = False
- def test_build(self):
- self.check_build('_testcppext')
-
def check_build(self, extension_name, std=None, limited=False):
venv_dir = 'env'
with support.setup_venv_with_pip_setuptools(venv_dir) as python_exe:
class TestPublicCAPI(BaseTests, unittest.TestCase):
+ def test_build(self):
+ self.check_build('_testcppext')
+
@support.requires_gil_enabled('incompatible with Free Threading')
def test_build_limited_cpp03(self):
self.check_build('_test_limited_cpp03ext', std='c++03', limited=True)
class TestInteralCAPI(BaseTests, unittest.TestCase):
TEST_INTERNAL_C_API = True
+ def test_build(self):
+ kwargs = {}
+ if sys.platform == 'darwin':
+ # Old Apple clang++ default C++ std is gnu++98
+ kwargs['std'] = 'c++11'
+ self.check_build('_testcppext_internal', **kwargs)
+
if __name__ == "__main__":
unittest.main()
#ifdef TEST_INTERNAL_C_API
// gh-135906: Check for compiler warnings in the internal C API
+ // - Cython uses pycore_critical_section.h, pycore_frame.h and
+ // pycore_template.h.
+ // - greenlet uses pycore_frame.h, pycore_interpframe_structs.h and
+ // pycore_interpframe.h.
# include "internal/pycore_frame.h"
- // mimalloc emits many compiler warnings when Python is built in debug
- // mode (when MI_DEBUG is not zero).
- // mimalloc emits compiler warnings when Python is built on Windows
- // and macOS.
-# if !defined(Py_DEBUG) && !defined(MS_WINDOWS) && !defined(__APPLE__)
+# include "internal/pycore_interpframe_structs.h"
+# include "internal/pycore_template.h"
+
+ // mimalloc emits compiler warnings on Windows.
+# if !defined(MS_WINDOWS)
# include "internal/pycore_backoff.h"
# include "internal/pycore_cell.h"
+# include "internal/pycore_critical_section.h"
+# include "internal/pycore_interpframe.h"
# endif
#endif
else:
cppflags.append(f'-std={std}')
- if limited or (std != 'c++03'):
+ if limited or (std != 'c++03') and not internal:
# See CPPFLAGS_PEDANTIC docstring
cppflags.extend(CPPFLAGS_PEDANTIC)