| #ifndef _Py_PATCHLEVEL_H |
| #define _Py_PATCHLEVEL_H |
| /* Python version identification scheme. |
| |
| When the major or minor version changes, the VERSION variable in |
| configure.ac must also be changed. |
| |
| There is also (independent) API version information in modsupport.h. |
| |
| This header should self-contained; PC/python_ver_rc.h includes it |
| without the rest of Python.h. |
| */ |
| |
| /* Values for PY_RELEASE_LEVEL */ |
| #define PY_RELEASE_LEVEL_ALPHA 0xA |
| #define PY_RELEASE_LEVEL_BETA 0xB |
| #define PY_RELEASE_LEVEL_GAMMA 0xC /* For release candidates */ |
| #define PY_RELEASE_LEVEL_FINAL 0xF /* Serial should be 0 here */ |
| /* Higher for patch releases */ |
| |
| /* Version parsed out into numeric values */ |
| /*--start constants--*/ |
| #define PY_MAJOR_VERSION 3 |
| #define PY_MINOR_VERSION 15 |
| #define PY_MICRO_VERSION 0 |
| #define PY_RELEASE_LEVEL PY_RELEASE_LEVEL_ALPHA |
| #define PY_RELEASE_SERIAL 7 |
| |
| /* Version as a string */ |
| #define PY_VERSION "3.15.0a7+" |
| /*--end constants--*/ |
| |
| |
| #define _Py_PACK_FULL_VERSION(X, Y, Z, LEVEL, SERIAL) ( \ |
| (((X) & 0xff) << 24) | \ |
| (((Y) & 0xff) << 16) | \ |
| (((Z) & 0xff) << 8) | \ |
| (((LEVEL) & 0xf) << 4) | \ |
| (((SERIAL) & 0xf) << 0)) |
| |
| /* Version as a single 4-byte hex number, e.g. 0x010502B2 == 1.5.2b2. |
| Use this for numeric comparisons, e.g. #if PY_VERSION_HEX >= ... */ |
| #define PY_VERSION_HEX _Py_PACK_FULL_VERSION( \ |
| PY_MAJOR_VERSION, \ |
| PY_MINOR_VERSION, \ |
| PY_MICRO_VERSION, \ |
| PY_RELEASE_LEVEL, \ |
| PY_RELEASE_SERIAL) |
| |
| // Public Py_PACK_VERSION is declared in pymacro.h; it needs <inttypes.h>. |
| |
| |
| /* The API and ABI versions are left for backwards compatibility. |
| They've not been updated since 2006 and 2010, respectively. |
| API/ABI versioning is now tied to the CPython version. |
| The *_VERSION and *_STRING symbols should define the same value; as |
| number and string literal respectively. Make sure the definitions match. |
| */ |
| #define PYTHON_API_VERSION 1013 |
| #define PYTHON_API_STRING "1013" |
| #define PYTHON_ABI_VERSION 3 |
| #define PYTHON_ABI_STRING "3" |
| |
| |
| /* Stable ABI for free-threaded builds (introduced in PEP 803) |
| is enabled by one of: |
| - Py_TARGET_ABI3T, or |
| - Py_LIMITED_API and Py_GIL_DISABLED. |
| "Output" macros to be used internally: |
| - Py_LIMITED_API (defines the subset of API we expose) |
| - _Py_OPAQUE_PYOBJECT (additionally hides what's ABI-incompatible between |
| free-threaded & GIL) |
| (Don't use Py_TARGET_ABI3T directly: it's currently only used to set these |
| 2 macros. It's also available for users' convenience.) |
| */ |
| #if defined(Py_LIMITED_API) && defined(Py_GIL_DISABLED) \ |
| && !defined(Py_TARGET_ABI3T) |
| # define Py_TARGET_ABI3T Py_LIMITED_API |
| #endif |
| #if defined(Py_TARGET_ABI3T) |
| # define _Py_OPAQUE_PYOBJECT |
| # if !defined(Py_LIMITED_API) |
| # define Py_LIMITED_API Py_TARGET_ABI3T |
| # elif Py_LIMITED_API > Py_TARGET_ABI3T |
| // if both are defined, use the *lower* version, |
| // i.e. maximum compatibility |
| # undef Py_LIMITED_API |
| # define Py_LIMITED_API Py_TARGET_ABI3T |
| # endif |
| #endif |
| |
| #endif //_Py_PATCHLEVEL_H |