from _testcapi import get_feature_macros
feature_macros = get_feature_macros()
+
+# Stable ABI is incompatible with Py_TRACE_REFS builds due to PyObject
+# layout differences.
+# See https://github.com/python/cpython/issues/88299#issuecomment-1113366226
+if feature_macros['Py_TRACE_REFS']:
+ raise unittest.SkipTest("incompatible with Py_TRACE_REFS.")
+
ctypes_test = import_module('ctypes')
class TestStableABIAvailability(unittest.TestCase):
"PyModule_AddObjectRef",
"PyModule_AddStringConstant",
"PyModule_AddType",
+ "PyModule_Create2",
"PyModule_ExecDef",
+ "PyModule_FromDefAndSpec2",
"PyModule_GetDef",
"PyModule_GetDict",
"PyModule_GetFilename",
"_Py_TrueStruct",
"_Py_VaBuildValue_SizeT",
)
+if feature_macros['HAVE_FORK']:
+ SYMBOL_NAMES += (
+ 'PyOS_AfterFork',
+ 'PyOS_AfterFork_Child',
+ 'PyOS_AfterFork_Parent',
+ 'PyOS_BeforeFork',
+ )
if feature_macros['MS_WINDOWS']:
SYMBOL_NAMES += (
'PyErr_SetExcFromWindowsErr',
'PyUnicode_DecodeMBCSStateful',
'PyUnicode_EncodeCodePage',
)
-if feature_macros['HAVE_FORK']:
- SYMBOL_NAMES += (
- 'PyOS_AfterFork',
- 'PyOS_AfterFork_Child',
- 'PyOS_AfterFork_Parent',
- 'PyOS_BeforeFork',
- )
-if feature_macros['USE_STACKCHECK']:
- SYMBOL_NAMES += (
- 'PyOS_CheckStack',
- )
if feature_macros['PY_HAVE_THREAD_NATIVE_ID']:
SYMBOL_NAMES += (
'PyThread_get_thread_native_id',
'_Py_NegativeRefcount',
'_Py_RefTotal',
)
+if feature_macros['Py_TRACE_REFS']:
+ SYMBOL_NAMES += (
+ )
+if feature_macros['USE_STACKCHECK']:
+ SYMBOL_NAMES += (
+ 'PyOS_CheckStack',
+ )
EXPECTED_FEATURE_MACROS = set(['HAVE_FORK',
'MS_WINDOWS',
'PY_HAVE_THREAD_NATIVE_ID',
'Py_REF_DEBUG',
+ 'Py_TRACE_REFS',
'USE_STACKCHECK'])
WINDOWS_FEATURE_MACROS = {'HAVE_FORK': False,
'MS_WINDOWS': True,
'PY_HAVE_THREAD_NATIVE_ID': True,
'Py_REF_DEBUG': 'maybe',
+ 'Py_TRACE_REFS': 'maybe',
'USE_STACKCHECK': 'maybe'}
Py_DECREF(result); return NULL;
}
+#ifdef Py_TRACE_REFS
+ res = PyDict_SetItemString(result, "Py_TRACE_REFS", Py_True);
+#else
+ res = PyDict_SetItemString(result, "Py_TRACE_REFS", Py_False);
+#endif
+if (res) {
+ Py_DECREF(result); return NULL;
+}
+
#ifdef USE_STACKCHECK
res = PyDict_SetItemString(result, "USE_STACKCHECK", Py_True);
#else
from _testcapi import get_feature_macros
feature_macros = get_feature_macros()
+
+ # Stable ABI is incompatible with Py_TRACE_REFS builds due to PyObject
+ # layout differences.
+ # See https://github.com/python/cpython/issues/88299#issuecomment-1113366226
+ if feature_macros['Py_TRACE_REFS']:
+ raise unittest.SkipTest("incompatible with Py_TRACE_REFS.")
+
ctypes_test = import_module('ctypes')
class TestStableABIAvailability(unittest.TestCase):
{'function', 'data'},
include_abi_only=True,
)
- optional_items = {}
+ feature_macros = list(manifest.select({'feature_macro'}))
+ optional_items = {m.name: [] for m in feature_macros}
for item in items:
- if item.name in (
- # Some symbols aren't exported on all platforms.
- # This is a bug: https://bugs.python.org/issue44133
- 'PyModule_Create2', 'PyModule_FromDefAndSpec2',
- ):
- continue
if item.ifdef:
- optional_items.setdefault(item.ifdef, []).append(item.name)
+ optional_items[item.ifdef].append(item.name)
else:
write(f' "{item.name}",')
write(")")
write(f" {name!r},")
write(" )")
write("")
- feature_macros = list(manifest.select({'feature_macro'}))
feature_names = sorted(m.name for m in feature_macros)
write(f"EXPECTED_FEATURE_MACROS = set({pprint.pformat(feature_names)})")