diff --git a/pkgs/development/interpreters/python/cpython/3.12/0001-Fix-build-with-_PY_SHORT_FLOAT_REPR-0.patch b/pkgs/development/interpreters/python/cpython/3.12/0001-Fix-build-with-_PY_SHORT_FLOAT_REPR-0.patch new file mode 100644 index 000000000000..a978413a676a --- /dev/null +++ b/pkgs/development/interpreters/python/cpython/3.12/0001-Fix-build-with-_PY_SHORT_FLOAT_REPR-0.patch @@ -0,0 +1,53 @@ +From 04bfb877c8ccbd431dcae429abb487c1e3390801 Mon Sep 17 00:00:00 2001 +From: Yureka +Date: Sun, 30 Jun 2024 09:37:49 +0200 +Subject: [PATCH] Fix build with _PY_SHORT_FLOAT_REPR == 0 + +--- + Include/internal/pycore_dtoa.h | 10 +++------- + 1 file changed, 3 insertions(+), 7 deletions(-) + +diff --git a/Include/internal/pycore_dtoa.h b/Include/internal/pycore_dtoa.h +index 4d9681d59a..899d413b05 100644 +--- a/Include/internal/pycore_dtoa.h ++++ b/Include/internal/pycore_dtoa.h +@@ -11,8 +11,6 @@ extern "C" { + #include "pycore_pymath.h" // _PY_SHORT_FLOAT_REPR + + +-#if _PY_SHORT_FLOAT_REPR == 1 +- + typedef uint32_t ULong; + + struct +@@ -22,15 +20,15 @@ Bigint { + ULong x[1]; + }; + +-#ifdef Py_USING_MEMORY_DEBUGGER ++#if defined(Py_USING_MEMORY_DEBUGGER) || _PY_SHORT_FLOAT_REPR == 0 + + struct _dtoa_state { + int _not_used; + }; +-#define _dtoa_interp_state_INIT(INTERP) \ ++#define _dtoa_state_INIT(INTERP) \ + {0} + +-#else // !Py_USING_MEMORY_DEBUGGER ++#else // !Py_USING_MEMORY_DEBUGGER && _PY_SHORT_FLOAT_REPR != 0 + + /* The size of the Bigint freelist */ + #define Bigint_Kmax 7 +@@ -65,8 +63,6 @@ PyAPI_FUNC(char *) _Py_dg_dtoa(double d, int mode, int ndigits, + int *decpt, int *sign, char **rve); + PyAPI_FUNC(void) _Py_dg_freedtoa(char *s); + +-#endif // _PY_SHORT_FLOAT_REPR == 1 +- + #ifdef __cplusplus + } + #endif +-- +2.45.1 + diff --git a/pkgs/development/interpreters/python/cpython/3.13/0001-Fix-build-with-_PY_SHORT_FLOAT_REPR-0.patch b/pkgs/development/interpreters/python/cpython/3.13/0001-Fix-build-with-_PY_SHORT_FLOAT_REPR-0.patch new file mode 100644 index 000000000000..1c9f8b1c4335 --- /dev/null +++ b/pkgs/development/interpreters/python/cpython/3.13/0001-Fix-build-with-_PY_SHORT_FLOAT_REPR-0.patch @@ -0,0 +1,53 @@ +From 94d8a9efe6ec86a6e5b4806dbfb82ac926286456 Mon Sep 17 00:00:00 2001 +From: Yureka +Date: Sun, 30 Jun 2024 09:45:58 +0200 +Subject: [PATCH] Fix build with _PY_SHORT_FLOAT_REPR == 0 + +--- + Include/internal/pycore_dtoa.h | 10 +++------- + 1 file changed, 3 insertions(+), 7 deletions(-) + +diff --git a/Include/internal/pycore_dtoa.h b/Include/internal/pycore_dtoa.h +index c5cfdf4ce8..e4222c5267 100644 +--- a/Include/internal/pycore_dtoa.h ++++ b/Include/internal/pycore_dtoa.h +@@ -11,8 +11,6 @@ extern "C" { + #include "pycore_pymath.h" // _PY_SHORT_FLOAT_REPR + + +-#if _PY_SHORT_FLOAT_REPR == 1 +- + typedef uint32_t ULong; + + struct +@@ -22,15 +20,15 @@ Bigint { + ULong x[1]; + }; + +-#ifdef Py_USING_MEMORY_DEBUGGER ++#if defined(Py_USING_MEMORY_DEBUGGER) || _PY_SHORT_FLOAT_REPR == 0 + + struct _dtoa_state { + int _not_used; + }; +-#define _dtoa_interp_state_INIT(INTERP) \ ++#define _dtoa_state_INIT(INTERP) \ + {0} + +-#else // !Py_USING_MEMORY_DEBUGGER ++#else // !Py_USING_MEMORY_DEBUGGER && _PY_SHORT_FLOAT_REPR != 0 + + /* The size of the Bigint freelist */ + #define Bigint_Kmax 7 +@@ -66,8 +64,6 @@ extern char* _Py_dg_dtoa(double d, int mode, int ndigits, + int *decpt, int *sign, char **rve); + extern void _Py_dg_freedtoa(char *s); + +-#endif // _PY_SHORT_FLOAT_REPR == 1 +- + + extern PyStatus _PyDtoa_Init(PyInterpreterState *interp); + extern void _PyDtoa_Fini(PyInterpreterState *interp); +-- +2.45.1 + diff --git a/pkgs/development/interpreters/python/cpython/default.nix b/pkgs/development/interpreters/python/cpython/default.nix index 0f989419b128..5a1172786147 100644 --- a/pkgs/development/interpreters/python/cpython/default.nix +++ b/pkgs/development/interpreters/python/cpython/default.nix @@ -367,7 +367,18 @@ in with passthru; stdenv.mkDerivation (finalAttrs: { }; in [ "${mingw-patch}/*.patch" - ]); + ]) ++ optionals (pythonAtLeast "3.12" && (stdenv.hostPlatform != stdenv.buildPlatform) && ( + stdenv.hostPlatform.isAarch32 || stdenv.hostPlatform.isAarch64 || stdenv.hostPlatform.isRiscV + )) [ + # backport fix for various platforms; armv7l, riscv64 + # https://github.com/python/cpython/pull/121178 + ( + if (pythonAtLeast "3.13") then + ./3.13/0001-Fix-build-with-_PY_SHORT_FLOAT_REPR-0.patch + else + ./3.12/0001-Fix-build-with-_PY_SHORT_FLOAT_REPR-0.patch + ) + ]; postPatch = optionalString (!stdenv.hostPlatform.isWindows) '' substituteInPlace Lib/subprocess.py \