From 0bf16aa9c861888adf58ba4991354c6ad198bccf Mon Sep 17 00:00:00 2001 From: wangzengliang Date: Fri, 21 Jul 2023 16:06:09 +0800 Subject: [PATCH] Fix Python 3.10(PEP-620) incompatibility --- ...-Python-3.10-PEP-620-incompatibility.patch | 140 ++++++++++++++++++ ceph.spec | 6 +- 2 files changed, 145 insertions(+), 1 deletion(-) create mode 100644 0018-Fix-Python-3.10-PEP-620-incompatibility.patch diff --git a/0018-Fix-Python-3.10-PEP-620-incompatibility.patch b/0018-Fix-Python-3.10-PEP-620-incompatibility.patch new file mode 100644 index 0000000..81ee547 --- /dev/null +++ b/0018-Fix-Python-3.10-PEP-620-incompatibility.patch @@ -0,0 +1,140 @@ +From a89999fee6f9bf55919b4cc34861922ccf1100e1 Mon Sep 17 00:00:00 2001 +From: wangzengliang +Date: Fri, 21 Jul 2023 16:00:41 +0800 +Subject: [PATCH] Fix Python 3.10(PEP-620) incompatibility +copyed-by: https://github.com/boostorg/python/pull/328 +From: Stefan Seefeld +--- + src/boost/boost/python/detail/wrap_python.hpp | 5 +++++ + src/boost/boost/python/object/make_instance.hpp | 2 +- + src/boost/libs/python/src/object/class.cpp | 15 +++++---------- + src/boost/libs/python/src/object/enum.cpp | 2 +- + src/boost/libs/python/src/object/function.cpp | 2 +- + src/boost/libs/python/src/object/life_support.cpp | 2 +- + 6 files changed, 14 insertions(+), 14 deletions(-) + +diff --git a/src/boost/boost/python/detail/wrap_python.hpp b/src/boost/boost/python/detail/wrap_python.hpp +index 13679dbb8..c3eba3ac6 100644 +--- a/src/boost/boost/python/detail/wrap_python.hpp ++++ b/src/boost/boost/python/detail/wrap_python.hpp +@@ -230,6 +230,11 @@ typedef int pid_t; + + #endif + ++#if PY_VERSION_HEX < 0x030900A4 ++# define Py_SET_TYPE(obj, type) ((Py_TYPE(obj) = (type)), (void)0) ++# define Py_SET_SIZE(obj, size) ((Py_TYPE(obj) = (size)), (void)0) ++#endif ++ + + #ifdef __MWERKS__ + # pragma warn_possunwant off +diff --git a/src/boost/boost/python/object/make_instance.hpp b/src/boost/boost/python/object/make_instance.hpp +index 31ec08f7c..5eb3aa9d9 100644 +--- a/src/boost/boost/python/object/make_instance.hpp ++++ b/src/boost/boost/python/object/make_instance.hpp +@@ -47,7 +47,7 @@ struct make_instance_impl + + // Note the position of the internally-stored Holder, + // for the sake of destruction +- Py_SIZE(instance) = offsetof(instance_t, storage); ++ Py_SET_SIZE(instance, offsetof(instance_t, storage)); + + // Release ownership of the python object + protect.cancel(); +diff --git a/src/boost/libs/python/src/object/class.cpp b/src/boost/libs/python/src/object/class.cpp +index 9bb9683a3..2d1112298 100644 +--- a/src/boost/libs/python/src/object/class.cpp ++++ b/src/boost/libs/python/src/object/class.cpp +@@ -208,7 +208,7 @@ namespace objects + { + if (static_data_object.tp_dict == 0) + { +- Py_TYPE(&static_data_object) = &PyType_Type; ++ Py_SET_TYPE(&static_data_object, &PyType_Type); + static_data_object.tp_base = &PyProperty_Type; + if (PyType_Ready(&static_data_object)) + return 0; +@@ -316,7 +316,7 @@ namespace objects + { + if (class_metatype_object.tp_dict == 0) + { +- Py_TYPE(&class_metatype_object) = &PyType_Type; ++ Py_SET_TYPE(&class_metatype_object, &PyType_Type); + class_metatype_object.tp_base = &PyType_Type; + if (PyType_Ready(&class_metatype_object)) + return type_handle(); +@@ -374,12 +374,7 @@ namespace objects + // like, so we'll store the total size of the object + // there. A negative number indicates that the extra + // instance memory is not yet allocated to any holders. +-#if PY_VERSION_HEX >= 0x02060000 +- Py_SIZE(result) = +-#else +- result->ob_size = +-#endif +- -(static_cast(offsetof(instance<>,storage) + instance_size)); ++ Py_SET_SIZE(result, -static_cast(offsetof(instance<>,storage) + instance_size)); + } + return (PyObject*)result; + } +@@ -470,7 +465,7 @@ namespace objects + { + if (class_type_object.tp_dict == 0) + { +- Py_TYPE(&class_type_object) = incref(class_metatype().get()); ++ Py_SET_TYPE(&class_type_object, incref(class_metatype().get())); + class_type_object.tp_base = &PyBaseObject_Type; + if (PyType_Ready(&class_type_object)) + return type_handle(); +@@ -739,7 +734,7 @@ void* instance_holder::allocate(PyObject* self_, std::size_t holder_offset, std: + assert(holder_offset >= offsetof(objects::instance<>,storage)); + + // Record the fact that the storage is occupied, noting where it starts +- Py_SIZE(self) = holder_offset; ++ Py_SET_SIZE(self, holder_offset); + return (char*)self + holder_offset; + } + else +diff --git a/src/boost/libs/python/src/object/enum.cpp b/src/boost/libs/python/src/object/enum.cpp +index 10122ad1d..293e70589 100644 +--- a/src/boost/libs/python/src/object/enum.cpp ++++ b/src/boost/libs/python/src/object/enum.cpp +@@ -153,7 +153,7 @@ namespace + { + if (enum_type_object.tp_dict == 0) + { +- Py_TYPE(&enum_type_object) = incref(&PyType_Type); ++ Py_SET_TYPE(&enum_type_object, incref(&PyType_Type)); + #if PY_VERSION_HEX >= 0x03000000 + enum_type_object.tp_base = &PyLong_Type; + #else +diff --git a/src/boost/libs/python/src/object/function.cpp b/src/boost/libs/python/src/object/function.cpp +index 9d4745d10..787679e13 100644 +--- a/src/boost/libs/python/src/object/function.cpp ++++ b/src/boost/libs/python/src/object/function.cpp +@@ -107,7 +107,7 @@ function::function( + PyObject* p = this; + if (Py_TYPE(&function_type) == 0) + { +- Py_TYPE(&function_type) = &PyType_Type; ++ Py_SET_TYPE(&function_type, &PyType_Type); + ::PyType_Ready(&function_type); + } + +diff --git a/src/boost/libs/python/src/object/life_support.cpp b/src/boost/libs/python/src/object/life_support.cpp +index b7e9aa861..281c3bffc 100644 +--- a/src/boost/libs/python/src/object/life_support.cpp ++++ b/src/boost/libs/python/src/object/life_support.cpp +@@ -93,7 +93,7 @@ PyObject* make_nurse_and_patient(PyObject* nurse, PyObject* patient) + + if (Py_TYPE(&life_support_type) == 0) + { +- Py_TYPE(&life_support_type) = &PyType_Type; ++ Py_SET_TYPE(&life_support_type, &PyType_Type); + PyType_Ready(&life_support_type); + } + +-- +2.27.0 + diff --git a/ceph.spec b/ceph.spec index 1b74058..6ff595c 100644 --- a/ceph.spec +++ b/ceph.spec @@ -129,7 +129,7 @@ ################################################################################# Name: ceph Version: 16.2.7 -Release: 20 +Release: 21 %if 0%{?fedora} || 0%{?rhel} || 0%{?openEuler} Epoch: 2 %endif @@ -164,6 +164,7 @@ Patch14: 0014-fix-CVE-2022-3854.patch Patch15: 0015-ceph-volume-add-judgment-for-ceph-volume-lvm-activat.patch Patch16: 0016-fix-mgr-dashboard-frontend-build-depend.patch Patch17: 0017-mgr-dashboard-support-multi-language.patch +Patch18: 0018-Fix-Python-3.10-PEP-620-incompatibility.patch %if 0%{?suse_version} # _insert_obs_source_lines_here ExclusiveArch: x86_64 aarch64 ppc64le s390x @@ -2528,6 +2529,9 @@ exit 0 %config %{_sysconfdir}/prometheus/ceph/ceph_default_alerts.yml %changelog +* Fri Jul 21 2023 wangzengliang - 2:16.2.7-21 +- Fix Python 3.10 incompatibility + * Tue May 30 2023 zhuchao - 2:16.2.7-20 - mgr dashboard support multi-language