The package rpms/root.git has added or updated architecture specific content in its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/root.git/commit/?id=ea27f7093bee4....
Change:
+%ifarch aarch64
Thanks.
Full change:
============
commit ea27f7093bee4e9b47ff5449eb5433f89593d0e8
Author: Mattias Ellert <mattias.ellert(a)physics.uu.se>
Date: Tue Jun 18 04:22:08 2024 +0200
Add dependency on liburing-devel to root-io
Exclude failing tutorial-tmva-RBatchGenerator_filters_vectors-py test
on aarch64 (Fedora 40+)
diff --git a/root.spec b/root.spec
index a2adb6c..eb906de 100644
--- a/root.spec
+++ b/root.spec
@@ -26,7 +26,7 @@
Name: root
Version: 6.32.00
%global libversion %(cut -d. -f 1-2 <<< %{version})
-Release: 4%{?dist}
+Release: 5%{?dist}
Summary: Numerical data analysis framework
License: LGPL-2.1-or-later
@@ -413,7 +413,7 @@ Requires: %{name}-core = %{version}-%{release}
# notebook package was merged with JupyROOT package
Provides: %{name}-notebook = %{version}-%{release}
Obsoletes: %{name}-notebook < 6.32.00
-Requires: js-jsroot >= 7.5
+Requires: js-jsroot >= 7.7
%if %{?fedora}%{!?fedora:0}
# jupyter-notebook not available in RHEL/EPEL
# some functionality missing
@@ -838,6 +838,9 @@ from marked up sources.
%package io
Summary: Input/output of ROOT objects
Requires: %{name}-core%{?_isa} = %{version}-%{release}
+%if %{?fedora}%{!?fedora:0}
+Requires: liburing-devel
+%endif
%description io
This package provides I/O routines for ROOT objects.
@@ -1140,7 +1143,7 @@ access to http based storage such as webdav and S3.
Summary: HTTP server extension for ROOT
Requires: %{name}-core%{?_isa} = %{version}-%{release}
Requires: %{name}-io%{?_isa} = %{version}-%{release}
-Requires: js-jsroot >= 7.5
+Requires: js-jsroot >= 7.7
# Library split (net-httpsniff from net-http)
Obsoletes: %{name}-net-http < 6.14.00
@@ -2536,6 +2539,15 @@ gtest-tree-dataframe-test-dataframe-concurrency|\
gtest-tree-dataframe-test-dataframe-simple"
%endif
+%if %{?fedora}%{!?fedora:0} >= 40
+# - tutorial-tmva-RBatchGenerator_filters_vectors-py
+# *** Break *** segmentation violation
+%ifarch aarch64
+excluded="${excluded}|\
+tutorial-tmva-RBatchGenerator_filters_vectors-py"
+%endif
+%endif
+
%ifarch %{power64}
# - test-stressgraphics(-interpreted)
# *** stack smashing detected ***: terminated
@@ -3572,6 +3584,11 @@ fi
%endif
%changelog
+* Mon Jun 17 2024 Mattias Ellert <mattias.ellert(a)physics.uu.se> - 6.32.00-5
+- Add dependency on liburing-devel to root-io
+- Exclude failing tutorial-tmva-RBatchGenerator_filters_vectors-py test
+ on aarch64 (Fedora 40+)
+
* Mon Jun 10 2024 Mattias Ellert <mattias.ellert(a)physics.uu.se> - 6.32.00-4
- Backport fix for failing test with Python 3.13
@@ -3583,7 +3600,7 @@ fi
* Mon Jun 03 2024 Mattias Ellert <ellert(a)ellert.se> - 6.32.00-1
- Update to 6.32.00
-- Drop EPEL 8 build (now requires Python >= 3.7 ans tbb >= 2020)
+- Drop EPEL 8 build (now requires Python >= 3.7 and tbb >= 2020)
- Dropped patches: 12
- New patches: 6
- The JsMVA python module is now a submodule of the ROOT python module
commit 4946c86aeaca3ac3a3ae44d713c58afa26604fa8
Author: Mattias Ellert <mattias.ellert(a)physics.uu.se>
Date: Mon Jun 10 22:42:59 2024 +0200
Backport fix for failing test with Python 3.13
diff --git a/root-allow-any-openssl-3.x-with-civetweb.patch
b/root-allow-any-openssl-3.x-with-civetweb.patch
new file mode 100644
index 0000000..05e2a64
--- /dev/null
+++ b/root-allow-any-openssl-3.x-with-civetweb.patch
@@ -0,0 +1,30 @@
+From 6952dd5ca51e7be8a8ae74b446ac268949f5f383 Mon Sep 17 00:00:00 2001
+From: Sergey Linev <S.Linev(a)gsi.de>
+Date: Mon, 10 Jun 2024 09:19:47 +0200
+Subject: [PATCH] [http] Allow to use any of openssl 3.x with civetweb
+
+civetweb was designed when only openssl 3.0 was existing.
+Therefore name of define is `OPENSSL_API_3_0`
+Meanwhile there is openssl 3.1 and 3.2.
+While seems to be there is no changes in API both can
+be used with civetweb.
+---
+ net/http/CMakeLists.txt | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/net/http/CMakeLists.txt b/net/http/CMakeLists.txt
+index 02d7514400..6ef98a604b 100644
+--- a/net/http/CMakeLists.txt
++++ b/net/http/CMakeLists.txt
+@@ -78,7 +78,7 @@ if(ssl)
+ MESSAGE(STATUS "Use SSL API VERSION 1.1 for civetweb")
+ target_compile_definitions(RHTTP PUBLIC -DOPENSSL_API_1_1)
+ set(link_ssl ON)
+- elseif((${ssl_major} EQUAL "3") AND ((${ssl_minor} EQUAL "0") OR
(${ssl_minor} EQUAL "1")))
++ elseif(${ssl_major} EQUAL "3")
+ MESSAGE(STATUS "Use SSL API VERSION 3.${ssl_minor} for civetweb")
+ target_compile_definitions(RHTTP PUBLIC -DOPENSSL_API_3_0)
+ set(link_ssl ON)
+--
+2.45.2
+
diff --git a/root-python-3.13-TTree-SetBranchAddress-pythonization.patch
b/root-python-3.13-TTree-SetBranchAddress-pythonization.patch
new file mode 100644
index 0000000..f891893
--- /dev/null
+++ b/root-python-3.13-TTree-SetBranchAddress-pythonization.patch
@@ -0,0 +1,214 @@
+From 0cc7d61c6f732e701ef6ed263344105b01ef9613 Mon Sep 17 00:00:00 2001
+From: Jonas Rembser <jonas.rembser(a)cern.ch>
+Date: Mon, 10 Jun 2024 12:32:42 +0200
+Subject: [PATCH] [PyROOT] Implement TTree SetBranchAddress pythonization in
+ Python
+
+The pythonization of `TTree::SetBranchAddress` was implemented in C++,
+hacking into CPyCppy by using implementation details like data member
+caches (this call: `((CPPInstance *)address)GetDatamemberCache()`). Not
+too surprising that it apparently breaks with the upcoming Python 3.13.
+
+It's better to implement the pythonizations in Python and also manage
+the lifetime of the necessary data in Python. This is done in this
+commit.
+
+The pythonization is extensively tested in `ttree_setbranchaddress.py`.
+
+Possible closes #15799.
+---
+ .../python/ROOT/_pythonization/_ttree.py | 67 ++++++++++++++++---
+ .../pythonizations/src/PyROOTModule.cxx | 2 -
+ .../pythonizations/src/PyROOTPythonize.h | 1 -
+ .../pyroot/pythonizations/src/TTreePyz.cxx | 63 -----------------
+ 4 files changed, 59 insertions(+), 74 deletions(-)
+
+diff --git a/bindings/pyroot/pythonizations/python/ROOT/_pythonization/_ttree.py
b/bindings/pyroot/pythonizations/python/ROOT/_pythonization/_ttree.py
+index 2781189e45..18840bb43e 100644
+--- a/bindings/pyroot/pythonizations/python/ROOT/_pythonization/_ttree.py
++++ b/bindings/pyroot/pythonizations/python/ROOT/_pythonization/_ttree.py
+@@ -130,7 +130,7 @@ ds.SetBranchAddress('structb', ms)
+ */
+ '''
+
+-from libROOTPythonizations import GetBranchAttr, SetBranchAddressPyz, BranchPyz
++from libROOTPythonizations import GetBranchAttr, BranchPyz
+ from . import pythonization
+
+ # TTree iterator
+@@ -145,15 +145,66 @@ def _TTree__iter__(self):
+ if bytes_read == -1:
+ raise RuntimeError("TTree I/O error")
+
+-def _SetBranchAddress(self, *args):
+- # Modify the behaviour if args is (const char*, void*)
+- res = SetBranchAddressPyz(self, *args)
++def _pythonize_branch_addr(branch, addr_orig):
++ """Helper for the SetBranchAddress pythonization, extracting the
relevant
++ address from a Python object if possible.
++ """
++ import cppyy
++ import ctypes
+
+- if res is None:
+- # Fall back to the original implementation for the rest of overloads
+- res = self._OriginalSetBranchAddress(*args)
++ # Pythonization for cppyy proxies (of type CPPInstance)
++ if isinstance(addr_orig, cppyy._backend.CPPInstance):
+
+- return res
++ is_leaf_list = branch.IsA() is cppyy.gbl.TBranch.Class()
++
++ if is_leaf_list:
++ # If the branch is a leaf list, SetBranchAddress expects the
++ # address of the object that has the corresponding data members.
++ return ctypes.c_void_p(cppyy.addressof(instance=addr_orig, byref=False))
++
++ # Otherwise, SetBranchAddress is expecting a pointer to the address of
++ # the object, and the pointer needs to stay alive. Therefore, we create
++ # a container for the pointer and cache it in the original cppyy proxy.
++ addr_view = cppyy.gbl.array["std::intptr_t",
1]([cppyy.addressof(instance=addr_orig, byref=False)])
++
++ if not hasattr(addr_orig, "_set_branch_cached_pointers"):
++ addr_orig._set_branch_cached_pointers = []
++ addr_orig._set_branch_cached_pointers.append(addr_view)
++
++ # Finally, we have to return the address of the container
++ return ctypes.c_void_p(cppyy.addressof(instance=addr_view, byref=False))
++
++ # For NumPy arrays
++ if hasattr(addr_orig, "__array_interface__"):
++ return ctypes.c_void_p(addr_orig.__array_interface__["data"][0])
++
++ # For the builtin array library
++ if hasattr(addr_orig, "buffer_info"):
++ return ctypes.c_void_p(addr_orig.buffer_info()[0])
++
++ # We don't know how to pythonize the address parameter. return the
++ # original value one.
++ return addr_orig
++
++def _SetBranchAddress(self, bname, addr, *args, **kwargs):
++ """
++ Pythonization for TTree::SetBranchAddress.
++
++ Modify the behaviour of SetBranchAddress so that proxy references can be passed
++ as arguments from the Python side, more precisely in cases where the C++
++ implementation of the method expects the address of a pointer.
++
++ For example:
++ ```
++ v = ROOT.std.vector('int')()
++ t.SetBranchAddress("my_vector_branch", v)
++ ```
++ """
++
++ branch = self.GetBranch(bname)
++ addr = _pythonize_branch_addr(branch, addr)
++
++ return self._OriginalSetBranchAddress(bname, addr, *args, **kwargs)
+
+ def _Branch(self, *args):
+ # Modify the behaviour if args is one of:
+diff --git a/bindings/pyroot/pythonizations/src/PyROOTModule.cxx
b/bindings/pyroot/pythonizations/src/PyROOTModule.cxx
+index e943e0ad4b..b74bae358e 100644
+--- a/bindings/pyroot/pythonizations/src/PyROOTModule.cxx
++++ b/bindings/pyroot/pythonizations/src/PyROOTModule.cxx
+@@ -48,8 +48,6 @@ static PyMethodDef gPyROOTMethods[] = {
+ (char *)"Cast the void* returned by TClass::DynamicCast to the right
type"},
+ {(char *)"AddTObjectEqNePyz", (PyCFunction)PyROOT::AddTObjectEqNePyz,
METH_VARARGS,
+ (char *)"Add equality and inequality comparison operators to TObject"},
+- {(char *)"SetBranchAddressPyz", (PyCFunction)PyROOT::SetBranchAddressPyz,
METH_VARARGS,
+- (char *)"Fully enable the use of TTree::SetBranchAddress from Python"},
+ {(char *)"BranchPyz", (PyCFunction)PyROOT::BranchPyz, METH_VARARGS,
+ (char *)"Fully enable the use of TTree::Branch from Python"},
+ {(char *)"AddPrettyPrintingPyz", (PyCFunction)PyROOT::AddPrettyPrintingPyz,
METH_VARARGS,
+diff --git a/bindings/pyroot/pythonizations/src/PyROOTPythonize.h
b/bindings/pyroot/pythonizations/src/PyROOTPythonize.h
+index 9f2d4506b6..684f256596 100644
+--- a/bindings/pyroot/pythonizations/src/PyROOTPythonize.h
++++ b/bindings/pyroot/pythonizations/src/PyROOTPythonize.h
+@@ -22,7 +22,6 @@ PyObject *AddPrettyPrintingPyz(PyObject *self, PyObject *args);
+
+ PyObject *GetBranchAttr(PyObject *self, PyObject *args);
+ PyObject *BranchPyz(PyObject *self, PyObject *args);
+-PyObject *SetBranchAddressPyz(PyObject *self, PyObject *args);
+
+ PyObject *AddTClassDynamicCastPyz(PyObject *self, PyObject *args);
+
+diff --git a/bindings/pyroot/pythonizations/src/TTreePyz.cxx
b/bindings/pyroot/pythonizations/src/TTreePyz.cxx
+index d6763fdb25..f06811c43c 100644
+--- a/bindings/pyroot/pythonizations/src/TTreePyz.cxx
++++ b/bindings/pyroot/pythonizations/src/TTreePyz.cxx
+@@ -201,69 +201,6 @@ PyObject *PyROOT::GetBranchAttr(PyObject * /*self*/, PyObject
*args)
+ return 0;
+ }
+
+-////////////////////////////////////////////////////////////////////////////
+-/// \brief Add pythonization for TTree::SetBranchAddress.
+-/// \param[in] self Always null, since this is a module function.
+-/// \param[in] args Pointer to a Python tuple object containing the arguments
+-/// received from Python.
+-///
+-/// Modify the behaviour of SetBranchAddress so that proxy references can be passed
+-/// as arguments from the Python side, more precisely in cases where the C++
+-/// implementation of the method expects the address of a pointer.
+-///
+-/// For example:
+-/// ~~~{.py}
+-/// v = ROOT.std.vector('int')()
+-/// t.SetBranchAddress("my_vector_branch", v)
+-/// ~~~
+-PyObject *PyROOT::SetBranchAddressPyz(PyObject * /* self */, PyObject *args)
+-{
+- PyObject *treeObj = nullptr, *name = nullptr, *address = nullptr;
+-
+- int argc = PyTuple_GET_SIZE(args);
+-
+- // Look for the (const char*, void*) overload
+- auto argParseStr = "OUO:SetBranchAddress";
+- if (argc == 3 && PyArg_ParseTuple(args, argParseStr, &treeObj, &name,
&address)) {
+-
+- auto tree = (TTree *)GetTClass(treeObj)->DynamicCast(TTree::Class(),
CPyCppyy::Instance_AsVoidPtr(treeObj));
+-
+- if (!tree) {
+- PyErr_SetString(PyExc_TypeError,
+- "TTree::SetBranchAddress must be called with a TTree
instance as first argument");
+- return nullptr;
+- }
+-
+- auto branchName = PyUnicode_AsUTF8(name);
+- auto branch = tree->GetBranch(branchName);
+- if (!branch) {
+- PyErr_SetString(PyExc_TypeError, "TTree::SetBranchAddress must be called
with a valid branch name");
+- return nullptr;
+- }
+-
+- bool isLeafList = branch->IsA() == TBranch::Class();
+-
+- void *buf = 0;
+- if (CPyCppyy::Instance_Check(address)) {
+- ((CPPInstance *)address)->GetDatamemberCache(); // force creation of cache
+-
+- if (((CPPInstance *)address)->fFlags & CPPInstance::kIsReference ||
isLeafList)
+- buf = CPyCppyy::Instance_AsVoidPtr(address);
+- else
+- buf = (void *)&(((CPPInstance *)address)->GetObjectRaw());
+- } else
+- Utility::GetBuffer(address, '*', 1, buf, false);
+-
+- if (buf != nullptr) {
+- auto res = tree->SetBranchAddress(PyUnicode_AsUTF8(name), buf);
+- return PyInt_FromLong(res);
+- }
+- }
+-
+- // Not the overload we wanted to pythonize, return None
+- Py_RETURN_NONE;
+-}
+-
+ ////////////////////////////////////////////////////////////////////////////
+ /// Try to match the arguments of TTree::Branch to the following overload:
+ /// - ( const char*, void*, const char*, Int_t = 32000 )
+--
+2.45.2
+
diff --git a/root.spec b/root.spec
index cd12db9..a2adb6c 100644
--- a/root.spec
+++ b/root.spec
@@ -26,7 +26,7 @@
Name: root
Version: 6.32.00
%global libversion %(cut -d. -f 1-2 <<< %{version})
-Release: 3%{?dist}
+Release: 4%{?dist}
Summary: Numerical data analysis framework
License: LGPL-2.1-or-later
@@ -85,6 +85,14 @@ Patch10: %{name}-fix-one-more-broken-import-in-JsMVA.patch
#
https://github.com/root-project/root/issues/15430
#
https://github.com/root-project/root/pull/15798
Patch11: %{name}-pyroot-add-python-3.13-attributes.patch
+# Implement TTree SetBranchAddress pythonization in Python
+# Backport fix for failing test with Python 3.13
+# pyunittests-pyroot-pyz-ttree-setbranchaddress
+#
https://github.com/root-project/root/issues/15799
+#
https://github.com/root-project/root/pull/15807
+Patch12: %{name}-python-3.13-TTree-SetBranchAddress-pythonization.patch
+# Backport build fix from upstream
+Patch13: %{name}-allow-any-openssl-3.x-with-civetweb.patch
BuildRequires: gcc-c++
BuildRequires: gcc-gfortran
@@ -1931,6 +1939,8 @@ This package contains utility functions for ntuples.
%patch -P9 -p1
%patch -P10 -p1
%patch -P11 -p1
+%patch -P12 -p1
+%patch -P13 -p1
# Remove bundled sources in order to be sure they are not used
# * afterimage
@@ -2502,14 +2512,6 @@ tutorial-pyroot-pyroot004_NumbaDeclare-py|\
pyunittests-pyroot-numbadeclare|\
test-webgui-ping"
-%if %{?fedora}%{!?fedora:0} >= 41
-# - pyunittests-pyroot-pyz-ttree-setbranchaddress
-# Segfault with Python 3.13:
-#
https://github.com/root-project/root/issues/15799
-excluded="${excluded}|\
-pyunittests-pyroot-pyz-ttree-setbranchaddress"
-%endif
-
%if ! %{pandas}
# - test-import-pandas
# - tutorial-dataframe-df026_AsNumpyArrays-py
@@ -3570,6 +3572,9 @@ fi
%endif
%changelog
+* Mon Jun 10 2024 Mattias Ellert <mattias.ellert(a)physics.uu.se> - 6.32.00-4
+- Backport fix for failing test with Python 3.13
+
* Sun Jun 09 2024 Python Maint <python-maint(a)redhat.com> - 6.32.00-3
- Rebuilt for Python 3.13
commit 48045b2bdf7e46b48746527048b2d1c25b230141
Author: Python Maint <python-maint(a)redhat.com>
Date: Sun Jun 9 02:47:16 2024 +0200
Rebuilt for Python 3.13
diff --git a/root.spec b/root.spec
index 8ae9e2f..cd12db9 100644
--- a/root.spec
+++ b/root.spec
@@ -26,7 +26,7 @@
Name: root
Version: 6.32.00
%global libversion %(cut -d. -f 1-2 <<< %{version})
-Release: 2%{?dist}
+Release: 3%{?dist}
Summary: Numerical data analysis framework
License: LGPL-2.1-or-later
@@ -3570,6 +3570,9 @@ fi
%endif
%changelog
+* Sun Jun 09 2024 Python Maint <python-maint(a)redhat.com> - 6.32.00-3
+- Rebuilt for Python 3.13
+
* Sat Jun 08 2024 Mattias Ellert <mattias.ellert(a)physics.uu.se> - 6.32.00-2
- Python 3.13 compatibility
commit 559fe2b850daf3fb8eb9c05ba2d993284eb66d7d
Author: Mattias Ellert <mattias.ellert(a)physics.uu.se>
Date: Sat Jun 8 22:04:11 2024 +0200
Python 3.13 compatibility
diff --git a/root-pyroot-add-python-3.13-attributes.patch
b/root-pyroot-add-python-3.13-attributes.patch
new file mode 100644
index 0000000..9ba3149
--- /dev/null
+++ b/root-pyroot-add-python-3.13-attributes.patch
@@ -0,0 +1,62 @@
+From 4d1486b95cd8c7850b12bd1777ea4463529f0b96 Mon Sep 17 00:00:00 2001
+From: Mattias Ellert <mattias.ellert(a)physics.uu.se>
+Date: Sat, 8 Jun 2024 17:08:48 +0200
+Subject: [PATCH] [pyroot] Add __firstlineno__ and __static_attributes__ to
+ blacklist
+
+For compatibility with Python 3.13
+
+See:
https://docs.python.org/3.13/whatsnew/3.13.html
+
+From the above page:
+
+* Classes have a new __firstlineno__ attribute, populated by the
+ compiler, with the line number of the first line of the class
+ definition. (Contributed by Serhiy Storchaka in gh-118465.)
+
+* Classes have a new __static_attributes__ attribute, populated by the
+ compiler, with a tuple of names of attributes of this class which
+ are accessed through self.X from any function in its
+ body. (Contributed by Irit Katriel in gh-115775.)
+
+Without adding the new attributes to the blacklist there are errors:
+
+AttributeError: 'int' object attribute 'doc' is read-only
+from the __firstlineno__ attribute.
+
+AttributeError: 'tuple' object attribute 'doc' is read-only
+from the __static_attributes__ attribute.
+---
+ .../python/ROOT/_pythonization/_roofit/__init__.py | 2 +-
+ .../pythonizations/python/ROOT/_pythonization/_tmva/__init__.py | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git
a/bindings/pyroot/pythonizations/python/ROOT/_pythonization/_roofit/__init__.py
b/bindings/pyroot/pythonizations/python/ROOT/_pythonization/_roofit/__init__.py
+index 83b3b69e3b..4ebd53736d 100644
+--- a/bindings/pyroot/pythonizations/python/ROOT/_pythonization/_roofit/__init__.py
++++ b/bindings/pyroot/pythonizations/python/ROOT/_pythonization/_roofit/__init__.py
+@@ -122,7 +122,7 @@ def get_defined_attributes(klass, consider_base_classes=False):
+ any of its base classes (except for `object`).
+ """
+
+- blacklist = ["__dict__", "__doc__", "__hash__",
"__module__", "__weakref__"]
++ blacklist = ["__dict__", "__doc__", "__hash__",
"__module__", "__weakref__", "__firstlineno__",
"__static_attributes__"]
+
+ if not consider_base_classes:
+ return sorted([attr for attr in klass.__dict__.keys() if attr not in
blacklist])
+diff --git a/bindings/pyroot/pythonizations/python/ROOT/_pythonization/_tmva/__init__.py
b/bindings/pyroot/pythonizations/python/ROOT/_pythonization/_tmva/__init__.py
+index b2dea5b541..72c210663d 100644
+--- a/bindings/pyroot/pythonizations/python/ROOT/_pythonization/_tmva/__init__.py
++++ b/bindings/pyroot/pythonizations/python/ROOT/_pythonization/_tmva/__init__.py
+@@ -69,7 +69,7 @@ def get_defined_attributes(klass, consider_base_classes=False):
+ any of its base classes (except for `object`).
+ """
+
+- blacklist = ["__dict__", "__doc__", "__hash__",
"__module__", "__weakref__"]
++ blacklist = ["__dict__", "__doc__", "__hash__",
"__module__", "__weakref__", "__firstlineno__",
"__static_attributes__"]
+
+ if not consider_base_classes:
+ return sorted([attr for attr in klass.__dict__.keys() if attr not in
blacklist])
+--
+2.45.2
+
diff --git a/root.spec b/root.spec
index c39adee..8ae9e2f 100644
--- a/root.spec
+++ b/root.spec
@@ -26,7 +26,7 @@
Name: root
Version: 6.32.00
%global libversion %(cut -d. -f 1-2 <<< %{version})
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: Numerical data analysis framework
License: LGPL-2.1-or-later
@@ -81,6 +81,10 @@ Patch9: %{name}-out-of-bounds.patch
# Fix one more broken import in JsMVA
#
https://github.com/root-project/root/pull/15752
Patch10: %{name}-fix-one-more-broken-import-in-JsMVA.patch
+# Python 3.13 compatibility
+#
https://github.com/root-project/root/issues/15430
+#
https://github.com/root-project/root/pull/15798
+Patch11: %{name}-pyroot-add-python-3.13-attributes.patch
BuildRequires: gcc-c++
BuildRequires: gcc-gfortran
@@ -1926,6 +1930,7 @@ This package contains utility functions for ntuples.
%patch -P8 -p1
%patch -P9 -p1
%patch -P10 -p1
+%patch -P11 -p1
# Remove bundled sources in order to be sure they are not used
# * afterimage
@@ -2497,6 +2502,14 @@ tutorial-pyroot-pyroot004_NumbaDeclare-py|\
pyunittests-pyroot-numbadeclare|\
test-webgui-ping"
+%if %{?fedora}%{!?fedora:0} >= 41
+# - pyunittests-pyroot-pyz-ttree-setbranchaddress
+# Segfault with Python 3.13:
+#
https://github.com/root-project/root/issues/15799
+excluded="${excluded}|\
+pyunittests-pyroot-pyz-ttree-setbranchaddress"
+%endif
+
%if ! %{pandas}
# - test-import-pandas
# - tutorial-dataframe-df026_AsNumpyArrays-py
@@ -3557,6 +3570,9 @@ fi
%endif
%changelog
+* Sat Jun 08 2024 Mattias Ellert <mattias.ellert(a)physics.uu.se> - 6.32.00-2
+- Python 3.13 compatibility
+
* Mon Jun 03 2024 Mattias Ellert <ellert(a)ellert.se> - 6.32.00-1
- Update to 6.32.00
- Drop EPEL 8 build (now requires Python >= 3.7 ans tbb >= 2020)