mirror of
https://github.com/python/cpython.git
synced 2025-12-08 06:10:17 +00:00
gh-137210: Add a struct, slot & function for checking an extension's ABI (GH-137212)
Co-authored-by: Steve Dower <steve.dower@microsoft.com>
This commit is contained in:
parent
c1a9c23195
commit
0c74fc8af0
24 changed files with 654 additions and 8 deletions
|
|
@ -134,6 +134,72 @@ PyAPI_FUNC(PyObject *) PyModule_FromDefAndSpec2(PyModuleDef *def,
|
|||
|
||||
#endif /* New in 3.5 */
|
||||
|
||||
/* ABI info & checking (new in 3.15) */
|
||||
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030f0000
|
||||
typedef struct PyABIInfo {
|
||||
uint8_t abiinfo_major_version;
|
||||
uint8_t abiinfo_minor_version;
|
||||
uint16_t flags;
|
||||
uint32_t build_version;
|
||||
uint32_t abi_version;
|
||||
} PyABIInfo;
|
||||
#define PyABIInfo_STABLE 0x0001
|
||||
#define PyABIInfo_GIL 0x0002
|
||||
#define PyABIInfo_FREETHREADED 0x0004
|
||||
#define PyABIInfo_INTERNAL 0x0008
|
||||
|
||||
#define PyABIInfo_FREETHREADING_AGNOSTIC (PyABIInfo_GIL|PyABIInfo_FREETHREADED)
|
||||
|
||||
PyAPI_FUNC(int) PyABIInfo_Check(PyABIInfo *info, const char *module_name);
|
||||
|
||||
// Define the defaults
|
||||
#ifdef Py_LIMITED_API
|
||||
#define _PyABIInfo_DEFAULT_FLAG_STABLE PyABIInfo_STABLE
|
||||
#if Py_LIMITED_API == 3
|
||||
#define PyABIInfo_DEFAULT_ABI_VERSION _Py_PACK_VERSION(3, 2)
|
||||
#else
|
||||
#define PyABIInfo_DEFAULT_ABI_VERSION Py_LIMITED_API
|
||||
#endif
|
||||
#else
|
||||
#define _PyABIInfo_DEFAULT_FLAG_STABLE 0
|
||||
#define PyABIInfo_DEFAULT_ABI_VERSION PY_VERSION_HEX
|
||||
#endif
|
||||
#if defined(Py_LIMITED_API) && defined(_Py_OPAQUE_PYOBJECT)
|
||||
#define _PyABIInfo_DEFAULT_FLAG_FT PyABIInfo_FREETHREADING_AGNOSTIC
|
||||
#elif defined(Py_GIL_DISABLED)
|
||||
#define _PyABIInfo_DEFAULT_FLAG_FT PyABIInfo_FREETHREADED
|
||||
#else
|
||||
#define _PyABIInfo_DEFAULT_FLAG_FT PyABIInfo_GIL
|
||||
#endif
|
||||
#if defined(Py_BUILD_CORE)
|
||||
#define _PyABIInfo_DEFAULT_FLAG_INTERNAL PyABIInfo_INTERNAL
|
||||
#else
|
||||
#define _PyABIInfo_DEFAULT_FLAG_INTERNAL 0
|
||||
#endif
|
||||
|
||||
#define PyABIInfo_DEFAULT_FLAGS ( \
|
||||
_PyABIInfo_DEFAULT_FLAG_STABLE \
|
||||
| _PyABIInfo_DEFAULT_FLAG_FT \
|
||||
| _PyABIInfo_DEFAULT_FLAG_INTERNAL \
|
||||
) \
|
||||
/////////////////////////////////////////////////////////
|
||||
|
||||
#define _PyABIInfo_DEFAULT() { \
|
||||
1, 0, \
|
||||
PyABIInfo_DEFAULT_FLAGS, \
|
||||
PY_VERSION_HEX, \
|
||||
PyABIInfo_DEFAULT_ABI_VERSION } \
|
||||
/////////////////////////////////////////////////////////
|
||||
|
||||
#define PyABIInfo_VAR(NAME) \
|
||||
static PyABIInfo NAME = _PyABIInfo_DEFAULT;
|
||||
|
||||
#undef _PyABIInfo_DEFAULT_STABLE
|
||||
#undef _PyABIInfo_DEFAULT_FT
|
||||
#undef _PyABIInfo_DEFAULT_INTERNAL
|
||||
|
||||
#endif /* ABI info (new in 3.15) */
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
# define Py_CPYTHON_MODSUPPORT_H
|
||||
# include "cpython/modsupport.h"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue