diff --git a/boost-1.73-python3.10.patch b/boost-1.73-python3.10.patch new file mode 100644 index 0000000..a6106a9 --- /dev/null +++ b/boost-1.73-python3.10.patch @@ -0,0 +1,108 @@ +--- boost_1_73_0/boost/parameter/python.hpp% 2020-11-13 23:37:19.232520985 +0000 ++++ boost_1_73_0/boost/parameter/python.hpp 2020-11-13 23:40:58.808393161 +0000 +@@ -66,7 +66,7 @@ + + if (Py_TYPE(&unspecified) == 0) + { +- Py_TYPE(&unspecified) = &PyType_Type; ++ Py_SET_TYPE(&unspecified, &PyType_Type); + PyType_Ready(&unspecified); + } + +--- boost_1_73_0/libs/python/src/object/class.cpp~ 2020-11-13 23:37:19.236520983 +0000 ++++ boost_1_73_0/libs/python/src/object/class.cpp 2020-11-13 23:40:40.233403979 +0000 +@@ -208,7 +208,7 @@ + { + 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 @@ + { + 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(); +@@ -375,11 +375,11 @@ + // 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) = ++ Py_SET_SIZE(result, + #else +- result->ob_size = ++ result->ob_size = ( + #endif +- -(static_cast(offsetof(instance<>,storage) + instance_size)); ++ -(static_cast(offsetof(instance<>,storage) + instance_size))); + } + return (PyObject*)result; + } +@@ -470,7 +470,7 @@ + { + 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 +739,7 @@ + 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 +--- boost_1_73_0/libs/python/src/object/life_support.cpp~ 2020-11-13 23:37:19.240520980 +0000 ++++ boost_1_73_0/libs/python/src/object/life_support.cpp 2020-11-13 23:39:37.492440504 +0000 +@@ -93,7 +93,7 @@ + + 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); + } + +--- boost_1_73_0/libs/python/src/object/function.cpp~ 2020-11-13 23:37:19.244520978 +0000 ++++ boost_1_73_0/libs/python/src/object/function.cpp 2020-11-13 23:39:14.260454029 +0000 +@@ -107,7 +107,7 @@ + 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); + } + +--- boost_1_73_0/libs/python/src/object/enum.cpp~ 2020-11-13 23:37:19.248520976 +0000 ++++ boost_1_73_0/libs/python/src/object/enum.cpp 2020-11-13 23:38:51.943467016 +0000 +@@ -153,7 +153,7 @@ + { + 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 +--- boost_1_73_0/boost/python/object/make_instance.hpp~ 2020-11-14 00:26:47.356724835 +0000 ++++ boost_1_73_0/boost/python/object/make_instance.hpp 2020-11-14 00:26:49.947723159 +0000 +@@ -47,7 +47,7 @@ + + // 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/boost.spec b/boost.spec index 52a3a45..f60b6b3 100644 --- a/boost.spec +++ b/boost.spec @@ -42,7 +42,7 @@ Name: boost %global real_name boost Summary: The free peer-reviewed portable C++ source libraries Version: 1.73.0 -Release: 9%{?dist} +Release: 10%{?dist} License: Boost and MIT and Python # Replace each . with _ in %%{version} @@ -167,6 +167,10 @@ Patch91: boost-1.73-geometry-issue721.patch # https://github.com/boostorg/mpi/pull/119 Patch92: boost-1.73-mpi-vector-data.patch +# https://bugzilla.redhat.com/show_bug.cgi?id=1896382 +# https://github.com/boostorg/python/issues/325 +Patch93: boost-1.73-python3.10.patch + %bcond_with tests %bcond_with docs_generated @@ -683,6 +687,7 @@ find ./boost -name '*.hpp' -perm /111 | xargs chmod a-x %patch90 -p1 %patch91 -p1 %patch92 -p1 +%patch93 -p1 %build # Dump the versions being used into the build logs. @@ -1293,6 +1298,9 @@ fi %{_mandir}/man1/b2.1* %changelog +* Fri Nov 13 2020 Jonathan Wakely - 1.73.0-10 +- Patch Boost.Python for Python 3.10 changes (#1896382) + * Wed Nov 04 2020 Jonathan Wakely - 1.73.0-9 - Remove incorrect dependency on xz, only the shared lib is needed