Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Tests C11, C++17 and C++20#167

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Merged
vstinner merged 3 commits intopython:mainfromvstinner:c11
Feb 12, 2026
Merged
Show file tree
Hide file tree
Changes fromall commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
57 changes: 34 additions & 23 deletionstests/setup.py
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -40,11 +40,7 @@
'-Wformat-nonliteral',
'-Wformat-security',
))
CFLAGS = COMMON_FLAGS + [
# Use C99 for pythoncapi_compat.c which initializes PyModuleDef with a
# mixture of designated and non-designated initializers
'-std=c99',
]
CFLAGS = COMMON_FLAGS
else:
# C compiler flags for MSVC
COMMON_FLAGS.extend((
Expand All@@ -54,6 +50,27 @@
CFLAGS = list(COMMON_FLAGS)
CXXFLAGS = list(COMMON_FLAGS)

if not MSVC:
C_VERSIONS = ('c99', 'c11')
else:
# MSVC doesn't support /std:c99 flag
C_VERSIONS = ('c11',)

if not MSVC:
CXX_VERSIONS = [
('test_pythoncapi_compat_cpp03ext', ['-std=c++03']),
('test_pythoncapi_compat_cpp11ext', ['-std=c++11']),
('test_pythoncapi_compat_cpp14ext', ['-std=c++14']),
('test_pythoncapi_compat_cpp17ext', ['-std=c++17']),
('test_pythoncapi_compat_cpp20ext', ['-std=c++20']),
]
else:
# MSVC doesn't support /std:c++11
CXX_VERSIONS = [
('test_pythoncapi_compat_cppext', None),
('test_pythoncapi_compat_cpp14ext', ['/std:c++14', '/Zc:__cplusplus']),
]


def main():
# gh-105776: When "gcc -std=11" is used as the C++ compiler, -std=c11
Expand All@@ -75,27 +92,21 @@ def main():
os.environ['CC'] = cmd

# C extension
c_ext = Extension(
'test_pythoncapi_compat_cext',
sources=['test_pythoncapi_compat_cext.c'],
extra_compile_args=CFLAGS)
extensions = [c_ext]
extensions = []
for std in C_VERSIONS:
if not MSVC:
cflags = CFLAGS + ['-std=%s' % std]
else:
cflags = CFLAGS + ['/std:%s' % std]
c_ext = Extension(
'test_pythoncapi_compat_cext_%s' % std,
sources=['test_pythoncapi_compat_cext.c'],
extra_compile_args=cflags)
extensions.append(c_ext)

if TEST_CXX:
# C++ extension

# MSVC has /std flag but doesn't support /std:c++11
if not MSVC:
versions = [
('test_pythoncapi_compat_cpp03ext', ['-std=c++03']),
('test_pythoncapi_compat_cpp11ext', ['-std=c++11']),
]
else:
versions = [
('test_pythoncapi_compat_cppext', None),
('test_pythoncapi_compat_cpp14ext', ['/std:c++14', '/Zc:__cplusplus']),
]
for name, std_flags in versions:
for name, std_flags in CXX_VERSIONS:
flags = list(CXXFLAGS)
if std_flags is not None:
flags.extend(std_flags)
Expand Down
51 changes: 28 additions & 23 deletionstests/test_pythoncapi_compat.py
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -32,19 +32,29 @@
# Windows uses MSVC compiler
MSVC = (os.name == "nt")

TESTS = [
("test_pythoncapi_compat_cext", "C"),
]
# C++ is only supported on Python 3.6 and newer
TEST_CXX = (sys.version_info >= (3, 6))

if not MSVC:
TESTS.extend((
C_TESTS = [
("test_pythoncapi_compat_cext_c99", "C99"),
("test_pythoncapi_compat_cext_c11", "C11"),
]
CXX_TESTS = [
("test_pythoncapi_compat_cpp03ext", "C++03"),
("test_pythoncapi_compat_cpp11ext", "C++11"),
))
("test_pythoncapi_compat_cpp14ext", "C++14"),
("test_pythoncapi_compat_cpp17ext", "C++17"),
("test_pythoncapi_compat_cpp20ext", "C++20"),
]
else:
TESTS.extend((
C_TESTS = [
("test_pythoncapi_compat_cext_c11", "C11"),
]
CXX_TESTS = [
("test_pythoncapi_compat_cppext", "C++"),
("test_pythoncapi_compat_cpp14ext", "C++14"),
))
]


VERBOSE = False
Expand DownExpand Up@@ -84,9 +94,12 @@ def import_tests(module_name):

if not pythonpath:
raise Exception("Failed to find the build directory")
sys.path.append(pythonpath)

return __import__(module_name)
old_sys_path = list(sys.path)
try:
sys.path.append(pythonpath)
return __import__(module_name)
finally:
sys.path[:] = old_sys_path


def _run_tests(tests, verbose):
Expand DownExpand Up@@ -155,18 +168,7 @@ def run_tests(module_name, lang):
title = "Test %s (%s)" % (module_name, lang)
display_title(title)

try:
testmod = import_tests(module_name)
except ImportError:
# The C extension must always be available
if lang == "C":
raise

if VERBOSE:
print("%s: skip %s, missing %s extension"
% (python_version(), lang, module_name))
print()
return
testmod = import_tests(module_name)

if VERBOSE:
empty_line = False
Expand DownExpand Up@@ -226,7 +228,10 @@ def main():

build_ext()

for module_name, lang in TESTS:
tests = list(C_TESTS)
if TEST_CXX:
tests += CXX_TESTS
for module_name, lang in tests:
run_tests(module_name, lang)


Expand Down
14 changes: 12 additions & 2 deletionstests/test_pythoncapi_compat_cext.c
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -16,14 +16,24 @@
# define PYTHON3 1
#endif

#if defined(__cplusplus) && __cplusplus >= 201402
#if defined(__cplusplus) && __cplusplus >= 202002L
# define MODULE_NAME test_pythoncapi_compat_cpp20ext
#elif defined(__cplusplus) && __cplusplus >= 201703L
# define MODULE_NAME test_pythoncapi_compat_cpp17ext
#elif defined(__cplusplus) && __cplusplus >= 201402L
# define MODULE_NAME test_pythoncapi_compat_cpp14ext
#elif defined(__cplusplus) && __cplusplus >=201103
#elif defined(__cplusplus) && __cplusplus >=201103L
# define MODULE_NAME test_pythoncapi_compat_cpp11ext
#elif defined(__cplusplus) && !defined(_MSC_VER)
# define MODULE_NAME test_pythoncapi_compat_cpp03ext
#elif defined(__cplusplus)
# define MODULE_NAME test_pythoncapi_compat_cppext
#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 202311L
# define MODULE_NAME test_pythoncapi_compat_cext_c23
#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L
# define MODULE_NAME test_pythoncapi_compat_cext_c11
#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
# define MODULE_NAME test_pythoncapi_compat_cext_c99
#else
# define MODULE_NAME test_pythoncapi_compat_cext
#endif
Expand Down
Loading

[8]ページ先頭

©2009-2026 Movatter.jp