public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
From: Mattias Ellert <mattias.ellert@physics.uu.se>
To: git-commits@fedoraproject.org
Subject: [rpms/root] epel10.2: Update to 6.40.02
Date: Mon, 29 Jun 2026 18:08:35 GMT [thread overview]
Message-ID: <178275651524.1.16796755960698771550.rpms-root-e663491f10e1@fedoraproject.org> (raw)
A new commit has been pushed.
Repo : rpms/root
Branch : epel10.2
Commit : e663491f10e1bf78ea83dcc11f0ef2e3f4147749
Author : Mattias Ellert <mattias.ellert@physics.uu.se>
Date : 2026-06-29T15:26:12+02:00
Stats : +1293/-550 in 15 file(s)
URL : https://src.fedoraproject.org/rpms/root/c/e663491f10e1bf78ea83dcc11f0ef2e3f4147749?branch=epel10.2
Log:
Update to 6.40.02
Rename the jupyroot and distrdf packages to reflect that they are
now submodules of the main pyyhon package
New subpackages: root-package graf3d-glad, root-package net-curl,
root-package tmva-sofie-parser-python, root-package tree-ml,
root-package histv7util
Dropped patches: 2
New patches: 7
---
diff --git a/root-32bit-tests.patch b/root-32bit-tests.patch
index ae15a5d..cf7956d 100644
--- a/root-32bit-tests.patch
+++ b/root-32bit-tests.patch
@@ -1,4 +1,4 @@
-From 55446dcd6eabc1fff218f266c11f31697fe99f09 Mon Sep 17 00:00:00 2001
+From ac806becc2aa69898d1c5ca3b195d8fa3003238a Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Fri, 13 Mar 2020 16:21:55 +0100
Subject: [PATCH] Run tests on 32 bit
@@ -9,7 +9,7 @@ Subject: [PATCH] Run tests on 32 bit
2 files changed, 3 insertions(+), 15 deletions(-)
diff --git a/test/stressGeometry.cxx b/test/stressGeometry.cxx
-index f8d78f4f54..617b9e1644 100644
+index 253bc8574e9..48da18b06c3 100644
--- a/test/stressGeometry.cxx
+++ b/test/stressGeometry.cxx
@@ -257,14 +257,6 @@ void stressGeometry(const char *exp="*", Bool_t generate_ref=kFALSE, Bool_t vecg
@@ -28,12 +28,12 @@ index f8d78f4f54..617b9e1644 100644
TString fname;
for (i=0; i<NG; i++) {
diff --git a/tree/tree/test/CMakeLists.txt b/tree/tree/test/CMakeLists.txt
-index 5bb222edc5..f29a17801d 100644
+index 4e903b06daa..2ad9bb52171 100644
--- a/tree/tree/test/CMakeLists.txt
+++ b/tree/tree/test/CMakeLists.txt
-@@ -17,13 +17,9 @@ endif()
- target_include_directories(testTOffsetGeneration PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
+@@ -13,13 +13,9 @@ target_include_directories(testTOffsetGeneration PRIVATE ${CMAKE_CURRENT_SOURCE_
ROOT_STANDARD_LIBRARY_PACKAGE(SillyStruct NO_INSTALL_HEADERS HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/SillyStruct.h SOURCES SillyStruct.cxx LINKDEF SillyStructLinkDef.h DEPENDENCIES RIO)
+ ROOT_SET_OUTPUT_DIRECTORIES(SillyStruct)
ROOT_ADD_GTEST(testBulkApi BulkApi.cxx LIBRARIES RIO Tree TreePlayer)
-#FIXME: tests are having timeout on 32bit CERN VM (in docker container everything is fine),
-# to be reverted after investigation.
@@ -49,5 +49,5 @@ index 5bb222edc5..f29a17801d 100644
ROOT_ADD_GTEST(testTBranch TBranch.cxx LIBRARIES RIO Tree MathCore)
ROOT_ADD_GTEST(testTIOFeatures TIOFeatures.cxx LIBRARIES RIO Tree)
--
-2.45.1
+2.54.0
diff --git a/root-Adjust-stressGraphics-reference.patch b/root-Adjust-stressGraphics-reference.patch
new file mode 100644
index 0000000..b4950ed
--- /dev/null
+++ b/root-Adjust-stressGraphics-reference.patch
@@ -0,0 +1,46 @@
+From 9d2d6c1a104302e2f84659324b4e8b317cb9ab95 Mon Sep 17 00:00:00 2001
+From: Mattias Ellert <mattias.ellert@physics.uu.se>
+Date: Fri, 26 Jun 2026 06:51:28 +0200
+Subject: [PATCH] Adjust stressGraphics reference
+
+---
+ test/stressGraphics_zlibng.ref | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/test/stressGraphics_zlibng.ref b/test/stressGraphics_zlibng.ref
+index b7ca1568c66..2fda1276315 100644
+--- a/test/stressGraphics_zlibng.ref
++++ b/test/stressGraphics_zlibng.ref
+@@ -7,7 +7,7 @@
+ patterns 23688 1500 19305 200 143676 123000 47075 11000 23076 1500
+ crown 2785 50 14546 100 19178 9000 7605 4000 2829 50
+ piechart 67345 200 74560 3000 32180 15000 29168 15000 66962 200
+- ttext1 1025 150 12866 150 32266 9900 29901 5000 1072 200
++ ttext1 1025 150 12866 200 32266 9900 29901 5000 1072 200
+ ttext2 432 50 12743 50 9517 150 5306 700 473 50
+ tlatex1 5140 50 14050 50 16377 1300 12462 500 5170 70
+ tlatex2 5488 80 13507 100 18439 700 12061 500 5502 80
+@@ -18,9 +18,9 @@
+ itbf 5600 400 13302 300 16868 400 15083 800 5638 400
+ tmathtext 14193187 4000000 12984 100 27112 9500 25080 3000 14193352 4000000
+ transparency 2386 50 14700 100 16514 7000 24701 12000 2554 100
+- transpad 16185 5000 17131 350 22801 9500 14232 1000 11271 5000
++ transpad 16185 5000 17131 350 22801 9500 14232 1500 11271 5000
+ statfitparam 27683 400 23370 300 44898 11000 30209 5000 37580 400
+- tgaxis1 20424 400 21388 300 27719 11000 16044 600 20704 400
++ tgaxis1 20424 400 21388 300 27719 11000 16044 700 20704 400
+ tgaxis2 15874 100 19140 300 27682 10300 15197 550 15905 100
+ tgaxis3 22678 300 42796 200 44177 17000 20788 11000 22866 300
+ tgaxis4 3817 600 14405 250 19907 6300 10674 900 4523 600
+@@ -71,7 +71,7 @@
+ annotation3d 547845 3000 193427 3000 32383 12000 58073 20000 547493 3000
+ tgraph2d3 16675 3000 29541 500 40536 11300 33519 3900 16452 4000
+ ntuple1 256544 5000 382044 7000 54446 30400 45002 6500 261593 7000
+- quarks 4759 180 14134 100 32913 600 25421 1000 4790 180
++ quarks 4759 180 14134 200 32913 600 25421 1000 4790 180
+ timage 1442666 150000 12900 100 26100 100 374206 15000 1102279 250000
+ zoomtf1 6130 500 16528 300 49750 14000 29288 4000 5429 500
+ zoomfit 6200 700 15706 200 31219 11000 18280 3200 6113 800
+--
+2.54.0
+
diff --git a/root-Avoid-additional-python-version-file-to-wrong-location.patch b/root-Avoid-additional-python-version-file-to-wrong-location.patch
deleted file mode 100644
index cbbab31..0000000
--- a/root-Avoid-additional-python-version-file-to-wrong-location.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-From 3f1a626fbe09504c05c5ecec47beb6aa6498d87f Mon Sep 17 00:00:00 2001
-From: Mattias Ellert <mattias.ellert@physics.uu.se>
-Date: Fri, 13 Mar 2026 08:58:40 +0100
-Subject: [PATCH] Avoid additional python version file to wrong location
-
-(cherry picked from commit 3db196516a2073b3f20e9b82019818a6bef23b01)
----
- bindings/pyroot/pythonizations/CMakeLists.txt | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/bindings/pyroot/pythonizations/CMakeLists.txt b/bindings/pyroot/pythonizations/CMakeLists.txt
-index 40207644a41..68b632c2ae0 100644
---- a/bindings/pyroot/pythonizations/CMakeLists.txt
-+++ b/bindings/pyroot/pythonizations/CMakeLists.txt
-@@ -157,9 +157,10 @@ endforeach()
-
- # The Python version at build time should be easy to figure out from Python, so
- # we can raise an exception if the used Python version is not compatible.
-+# The file will be implicitly installed by install(DIRECTORY ...) in the
-+# ROOT_PYTHON_PACKAGE function.
- set(python_version_file "${localruntimedir}/ROOT/_python_version.py")
- file(WRITE "${python_version_file}" "_root_python_version = \"${Python3_VERSION}\"\n")
--install(FILES "${python_version_file}" DESTINATION "${CMAKE_INSTALL_PYTHONDIR}")
-
- # A custom target that depends on the Python sources being present in the build
- # directory. This will be used as a dependency of the pythonization libraries,
---
-2.53.0
-
diff --git a/root-Revert-cppyy-Mark-addressof-test-as-xfail-on-modules.patch b/root-Revert-cppyy-Mark-addressof-test-as-xfail-on-modules.patch
new file mode 100644
index 0000000..52273a0
--- /dev/null
+++ b/root-Revert-cppyy-Mark-addressof-test-as-xfail-on-modules.patch
@@ -0,0 +1,47 @@
+From 9fc24a9cc827028d78c983eea5d18ac6a705e806 Mon Sep 17 00:00:00 2001
+From: Mattias Ellert <mattias.ellert@physics.uu.se>
+Date: Fri, 26 Jun 2026 17:20:27 +0200
+Subject: [PATCH] Revert "[cppyy] Mark `addressof` test as `xfail` on
+ modules=OFF build with C++17"
+
+This reverts commit 5eb0e6466ed1b2c29853ba4bfa928dd1da3e4bcd.
+---
+ .../pyroot/cppyy/cppyy/test/test_datatypes.py | 15 +--------------
+ 1 file changed, 1 insertion(+), 14 deletions(-)
+
+diff --git a/bindings/pyroot/cppyy/cppyy/test/test_datatypes.py b/bindings/pyroot/cppyy/cppyy/test/test_datatypes.py
+index e66e36529ec..71e26dd1d9b 100644
+--- a/bindings/pyroot/cppyy/cppyy/test/test_datatypes.py
++++ b/bindings/pyroot/cppyy/cppyy/test/test_datatypes.py
+@@ -5,18 +5,6 @@ from support import setup_make, pylong, pyunicode, IS_MAC, IS_MAC_ARM, IS_WINDOW
+ test_dct = "datatypes_cxx"
+
+
+-def has_cpp_20():
+- import cppyy
+-
+- return cppyy.gbl.gInterpreter.ProcessLine("__cplusplus;") >= 202002
+-
+-
+-def is_modules_off():
+- import cppyy
+-
+- return "runtime_cxxmodules" not in cppyy.gbl.gROOT.GetConfigFeatures()
+-
+-
+ class TestDATATYPES:
+ def setup_class(cls):
+ import cppyy
+@@ -2351,8 +2339,7 @@ class TestDATATYPES:
+ assert str(bt(1)) == 'True'
+ assert str(bt(0)) == 'False'
+
+- @mark.xfail(strict=True, run=not IS_WINDOWS, condition=IS_MAC_ARM or (not has_cpp_20() and is_modules_off()), reason="Crashes on mac-beta ARM64 and fails on Windows \
+- assertion error for runtime_cxxmodules=OFF build that is explained in GitHub issue #21005")
++ @mark.xfail(strict=True, run=not IS_WINDOWS, condition=IS_MAC_ARM, reason="Crashes on mac-beta ARM64 and fails on Windows")
+ def test49_addressof_method(self):
+ """Use of addressof for (const) methods"""
+
+--
+2.54.0
+
diff --git a/root-Save-memory-Do-not-link-to-LLVM-libraries-in-parallel.patch b/root-Save-memory-Do-not-link-to-LLVM-libraries-in-parallel.patch
index 4d5587f..0f91a8c 100644
--- a/root-Save-memory-Do-not-link-to-LLVM-libraries-in-parallel.patch
+++ b/root-Save-memory-Do-not-link-to-LLVM-libraries-in-parallel.patch
@@ -1,4 +1,4 @@
-From 98a5042a02dd7c1aaa9fbd5e54c8620c6b72484f Mon Sep 17 00:00:00 2001
+From a5b9525ea1575706a523296bb47ac15f33935838 Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Mon, 2 Jun 2025 21:22:39 +0200
Subject: [PATCH] Save memory. Do not link to LLVM libraries in parallel
@@ -20,20 +20,20 @@ index a6c7aedac99..90ac0139c24 100644
+# Save memory. Do not link to LLVM libraries in parallel
+add_dependencies(coreclingutilstestUnit CppInterOpTests)
diff --git a/interpreter/CppInterOp/unittests/CppInterOp/CMakeLists.txt b/interpreter/CppInterOp/unittests/CppInterOp/CMakeLists.txt
-index 4b4b43bdd29..a028802fedc 100644
+index 1d6ccd3e865..dc98cdfc29a 100644
--- a/interpreter/CppInterOp/unittests/CppInterOp/CMakeLists.txt
+++ b/interpreter/CppInterOp/unittests/CppInterOp/CMakeLists.txt
-@@ -66,6 +66,9 @@ target_link_libraries(CppInterOpTests
- clangCppInterOp
+@@ -67,6 +67,9 @@ add_cppinterop_unittest(CppInterOpTests
+ ${EXTRA_TEST_SOURCE_FILES}
)
+# Save memory. Do not link to LLVM libraries in parallel
+add_dependencies(CppInterOpTests DynamicLibraryManagerTests)
+
- set_output_directory(CppInterOpTests
- BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${EXTRA_PATH_TEST_BINARIES}
- LIBRARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${EXTRA_PATH_TEST_BINARIES}
-@@ -129,5 +132,8 @@ set_output_directory(DynamicLibraryManagerTests
+ if(NOT WIN32)
+ set_source_files_properties(VariableReflectionTest.cpp PROPERTIES COMPILE_FLAGS
+ "-Wno-pedantic"
+@@ -113,6 +116,9 @@ endif()
add_dependencies(DynamicLibraryManagerTests TestSharedLib)
@@ -42,6 +42,7 @@ index 4b4b43bdd29..a028802fedc 100644
+
#export_executable_symbols_for_plugins(TestSharedLib)
add_subdirectory(TestSharedLib)
+
--
-2.52.0
+2.54.0
diff --git a/root-Use-different-output-filenames-in-tests-pdftitle.cxx.patch b/root-Use-different-output-filenames-in-tests-pdftitle.cxx.patch
new file mode 100644
index 0000000..ac337b4
--- /dev/null
+++ b/root-Use-different-output-filenames-in-tests-pdftitle.cxx.patch
@@ -0,0 +1,68 @@
+From 28cff2a71e084210b9265cc1c6a4691afc840556 Mon Sep 17 00:00:00 2001
+From: Mattias Ellert <mattias.ellert@physics.uu.se>
+Date: Sat, 27 Jun 2026 15:56:57 +0200
+Subject: [PATCH] Use different output filenames in tests pdftitle.cxx and
+ pdfurl.cxx
+
+This avoids failures when one test overwrites the other's output:
+
+[==========] Running 1 test from 1 test suite.
+[----------] Global test environment set-up.
+[----------] 1 test from TPad
+[ RUN ] TPad.PDFUrl
+ROOT::TestSupport::ForbidDiagnostics::handler(): Diagnostic in 'TCanvas::Print':
+pdf file output.pdf has been created
+ROOT::TestSupport::ForbidDiagnostics::handler(): Diagnostic in 'TCanvas::Print':
+Current canvas added to pdf file output.pdf
+ROOT::TestSupport::ForbidDiagnostics::handler(): Diagnostic in 'TCanvas::Print':
+Current canvas added to pdf file output.pdf
+ROOT::TestSupport::ForbidDiagnostics::handler(): Diagnostic in 'TCanvas::Print':
+pdf file output.pdf has been closed
+/builddir/build/BUILD/root-6.40.02/graf2d/gpad/test/pdfurl.cxx:33: Failure
+Expected equality of these values:
+ statCode
+ Which is: 1
+ 0
+PDF file was not created.
+[ FAILED ] TPad.PDFUrl (373 ms)
+[----------] 1 test from TPad (373 ms total)
+[----------] Global test environment tear-down
+[==========] 1 test from 1 test suite ran. (374 ms total)
+[ PASSED ] 0 tests.
+[ FAILED ] 1 test, listed below:
+[ FAILED ] TPad.PDFUrl
+ 1 FAILED TEST
+---
+ graf2d/gpad/test/pdftitle.cxx | 2 +-
+ graf2d/gpad/test/pdfurl.cxx | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/graf2d/gpad/test/pdftitle.cxx b/graf2d/gpad/test/pdftitle.cxx
+index 9162df2cd84..57c0935133f 100644
+--- a/graf2d/gpad/test/pdftitle.cxx
++++ b/graf2d/gpad/test/pdftitle.cxx
+@@ -5,7 +5,7 @@
+
+ TEST(TPad, PDFTitle)
+ {
+- const TString pdfFile = "output.pdf";
++ const TString pdfFile = "pdftitle.pdf";
+
+ // Generate a multi-page PDF with a title
+ TCanvas c;
+diff --git a/graf2d/gpad/test/pdfurl.cxx b/graf2d/gpad/test/pdfurl.cxx
+index c0a77ce8dc9..43b114c8f41 100644
+--- a/graf2d/gpad/test/pdfurl.cxx
++++ b/graf2d/gpad/test/pdfurl.cxx
+@@ -6,7 +6,7 @@
+
+ TEST(TPad, PDFUrl)
+ {
+- const TString pdfFile = "output.pdf";
++ const TString pdfFile = "pdfurl.pdf";
+
+ // Generate a multi-page PDF with page titles and #url in TLatex
+ TCanvas c1;
+--
+2.54.0
+
diff --git a/root-core-The-old-TUUID-constructor-can-create-either-ver.patch b/root-core-The-old-TUUID-constructor-can-create-either-ver.patch
new file mode 100644
index 0000000..26cf519
--- /dev/null
+++ b/root-core-The-old-TUUID-constructor-can-create-either-ver.patch
@@ -0,0 +1,27 @@
+From 2920a892a5db1c24bb8af34c63aacc1438a18247 Mon Sep 17 00:00:00 2001
+From: Mattias Ellert <mattias.ellert@physics.uu.se>
+Date: Sun, 28 Jun 2026 16:54:54 +0200
+Subject: [PATCH 1/3] [core] The old TUUID constructor can create either
+ version 1 or 3
+
+Do not fail test if version 3 is returned.
+---
+ core/base/test/UUIDTest.cxx | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/core/base/test/UUIDTest.cxx b/core/base/test/UUIDTest.cxx
+index dea3700052b..c834223f6d0 100644
+--- a/core/base/test/UUIDTest.cxx
++++ b/core/base/test/UUIDTest.cxx
+@@ -14,7 +14,7 @@ TEST(TUUID, UUIDv4)
+ EXPECT_EQ(10000u, uuids.size());
+
+ TUUID u;
+- EXPECT_EQ('1', u.AsString()[14]);
++ EXPECT_TRUE('1' == u.AsString()[14] || '3' == u.AsString()[14]);
+ u = TUUID::UUIDv4();
+ std::string str = u.AsString();
+ EXPECT_EQ('4', str[14]);
+--
+2.54.0
+
diff --git a/root-fontconfig.patch b/root-fontconfig.patch
index 4e5e607..d732893 100644
--- a/root-fontconfig.patch
+++ b/root-fontconfig.patch
@@ -1,4 +1,4 @@
-From 4d450f306a8ab8220f43675c70f399d89e5a4a03 Mon Sep 17 00:00:00 2001
+From 58bd7d6e0f905efcf436558fdc11796b7145c66d Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Sat, 11 May 2024 20:09:47 +0200
Subject: [PATCH] Use system fonts via fontconfig
@@ -13,12 +13,12 @@ Subject: [PATCH] Use system fonts via fontconfig
graf2d/postscript/CMakeLists.txt | 1 +
graf2d/postscript/src/TPostScript.cxx | 106 ++++-----
graf3d/gl/CMakeLists.txt | 1 +
- graf3d/gl/src/TGLFontManager.cxx | 123 ++++++++++-
+ graf3d/gl/src/TGLFontManager.cxx | 124 ++++++++++-
graf3d/gl/src/TGLText.cxx | 56 +++--
- 11 files changed, 495 insertions(+), 194 deletions(-)
+ 11 files changed, 496 insertions(+), 194 deletions(-)
diff --git a/core/base/src/TApplication.cxx b/core/base/src/TApplication.cxx
-index f0d2124a8f6..41ad4c73020 100644
+index 0c0c9515930..2b9bbb2b2af 100644
--- a/core/base/src/TApplication.cxx
+++ b/core/base/src/TApplication.cxx
@@ -253,18 +253,12 @@ void TApplication::InitializeGraphics(Bool_t only_web)
@@ -51,10 +51,10 @@ index f0d2124a8f6..41ad4c73020 100644
if (!only_web || !fAppImp) {
diff --git a/graf2d/asimage/CMakeLists.txt b/graf2d/asimage/CMakeLists.txt
-index b5ccf983473..8ee57c1fac0 100644
+index 3b5188c126e..a82efc829fc 100644
--- a/graf2d/asimage/CMakeLists.txt
+++ b/graf2d/asimage/CMakeLists.txt
-@@ -28,6 +28,7 @@ ROOT_STANDARD_LIBRARY_PACKAGE(ASImage
+@@ -30,6 +30,7 @@ ROOT_STANDARD_LIBRARY_PACKAGE(ASImage
${FREETYPE_LIBRARIES}
${X11_LIBRARIES}
ZLIB::ZLIB
@@ -63,10 +63,10 @@ index b5ccf983473..8ee57c1fac0 100644
Core
Graf
diff --git a/graf2d/asimage/src/TASImage.cxx b/graf2d/asimage/src/TASImage.cxx
-index 6ea60a78801..e85d804b7ec 100644
+index 3784e05a235..0ad74e1ee6f 100644
--- a/graf2d/asimage/src/TASImage.cxx
+++ b/graf2d/asimage/src/TASImage.cxx
-@@ -117,6 +117,8 @@ extern "C" {
+@@ -116,6 +116,8 @@ extern "C" {
# include <draw.h>
}
@@ -75,7 +75,7 @@ index 6ea60a78801..e85d804b7ec 100644
// auxiliary functions for general polygon filling
#include "TASPolyUtils.c"
-@@ -2620,11 +2622,88 @@ void TASImage::DrawText(Int_t x, Int_t y, const char *text, Int_t size,
+@@ -2642,11 +2644,88 @@ void TASImage::DrawText(Int_t x, Int_t y, const char *text, Int_t size,
// This is for backward compatibility...
if (fn.Last('/') == 0) fn = fn(1, fn.Length() - 1);
@@ -169,7 +169,7 @@ index 6ea60a78801..e85d804b7ec 100644
if (fn.EndsWith(".pfa") || fn.EndsWith(".PFA") || fn.EndsWith(".pfb") || fn.EndsWith(".PFB") || fn.EndsWith(".ttf") || fn.EndsWith(".TTF") || fn.EndsWith(".otf") || fn.EndsWith(".OTF")) {
ttfont = kTRUE;
-@@ -2648,7 +2727,7 @@ void TASImage::DrawText(Int_t x, Int_t y, const char *text, Int_t size,
+@@ -2670,7 +2749,7 @@ void TASImage::DrawText(Int_t x, Int_t y, const char *text, Int_t size,
return;
}
@@ -179,11 +179,11 @@ index 6ea60a78801..e85d804b7ec 100644
if (!font) {
font = get_asfont(gFontManager, "fixed", 0, size, ASF_GuessWho);
diff --git a/graf2d/graf/CMakeLists.txt b/graf2d/graf/CMakeLists.txt
-index d7d1b77c21a..c4ebb994a4a 100644
+index f7a0f970372..61e49252562 100644
--- a/graf2d/graf/CMakeLists.txt
+++ b/graf2d/graf/CMakeLists.txt
@@ -91,6 +91,7 @@ ROOT_STANDARD_LIBRARY_PACKAGE(Graf
- ${FREETYPE_LIBRARIES}
+ Freetype::Freetype
ZLIB::ZLIB
mathtext
+ fontconfig
@@ -606,7 +606,7 @@ index eb091bbb396..a05023a3f41 100644
Graf
)
diff --git a/graf2d/postscript/src/TPostScript.cxx b/graf2d/postscript/src/TPostScript.cxx
-index df9e3ae16ea..1e353e1ca53 100644
+index 8d4343736d1..c2efa7914da 100644
--- a/graf2d/postscript/src/TPostScript.cxx
+++ b/graf2d/postscript/src/TPostScript.cxx
@@ -234,6 +234,7 @@ To change the color model use `gStyle->SetColorModelPS(c)`.
@@ -739,7 +739,7 @@ index df9e3ae16ea..1e353e1ca53 100644
}
}
PrintStr("%%IncludeResource: font Times-Roman@");
-@@ -2836,10 +2842,10 @@ void TPostScript::Text(Double_t xx, Double_t yy, const wchar_t *chars)
+@@ -2852,10 +2858,10 @@ void TPostScript::Text(Double_t xx, Double_t yy, const wchar_t *chars)
{ "Root.PSFont.9", "/FreeMonoOblique" },
{ "Root.PSFont.10", "/FreeMonoBold" },
{ "Root.PSFont.11", "/FreeMonoBoldOblique" },
@@ -754,30 +754,31 @@ index df9e3ae16ea..1e353e1ca53 100644
{ "Root.PSFont.STIXGenIt", "/STIXGeneral-Italic" },
{ "Root.PSFont.STIXGenBd", "/STIXGeneral-Bold" },
diff --git a/graf3d/gl/CMakeLists.txt b/graf3d/gl/CMakeLists.txt
-index e759473ca0f..c453397fc52 100644
+index 7850fd46b9f..14782767b4c 100644
--- a/graf3d/gl/CMakeLists.txt
+++ b/graf3d/gl/CMakeLists.txt
-@@ -211,6 +211,7 @@ ROOT_STANDARD_LIBRARY_PACKAGE(RGL
- ${GL2PS_LIBRARIES}
+@@ -208,6 +208,7 @@ ROOT_STANDARD_LIBRARY_PACKAGE(RGL
+ ZLIB::ZLIB
${X11_LIBRARIES}
- RGlew
+ ROOTGlad
+ fontconfig
DEPENDENCIES
Hist
Gui
diff --git a/graf3d/gl/src/TGLFontManager.cxx b/graf3d/gl/src/TGLFontManager.cxx
-index 58ea1188d59..647642de615 100644
+index e6f67b4f828..3671c132fd9 100644
--- a/graf3d/gl/src/TGLFontManager.cxx
+++ b/graf3d/gl/src/TGLFontManager.cxx
-@@ -36,6 +36,7 @@
+@@ -36,6 +36,8 @@
# include "FTGLBitmapFont.h"
#endif
+#include <fontconfig/fontconfig.h>
-
- /** \class TGLFont
- \ingroup opengl
-@@ -448,16 +449,120 @@ void TGLFontManager::RegisterFont(Int_t sizeIn, Int_t fileID, TGLFont::EMode mod
++
+ namespace {
+ #ifdef HAVE_UTF8
+ // https://github.com/root-project/root/issues/22076#issuecomment-4342764706
+@@ -481,16 +483,120 @@ void TGLFontManager::RegisterFont(Int_t sizeIn, Int_t fileID, TGLFont::EMode mod
FontMap_i it = fFontMap.find(TGLFont(size, fileID, mode));
if (it == fFontMap.end())
{
@@ -989,5 +990,5 @@ index 2ed3ee0917a..03feb0ee0a4 100644
- delete [] ttfont;
}
--
-2.52.0
+2.54.0
diff --git a/root-no-export-python-modules.patch b/root-no-export-python-modules.patch
index d3fa4bc..f5c5106 100644
--- a/root-no-export-python-modules.patch
+++ b/root-no-export-python-modules.patch
@@ -1,18 +1,18 @@
-From b4e57c8ccd59d69fe61fa5f6470b3a99ba52aeeb Mon Sep 17 00:00:00 2001
+From 4b14d9d83ff154eca3672570f9be66513268209f Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Thu, 4 Dec 2025 23:13:28 +0100
Subject: [PATCH] Dont export Python modules
---
bindings/pyroot/cppyy/CPyCppyy/CMakeLists.txt | 3 +--
- bindings/pyroot/pythonizations/CMakeLists.txt | 8 +-------
- 2 files changed, 2 insertions(+), 9 deletions(-)
+ bindings/pyroot/pythonizations/CMakeLists.txt | 9 +--------
+ 2 files changed, 2 insertions(+), 10 deletions(-)
diff --git a/bindings/pyroot/cppyy/CPyCppyy/CMakeLists.txt b/bindings/pyroot/cppyy/CPyCppyy/CMakeLists.txt
-index bb48c032974..c34069855b2 100644
+index c21fb317f8c..7f1717e3f4b 100644
--- a/bindings/pyroot/cppyy/CPyCppyy/CMakeLists.txt
+++ b/bindings/pyroot/cppyy/CPyCppyy/CMakeLists.txt
-@@ -119,8 +119,7 @@ install(TARGETS CPyCppyy EXPORT ${CMAKE_PROJECT_NAME}Exports
+@@ -117,8 +117,7 @@ install(TARGETS CPyCppyy EXPORT ${CMAKE_PROJECT_NAME}Exports
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries)
@@ -23,13 +23,14 @@ index bb48c032974..c34069855b2 100644
ARCHIVE DESTINATION ${CMAKE_INSTALL_PYTHONDIR}/cppyy COMPONENT libraries)
diff --git a/bindings/pyroot/pythonizations/CMakeLists.txt b/bindings/pyroot/pythonizations/CMakeLists.txt
-index 1230f18ca47..2df4b733320 100644
+index 32d7d54b8da..5128e6d337c 100644
--- a/bindings/pyroot/pythonizations/CMakeLists.txt
+++ b/bindings/pyroot/pythonizations/CMakeLists.txt
-@@ -202,11 +202,6 @@ foreach(py_source ${py_sources})
- COMMENT "Compiling PyROOT source ${py_source} for Python ${Python3_VERSION}")
- endforeach()
+@@ -63,12 +63,6 @@ if(NOT MSVC)
+ target_compile_options(${libname} PRIVATE -Wno-strict-aliasing)
+ endif()
+-
-# Create meta-target PyROOT3 (INTERFACE library)
-# Export of targets are not supported for custom targets(add_custom_targets())
-add_library(PyROOT INTERFACE)
@@ -38,7 +39,7 @@ index 1230f18ca47..2df4b733320 100644
# Define library output directories for build and install trees
set(pymoduledir_build "${localruntimedir}/ROOT")
set(pymoduledir_install "${CMAKE_INSTALL_PYTHONDIR}/ROOT")
-@@ -231,8 +226,7 @@ if(NOT MSVC)
+@@ -93,8 +87,7 @@ if(NOT MSVC)
endif()
# Install library
@@ -49,5 +50,5 @@ index 1230f18ca47..2df4b733320 100644
ARCHIVE DESTINATION ${pymoduledir_install} COMPONENT libraries)
--
-2.52.0
+2.54.0
diff --git a/root-python-3.15.patch b/root-python-3.15.patch
deleted file mode 100644
index a40cf3f..0000000
--- a/root-python-3.15.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-From 4171724228a849959542fcb0b0c1ec10d8e94999 Mon Sep 17 00:00:00 2001
-From: Jonas Rembser <jonas.rembser@cern.ch>
-Date: Fri, 3 Apr 2026 22:56:04 +0200
-Subject: [PATCH] [Python] Set `__spec__` attribute and not `__cached__` for
- ROOT facade
-
-The Python documentation [1] says:
-
-> It is strongly recommended that you use module.__spec__.cached instead
- of module.__cached__.
-
-So this commit suggests to transfer the full `__spec__` attribute from
-the ROOT module to the facade, instead of `__cached__`.
-
-This also avoids errors when importing ROOT with Python 3.15, where
-`__cached__` will cease to be set or taken into consideration by the
-import system or standard library.
-
-Closes #21787.
-
-[1] https://docs.python.org/3/reference/datamodel.html#module.__cached__
----
- bindings/pyroot/pythonizations/python/ROOT/_facade.py | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/bindings/pyroot/pythonizations/python/ROOT/_facade.py b/bindings/pyroot/pythonizations/python/ROOT/_facade.py
-index c22ae40da4c2d..da8b6681ec2f2 100644
---- a/bindings/pyroot/pythonizations/python/ROOT/_facade.py
-+++ b/bindings/pyroot/pythonizations/python/ROOT/_facade.py
-@@ -142,7 +142,7 @@ def __init__(self, module, is_ipython):
- self.__all__ = module.__all__
- self.__name__ = module.__name__
- self.__file__ = module.__file__
-- self.__cached__ = module.__cached__
-+ self.__spec__ = module.__spec__
- self.__path__ = module.__path__
- self.__doc__ = module.__doc__
- self.__package__ = module.__package__
diff --git a/root-tmva-sofie-Fix-big-endian.patch b/root-tmva-sofie-Fix-big-endian.patch
new file mode 100644
index 0000000..fb1663d
--- /dev/null
+++ b/root-tmva-sofie-Fix-big-endian.patch
@@ -0,0 +1,68 @@
+From 8554bf49749efd8de5538bf99c12a04d2691102d Mon Sep 17 00:00:00 2001
+From: Mattias Ellert <mattias.ellert@physics.uu.se>
+Date: Sun, 28 Jun 2026 16:49:23 +0200
+Subject: [PATCH] [tmva][sofie] Fix big endian
+
+---
+ tmva/sofie_parsers/src/RModelParser_ONNX.cxx | 36 ++++++++++++++++----
+ 1 file changed, 30 insertions(+), 6 deletions(-)
+
+diff --git a/tmva/sofie_parsers/src/RModelParser_ONNX.cxx b/tmva/sofie_parsers/src/RModelParser_ONNX.cxx
+index aa196c510ad..ac4cc7d5740 100644
+--- a/tmva/sofie_parsers/src/RModelParser_ONNX.cxx
++++ b/tmva/sofie_parsers/src/RModelParser_ONNX.cxx
+@@ -172,13 +172,37 @@ std::shared_ptr<void> RModelParser_ONNX::GetInitializedTensorData(onnx::TensorPr
+ std::memcpy(data.get(), tensorproto->raw_data().c_str(), tensor_size);
+ #else
+ // big-endian architectures - need to swap bytes
+- for (std::size_t k = 0; k < tensor_size; ++k)
+- (reinterpret_cast<typename RByteSwap<sizeof(uint8_t)>::value_type *>(data.get()))[k] =
+- RByteSwap<sizeof(T)>::bswap((reinterpret_cast<const typename RByteSwap<sizeof(uint8_t)>::value_type *>(
+- tensorproto->raw_data().c_str()))[k]);
++ switch (tensor_type) {
++ case ETensorType::FLOAT:
++ for (std::size_t k = 0; k < tensor_size / sizeof(float); ++k)
++ (reinterpret_cast<typename RByteSwap<sizeof(float)>::value_type *>(data.get()))[k] =
++ RByteSwap<sizeof(float)>::bswap((reinterpret_cast<const typename RByteSwap<sizeof(float)>::value_type *>(
++ tensorproto->raw_data().c_str()))[k]);
++ break;
++ case ETensorType::DOUBLE:
++ for (std::size_t k = 0; k < tensor_size / sizeof(double); ++k)
++ (reinterpret_cast<typename RByteSwap<sizeof(double)>::value_type *>(data.get()))[k] =
++ RByteSwap<sizeof(double)>::bswap((reinterpret_cast<const typename RByteSwap<sizeof(double)>::value_type *>(
++ tensorproto->raw_data().c_str()))[k]);
++ break;
++ case ETensorType::INT32:
++ for (std::size_t k = 0; k < tensor_size / sizeof(int32_t); ++k)
++ (reinterpret_cast<typename RByteSwap<sizeof(int32_t)>::value_type *>(data.get()))[k] =
++ RByteSwap<sizeof(int32_t)>::bswap((reinterpret_cast<const typename RByteSwap<sizeof(int32_t)>::value_type *>(
++ tensorproto->raw_data().c_str()))[k]);
++ break;
++ case ETensorType::INT64:
++ for (std::size_t k = 0; k < tensor_size / sizeof(int64_t); ++k)
++ (reinterpret_cast<typename RByteSwap<sizeof(int64_t)>::value_type *>(data.get()))[k] =
++ RByteSwap<sizeof(int64_t)>::bswap((reinterpret_cast<const typename RByteSwap<sizeof(int64_t)>::value_type *>(
++ tensorproto->raw_data().c_str()))[k]);
++ break;
++ default:
++ throw std::runtime_error("Data type " + ConvertTypeToString(tensor_type) + " in tensor is not supported!\n");
++ }
+ #endif
+ } else {
+- // case tensor data are stored as specific types and now in raw_data
++ // case tensor data are stored as specific types and not in raw_data
+ switch (tensor_type) {
+ case ETensorType::FLOAT: {
+ ExtractDataFromTP<float>::Copy(tensorproto, data.get(), tensor_size/ 4);
+@@ -200,7 +224,7 @@ std::shared_ptr<void> RModelParser_ONNX::GetInitializedTensorData(onnx::TensorPr
+ throw std::runtime_error("TMVA::SOFIE - ExtractData from TP in BOOL not supported");
+ break;
+ }
+- case ETensorType::UINT8: {
++ case ETensorType::UINT8: {
+ throw std::runtime_error("TMVA::SOFIE - ExtractData from TP in UINT8 not supported");
+ break;
+ }
+--
+2.54.0
+
diff --git a/root-tree-df-Do-not-fail-test-on-32-bit-due-to-mis-aligne.patch b/root-tree-df-Do-not-fail-test-on-32-bit-due-to-mis-aligne.patch
new file mode 100644
index 0000000..ecca598
--- /dev/null
+++ b/root-tree-df-Do-not-fail-test-on-32-bit-due-to-mis-aligne.patch
@@ -0,0 +1,25 @@
+From 58b38e29586975e714deee6ac195b286eb9a73cf Mon Sep 17 00:00:00 2001
+From: Mattias Ellert <mattias.ellert@physics.uu.se>
+Date: Sun, 28 Jun 2026 16:59:36 +0200
+Subject: [PATCH 2/3] [tree][df] Do not fail test on 32 bit due to mis-aligned
+ atomic
+
+---
+ tree/dataframe/test/dataframe_hist.cxx | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/tree/dataframe/test/dataframe_hist.cxx b/tree/dataframe/test/dataframe_hist.cxx
+index f5fe396b50d..7a2c6659a84 100644
+--- a/tree/dataframe/test/dataframe_hist.cxx
++++ b/tree/dataframe/test/dataframe_hist.cxx
+@@ -31,6 +31,7 @@ public:
+ RDFHist()
+ {
+ fDiag.optionalDiag(kWarning, "", "Filling RHist is experimental", /*matchFullMessage=*/false);
++ fDiag.optionalDiag(kWarning, "cling", "expected alignment (8 bytes) exceeds the actual alignment (4 bytes) [-Watomic-alignment]", false);
+ if (GetParam())
+ ROOT::EnableImplicitMT(4);
+ }
+--
+2.54.0
+
diff --git a/root-tree-nt-Compare-size-to-the-size-of-the-struct.patch b/root-tree-nt-Compare-size-to-the-size-of-the-struct.patch
new file mode 100644
index 0000000..4092d83
--- /dev/null
+++ b/root-tree-nt-Compare-size-to-the-size-of-the-struct.patch
@@ -0,0 +1,32 @@
+From 07cbb0515e4f45808696037adce7c0f1bc5e903d Mon Sep 17 00:00:00 2001
+From: Mattias Ellert <mattias.ellert@physics.uu.se>
+Date: Sun, 28 Jun 2026 17:01:40 +0200
+Subject: [PATCH 3/3] [tree][nt] Compare size to the size of the struct
+
+Do not assume it is 2 * sizeof(double), which is not true on 32 bit.
+---
+ tree/ntuple/test/ntuple_modelext.cxx | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/tree/ntuple/test/ntuple_modelext.cxx b/tree/ntuple/test/ntuple_modelext.cxx
+index 8ec3886f921..ef27e844e84 100644
+--- a/tree/ntuple/test/ntuple_modelext.cxx
++++ b/tree/ntuple/test/ntuple_modelext.cxx
+@@ -810,12 +810,12 @@ TEST(RNTuple, ModelExtensionRecordNested)
+ modelUpdater->AddField(std::make_unique<RField<double>>("ptHP"), "r1.r2.r3.r4");
+ modelUpdater->CommitUpdate();
+
+- EXPECT_EQ(2 * sizeof(double), writer->GetModel().GetConstField("r1").GetValueSize());
+- entry = writer->CreateEntry();
+ struct FloatAndDouble {
+ float pt;
+ double ptHP;
+ };
++ EXPECT_EQ(sizeof(FloatAndDouble), writer->GetModel().GetConstField("r1").GetValueSize());
++ entry = writer->CreateEntry();
+
+ auto ptrFloatAndDouble = static_cast<FloatAndDouble *>(entry->GetPtr<void>("r1").get());
+ ptrFloatAndDouble->pt = 2.0;
+--
+2.54.0
+
diff --git a/root.spec b/root.spec
index 9fa7d9c..988893e 100644
--- a/root.spec
+++ b/root.spec
@@ -32,9 +32,9 @@
%global __provides_exclude_from ^%{python3_sitearch}/.*/lib.*\\.so$
Name: root
-Version: 6.38.04
+Version: 6.40.02
%global libversion %(cut -d. -f 1-2 <<< %{version})
-Release: 7%{?dist}
+Release: 1%{?dist}
Summary: Numerical data analysis framework
License: LGPL-2.1-or-later
@@ -59,7 +59,7 @@ Source7: JupyROOT-on-EPEL
Source8: %{name}-get-src.sh
# Clad is a source-transformation automatic differentiation (AD)
# library for C++, implemented as a plugin for the Clang compiler
-Source9: https://github.com/vgvassilev/clad/archive/v2.2/clad-2.2.tar.gz
+Source9: https://github.com/vgvassilev/clad/archive/v2.3/clad-2.3.tar.gz
# Use system fonts
Patch0: %{name}-fontconfig.patch
# Reduce memory usage during linking on ARM and x86 by generating
@@ -77,13 +77,18 @@ Patch5: %{name}-Revert-test-Fetch-the-geometries-from-EOS-and-not-fr.patch
# Preserve memory during parallel build
# https://github.com/root-project/root/pull/18991
Patch6: %{name}-Save-memory-Do-not-link-to-LLVM-libraries-in-parallel.patch
-# https://github.com/root-project/root/pull/21604
-# https://github.com/root-project/root/pull/21605
-Patch7: %{name}-Avoid-additional-python-version-file-to-wrong-location.patch
-# Compatibility with Python 3.15
-# https://github.com/root-project/root/issues/21787
-# https://github.com/root-project/root/pull/21790
-Patch8: %{name}-python-3.15.patch
+# Revert xfail mark (test works except on RHEL/EPEL 9)
+Patch7: %{name}-Revert-cppyy-Mark-addressof-test-as-xfail-on-modules.patch
+# Adjust stressGraphics reference
+Patch8: %{name}-Adjust-stressGraphics-reference.patch
+# https://github.com/root-project/root/pull/22722
+Patch9: %{name}-Use-different-output-filenames-in-tests-pdftitle.cxx.patch
+# https://github.com/root-project/root/pull/22723
+Patch10: %{name}-tmva-sofie-Fix-big-endian.patch
+# https://github.com/root-project/root/pull/22724
+Patch11: %{name}-core-The-old-TUUID-constructor-can-create-either-ver.patch
+Patch12: %{name}-tree-df-Do-not-fail-test-on-32-bit-due-to-mis-aligne.patch
+Patch13: %{name}-tree-nt-Compare-size-to-the-size-of-the-struct.patch
BuildRequires: gcc-c++
BuildRequires: gcc-gfortran
@@ -98,7 +103,6 @@ BuildRequires: freetype-devel
BuildRequires: fcgi-devel
BuildRequires: ftgl-devel
BuildRequires: gl2ps-devel
-BuildRequires: glew-devel
BuildRequires: pcre2-devel
BuildRequires: zlib-devel
BuildRequires: xz-devel
@@ -131,6 +135,7 @@ BuildRequires: desktop-file-utils
BuildRequires: dcap-devel
BuildRequires: xrootd-client-devel >= 1:5.0.0
BuildRequires: cfitsio-devel
+BuildRequires: curl-devel
# Davix version >= 0.6.4, but not between 0.6.8 and 0.7.0
BuildRequires: davix-devel >= 0.7.1
%if %{rrr}
@@ -162,6 +167,7 @@ BuildRequires: zeromq-devel >= 4.3.5
BuildRequires: cppzmq-devel
%endif
%endif
+BuildRequires: python3-pytest
%if %{pandas}
BuildRequires: python3-pandas
%endif
@@ -397,16 +403,18 @@ Obsoletes: python3-jsmva < 6.32.00
This package contains the Python extension for ROOT. It makes it
possible to use ROOT classes in Python.
-%package -n python3-jupyroot
+%package -n python3-root+jupyroot
Summary: ROOT Jupyter kernel
-BuildArch: noarch
-%py_provides python3-jupyroot
-Requires: python3-%{name} = %{version}-%{release}
-Requires: %{name}-core = %{version}-%{release}
+%py_provides python3-root+jupyroot
+Requires: python3-%{name}%{?_isa} = %{version}-%{release}
+Requires: %{name}-core%{?_isa} = %{version}-%{release}
# notebook package was merged with JupyROOT package
Provides: %{name}-notebook = %{version}-%{release}
Obsoletes: %{name}-notebook < 6.32.00
-Requires: js-jsroot >= 7.10
+# Package renamed (jupyroot is now a submodule)
+%py_provides python3-jupyroot
+Obsoletes: python3-jupyroot < 6.40.00
+Requires: js-jsroot >= 7.11
%if %{?fedora}%{!?fedora:0} || %{?rhel}%{!?rhel:0} >= 10
# jupyter-notebook not available in RHEL/EPEL
# some functionality missing
@@ -418,18 +426,20 @@ Requires: python3-metakernel
Requires: python-jupyter-filesystem
%endif
-%description -n python3-jupyroot
+%description -n python3-root+jupyroot
The Jupyter kernel for the ROOT notebook.
%if %{distrdf}
-%package -n python3-distrdf
+%package -n python3-root+distrdf
Summary: Distributed RDataFrame
-BuildArch: noarch
+%py_provides python3-root+distrdf
+# Package renamed (distrdf is now a submodule)
%py_provides python3-distrdf
-Requires: python3-%{name} = %{version}-%{release}
-Requires: %{name}-tree-dataframe = %{version}-%{release}
+Obsoletes: python3-distrdf < 6.40.00
+Requires: python3-%{name}%{?_isa} = %{version}-%{release}
+Requires: %{name}-tree-dataframe%{?_isa} = %{version}-%{release}
-%description -n python3-distrdf
+%description -n python3-root+distrdf
A layer on top of RDataFrame to enable distributed computations. It is
a port of the previously known PyRDF python package.
%endif
@@ -638,6 +648,7 @@ Requires: %{name}-graf%{?_isa} = %{version}-%{release}
Requires: %{name}-graf-gpad%{?_isa} = %{version}-%{release}
Requires: %{name}-graf3d%{?_isa} = %{version}-%{release}
Requires: %{name}-graf3d-gl%{?_isa} = %{version}-%{release}
+Requires: %{name}-graf3d-glad%{?_isa} = %{version}-%{release}
Requires: %{name}-gui%{?_isa} = %{version}-%{release}
Requires: %{name}-gui-ged%{?_isa} = %{version}-%{release}
Requires: %{name}-hist%{?_isa} = %{version}-%{release}
@@ -659,6 +670,7 @@ Requires: %{name}-graf-asimage%{?_isa} = %{version}-%{release}
Requires: %{name}-graf-gpad%{?_isa} = %{version}-%{release}
Requires: %{name}-graf3d%{?_isa} = %{version}-%{release}
Requires: %{name}-graf3d-csg%{?_isa} = %{version}-%{release}
+Requires: %{name}-graf3d-glad%{?_isa} = %{version}-%{release}
Requires: %{name}-gui%{?_isa} = %{version}-%{release}
Requires: %{name}-gui-ged%{?_isa} = %{version}-%{release}
Requires: %{name}-hist%{?_isa} = %{version}-%{release}
@@ -671,6 +683,14 @@ This package contains the GL renderer for ROOT. This library provides
rendering of histograms, and similar. Included is also a high quality
3D viewer for ROOT defined geometries.
+%package graf3d-glad
+Summary: OpenGL loader library for ROOT
+Requires: %{name}-core%{?_isa} = %{version}-%{release}
+
+%description graf3d-glad
+This package contains an OpenGL loader library for ROOT generated by
+the Glad tool (https://github.com/Dav1dde/glad).
+
%package graf3d-gviz3d
Summary: Graphviz 3D library for ROOT
Requires: %{name}-core%{?_isa} = %{version}-%{release}
@@ -1137,6 +1157,15 @@ Requires: %{name}-net%{?_isa} = %{version}-%{release}
%description net-auth
This package contains the basic authentication algorithms used by ROOT.
+%package net-curl
+Summary: Curl extension for ROOT
+Requires: %{name}-core%{?_isa} = %{version}-%{release}
+Requires: %{name}-io%{?_isa} = %{version}-%{release}
+
+%description net-curl
+This package contains the curl extension for TOOT. It provides access
+to http based storage e.g. S3.
+
%package net-davix
Summary: Davix extension for ROOT
Requires: davix-libs%{?_isa} >= 0.7.1
@@ -1153,7 +1182,7 @@ Summary: HTTP server extension for ROOT
Provides: bundled(civetweb)
Requires: %{name}-core%{?_isa} = %{version}-%{release}
Requires: %{name}-io%{?_isa} = %{version}-%{release}
-Requires: js-jsroot >= 7.10
+Requires: js-jsroot >= 7.11
# Library split (net-httpsniff from net-http)
Obsoletes: %{name}-net-http < 6.14.00
@@ -1497,6 +1526,8 @@ Requires: %{name}-core%{?_isa} = %{version}-%{release}
Requires: %{name}-io%{?_isa} = %{version}-%{release}
# Library split (tmva-utils from tmva)
Obsoletes: %{name}-tmva < 6.28.08
+# Library split (tree-ml from tmva-utils)
+Obsoletes: %{name}-tmva-utils < 6.40.00
%description tmva-utils
TMVA utilities using dataframe.
@@ -1507,9 +1538,10 @@ Summary: Toolkit for multivariate data analysis (Python)
License: BSD-3-Clause
Requires: %{name}-core%{?_isa} = %{version}-%{release}
Requires: %{name}-tmva%{?_isa} = %{version}-%{release}
-Requires: %{name}-tmva-sofie%{?_isa} = %{version}-%{release}
Requires: %{name}-tree%{?_isa} = %{version}-%{release}
Requires: python3-numpy
+# Package split (tmva-sofie-parser-python from tmva-python)
+Obsoletes: %{name}-tmva-python < 6.40.00
%description tmva-python
Python integration with TMVA.
@@ -1549,6 +1581,18 @@ Requires: %{name}-tmva-sofie%{?_isa} = %{version}-%{release}
%description tmva-sofie-parser
Parsers for ROOT/TMVA SOFIE
+
+%package tmva-sofie-parser-python
+Summary: ROOT/TMVA SOFIE Parsers for Python
+License: BSD-3-Clause AND MIT
+Requires: %{name}-core%{?_isa} = %{version}-%{release}
+Requires: %{name}-tmva-sofie%{?_isa} = %{version}-%{release}
+Requires: python3-numpy
+# Package split (tmva-sofie-parser-python from tmva-python)
+Obsoletes: %{name}-tmva-python < 6.40.00
+
+%description tmva-sofie-parser-python
+Parsers for ROOT/TMVA SOFIE for Python
%endif
%package tmva-gui
@@ -1594,6 +1638,16 @@ Obsoletes: %{name}-tree-player < 6.14.00
%description tree-dataframe
This package contains a high level interface to ROOT trees.
+
+%package tree-ml
+Summary: ROOT dataframe python
+Requires: %{name}-core%{?_isa} = %{version}-%{release}
+Requires: %{name}-vecops%{?_isa} = %{version}-%{release}
+# Library split (tree-ml from tmva-utils)
+Obsoletes: %{name}-tmva-utils < 6.40.00
+
+%description tree-ml
+This package contains ...
%endif
%package tree-player
@@ -1864,10 +1918,19 @@ This package contains a library to show a pop-up dialog when fitting
various kinds of data.
%package histv7
-Summary: Histogram library for ROOT 7
+Summary: Conversion functions from RHist<int> to THist
Requires: %{name}-core%{?_isa} = %{version}-%{release}
%description histv7
+This package contains converters from the "old" THn* Hist library and
+the "new" histv7 package.
+
+%package histv7util
+Summary: Histogram library for ROOT 7
+Requires: %{name}-core%{?_isa} = %{version}-%{release}
+Requires: %{name}-hist%{?_isa} = %{version}-%{release}
+
+%description histv7util
This package contains a library for histogramming in ROOT 7.
%endif
@@ -1883,29 +1946,23 @@ This package contains a library for histogramming in ROOT 7.
%patch -P6 -p1
%patch -P7 -p1
%patch -P8 -p1
+%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
-rm -rf graf2d/asimage/src/libAfterImage/{libjpeg,libpng,libungif,zlib}
-sed '/zlib\/zlib.h/d' -i graf2d/asimage/src/libAfterImage/.depend
# * ftgl
rm -rf graf3d/ftgl/src graf3d/ftgl/inc
-# * freetype
-rm -rf graf2d/freetype/src
-# * glew, lz4, nlohmann, pcre, xxhash, zlib, zstd
-rm -rf builtins/glew
-rm -rf builtins/lz4
+# * nlohmann
%if ! %{bundlejson}
-rm -rf builtins/nlohmann
+rm builtins/nlohmann/json.hpp
%endif
-rm -rf builtins/pcre
-rm -rf builtins/xxhash
-rm -rf builtins/zlib
-rm -rf builtins/zstd
-# * lzma
-rm core/lzma/src/*.tar.gz
-# * gl2ps
-rm graf3d/gl/src/gl2ps.cxx graf3d/gl/src/gl2ps/gl2ps.h
+# * pcre
+rm builtins/pcre/pcre-*.tar.bz2
+# * xxhash
+rm builtins/xxhash/xxhash.c builtins/xxhash/xxhash.h
# * unuran
rm math/unuran/src/*.tar.gz
# * x11 extension headers
@@ -1914,7 +1971,8 @@ rm -rf graf2d/x11/inc/X11
rm -rf js/[^f]* js/files/draw.htm js/files/online.htm
# Additional documentation
-install -p -m 644 %{SOURCE7} bindings/jupyroot
+install -p -m 644 %{SOURCE7} \
+ bindings/pyroot/pythonizations/python/ROOT/_jupyroot
%build
%if %{?rhel}%{!?rhel:0} == 10
@@ -1923,10 +1981,6 @@ install -p -m 644 %{SOURCE7} bindings/jupyroot
%define _lto_cflags %{nil}
%endif
-unset QTDIR
-unset QTLIB
-unset QTINC
-
%cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DCMAKE_INSTALL_PREFIX:PATH=%{_prefix} \
-DCMAKE_INSTALL_LIBDIR:PATH=%{_libdir}/%{name} \
@@ -1941,13 +1995,11 @@ unset QTINC
-Dbuiltin_clang:BOOL=ON \
-Dbuiltin_cling:BOOL=ON \
-Dbuiltin_cppzmq:BOOL=OFF \
- -Dbuiltin_davix:BOOL=OFF \
-Dbuiltin_fftw3:BOOL=OFF \
-Dbuiltin_freetype:BOOL=OFF \
-Dbuiltin_ftgl:BOOL=OFF \
-Dbuiltin_gif:BOOL=OFF \
-Dbuiltin_gl2ps:BOOL=OFF \
- -Dbuiltin_glew:BOOL=OFF \
-Dbuiltin_gsl:BOOL=OFF \
-Dbuiltin_gtest:BOOL=OFF \
-Dbuiltin_jpeg:BOOL=OFF \
@@ -1965,9 +2017,7 @@ unset QTINC
-Dbuiltin_png:BOOL=OFF \
-Dbuiltin_tbb:BOOL=OFF \
-Dbuiltin_unuran:BOOL=OFF \
- -Dbuiltin_vc:BOOL=OFF \
-Dbuiltin_vdt:BOOL=OFF \
- -Dbuiltin_veccore:BOOL=OFF \
-Dbuiltin_xrootd:BOOL=OFF \
-Dbuiltin_xxhash:BOOL=OFF \
-Dbuiltin_zeromq:BOOL=OFF \
@@ -1985,9 +2035,10 @@ unset QTINC
-Dcefweb:BOOL=OFF \
-Dcheck_connection:BOOL=OFF \
-Dclad:BOOL=ON \
- -DCLAD_SOURCE_DIR:PATH=${PWD}/clad-2.2 \
+ -DCLAD_SOURCE_DIR:PATH=${PWD}/clad-2.3 \
-Dcocoa:BOOL=OFF \
-Dcuda:BOOL=OFF \
+ -Dcurl:BOOL=ON \
-Ddaos:BOOL=OFF \
%if %{dataframe}
-Ddataframe:BOOL=ON \
@@ -2074,9 +2125,8 @@ unset QTINC
-Dunfold:BOOL=ON \
-Dunuran:BOOL=ON \
-During:BOOL=ON \
- -Dvc:BOOL=OFF \
+ -Duse_gsl_cblas:BOOL=OFF \
-Dvdt:BOOL=OFF \
- -Dveccore:BOOL=OFF \
-Dvecgeom:BOOL=OFF \
-Dwebgui:BOOL=ON \
-Dx11:BOOL=ON \
@@ -2130,43 +2180,24 @@ mv %{buildroot}%{python3_sitearch}/ROOT/libROOTPythonizations.so \
mv %{buildroot}%{python3_sitearch}/cppyy/libcppyy.so \
%{buildroot}%{python3_sitearch}/cppyy/libcppyy%{python3_ext_suffix}
-# Move noarch python modules to sitelib
-if [ "%{python3_sitelib}" != "%{python3_sitearch}" ] ; then
-mkdir -p %{buildroot}%{python3_sitelib}
-mv %{buildroot}%{python3_sitearch}/JupyROOT %{buildroot}%{python3_sitelib}
-%if %{distrdf}
-mv %{buildroot}%{python3_sitearch}/DistRDF %{buildroot}%{python3_sitelib}
-%endif
-fi
-
# Create .dist-info files so that rpm auto-generates provides
mkdir %{buildroot}%{python3_sitearch}/ROOT-%{version}.dist-info
-echo 'Name: ROOT' > \
- %{buildroot}%{python3_sitearch}/ROOT-%{version}.dist-info/METADATA
-echo 'Version: %{version}' >> \
- %{buildroot}%{python3_sitearch}/ROOT-%{version}.dist-info/METADATA
-mkdir %{buildroot}%{python3_sitelib}/JupyROOT-%{version}.dist-info
-echo 'Name: JupyROOT' > \
- %{buildroot}%{python3_sitelib}/JupyROOT-%{version}.dist-info/METADATA
-echo 'Version: %{version}' >> \
- %{buildroot}%{python3_sitelib}/JupyROOT-%{version}.dist-info/METADATA
-%if %{distrdf}
-mkdir %{buildroot}%{python3_sitelib}/DistRDF-%{version}.dist-info
-echo 'Name: DistRDF' > \
- %{buildroot}%{python3_sitelib}/DistRDF-%{version}.dist-info/METADATA
-echo 'Version: %{version}' >> \
- %{buildroot}%{python3_sitelib}/DistRDF-%{version}.dist-info/METADATA
-%endif
+cat > %{buildroot}%{python3_sitearch}/ROOT-%{version}.dist-info/METADATA << EOF
+Name: ROOT
+Version: %{version}
+Provides-Extra: distrdf
+Provides-Extra: jupyroot
+EOF
# Put jupyter stuff in the right places
mkdir -p %{buildroot}%{_datadir}/jupyter/kernels
cp -pr %{buildroot}%{_datadir}/%{name}/notebook/kernels/root \
- %{buildroot}%{_datadir}/jupyter/kernels/python3-jupyroot
+ %{buildroot}%{_datadir}/jupyter/kernels/root
sed -e 's!python[0-9]*\.[0-9]*!%{__python3}!' \
- -i %{buildroot}%{_datadir}/jupyter/kernels/python3-jupyroot/kernel.json
+ -i %{buildroot}%{_datadir}/jupyter/kernels/root/kernel.json
sed -e '/^\#!/d' \
- -i %{buildroot}%{python3_sitelib}/JupyROOT/kernel/rootkernel.py
+ -i %{buildroot}%{python3_sitearch}/ROOT/_jupyroot/kernel/rootkernel.py
rm -rf %{buildroot}%{_datadir}/%{name}/notebook/custom
rm -rf %{buildroot}%{_datadir}/%{name}/notebook/html
@@ -2196,12 +2227,9 @@ sed -e 's!/usr/bin/env python3!%{__python3}!' \
-e '/import sys/d' \
-e '/import cmdLineUtils/iimport sys' \
-e '/import cmdLineUtils/isys.path.insert(0, "%{_datadir}/%{name}/cli")' \
- -i %{buildroot}%{_bindir}/rootcp \
- %{buildroot}%{_bindir}/rooteventselector \
- %{buildroot}%{_bindir}/rootmkdir \
+ -i %{buildroot}%{_bindir}/rooteventselector \
%{buildroot}%{_bindir}/rootmv \
%{buildroot}%{_bindir}/rootprint \
- %{buildroot}%{_bindir}/rootrm \
%{buildroot}%{_bindir}/rootslimtree
sed -e 's!/usr/bin/env python3!%{__python3}!' \
-i %{buildroot}%{_bindir}/rootdrawtree
@@ -2214,7 +2242,6 @@ sed -e 's!/usr/bin/python!%{__python3}!' \
rm %{buildroot}%{_datadir}/%{name}/root.desktop
rm %{buildroot}%{_pkgdocdir}/INSTALL
rm %{buildroot}%{_pkgdocdir}/README.CXXMODULES.md
-rm -rf %{buildroot}%{_datadir}/%{name}/html
# Only used on Windows
rm %{buildroot}%{_datadir}/%{name}/macros/fileopen.C
@@ -2268,7 +2295,6 @@ done
# ... and merge some of them
cat includelist-core-{[^mw],m[^au]}* > includelist-core
cat includelist-graf2d-x11ttf >> includelist-graf2d-x11
-cat includelist-graf3d-rglew >> includelist-graf3d-gl
# Do python byte compilation (for non-standard paths)
%py_byte_compile %{__python3} %{buildroot}%{_datadir}/%{name}/cli
@@ -2281,14 +2307,14 @@ ln -s ../../files files
popd
pushd runtutorials
ln -s ../../files files
-ln -s ../../files/tutorials/df014_CsvDataSource_MuRun2010B.csv CsvDataSource_MuRun2010B.csv
ln -s ../../files/usa.root usa.root
popd
popd
# Exclude some tests that can not be run
#
-# - test-stressIOPlugins-*
+# - test-stressIOPlugins-http
+# - test-stressIOPlugins-xroot
# requires network access (by design since they test the remote file IO)
#
# - tutorial-analysis-dataframe-df101_h1Analysis
@@ -2305,12 +2331,14 @@ popd
#
# - tutorial-analysis-dataframe-df033_Describe-py
# - tutorial-analysis-dataframe-df102_NanoAODDimuonAnalysis(-py)?
+# - tutorial-hist-histv7-hist102_NanoAODDimuonAnalysis
# reads input data over network:
# root://eospublic.cern.ch//eos/opendata/cms/derived-data/
# AOD2NanoAODOutreachTool/Run2012BC_DoubleMuParked_Muons.root
#
# - gtest-tree-treeplayer-treeprocessormt-remotefiles
# - tutorial-analysis-dataframe-df103_NanoAODHiggsAnalysis(-py)?
+# - tutorial-hist-histv7-hist103_NanoAODHiggsAnalysis
# reads input data over network:
# root://eospublic.cern.ch//eos/root-eos/cms_opendata_2012_nanoaod/
#
@@ -2323,6 +2351,15 @@ popd
# reads input data over network:
# root://eospublic.cern.ch//eos/opendata/atlas/OutreachDatasets/2020-01-22/
#
+# - tutorial-analysis-dataframe-df014_CSVDataSource(-py)
+# - tutorial-analysis-dataframe-df015_LazyDataSource
+# reads input data over network:
+# http://root.cern/files/tutorials/df014_CsvDataSource_MuRun2010B.csv
+#
+# - tutorial-hist-hist039_TH2Poly_usa-py
+# reads input data over network:
+# http://root.cern/files/usa.root
+#
# - tutorial-io-ntuple-ntpl004_dimuon
# reads input data over network
# http://root.cern.ch/files/NanoAOD_DoubleMuon_CMS2011OpenData.root (1.5 GB)
@@ -2331,9 +2368,9 @@ popd
# reads input data over network
# http://root.cern.ch/files/HiggsTauTauReduced/GluGluToHToTauTau.root (20 MB)
#
-# - tutorial-io-ntuple-ntpl011_global_temperatures
-# reads input data over network
-# http://root.cern.ch/files/tutorials/GlobalLandTemperaturesByCity.csv
+# - gtest-net-curl-rawfile-curl
+# - gtest-net-curl-tfile-curl
+# reads input file over network
#
# - gtest-net-davix-RRawFileDavix
# reads input file over network
@@ -2355,7 +2392,7 @@ popd
# - test-webgui-ping
# error: Cannot display window in native
#
-# - test-stressgraphics-firefox-skip3d:
+# - test-stressgraphics-firefox-skip3d
# requires firefox...
#
# - test-stressgraphics-svg
@@ -2363,8 +2400,12 @@ popd
#
# - tutorial-visualisation-webcanv-fonts_ttf.cxx:
# Requires web graphics
+#
+# - tmva-sofie-test-TestCladAutodiff
+# Fails often...
excluded="\
-test-stressIOPlugins|\
+test-stressIOPlugins-http|\
+test-stressIOPlugins-xroot|\
tutorial-analysis-dataframe-df101_h1Analysis|\
tutorial-analysis-tree-run_h1analysis|\
tutorial-legacy-multicore-mp104_processH1|\
@@ -2372,17 +2413,23 @@ tutorial-io-tree-imt_parTreeProcessing|\
tutorial-analysis-dataframe-df..._SQlite|\
tutorial-analysis-dataframe-df033_Describe-py|\
tutorial-analysis-dataframe-df102_NanoAODDimuonAnalysis|\
+tutorial-hist-histv7-hist102_NanoAODDimuonAnalysis|\
gtest-tree-treeplayer-treeprocessormt-remotefiles|\
tutorial-analysis-dataframe-df103_NanoAODHiggsAnalysis|\
+tutorial-hist-histv7-hist103_NanoAODHiggsAnalysis|\
tutorial-analysis-dataframe-df104_HiggsToTwoPhotons-py|\
tutorial-analysis-dataframe-df105_WBosonAnalysis-py|\
tutorial-analysis-dataframe-df106_HiggsToFourLeptons|\
tutorial-analysis-dataframe-df107_SingleTopAnalysis-py|\
tutorial-visualisation-rcanvas-df104-py|\
tutorial-visualisation-rcanvas-df105-py|\
+tutorial-analysis-dataframe-df014_CSVDataSource|\
+tutorial-analysis-dataframe-df015_LazyDataSource|\
+tutorial-hist-hist039_TH2Poly_usa-py|\
tutorial-io-ntuple-ntpl004_dimuon|\
tutorial-io-ntuple-ntpl008_import|\
-tutorial-io-ntuple-ntpl011_global_temperatures|\
+gtest-net-curl-rawfile-curl|\
+gtest-net-curl-tfile-curl|\
gtest-net-davix-RRawFileDavix|\
gtest-net-netxng-RRawFileNetXNG|\
gtest-net-netxng-TNetXNGFileTest|\
@@ -2391,49 +2438,57 @@ tutorial-machine_learning-tmva100_DataPreparation-py|\
test-webgui-ping|\
test-stressgraphics-firefox-skip3d|\
test-stressgraphics-svg|\
-tutorial-visualisation-webcanv-fonts_ttf.cxx"
+tutorial-visualisation-webcanv-fonts_ttf.cxx|\
+tmva-sofie-test-TestCladAutodiff"
+
+%if %{?rhel}%{!?rhel:0} == 9
+# - pyunittests-bindings-pyroot-cppyy-cppyy-test-datatypes
+# Fails on EPEL 9 (see patch above)
+excluded="${excluded}|\
+pyunittests-bindings-pyroot-cppyy-cppyy-test-datatypes"
+%endif
%ifarch %{ix86}
# - gtest-hist-hist-TFormulaGradientTests
# out of memory
#
# - tmva-sofie-test-TestCustomModelsFromONNX
-# Expected equality of these values:
-# output.size()
-# Which is: 1000
-# sizeof(Slice_Neg::output) / sizeof(float)
-# Which is: 900
+# many failures ...
+#
+# - pyunittests-bindings-pyroot-cppyy-cppyy-test-datatypes
+# - pyunittests-bindings-pyroot-cppyy-cppyy-test-lowlevel
+# - pyunittests-bindings-pyroot-cppyy-cppyy-test-regression
+# cppyy tests failing
excluded="${excluded}|\
gtest-hist-hist-TFormulaGradientTests|\
-tmva-sofie-test-TestCustomModelsFromONNX\$\$"
+tmva-sofie-test-TestCustomModelsFromONNX|\
+pyunittests-bindings-pyroot-cppyy-cppyy-test-datatypes|\
+pyunittests-bindings-pyroot-cppyy-cppyy-test-lowlevel|\
+pyunittests-bindings-pyroot-cppyy-cppyy-test-regression"
%endif
%ifarch %{power64}
-%if %{?fedora}%{!?fedora:0} >= 42
+# - gtest-tree-ntuple-ntuple-emulated
# - gtest-tree-ntuple-ntuple-evolution-shape
# waitpid() failed
excluded="${excluded}|\
-gtest-tree-ntuple-ntuple-evolution-shape"
-%endif
-
-# - gtest-tree-ntuple-ntuple-emulated
-# - gtest-tree-ntuple-ntuple-merger
-# Random failures
-excluded="${excluded}|\
gtest-tree-ntuple-ntuple-emulated|\
-gtest-tree-ntuple-ntuple-merger"
+gtest-tree-ntuple-ntuple-evolution-shape"
%endif
%ifarch s390x
# - gtest-roofit-roofitcore-testNaNPacker
-# - gtest-roofit-roofitcore-testLikelihoodGradientJob
# Uses "Packed NaN" feature, not implemented for big endian.
excluded="${excluded}|\
-gtest-roofit-roofitcore-testNaNPacker|\
-gtest-roofit-roofitcore-testLikelihoodGradientJob"
+gtest-roofit-roofitcore-testNaNPacker"
# - gtest-core-dictgen-dictgen-base
+# - gtest-net-httpsniff-testRootSniffer
+# - gtest-net-net-testParallelMergingFile
+# - gtest-roofit-roofitcore-testLikelihoodGradientJob
# - gtest-tree-dataframe-dataframe-concurrency
+# - gtest-tree-dataframe-dataframe-snapshot-interpreted-class-read
+# - gtest-tree-dataframe-dataframe-snapshot-interpreted-class-write
# - gtest-tree-dataframe-dataframe-snapshot-ntuple
# - gtest-tree-dataframe-dataframe-unified-constructor
# - gtest-tree-dataframe-dataframe-vary
@@ -2458,6 +2513,7 @@ gtest-roofit-roofitcore-testLikelihoodGradientJob"
# - gtest-tree-ntuple-ntuple-processor-join
# - gtest-tree-ntuple-ntuple-project
# - gtest-tree-ntuple-ntuple-show
+# - gtest-tree-ntuple-ntuple-soa
# - gtest-tree-ntuple-ntuple-storage
# - gtest-tree-ntuple-ntuple-storage-daos
# - gtest-tree-ntuple-ntuple-types
@@ -2474,10 +2530,10 @@ gtest-roofit-roofitcore-testLikelihoodGradientJob"
# - pyunittests-bindings-distrdf-backend-distrdf-unit-backend-graph-caching
# - pyunittests-bindings-pyroot-pythonizations-pyroot-pyz-rtensor
# - pyunittests-bindings-pyroot-pythonizations-pyroot-pyz-stl-vector
+# - pyunittests-hist-histv7-hist-py
# - pyunittests-io-io-rfile-py
# - tmva-sofie-test-TestCustomModelsFromONNX
# - tutorial-analysis-dataframe-df006_ranges-py
-# - tutorial-hist-hist007_TH1_liveupdate-py
# - tutorial-math-exampleFunction-py
# - tutorial-math-fit-combinedFit-py
# - tutorial-math-fit-NumericalMinimization-py
@@ -2488,9 +2544,16 @@ gtest-roofit-roofitcore-testLikelihoodGradientJob"
# - test-stresshistofit-interpreted
# - test-stresshistogram
# - test-stresshistogram-interpreted
+#
+# - pyunittests-bindings-pyroot-cppyy-cppyy-test-*
excluded="${excluded}|\
gtest-core-dictgen-dictgen-base|\
+gtest-net-httpsniff-testRootSniffer|\
+gtest-net-net-testParallelMergingFile|\
+gtest-roofit-roofitcore-testLikelihoodGradientJob|\
gtest-tree-dataframe-dataframe-concurrency|\
+gtest-tree-dataframe-dataframe-snapshot-interpreted-class-read|\
+gtest-tree-dataframe-dataframe-snapshot-interpreted-class-write|\
gtest-tree-dataframe-dataframe-snapshot-ntuple|\
gtest-tree-dataframe-dataframe-unified-constructor|\
gtest-tree-dataframe-dataframe-vary|\
@@ -2515,6 +2578,7 @@ gtest-tree-ntuple-ntuple-processor-chain|\
gtest-tree-ntuple-ntuple-processor-join|\
gtest-tree-ntuple-ntuple-project|\
gtest-tree-ntuple-ntuple-show|\
+gtest-tree-ntuple-ntuple-soa|\
gtest-tree-ntuple-ntuple-storage\$\$|\
gtest-tree-ntuple-ntuple-storage-daos|\
gtest-tree-ntuple-ntuple-types|\
@@ -2529,10 +2593,10 @@ gtest-tree-tree-testTTreeRegressions|\
pyunittests-bindings-distrdf-backend-distrdf-unit-backend-graph-caching|\
pyunittests-bindings-pyroot-pythonizations-pyroot-pyz-rtensor|\
pyunittests-bindings-pyroot-pythonizations-pyroot-pyz-stl-vector|\
+pyunittests-hist-histv7-hist-py|\
pyunittests-io-io-rfile-py|\
tmva-sofie-test-TestCustomModelsFromONNX|\
tutorial-analysis-dataframe-df006_ranges-py|\
-tutorial-hist-hist007_TH1_liveupdate-py|\
tutorial-math-exampleFunction-py|\
tutorial-math-fit-combinedFit-py|\
tutorial-math-fit-NumericalMinimization-py|\
@@ -2540,19 +2604,16 @@ tutorial-visualisation-rcanvas-rbox-py|\
test-stresshistofit\$\$|\
test-stresshistofit-interpreted|\
test-stresshistogram\$\$|\
-test-stresshistogram-interpreted"
+test-stresshistogram-interpreted|\
+pyunittests-bindings-pyroot-cppyy-cppyy-test"
# The zlib-ng library is compiled with hardware acceleration support on s390x
# in Fedora 43 and later and RHEL 10.1 and later
# This means that some tests that compare the size of compressed data fail.
# - test-stress
-# - gtest-tree-readspeed-readspeed-general
-# - gtest-tree-tree-testTBranch
%if %{?fedora}%{!?fedora:0} >= 43 || %{?rhel}%{!?rhel:0} >= 10
excluded="${excluded}|\
-test-stress\$\$|\
-gtest-tree-readspeed-readspeed-general|\
-gtest-tree-tree-testTBranch"
+test-stress\$\$"
%endif
%endif
@@ -2571,32 +2632,60 @@ gtest-math-matrix-testMatrixTSparse"
%endif
# Filter out parts of tests that require remote network access
-# RNTuple.StdAtomic fails on ix86 (different alignment 64 bit (non)atomic)
-# InterpreterTest.Evaluate fails on s390x
-# TClingDataMemberInfo.Offset fails on s390x
+# gtest-io-io-rfile: RFile.RemoteRead
+# gtest-io-io-RRawFile: RRawFile.Remote
+# gtest-io-io-TFile: TFile.ReadWithoutGlobalRegistrationNet
+# TFile.ReadWithoutGlobalRegistrationWeb
+# TFile.ReadWithCacheWithoutGlobalRegistration
+# gtest-tree-dataframe-datasource-csv: RCsvDS.Remote
+# gtest-tree-dataframe-datasource-sqlite: RSqliteDS.Remote
+# gtest-tree-ntuple-ntuple-storage: RNTuple.OpenHTTP
+# gtest-tree-tree-testTChainParsing: TChainParsing.DoubleSlash
+# TChainParsing.RemoteGlob
+#
+# Fails on ix86 (different alignment 64 bit (non)atomic)
+# gtest-tree-ntuple-ntuple-types: RNTuple.StdAtomic
+#
+# Fails on ppc64le (no __float128 support)
+# cppinterop-CppInterOpTests: CppInterOpTest/InProcessJIT.Interpreter_Evaluate
+#
+# Fails on s390x (big endian)
# https://github.com/root-project/root/issues/14512
-# TTreeRegressions.PrintClustersRounding
-# relies on specific versions of compression libraries
+# cppinterop-CppInterOpTests: CppInterOpTest/InProcessJIT.Interpreter_Evaluate
+# gtest-core-metacling-TClingTest: TClingDataMemberInfo.Offset
+# gtest-io-io-rfile: RFile.RNTuple
+# gtest-tree-treeplayer-treeplayer-branchobject: TTreeReaderBasic.LorentzVector32
+# gtest-tree-tree-testTTreeRegressions: TTreeRegressions.TTreeFormulaMemberIndex
+#
+# Fails on s390x (differnt compression size with zlib-ng)
# https://github.com/root-project/root/issues/18995
+# gtest-tree-tree-testTTreeRegressions: TTreeRegressions.PrintClustersRounding
export GTEST_FILTER=-\
%ifarch %{ix86}
RNTuple.StdAtomic:\
%endif
+%ifarch %{power64}
+CppInterOpTest/InProcessJIT.Interpreter_Evaluate:\
+%endif
%ifarch s390x
-InterpreterTest.Evaluate:\
+CppInterOpTest/InProcessJIT.Interpreter_Evaluate:\
TClingDataMemberInfo.Offset:\
+RFile.RNTuple:\
TTreeReaderBasic.LorentzVector32:\
+TTreeRegressions.TTreeFormulaMemberIndex:\
+TTreeRegressions.PrintClustersRounding:\
%endif
RCsvDS.Remote:\
RFile.RemoteRead:\
RNTuple.OpenHTTP:\
RRawFile.Remote:\
RSqliteDS.Davix:\
+RSqliteDS.Remote:\
TChainParsing.DoubleSlash:\
TChainParsing.RemoteGlob:\
TFile.ReadWithoutGlobalRegistrationNet:\
TFile.ReadWithoutGlobalRegistrationWeb:\
-TTreeRegressions.PrintClustersRounding
+TFile.ReadWithCacheWithoutGlobalRegistration
%ctest -- -E "${excluded}"
%pretrans net-http -p <lua>
@@ -2619,7 +2708,7 @@ if [ -r /var/lib/alternatives/libPyROOT.so ] ; then
done
fi
-%post -n python3-jupyroot
+%post -n python3-root+jupyroot
mkdir -p /etc/jupyter
if [ -e /etc/jupyter/jupyter_notebook_config.py ] ; then
sed '/Extra static paths for JupyROOT - start/','/Extra static paths for JupyROOT - end/'d -i /etc/jupyter/jupyter_notebook_config.py
@@ -2638,7 +2727,7 @@ c.ServerApp.extra_static_paths.append('%{_jsdir}/jsroot')
# Extra static paths for JupyROOT - end - do not remove this line
EOF
-%postun -n python3-jupyroot
+%postun -n python3-root+jupyroot
if [ $1 -eq 0 ] ; then
if [ -e /etc/jupyter/jupyter_notebook_config.py ] ; then
sed '/Extra static paths for JupyROOT - start/','/Extra static paths for JupyROOT - end/'d -i /etc/jupyter/jupyter_notebook_config.py
@@ -2664,9 +2753,12 @@ fi
%{_bindir}/root
%{_bindir}/root.exe
%{_bindir}/rootbrowse
+%{_bindir}/rootcp
%{_bindir}/rootls
+%{_bindir}/rootmkdir
%{_bindir}/rootn.exe
%{_bindir}/rootreadspeed
+%{_bindir}/rootrm
%{_bindir}/roots
%{_bindir}/roots.exe
%{_bindir}/rootssh
@@ -2767,7 +2859,7 @@ fi
%files testsupport
%{_includedir}/%{name}/ROOT/TestSupport.hxx
-%{_libdir}/%{name}/TestSupport
+%{_libdir}/%{name}/libTestSupport
%doc core/testsupport/README.md
%files tpython -f includelist-bindings-tpython
@@ -2777,22 +2869,24 @@ fi
%files -n python3-%{name} -f includelist-bindings-pyroot
%{python3_sitearch}/cppyy
%{python3_sitearch}/ROOT
+%exclude %{python3_sitearch}/ROOT/_distrdf
+%exclude %{python3_sitearch}/ROOT/_jupyroot
%{python3_sitearch}/ROOT-*.dist-info
%{_libdir}/%{name}/libCPyCppyy.*
%dir %{_includedir}/%{name}/CPyCppyy
-%files -n python3-jupyroot
-%{python3_sitelib}/JupyROOT
-%{python3_sitelib}/JupyROOT-*.dist-info
-%{_datadir}/jupyter/kernels/python3-jupyroot
+%files -n python3-root+jupyroot
+%{python3_sitearch}/ROOT/_jupyroot
+%ghost %{python3_sitearch}/ROOT-*.dist-info
+%{_datadir}/jupyter/kernels/root
%{_bindir}/rootnb.exe
-%doc bindings/jupyroot/README.md
-%doc bindings/jupyroot/JupyROOT-on-EPEL
+%doc bindings/pyroot/pythonizations/python/ROOT/_jupyroot/README.md
+%doc bindings/pyroot/pythonizations/python/ROOT/_jupyroot/JupyROOT-on-EPEL
%if %{distrdf}
-%files -n python3-distrdf
-%{python3_sitelib}/DistRDF
-%{python3_sitelib}/DistRDF-*.dist-info
+%files -n python3-root+distrdf
+%{python3_sitearch}/ROOT/_distrdf
+%ghost %{python3_sitearch}/ROOT-*.dist-info
%endif
%if %{rrr}
@@ -2898,6 +2992,9 @@ fi
%{_datadir}/%{name}/plugins/TVirtualViewer3D/P020_TGLSAViewer.C
%{_datadir}/%{name}/plugins/TVirtualViewer3D/P030_TGLViewer.C
+%files graf3d-glad
+%{_libdir}/%{name}/libROOTGlad.*
+
%files graf3d-gviz3d -f includelist-graf3d-gviz3d
%{_libdir}/%{name}/libGviz3d.*
%{_libdir}/%{name}/libGviz3d_rdict.pcm
@@ -3122,6 +3219,12 @@ fi
%{_datadir}/%{name}/plugins/TVirtualAuth/P010_TRootAuth.C
%doc %{_pkgdocdir}/README.AUTH
+%files net-curl -f includelist-net-curl
+%{_libdir}/%{name}/libRCurlHttp.*
+%{_libdir}/%{name}/libRCurlHttp_rdict.pcm
+%{_datadir}/%{name}/plugins/ROOT@@Internal@@RRawFile/P015_RRawFileCurl.C
+%{_datadir}/%{name}/plugins/TFile/P140_TCurlFile.C
+
%files net-davix -f includelist-net-davix
%{_libdir}/%{name}/libRDAVIX.*
%{_libdir}/%{name}/libRDAVIX_rdict.pcm
@@ -3251,10 +3354,6 @@ fi
%exclude %{_includedir}/%{name}/TMVA/RSofieReader.hxx
%exclude %{_includedir}/%{name}/TMVA/RStandardScaler.hxx
%exclude %{_includedir}/%{name}/TMVA/RTensorUtils.hxx
-%exclude %{_includedir}/%{name}/TMVA/BatchGenerator/RBatchGenerator.hxx
-%exclude %{_includedir}/%{name}/TMVA/BatchGenerator/RBatchLoader.hxx
-%exclude %{_includedir}/%{name}/TMVA/BatchGenerator/RChunkConstructor.hxx
-%exclude %{_includedir}/%{name}/TMVA/BatchGenerator/RChunkLoader.hxx
%if %{dataframe}
%files tmva-utils
@@ -3267,11 +3366,6 @@ fi
%{_includedir}/%{name}/TMVA/RSofieReader.hxx
%{_includedir}/%{name}/TMVA/RStandardScaler.hxx
%{_includedir}/%{name}/TMVA/RTensorUtils.hxx
-%dir %{_includedir}/%{name}/TMVA/BatchGenerator
-%{_includedir}/%{name}/TMVA/BatchGenerator/RBatchGenerator.hxx
-%{_includedir}/%{name}/TMVA/BatchGenerator/RBatchLoader.hxx
-%{_includedir}/%{name}/TMVA/BatchGenerator/RChunkConstructor.hxx
-%{_includedir}/%{name}/TMVA/BatchGenerator/RChunkLoader.hxx
%endif
%files tmva-python -f includelist-tmva-pymva
@@ -3293,6 +3387,13 @@ fi
%files tmva-sofie-parser -f includelist-tmva-sofie_parsers
%{_libdir}/%{name}/libROOTTMVASofieParser.*
%{_libdir}/%{name}/libROOTTMVASofieParser_rdict.pcm
+%exclude %{_includedir}/%{name}/TMVA/RModelParser_Keras.h
+%exclude %{_includedir}/%{name}/TMVA/RModelParser_PyTorch.h
+
+%files tmva-sofie-parser-python
+%{_libdir}/%{name}/libROOTTMVASofiePyParsers.*
+%{_includedir}/%{name}/TMVA/RModelParser_Keras.h
+%{_includedir}/%{name}/TMVA/RModelParser_PyTorch.h
%endif
%files tmva-gui -f includelist-tmva-tmvagui
@@ -3308,6 +3409,11 @@ fi
%files tree-dataframe -f includelist-tree-dataframe
%{_libdir}/%{name}/libROOTDataFrame.*
%{_libdir}/%{name}/libROOTDataFrame_rdict.pcm
+
+%files tree-ml -f includelist-tree-ml
+%{_libdir}/%{name}/libROOTMLDataLoader.*
+%{_libdir}/%{name}/libROOTMLDataLoader_rdict.pcm
+%dir %{_includedir}/%{name}/ROOT/ML
%endif
%files tree-player -f includelist-tree-treeplayer
@@ -3331,13 +3437,10 @@ fi
%{_libdir}/%{name}/libUnfold_rdict.pcm
%files cli
-%{_bindir}/rootcp
%{_bindir}/rootdrawtree
%{_bindir}/rooteventselector
-%{_bindir}/rootmkdir
%{_bindir}/rootmv
%{_bindir}/rootprint
-%{_bindir}/rootrm
%{_bindir}/rootslimtree
%{_datadir}/%{name}/cli
@@ -3431,15 +3534,33 @@ fi
%files histv7 -f includelist-hist-histv7
%{_libdir}/%{name}/libROOTHist.*
%{_libdir}/%{name}/libROOTHist_rdict.pcm
+
+%files histv7util -f includelist-hist-histv7util
+%{_libdir}/%{name}/libROOTHistUtil.*
+%{_libdir}/%{name}/libROOTHistUtil_rdict.pcm
+%dir %{_includedir}/%{name}/ROOT/Hist
%endif
%changelog
+* Sat Jun 20 2026 Mattias Ellert <mattias.ellert@physics.uu.se> - 6.40.02-1
+- Update to 6.40.02
+- Rename the jupyroot and distrdf packages to reflect that they are
+ now submodules of the main pyyhon package
+- New subpackages: root-package graf3d-glad, root-package net-curl,
+ root-package tmva-sofie-parser-python, root-package tree-ml,
+ root-package histv7util
+- Dropped patches: 2
+- New patches: 7
+
* Fri Jun 12 2026 Yaakov Selkowitz <yselkowi@redhat.com> - 6.38.04-7
- Rebuilt for openssl 4.0
* Thu Jun 04 2026 Python Maint <python-maint@redhat.com> - 6.38.04-6
- Rebuilt for Python 3.15
+* Wed May 06 2026 Mattias Ellert <mattias.ellert@physics.uu.se> - 6.38.04-6
+- Combined rebuild for xrootd and R
+
* Sat Apr 25 2026 Iñaki Úcar <iucar@fedoraproject.org> - 6.38.04-5
- R-maint-sig mass rebuild
diff --git a/sources b/sources
index 11e9563..f863ce7 100644
--- a/sources
+++ b/sources
@@ -1,3 +1,3 @@
-SHA512 (root-6.38.04.tar.xz) = 3f8b4bf1f778008e1d6d3a711ac791391fb32971c03bd6367994e137cc16a87a3e382ce962f9197eef386c736fb8a525eb47606eef5f3390d85942b0d6b641b6
+SHA512 (root-6.40.02.tar.xz) = 8a815a24db14a4160be00c21d275d5b527573b02844568b0f549f236c2b481c7ad3f43076a9e862a740c7b0784b2bfb54461d2c0d7eec2816f56d4428aa1c811
SHA512 (root-testfiles.tar.xz) = 4bb7f8ca00b1427ba49f6428e9cfe5908a2ffdd2ce4134d3bc169a0629198352b5500fe0cf92c121d148e5af41f7016c96038a77794a4d37d94e6ec0a9d75670
-SHA512 (clad-2.2.tar.gz) = 6f76d706a829901fc0fcdb38b5ddad6ea8ad9186ea48a4b6b585fc62974a2cda11b96a448c25daaba0586962d6428773e7ab751236c6afa72a91d12f30f2d05e
+SHA512 (clad-2.3.tar.gz) = 2d7e008ad88dd9e4b44d73e3187f8b1883e475845f5ac2d3b2c8e728508422e1e60e279940fefe322995751490f61f7d4768498c3660f9afa1206cc0e83bea33
diff --git a/root-32bit-tests.patch b/root-32bit-tests.patch
index ae15a5d..cf7956d 100644
--- a/root-32bit-tests.patch
+++ b/root-32bit-tests.patch
@@ -1,4 +1,4 @@
-From 55446dcd6eabc1fff218f266c11f31697fe99f09 Mon Sep 17 00:00:00 2001
+From ac806becc2aa69898d1c5ca3b195d8fa3003238a Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Fri, 13 Mar 2020 16:21:55 +0100
Subject: [PATCH] Run tests on 32 bit
@@ -9,7 +9,7 @@ Subject: [PATCH] Run tests on 32 bit
2 files changed, 3 insertions(+), 15 deletions(-)
diff --git a/test/stressGeometry.cxx b/test/stressGeometry.cxx
-index f8d78f4f54..617b9e1644 100644
+index 253bc8574e9..48da18b06c3 100644
--- a/test/stressGeometry.cxx
+++ b/test/stressGeometry.cxx
@@ -257,14 +257,6 @@ void stressGeometry(const char *exp="*", Bool_t generate_ref=kFALSE, Bool_t vecg
@@ -28,12 +28,12 @@ index f8d78f4f54..617b9e1644 100644
TString fname;
for (i=0; i<NG; i++) {
diff --git a/tree/tree/test/CMakeLists.txt b/tree/tree/test/CMakeLists.txt
-index 5bb222edc5..f29a17801d 100644
+index 4e903b06daa..2ad9bb52171 100644
--- a/tree/tree/test/CMakeLists.txt
+++ b/tree/tree/test/CMakeLists.txt
-@@ -17,13 +17,9 @@ endif()
- target_include_directories(testTOffsetGeneration PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
+@@ -13,13 +13,9 @@ target_include_directories(testTOffsetGeneration PRIVATE ${CMAKE_CURRENT_SOURCE_
ROOT_STANDARD_LIBRARY_PACKAGE(SillyStruct NO_INSTALL_HEADERS HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/SillyStruct.h SOURCES SillyStruct.cxx LINKDEF SillyStructLinkDef.h DEPENDENCIES RIO)
+ ROOT_SET_OUTPUT_DIRECTORIES(SillyStruct)
ROOT_ADD_GTEST(testBulkApi BulkApi.cxx LIBRARIES RIO Tree TreePlayer)
-#FIXME: tests are having timeout on 32bit CERN VM (in docker container everything is fine),
-# to be reverted after investigation.
@@ -49,5 +49,5 @@ index 5bb222edc5..f29a17801d 100644
ROOT_ADD_GTEST(testTBranch TBranch.cxx LIBRARIES RIO Tree MathCore)
ROOT_ADD_GTEST(testTIOFeatures TIOFeatures.cxx LIBRARIES RIO Tree)
--
-2.45.1
+2.54.0
diff --git a/root-Adjust-stressGraphics-reference.patch b/root-Adjust-stressGraphics-reference.patch
new file mode 100644
index 0000000..b4950ed
--- /dev/null
+++ b/root-Adjust-stressGraphics-reference.patch
@@ -0,0 +1,46 @@
+From 9d2d6c1a104302e2f84659324b4e8b317cb9ab95 Mon Sep 17 00:00:00 2001
+From: Mattias Ellert <mattias.ellert@physics.uu.se>
+Date: Fri, 26 Jun 2026 06:51:28 +0200
+Subject: [PATCH] Adjust stressGraphics reference
+
+---
+ test/stressGraphics_zlibng.ref | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/test/stressGraphics_zlibng.ref b/test/stressGraphics_zlibng.ref
+index b7ca1568c66..2fda1276315 100644
+--- a/test/stressGraphics_zlibng.ref
++++ b/test/stressGraphics_zlibng.ref
+@@ -7,7 +7,7 @@
+ patterns 23688 1500 19305 200 143676 123000 47075 11000 23076 1500
+ crown 2785 50 14546 100 19178 9000 7605 4000 2829 50
+ piechart 67345 200 74560 3000 32180 15000 29168 15000 66962 200
+- ttext1 1025 150 12866 150 32266 9900 29901 5000 1072 200
++ ttext1 1025 150 12866 200 32266 9900 29901 5000 1072 200
+ ttext2 432 50 12743 50 9517 150 5306 700 473 50
+ tlatex1 5140 50 14050 50 16377 1300 12462 500 5170 70
+ tlatex2 5488 80 13507 100 18439 700 12061 500 5502 80
+@@ -18,9 +18,9 @@
+ itbf 5600 400 13302 300 16868 400 15083 800 5638 400
+ tmathtext 14193187 4000000 12984 100 27112 9500 25080 3000 14193352 4000000
+ transparency 2386 50 14700 100 16514 7000 24701 12000 2554 100
+- transpad 16185 5000 17131 350 22801 9500 14232 1000 11271 5000
++ transpad 16185 5000 17131 350 22801 9500 14232 1500 11271 5000
+ statfitparam 27683 400 23370 300 44898 11000 30209 5000 37580 400
+- tgaxis1 20424 400 21388 300 27719 11000 16044 600 20704 400
++ tgaxis1 20424 400 21388 300 27719 11000 16044 700 20704 400
+ tgaxis2 15874 100 19140 300 27682 10300 15197 550 15905 100
+ tgaxis3 22678 300 42796 200 44177 17000 20788 11000 22866 300
+ tgaxis4 3817 600 14405 250 19907 6300 10674 900 4523 600
+@@ -71,7 +71,7 @@
+ annotation3d 547845 3000 193427 3000 32383 12000 58073 20000 547493 3000
+ tgraph2d3 16675 3000 29541 500 40536 11300 33519 3900 16452 4000
+ ntuple1 256544 5000 382044 7000 54446 30400 45002 6500 261593 7000
+- quarks 4759 180 14134 100 32913 600 25421 1000 4790 180
++ quarks 4759 180 14134 200 32913 600 25421 1000 4790 180
+ timage 1442666 150000 12900 100 26100 100 374206 15000 1102279 250000
+ zoomtf1 6130 500 16528 300 49750 14000 29288 4000 5429 500
+ zoomfit 6200 700 15706 200 31219 11000 18280 3200 6113 800
+--
+2.54.0
+
diff --git a/root-Avoid-additional-python-version-file-to-wrong-location.patch b/root-Avoid-additional-python-version-file-to-wrong-location.patch
deleted file mode 100644
index cbbab31..0000000
--- a/root-Avoid-additional-python-version-file-to-wrong-location.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-From 3f1a626fbe09504c05c5ecec47beb6aa6498d87f Mon Sep 17 00:00:00 2001
-From: Mattias Ellert <mattias.ellert@physics.uu.se>
-Date: Fri, 13 Mar 2026 08:58:40 +0100
-Subject: [PATCH] Avoid additional python version file to wrong location
-
-(cherry picked from commit 3db196516a2073b3f20e9b82019818a6bef23b01)
----
- bindings/pyroot/pythonizations/CMakeLists.txt | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/bindings/pyroot/pythonizations/CMakeLists.txt b/bindings/pyroot/pythonizations/CMakeLists.txt
-index 40207644a41..68b632c2ae0 100644
---- a/bindings/pyroot/pythonizations/CMakeLists.txt
-+++ b/bindings/pyroot/pythonizations/CMakeLists.txt
-@@ -157,9 +157,10 @@ endforeach()
-
- # The Python version at build time should be easy to figure out from Python, so
- # we can raise an exception if the used Python version is not compatible.
-+# The file will be implicitly installed by install(DIRECTORY ...) in the
-+# ROOT_PYTHON_PACKAGE function.
- set(python_version_file "${localruntimedir}/ROOT/_python_version.py")
- file(WRITE "${python_version_file}" "_root_python_version = \"${Python3_VERSION}\"\n")
--install(FILES "${python_version_file}" DESTINATION "${CMAKE_INSTALL_PYTHONDIR}")
-
- # A custom target that depends on the Python sources being present in the build
- # directory. This will be used as a dependency of the pythonization libraries,
---
-2.53.0
-
diff --git a/root-Revert-cppyy-Mark-addressof-test-as-xfail-on-modules.patch b/root-Revert-cppyy-Mark-addressof-test-as-xfail-on-modules.patch
new file mode 100644
index 0000000..52273a0
--- /dev/null
+++ b/root-Revert-cppyy-Mark-addressof-test-as-xfail-on-modules.patch
@@ -0,0 +1,47 @@
+From 9fc24a9cc827028d78c983eea5d18ac6a705e806 Mon Sep 17 00:00:00 2001
+From: Mattias Ellert <mattias.ellert@physics.uu.se>
+Date: Fri, 26 Jun 2026 17:20:27 +0200
+Subject: [PATCH] Revert "[cppyy] Mark `addressof` test as `xfail` on
+ modules=OFF build with C++17"
+
+This reverts commit 5eb0e6466ed1b2c29853ba4bfa928dd1da3e4bcd.
+---
+ .../pyroot/cppyy/cppyy/test/test_datatypes.py | 15 +--------------
+ 1 file changed, 1 insertion(+), 14 deletions(-)
+
+diff --git a/bindings/pyroot/cppyy/cppyy/test/test_datatypes.py b/bindings/pyroot/cppyy/cppyy/test/test_datatypes.py
+index e66e36529ec..71e26dd1d9b 100644
+--- a/bindings/pyroot/cppyy/cppyy/test/test_datatypes.py
++++ b/bindings/pyroot/cppyy/cppyy/test/test_datatypes.py
+@@ -5,18 +5,6 @@ from support import setup_make, pylong, pyunicode, IS_MAC, IS_MAC_ARM, IS_WINDOW
+ test_dct = "datatypes_cxx"
+
+
+-def has_cpp_20():
+- import cppyy
+-
+- return cppyy.gbl.gInterpreter.ProcessLine("__cplusplus;") >= 202002
+-
+-
+-def is_modules_off():
+- import cppyy
+-
+- return "runtime_cxxmodules" not in cppyy.gbl.gROOT.GetConfigFeatures()
+-
+-
+ class TestDATATYPES:
+ def setup_class(cls):
+ import cppyy
+@@ -2351,8 +2339,7 @@ class TestDATATYPES:
+ assert str(bt(1)) == 'True'
+ assert str(bt(0)) == 'False'
+
+- @mark.xfail(strict=True, run=not IS_WINDOWS, condition=IS_MAC_ARM or (not has_cpp_20() and is_modules_off()), reason="Crashes on mac-beta ARM64 and fails on Windows \
+- assertion error for runtime_cxxmodules=OFF build that is explained in GitHub issue #21005")
++ @mark.xfail(strict=True, run=not IS_WINDOWS, condition=IS_MAC_ARM, reason="Crashes on mac-beta ARM64 and fails on Windows")
+ def test49_addressof_method(self):
+ """Use of addressof for (const) methods"""
+
+--
+2.54.0
+
diff --git a/root-Save-memory-Do-not-link-to-LLVM-libraries-in-parallel.patch b/root-Save-memory-Do-not-link-to-LLVM-libraries-in-parallel.patch
index 4d5587f..0f91a8c 100644
--- a/root-Save-memory-Do-not-link-to-LLVM-libraries-in-parallel.patch
+++ b/root-Save-memory-Do-not-link-to-LLVM-libraries-in-parallel.patch
@@ -1,4 +1,4 @@
-From 98a5042a02dd7c1aaa9fbd5e54c8620c6b72484f Mon Sep 17 00:00:00 2001
+From a5b9525ea1575706a523296bb47ac15f33935838 Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Mon, 2 Jun 2025 21:22:39 +0200
Subject: [PATCH] Save memory. Do not link to LLVM libraries in parallel
@@ -20,20 +20,20 @@ index a6c7aedac99..90ac0139c24 100644
+# Save memory. Do not link to LLVM libraries in parallel
+add_dependencies(coreclingutilstestUnit CppInterOpTests)
diff --git a/interpreter/CppInterOp/unittests/CppInterOp/CMakeLists.txt b/interpreter/CppInterOp/unittests/CppInterOp/CMakeLists.txt
-index 4b4b43bdd29..a028802fedc 100644
+index 1d6ccd3e865..dc98cdfc29a 100644
--- a/interpreter/CppInterOp/unittests/CppInterOp/CMakeLists.txt
+++ b/interpreter/CppInterOp/unittests/CppInterOp/CMakeLists.txt
-@@ -66,6 +66,9 @@ target_link_libraries(CppInterOpTests
- clangCppInterOp
+@@ -67,6 +67,9 @@ add_cppinterop_unittest(CppInterOpTests
+ ${EXTRA_TEST_SOURCE_FILES}
)
+# Save memory. Do not link to LLVM libraries in parallel
+add_dependencies(CppInterOpTests DynamicLibraryManagerTests)
+
- set_output_directory(CppInterOpTests
- BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${EXTRA_PATH_TEST_BINARIES}
- LIBRARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${EXTRA_PATH_TEST_BINARIES}
-@@ -129,5 +132,8 @@ set_output_directory(DynamicLibraryManagerTests
+ if(NOT WIN32)
+ set_source_files_properties(VariableReflectionTest.cpp PROPERTIES COMPILE_FLAGS
+ "-Wno-pedantic"
+@@ -113,6 +116,9 @@ endif()
add_dependencies(DynamicLibraryManagerTests TestSharedLib)
@@ -42,6 +42,7 @@ index 4b4b43bdd29..a028802fedc 100644
+
#export_executable_symbols_for_plugins(TestSharedLib)
add_subdirectory(TestSharedLib)
+
--
-2.52.0
+2.54.0
diff --git a/root-Use-different-output-filenames-in-tests-pdftitle.cxx.patch b/root-Use-different-output-filenames-in-tests-pdftitle.cxx.patch
new file mode 100644
index 0000000..ac337b4
--- /dev/null
+++ b/root-Use-different-output-filenames-in-tests-pdftitle.cxx.patch
@@ -0,0 +1,68 @@
+From 28cff2a71e084210b9265cc1c6a4691afc840556 Mon Sep 17 00:00:00 2001
+From: Mattias Ellert <mattias.ellert@physics.uu.se>
+Date: Sat, 27 Jun 2026 15:56:57 +0200
+Subject: [PATCH] Use different output filenames in tests pdftitle.cxx and
+ pdfurl.cxx
+
+This avoids failures when one test overwrites the other's output:
+
+[==========] Running 1 test from 1 test suite.
+[----------] Global test environment set-up.
+[----------] 1 test from TPad
+[ RUN ] TPad.PDFUrl
+ROOT::TestSupport::ForbidDiagnostics::handler(): Diagnostic in 'TCanvas::Print':
+pdf file output.pdf has been created
+ROOT::TestSupport::ForbidDiagnostics::handler(): Diagnostic in 'TCanvas::Print':
+Current canvas added to pdf file output.pdf
+ROOT::TestSupport::ForbidDiagnostics::handler(): Diagnostic in 'TCanvas::Print':
+Current canvas added to pdf file output.pdf
+ROOT::TestSupport::ForbidDiagnostics::handler(): Diagnostic in 'TCanvas::Print':
+pdf file output.pdf has been closed
+/builddir/build/BUILD/root-6.40.02/graf2d/gpad/test/pdfurl.cxx:33: Failure
+Expected equality of these values:
+ statCode
+ Which is: 1
+ 0
+PDF file was not created.
+[ FAILED ] TPad.PDFUrl (373 ms)
+[----------] 1 test from TPad (373 ms total)
+[----------] Global test environment tear-down
+[==========] 1 test from 1 test suite ran. (374 ms total)
+[ PASSED ] 0 tests.
+[ FAILED ] 1 test, listed below:
+[ FAILED ] TPad.PDFUrl
+ 1 FAILED TEST
+---
+ graf2d/gpad/test/pdftitle.cxx | 2 +-
+ graf2d/gpad/test/pdfurl.cxx | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/graf2d/gpad/test/pdftitle.cxx b/graf2d/gpad/test/pdftitle.cxx
+index 9162df2cd84..57c0935133f 100644
+--- a/graf2d/gpad/test/pdftitle.cxx
++++ b/graf2d/gpad/test/pdftitle.cxx
+@@ -5,7 +5,7 @@
+
+ TEST(TPad, PDFTitle)
+ {
+- const TString pdfFile = "output.pdf";
++ const TString pdfFile = "pdftitle.pdf";
+
+ // Generate a multi-page PDF with a title
+ TCanvas c;
+diff --git a/graf2d/gpad/test/pdfurl.cxx b/graf2d/gpad/test/pdfurl.cxx
+index c0a77ce8dc9..43b114c8f41 100644
+--- a/graf2d/gpad/test/pdfurl.cxx
++++ b/graf2d/gpad/test/pdfurl.cxx
+@@ -6,7 +6,7 @@
+
+ TEST(TPad, PDFUrl)
+ {
+- const TString pdfFile = "output.pdf";
++ const TString pdfFile = "pdfurl.pdf";
+
+ // Generate a multi-page PDF with page titles and #url in TLatex
+ TCanvas c1;
+--
+2.54.0
+
diff --git a/root-core-The-old-TUUID-constructor-can-create-either-ver.patch b/root-core-The-old-TUUID-constructor-can-create-either-ver.patch
new file mode 100644
index 0000000..26cf519
--- /dev/null
+++ b/root-core-The-old-TUUID-constructor-can-create-either-ver.patch
@@ -0,0 +1,27 @@
+From 2920a892a5db1c24bb8af34c63aacc1438a18247 Mon Sep 17 00:00:00 2001
+From: Mattias Ellert <mattias.ellert@physics.uu.se>
+Date: Sun, 28 Jun 2026 16:54:54 +0200
+Subject: [PATCH 1/3] [core] The old TUUID constructor can create either
+ version 1 or 3
+
+Do not fail test if version 3 is returned.
+---
+ core/base/test/UUIDTest.cxx | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/core/base/test/UUIDTest.cxx b/core/base/test/UUIDTest.cxx
+index dea3700052b..c834223f6d0 100644
+--- a/core/base/test/UUIDTest.cxx
++++ b/core/base/test/UUIDTest.cxx
+@@ -14,7 +14,7 @@ TEST(TUUID, UUIDv4)
+ EXPECT_EQ(10000u, uuids.size());
+
+ TUUID u;
+- EXPECT_EQ('1', u.AsString()[14]);
++ EXPECT_TRUE('1' == u.AsString()[14] || '3' == u.AsString()[14]);
+ u = TUUID::UUIDv4();
+ std::string str = u.AsString();
+ EXPECT_EQ('4', str[14]);
+--
+2.54.0
+
diff --git a/root-fontconfig.patch b/root-fontconfig.patch
index 4e5e607..d732893 100644
--- a/root-fontconfig.patch
+++ b/root-fontconfig.patch
@@ -1,4 +1,4 @@
-From 4d450f306a8ab8220f43675c70f399d89e5a4a03 Mon Sep 17 00:00:00 2001
+From 58bd7d6e0f905efcf436558fdc11796b7145c66d Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Sat, 11 May 2024 20:09:47 +0200
Subject: [PATCH] Use system fonts via fontconfig
@@ -13,12 +13,12 @@ Subject: [PATCH] Use system fonts via fontconfig
graf2d/postscript/CMakeLists.txt | 1 +
graf2d/postscript/src/TPostScript.cxx | 106 ++++-----
graf3d/gl/CMakeLists.txt | 1 +
- graf3d/gl/src/TGLFontManager.cxx | 123 ++++++++++-
+ graf3d/gl/src/TGLFontManager.cxx | 124 ++++++++++-
graf3d/gl/src/TGLText.cxx | 56 +++--
- 11 files changed, 495 insertions(+), 194 deletions(-)
+ 11 files changed, 496 insertions(+), 194 deletions(-)
diff --git a/core/base/src/TApplication.cxx b/core/base/src/TApplication.cxx
-index f0d2124a8f6..41ad4c73020 100644
+index 0c0c9515930..2b9bbb2b2af 100644
--- a/core/base/src/TApplication.cxx
+++ b/core/base/src/TApplication.cxx
@@ -253,18 +253,12 @@ void TApplication::InitializeGraphics(Bool_t only_web)
@@ -51,10 +51,10 @@ index f0d2124a8f6..41ad4c73020 100644
if (!only_web || !fAppImp) {
diff --git a/graf2d/asimage/CMakeLists.txt b/graf2d/asimage/CMakeLists.txt
-index b5ccf983473..8ee57c1fac0 100644
+index 3b5188c126e..a82efc829fc 100644
--- a/graf2d/asimage/CMakeLists.txt
+++ b/graf2d/asimage/CMakeLists.txt
-@@ -28,6 +28,7 @@ ROOT_STANDARD_LIBRARY_PACKAGE(ASImage
+@@ -30,6 +30,7 @@ ROOT_STANDARD_LIBRARY_PACKAGE(ASImage
${FREETYPE_LIBRARIES}
${X11_LIBRARIES}
ZLIB::ZLIB
@@ -63,10 +63,10 @@ index b5ccf983473..8ee57c1fac0 100644
Core
Graf
diff --git a/graf2d/asimage/src/TASImage.cxx b/graf2d/asimage/src/TASImage.cxx
-index 6ea60a78801..e85d804b7ec 100644
+index 3784e05a235..0ad74e1ee6f 100644
--- a/graf2d/asimage/src/TASImage.cxx
+++ b/graf2d/asimage/src/TASImage.cxx
-@@ -117,6 +117,8 @@ extern "C" {
+@@ -116,6 +116,8 @@ extern "C" {
# include <draw.h>
}
@@ -75,7 +75,7 @@ index 6ea60a78801..e85d804b7ec 100644
// auxiliary functions for general polygon filling
#include "TASPolyUtils.c"
-@@ -2620,11 +2622,88 @@ void TASImage::DrawText(Int_t x, Int_t y, const char *text, Int_t size,
+@@ -2642,11 +2644,88 @@ void TASImage::DrawText(Int_t x, Int_t y, const char *text, Int_t size,
// This is for backward compatibility...
if (fn.Last('/') == 0) fn = fn(1, fn.Length() - 1);
@@ -169,7 +169,7 @@ index 6ea60a78801..e85d804b7ec 100644
if (fn.EndsWith(".pfa") || fn.EndsWith(".PFA") || fn.EndsWith(".pfb") || fn.EndsWith(".PFB") || fn.EndsWith(".ttf") || fn.EndsWith(".TTF") || fn.EndsWith(".otf") || fn.EndsWith(".OTF")) {
ttfont = kTRUE;
-@@ -2648,7 +2727,7 @@ void TASImage::DrawText(Int_t x, Int_t y, const char *text, Int_t size,
+@@ -2670,7 +2749,7 @@ void TASImage::DrawText(Int_t x, Int_t y, const char *text, Int_t size,
return;
}
@@ -179,11 +179,11 @@ index 6ea60a78801..e85d804b7ec 100644
if (!font) {
font = get_asfont(gFontManager, "fixed", 0, size, ASF_GuessWho);
diff --git a/graf2d/graf/CMakeLists.txt b/graf2d/graf/CMakeLists.txt
-index d7d1b77c21a..c4ebb994a4a 100644
+index f7a0f970372..61e49252562 100644
--- a/graf2d/graf/CMakeLists.txt
+++ b/graf2d/graf/CMakeLists.txt
@@ -91,6 +91,7 @@ ROOT_STANDARD_LIBRARY_PACKAGE(Graf
- ${FREETYPE_LIBRARIES}
+ Freetype::Freetype
ZLIB::ZLIB
mathtext
+ fontconfig
@@ -606,7 +606,7 @@ index eb091bbb396..a05023a3f41 100644
Graf
)
diff --git a/graf2d/postscript/src/TPostScript.cxx b/graf2d/postscript/src/TPostScript.cxx
-index df9e3ae16ea..1e353e1ca53 100644
+index 8d4343736d1..c2efa7914da 100644
--- a/graf2d/postscript/src/TPostScript.cxx
+++ b/graf2d/postscript/src/TPostScript.cxx
@@ -234,6 +234,7 @@ To change the color model use `gStyle->SetColorModelPS(c)`.
@@ -739,7 +739,7 @@ index df9e3ae16ea..1e353e1ca53 100644
}
}
PrintStr("%%IncludeResource: font Times-Roman@");
-@@ -2836,10 +2842,10 @@ void TPostScript::Text(Double_t xx, Double_t yy, const wchar_t *chars)
+@@ -2852,10 +2858,10 @@ void TPostScript::Text(Double_t xx, Double_t yy, const wchar_t *chars)
{ "Root.PSFont.9", "/FreeMonoOblique" },
{ "Root.PSFont.10", "/FreeMonoBold" },
{ "Root.PSFont.11", "/FreeMonoBoldOblique" },
@@ -754,30 +754,31 @@ index df9e3ae16ea..1e353e1ca53 100644
{ "Root.PSFont.STIXGenIt", "/STIXGeneral-Italic" },
{ "Root.PSFont.STIXGenBd", "/STIXGeneral-Bold" },
diff --git a/graf3d/gl/CMakeLists.txt b/graf3d/gl/CMakeLists.txt
-index e759473ca0f..c453397fc52 100644
+index 7850fd46b9f..14782767b4c 100644
--- a/graf3d/gl/CMakeLists.txt
+++ b/graf3d/gl/CMakeLists.txt
-@@ -211,6 +211,7 @@ ROOT_STANDARD_LIBRARY_PACKAGE(RGL
- ${GL2PS_LIBRARIES}
+@@ -208,6 +208,7 @@ ROOT_STANDARD_LIBRARY_PACKAGE(RGL
+ ZLIB::ZLIB
${X11_LIBRARIES}
- RGlew
+ ROOTGlad
+ fontconfig
DEPENDENCIES
Hist
Gui
diff --git a/graf3d/gl/src/TGLFontManager.cxx b/graf3d/gl/src/TGLFontManager.cxx
-index 58ea1188d59..647642de615 100644
+index e6f67b4f828..3671c132fd9 100644
--- a/graf3d/gl/src/TGLFontManager.cxx
+++ b/graf3d/gl/src/TGLFontManager.cxx
-@@ -36,6 +36,7 @@
+@@ -36,6 +36,8 @@
# include "FTGLBitmapFont.h"
#endif
+#include <fontconfig/fontconfig.h>
-
- /** \class TGLFont
- \ingroup opengl
-@@ -448,16 +449,120 @@ void TGLFontManager::RegisterFont(Int_t sizeIn, Int_t fileID, TGLFont::EMode mod
++
+ namespace {
+ #ifdef HAVE_UTF8
+ // https://github.com/root-project/root/issues/22076#issuecomment-4342764706
+@@ -481,16 +483,120 @@ void TGLFontManager::RegisterFont(Int_t sizeIn, Int_t fileID, TGLFont::EMode mod
FontMap_i it = fFontMap.find(TGLFont(size, fileID, mode));
if (it == fFontMap.end())
{
@@ -989,5 +990,5 @@ index 2ed3ee0917a..03feb0ee0a4 100644
- delete [] ttfont;
}
--
-2.52.0
+2.54.0
diff --git a/root-no-export-python-modules.patch b/root-no-export-python-modules.patch
index d3fa4bc..f5c5106 100644
--- a/root-no-export-python-modules.patch
+++ b/root-no-export-python-modules.patch
@@ -1,18 +1,18 @@
-From b4e57c8ccd59d69fe61fa5f6470b3a99ba52aeeb Mon Sep 17 00:00:00 2001
+From 4b14d9d83ff154eca3672570f9be66513268209f Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Thu, 4 Dec 2025 23:13:28 +0100
Subject: [PATCH] Dont export Python modules
---
bindings/pyroot/cppyy/CPyCppyy/CMakeLists.txt | 3 +--
- bindings/pyroot/pythonizations/CMakeLists.txt | 8 +-------
- 2 files changed, 2 insertions(+), 9 deletions(-)
+ bindings/pyroot/pythonizations/CMakeLists.txt | 9 +--------
+ 2 files changed, 2 insertions(+), 10 deletions(-)
diff --git a/bindings/pyroot/cppyy/CPyCppyy/CMakeLists.txt b/bindings/pyroot/cppyy/CPyCppyy/CMakeLists.txt
-index bb48c032974..c34069855b2 100644
+index c21fb317f8c..7f1717e3f4b 100644
--- a/bindings/pyroot/cppyy/CPyCppyy/CMakeLists.txt
+++ b/bindings/pyroot/cppyy/CPyCppyy/CMakeLists.txt
-@@ -119,8 +119,7 @@ install(TARGETS CPyCppyy EXPORT ${CMAKE_PROJECT_NAME}Exports
+@@ -117,8 +117,7 @@ install(TARGETS CPyCppyy EXPORT ${CMAKE_PROJECT_NAME}Exports
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries)
@@ -23,13 +23,14 @@ index bb48c032974..c34069855b2 100644
ARCHIVE DESTINATION ${CMAKE_INSTALL_PYTHONDIR}/cppyy COMPONENT libraries)
diff --git a/bindings/pyroot/pythonizations/CMakeLists.txt b/bindings/pyroot/pythonizations/CMakeLists.txt
-index 1230f18ca47..2df4b733320 100644
+index 32d7d54b8da..5128e6d337c 100644
--- a/bindings/pyroot/pythonizations/CMakeLists.txt
+++ b/bindings/pyroot/pythonizations/CMakeLists.txt
-@@ -202,11 +202,6 @@ foreach(py_source ${py_sources})
- COMMENT "Compiling PyROOT source ${py_source} for Python ${Python3_VERSION}")
- endforeach()
+@@ -63,12 +63,6 @@ if(NOT MSVC)
+ target_compile_options(${libname} PRIVATE -Wno-strict-aliasing)
+ endif()
+-
-# Create meta-target PyROOT3 (INTERFACE library)
-# Export of targets are not supported for custom targets(add_custom_targets())
-add_library(PyROOT INTERFACE)
@@ -38,7 +39,7 @@ index 1230f18ca47..2df4b733320 100644
# Define library output directories for build and install trees
set(pymoduledir_build "${localruntimedir}/ROOT")
set(pymoduledir_install "${CMAKE_INSTALL_PYTHONDIR}/ROOT")
-@@ -231,8 +226,7 @@ if(NOT MSVC)
+@@ -93,8 +87,7 @@ if(NOT MSVC)
endif()
# Install library
@@ -49,5 +50,5 @@ index 1230f18ca47..2df4b733320 100644
ARCHIVE DESTINATION ${pymoduledir_install} COMPONENT libraries)
--
-2.52.0
+2.54.0
diff --git a/root-python-3.15.patch b/root-python-3.15.patch
deleted file mode 100644
index a40cf3f..0000000
--- a/root-python-3.15.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-From 4171724228a849959542fcb0b0c1ec10d8e94999 Mon Sep 17 00:00:00 2001
-From: Jonas Rembser <jonas.rembser@cern.ch>
-Date: Fri, 3 Apr 2026 22:56:04 +0200
-Subject: [PATCH] [Python] Set `__spec__` attribute and not `__cached__` for
- ROOT facade
-
-The Python documentation [1] says:
-
-> It is strongly recommended that you use module.__spec__.cached instead
- of module.__cached__.
-
-So this commit suggests to transfer the full `__spec__` attribute from
-the ROOT module to the facade, instead of `__cached__`.
-
-This also avoids errors when importing ROOT with Python 3.15, where
-`__cached__` will cease to be set or taken into consideration by the
-import system or standard library.
-
-Closes #21787.
-
-[1] https://docs.python.org/3/reference/datamodel.html#module.__cached__
----
- bindings/pyroot/pythonizations/python/ROOT/_facade.py | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/bindings/pyroot/pythonizations/python/ROOT/_facade.py b/bindings/pyroot/pythonizations/python/ROOT/_facade.py
-index c22ae40da4c2d..da8b6681ec2f2 100644
---- a/bindings/pyroot/pythonizations/python/ROOT/_facade.py
-+++ b/bindings/pyroot/pythonizations/python/ROOT/_facade.py
-@@ -142,7 +142,7 @@ def __init__(self, module, is_ipython):
- self.__all__ = module.__all__
- self.__name__ = module.__name__
- self.__file__ = module.__file__
-- self.__cached__ = module.__cached__
-+ self.__spec__ = module.__spec__
- self.__path__ = module.__path__
- self.__doc__ = module.__doc__
- self.__package__ = module.__package__
diff --git a/root-tmva-sofie-Fix-big-endian.patch b/root-tmva-sofie-Fix-big-endian.patch
new file mode 100644
index 0000000..fb1663d
--- /dev/null
+++ b/root-tmva-sofie-Fix-big-endian.patch
@@ -0,0 +1,68 @@
+From 8554bf49749efd8de5538bf99c12a04d2691102d Mon Sep 17 00:00:00 2001
+From: Mattias Ellert <mattias.ellert@physics.uu.se>
+Date: Sun, 28 Jun 2026 16:49:23 +0200
+Subject: [PATCH] [tmva][sofie] Fix big endian
+
+---
+ tmva/sofie_parsers/src/RModelParser_ONNX.cxx | 36 ++++++++++++++++----
+ 1 file changed, 30 insertions(+), 6 deletions(-)
+
+diff --git a/tmva/sofie_parsers/src/RModelParser_ONNX.cxx b/tmva/sofie_parsers/src/RModelParser_ONNX.cxx
+index aa196c510ad..ac4cc7d5740 100644
+--- a/tmva/sofie_parsers/src/RModelParser_ONNX.cxx
++++ b/tmva/sofie_parsers/src/RModelParser_ONNX.cxx
+@@ -172,13 +172,37 @@ std::shared_ptr<void> RModelParser_ONNX::GetInitializedTensorData(onnx::TensorPr
+ std::memcpy(data.get(), tensorproto->raw_data().c_str(), tensor_size);
+ #else
+ // big-endian architectures - need to swap bytes
+- for (std::size_t k = 0; k < tensor_size; ++k)
+- (reinterpret_cast<typename RByteSwap<sizeof(uint8_t)>::value_type *>(data.get()))[k] =
+- RByteSwap<sizeof(T)>::bswap((reinterpret_cast<const typename RByteSwap<sizeof(uint8_t)>::value_type *>(
+- tensorproto->raw_data().c_str()))[k]);
++ switch (tensor_type) {
++ case ETensorType::FLOAT:
++ for (std::size_t k = 0; k < tensor_size / sizeof(float); ++k)
++ (reinterpret_cast<typename RByteSwap<sizeof(float)>::value_type *>(data.get()))[k] =
++ RByteSwap<sizeof(float)>::bswap((reinterpret_cast<const typename RByteSwap<sizeof(float)>::value_type *>(
++ tensorproto->raw_data().c_str()))[k]);
++ break;
++ case ETensorType::DOUBLE:
++ for (std::size_t k = 0; k < tensor_size / sizeof(double); ++k)
++ (reinterpret_cast<typename RByteSwap<sizeof(double)>::value_type *>(data.get()))[k] =
++ RByteSwap<sizeof(double)>::bswap((reinterpret_cast<const typename RByteSwap<sizeof(double)>::value_type *>(
++ tensorproto->raw_data().c_str()))[k]);
++ break;
++ case ETensorType::INT32:
++ for (std::size_t k = 0; k < tensor_size / sizeof(int32_t); ++k)
++ (reinterpret_cast<typename RByteSwap<sizeof(int32_t)>::value_type *>(data.get()))[k] =
++ RByteSwap<sizeof(int32_t)>::bswap((reinterpret_cast<const typename RByteSwap<sizeof(int32_t)>::value_type *>(
++ tensorproto->raw_data().c_str()))[k]);
++ break;
++ case ETensorType::INT64:
++ for (std::size_t k = 0; k < tensor_size / sizeof(int64_t); ++k)
++ (reinterpret_cast<typename RByteSwap<sizeof(int64_t)>::value_type *>(data.get()))[k] =
++ RByteSwap<sizeof(int64_t)>::bswap((reinterpret_cast<const typename RByteSwap<sizeof(int64_t)>::value_type *>(
++ tensorproto->raw_data().c_str()))[k]);
++ break;
++ default:
++ throw std::runtime_error("Data type " + ConvertTypeToString(tensor_type) + " in tensor is not supported!\n");
++ }
+ #endif
+ } else {
+- // case tensor data are stored as specific types and now in raw_data
++ // case tensor data are stored as specific types and not in raw_data
+ switch (tensor_type) {
+ case ETensorType::FLOAT: {
+ ExtractDataFromTP<float>::Copy(tensorproto, data.get(), tensor_size/ 4);
+@@ -200,7 +224,7 @@ std::shared_ptr<void> RModelParser_ONNX::GetInitializedTensorData(onnx::TensorPr
+ throw std::runtime_error("TMVA::SOFIE - ExtractData from TP in BOOL not supported");
+ break;
+ }
+- case ETensorType::UINT8: {
++ case ETensorType::UINT8: {
+ throw std::runtime_error("TMVA::SOFIE - ExtractData from TP in UINT8 not supported");
+ break;
+ }
+--
+2.54.0
+
diff --git a/root-tree-df-Do-not-fail-test-on-32-bit-due-to-mis-aligne.patch b/root-tree-df-Do-not-fail-test-on-32-bit-due-to-mis-aligne.patch
new file mode 100644
index 0000000..ecca598
--- /dev/null
+++ b/root-tree-df-Do-not-fail-test-on-32-bit-due-to-mis-aligne.patch
@@ -0,0 +1,25 @@
+From 58b38e29586975e714deee6ac195b286eb9a73cf Mon Sep 17 00:00:00 2001
+From: Mattias Ellert <mattias.ellert@physics.uu.se>
+Date: Sun, 28 Jun 2026 16:59:36 +0200
+Subject: [PATCH 2/3] [tree][df] Do not fail test on 32 bit due to mis-aligned
+ atomic
+
+---
+ tree/dataframe/test/dataframe_hist.cxx | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/tree/dataframe/test/dataframe_hist.cxx b/tree/dataframe/test/dataframe_hist.cxx
+index f5fe396b50d..7a2c6659a84 100644
+--- a/tree/dataframe/test/dataframe_hist.cxx
++++ b/tree/dataframe/test/dataframe_hist.cxx
+@@ -31,6 +31,7 @@ public:
+ RDFHist()
+ {
+ fDiag.optionalDiag(kWarning, "", "Filling RHist is experimental", /*matchFullMessage=*/false);
++ fDiag.optionalDiag(kWarning, "cling", "expected alignment (8 bytes) exceeds the actual alignment (4 bytes) [-Watomic-alignment]", false);
+ if (GetParam())
+ ROOT::EnableImplicitMT(4);
+ }
+--
+2.54.0
+
diff --git a/root-tree-nt-Compare-size-to-the-size-of-the-struct.patch b/root-tree-nt-Compare-size-to-the-size-of-the-struct.patch
new file mode 100644
index 0000000..4092d83
--- /dev/null
+++ b/root-tree-nt-Compare-size-to-the-size-of-the-struct.patch
@@ -0,0 +1,32 @@
+From 07cbb0515e4f45808696037adce7c0f1bc5e903d Mon Sep 17 00:00:00 2001
+From: Mattias Ellert <mattias.ellert@physics.uu.se>
+Date: Sun, 28 Jun 2026 17:01:40 +0200
+Subject: [PATCH 3/3] [tree][nt] Compare size to the size of the struct
+
+Do not assume it is 2 * sizeof(double), which is not true on 32 bit.
+---
+ tree/ntuple/test/ntuple_modelext.cxx | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/tree/ntuple/test/ntuple_modelext.cxx b/tree/ntuple/test/ntuple_modelext.cxx
+index 8ec3886f921..ef27e844e84 100644
+--- a/tree/ntuple/test/ntuple_modelext.cxx
++++ b/tree/ntuple/test/ntuple_modelext.cxx
+@@ -810,12 +810,12 @@ TEST(RNTuple, ModelExtensionRecordNested)
+ modelUpdater->AddField(std::make_unique<RField<double>>("ptHP"), "r1.r2.r3.r4");
+ modelUpdater->CommitUpdate();
+
+- EXPECT_EQ(2 * sizeof(double), writer->GetModel().GetConstField("r1").GetValueSize());
+- entry = writer->CreateEntry();
+ struct FloatAndDouble {
+ float pt;
+ double ptHP;
+ };
++ EXPECT_EQ(sizeof(FloatAndDouble), writer->GetModel().GetConstField("r1").GetValueSize());
++ entry = writer->CreateEntry();
+
+ auto ptrFloatAndDouble = static_cast<FloatAndDouble *>(entry->GetPtr<void>("r1").get());
+ ptrFloatAndDouble->pt = 2.0;
+--
+2.54.0
+
diff --git a/root.spec b/root.spec
index a9315e7..988893e 100644
--- a/root.spec
+++ b/root.spec
@@ -32,9 +32,9 @@
%global __provides_exclude_from ^%{python3_sitearch}/.*/lib.*\\.so$
Name: root
-Version: 6.38.04
+Version: 6.40.02
%global libversion %(cut -d. -f 1-2 <<< %{version})
-Release: 6%{?dist}
+Release: 1%{?dist}
Summary: Numerical data analysis framework
License: LGPL-2.1-or-later
@@ -59,7 +59,7 @@ Source7: JupyROOT-on-EPEL
Source8: %{name}-get-src.sh
# Clad is a source-transformation automatic differentiation (AD)
# library for C++, implemented as a plugin for the Clang compiler
-Source9: https://github.com/vgvassilev/clad/archive/v2.2/clad-2.2.tar.gz
+Source9: https://github.com/vgvassilev/clad/archive/v2.3/clad-2.3.tar.gz
# Use system fonts
Patch0: %{name}-fontconfig.patch
# Reduce memory usage during linking on ARM and x86 by generating
@@ -77,13 +77,18 @@ Patch5: %{name}-Revert-test-Fetch-the-geometries-from-EOS-and-not-fr.patch
# Preserve memory during parallel build
# https://github.com/root-project/root/pull/18991
Patch6: %{name}-Save-memory-Do-not-link-to-LLVM-libraries-in-parallel.patch
-# https://github.com/root-project/root/pull/21604
-# https://github.com/root-project/root/pull/21605
-Patch7: %{name}-Avoid-additional-python-version-file-to-wrong-location.patch
-# Compatibility with Python 3.15
-# https://github.com/root-project/root/issues/21787
-# https://github.com/root-project/root/pull/21790
-Patch8: %{name}-python-3.15.patch
+# Revert xfail mark (test works except on RHEL/EPEL 9)
+Patch7: %{name}-Revert-cppyy-Mark-addressof-test-as-xfail-on-modules.patch
+# Adjust stressGraphics reference
+Patch8: %{name}-Adjust-stressGraphics-reference.patch
+# https://github.com/root-project/root/pull/22722
+Patch9: %{name}-Use-different-output-filenames-in-tests-pdftitle.cxx.patch
+# https://github.com/root-project/root/pull/22723
+Patch10: %{name}-tmva-sofie-Fix-big-endian.patch
+# https://github.com/root-project/root/pull/22724
+Patch11: %{name}-core-The-old-TUUID-constructor-can-create-either-ver.patch
+Patch12: %{name}-tree-df-Do-not-fail-test-on-32-bit-due-to-mis-aligne.patch
+Patch13: %{name}-tree-nt-Compare-size-to-the-size-of-the-struct.patch
BuildRequires: gcc-c++
BuildRequires: gcc-gfortran
@@ -98,7 +103,6 @@ BuildRequires: freetype-devel
BuildRequires: fcgi-devel
BuildRequires: ftgl-devel
BuildRequires: gl2ps-devel
-BuildRequires: glew-devel
BuildRequires: pcre2-devel
BuildRequires: zlib-devel
BuildRequires: xz-devel
@@ -131,6 +135,7 @@ BuildRequires: desktop-file-utils
BuildRequires: dcap-devel
BuildRequires: xrootd-client-devel >= 1:5.0.0
BuildRequires: cfitsio-devel
+BuildRequires: curl-devel
# Davix version >= 0.6.4, but not between 0.6.8 and 0.7.0
BuildRequires: davix-devel >= 0.7.1
%if %{rrr}
@@ -162,6 +167,7 @@ BuildRequires: zeromq-devel >= 4.3.5
BuildRequires: cppzmq-devel
%endif
%endif
+BuildRequires: python3-pytest
%if %{pandas}
BuildRequires: python3-pandas
%endif
@@ -397,16 +403,18 @@ Obsoletes: python3-jsmva < 6.32.00
This package contains the Python extension for ROOT. It makes it
possible to use ROOT classes in Python.
-%package -n python3-jupyroot
+%package -n python3-root+jupyroot
Summary: ROOT Jupyter kernel
-BuildArch: noarch
-%py_provides python3-jupyroot
-Requires: python3-%{name} = %{version}-%{release}
-Requires: %{name}-core = %{version}-%{release}
+%py_provides python3-root+jupyroot
+Requires: python3-%{name}%{?_isa} = %{version}-%{release}
+Requires: %{name}-core%{?_isa} = %{version}-%{release}
# notebook package was merged with JupyROOT package
Provides: %{name}-notebook = %{version}-%{release}
Obsoletes: %{name}-notebook < 6.32.00
-Requires: js-jsroot >= 7.10
+# Package renamed (jupyroot is now a submodule)
+%py_provides python3-jupyroot
+Obsoletes: python3-jupyroot < 6.40.00
+Requires: js-jsroot >= 7.11
%if %{?fedora}%{!?fedora:0} || %{?rhel}%{!?rhel:0} >= 10
# jupyter-notebook not available in RHEL/EPEL
# some functionality missing
@@ -418,18 +426,20 @@ Requires: python3-metakernel
Requires: python-jupyter-filesystem
%endif
-%description -n python3-jupyroot
+%description -n python3-root+jupyroot
The Jupyter kernel for the ROOT notebook.
%if %{distrdf}
-%package -n python3-distrdf
+%package -n python3-root+distrdf
Summary: Distributed RDataFrame
-BuildArch: noarch
+%py_provides python3-root+distrdf
+# Package renamed (distrdf is now a submodule)
%py_provides python3-distrdf
-Requires: python3-%{name} = %{version}-%{release}
-Requires: %{name}-tree-dataframe = %{version}-%{release}
+Obsoletes: python3-distrdf < 6.40.00
+Requires: python3-%{name}%{?_isa} = %{version}-%{release}
+Requires: %{name}-tree-dataframe%{?_isa} = %{version}-%{release}
-%description -n python3-distrdf
+%description -n python3-root+distrdf
A layer on top of RDataFrame to enable distributed computations. It is
a port of the previously known PyRDF python package.
%endif
@@ -638,6 +648,7 @@ Requires: %{name}-graf%{?_isa} = %{version}-%{release}
Requires: %{name}-graf-gpad%{?_isa} = %{version}-%{release}
Requires: %{name}-graf3d%{?_isa} = %{version}-%{release}
Requires: %{name}-graf3d-gl%{?_isa} = %{version}-%{release}
+Requires: %{name}-graf3d-glad%{?_isa} = %{version}-%{release}
Requires: %{name}-gui%{?_isa} = %{version}-%{release}
Requires: %{name}-gui-ged%{?_isa} = %{version}-%{release}
Requires: %{name}-hist%{?_isa} = %{version}-%{release}
@@ -659,6 +670,7 @@ Requires: %{name}-graf-asimage%{?_isa} = %{version}-%{release}
Requires: %{name}-graf-gpad%{?_isa} = %{version}-%{release}
Requires: %{name}-graf3d%{?_isa} = %{version}-%{release}
Requires: %{name}-graf3d-csg%{?_isa} = %{version}-%{release}
+Requires: %{name}-graf3d-glad%{?_isa} = %{version}-%{release}
Requires: %{name}-gui%{?_isa} = %{version}-%{release}
Requires: %{name}-gui-ged%{?_isa} = %{version}-%{release}
Requires: %{name}-hist%{?_isa} = %{version}-%{release}
@@ -671,6 +683,14 @@ This package contains the GL renderer for ROOT. This library provides
rendering of histograms, and similar. Included is also a high quality
3D viewer for ROOT defined geometries.
+%package graf3d-glad
+Summary: OpenGL loader library for ROOT
+Requires: %{name}-core%{?_isa} = %{version}-%{release}
+
+%description graf3d-glad
+This package contains an OpenGL loader library for ROOT generated by
+the Glad tool (https://github.com/Dav1dde/glad).
+
%package graf3d-gviz3d
Summary: Graphviz 3D library for ROOT
Requires: %{name}-core%{?_isa} = %{version}-%{release}
@@ -1137,6 +1157,15 @@ Requires: %{name}-net%{?_isa} = %{version}-%{release}
%description net-auth
This package contains the basic authentication algorithms used by ROOT.
+%package net-curl
+Summary: Curl extension for ROOT
+Requires: %{name}-core%{?_isa} = %{version}-%{release}
+Requires: %{name}-io%{?_isa} = %{version}-%{release}
+
+%description net-curl
+This package contains the curl extension for TOOT. It provides access
+to http based storage e.g. S3.
+
%package net-davix
Summary: Davix extension for ROOT
Requires: davix-libs%{?_isa} >= 0.7.1
@@ -1153,7 +1182,7 @@ Summary: HTTP server extension for ROOT
Provides: bundled(civetweb)
Requires: %{name}-core%{?_isa} = %{version}-%{release}
Requires: %{name}-io%{?_isa} = %{version}-%{release}
-Requires: js-jsroot >= 7.10
+Requires: js-jsroot >= 7.11
# Library split (net-httpsniff from net-http)
Obsoletes: %{name}-net-http < 6.14.00
@@ -1497,6 +1526,8 @@ Requires: %{name}-core%{?_isa} = %{version}-%{release}
Requires: %{name}-io%{?_isa} = %{version}-%{release}
# Library split (tmva-utils from tmva)
Obsoletes: %{name}-tmva < 6.28.08
+# Library split (tree-ml from tmva-utils)
+Obsoletes: %{name}-tmva-utils < 6.40.00
%description tmva-utils
TMVA utilities using dataframe.
@@ -1507,9 +1538,10 @@ Summary: Toolkit for multivariate data analysis (Python)
License: BSD-3-Clause
Requires: %{name}-core%{?_isa} = %{version}-%{release}
Requires: %{name}-tmva%{?_isa} = %{version}-%{release}
-Requires: %{name}-tmva-sofie%{?_isa} = %{version}-%{release}
Requires: %{name}-tree%{?_isa} = %{version}-%{release}
Requires: python3-numpy
+# Package split (tmva-sofie-parser-python from tmva-python)
+Obsoletes: %{name}-tmva-python < 6.40.00
%description tmva-python
Python integration with TMVA.
@@ -1549,6 +1581,18 @@ Requires: %{name}-tmva-sofie%{?_isa} = %{version}-%{release}
%description tmva-sofie-parser
Parsers for ROOT/TMVA SOFIE
+
+%package tmva-sofie-parser-python
+Summary: ROOT/TMVA SOFIE Parsers for Python
+License: BSD-3-Clause AND MIT
+Requires: %{name}-core%{?_isa} = %{version}-%{release}
+Requires: %{name}-tmva-sofie%{?_isa} = %{version}-%{release}
+Requires: python3-numpy
+# Package split (tmva-sofie-parser-python from tmva-python)
+Obsoletes: %{name}-tmva-python < 6.40.00
+
+%description tmva-sofie-parser-python
+Parsers for ROOT/TMVA SOFIE for Python
%endif
%package tmva-gui
@@ -1594,6 +1638,16 @@ Obsoletes: %{name}-tree-player < 6.14.00
%description tree-dataframe
This package contains a high level interface to ROOT trees.
+
+%package tree-ml
+Summary: ROOT dataframe python
+Requires: %{name}-core%{?_isa} = %{version}-%{release}
+Requires: %{name}-vecops%{?_isa} = %{version}-%{release}
+# Library split (tree-ml from tmva-utils)
+Obsoletes: %{name}-tmva-utils < 6.40.00
+
+%description tree-ml
+This package contains ...
%endif
%package tree-player
@@ -1864,10 +1918,19 @@ This package contains a library to show a pop-up dialog when fitting
various kinds of data.
%package histv7
-Summary: Histogram library for ROOT 7
+Summary: Conversion functions from RHist<int> to THist
Requires: %{name}-core%{?_isa} = %{version}-%{release}
%description histv7
+This package contains converters from the "old" THn* Hist library and
+the "new" histv7 package.
+
+%package histv7util
+Summary: Histogram library for ROOT 7
+Requires: %{name}-core%{?_isa} = %{version}-%{release}
+Requires: %{name}-hist%{?_isa} = %{version}-%{release}
+
+%description histv7util
This package contains a library for histogramming in ROOT 7.
%endif
@@ -1883,29 +1946,23 @@ This package contains a library for histogramming in ROOT 7.
%patch -P6 -p1
%patch -P7 -p1
%patch -P8 -p1
+%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
-rm -rf graf2d/asimage/src/libAfterImage/{libjpeg,libpng,libungif,zlib}
-sed '/zlib\/zlib.h/d' -i graf2d/asimage/src/libAfterImage/.depend
# * ftgl
rm -rf graf3d/ftgl/src graf3d/ftgl/inc
-# * freetype
-rm -rf graf2d/freetype/src
-# * glew, lz4, nlohmann, pcre, xxhash, zlib, zstd
-rm -rf builtins/glew
-rm -rf builtins/lz4
+# * nlohmann
%if ! %{bundlejson}
-rm -rf builtins/nlohmann
+rm builtins/nlohmann/json.hpp
%endif
-rm -rf builtins/pcre
-rm -rf builtins/xxhash
-rm -rf builtins/zlib
-rm -rf builtins/zstd
-# * lzma
-rm core/lzma/src/*.tar.gz
-# * gl2ps
-rm graf3d/gl/src/gl2ps.cxx graf3d/gl/src/gl2ps/gl2ps.h
+# * pcre
+rm builtins/pcre/pcre-*.tar.bz2
+# * xxhash
+rm builtins/xxhash/xxhash.c builtins/xxhash/xxhash.h
# * unuran
rm math/unuran/src/*.tar.gz
# * x11 extension headers
@@ -1914,7 +1971,8 @@ rm -rf graf2d/x11/inc/X11
rm -rf js/[^f]* js/files/draw.htm js/files/online.htm
# Additional documentation
-install -p -m 644 %{SOURCE7} bindings/jupyroot
+install -p -m 644 %{SOURCE7} \
+ bindings/pyroot/pythonizations/python/ROOT/_jupyroot
%build
%if %{?rhel}%{!?rhel:0} == 10
@@ -1923,10 +1981,6 @@ install -p -m 644 %{SOURCE7} bindings/jupyroot
%define _lto_cflags %{nil}
%endif
-unset QTDIR
-unset QTLIB
-unset QTINC
-
%cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DCMAKE_INSTALL_PREFIX:PATH=%{_prefix} \
-DCMAKE_INSTALL_LIBDIR:PATH=%{_libdir}/%{name} \
@@ -1941,13 +1995,11 @@ unset QTINC
-Dbuiltin_clang:BOOL=ON \
-Dbuiltin_cling:BOOL=ON \
-Dbuiltin_cppzmq:BOOL=OFF \
- -Dbuiltin_davix:BOOL=OFF \
-Dbuiltin_fftw3:BOOL=OFF \
-Dbuiltin_freetype:BOOL=OFF \
-Dbuiltin_ftgl:BOOL=OFF \
-Dbuiltin_gif:BOOL=OFF \
-Dbuiltin_gl2ps:BOOL=OFF \
- -Dbuiltin_glew:BOOL=OFF \
-Dbuiltin_gsl:BOOL=OFF \
-Dbuiltin_gtest:BOOL=OFF \
-Dbuiltin_jpeg:BOOL=OFF \
@@ -1965,9 +2017,7 @@ unset QTINC
-Dbuiltin_png:BOOL=OFF \
-Dbuiltin_tbb:BOOL=OFF \
-Dbuiltin_unuran:BOOL=OFF \
- -Dbuiltin_vc:BOOL=OFF \
-Dbuiltin_vdt:BOOL=OFF \
- -Dbuiltin_veccore:BOOL=OFF \
-Dbuiltin_xrootd:BOOL=OFF \
-Dbuiltin_xxhash:BOOL=OFF \
-Dbuiltin_zeromq:BOOL=OFF \
@@ -1985,9 +2035,10 @@ unset QTINC
-Dcefweb:BOOL=OFF \
-Dcheck_connection:BOOL=OFF \
-Dclad:BOOL=ON \
- -DCLAD_SOURCE_DIR:PATH=${PWD}/clad-2.2 \
+ -DCLAD_SOURCE_DIR:PATH=${PWD}/clad-2.3 \
-Dcocoa:BOOL=OFF \
-Dcuda:BOOL=OFF \
+ -Dcurl:BOOL=ON \
-Ddaos:BOOL=OFF \
%if %{dataframe}
-Ddataframe:BOOL=ON \
@@ -2074,9 +2125,8 @@ unset QTINC
-Dunfold:BOOL=ON \
-Dunuran:BOOL=ON \
-During:BOOL=ON \
- -Dvc:BOOL=OFF \
+ -Duse_gsl_cblas:BOOL=OFF \
-Dvdt:BOOL=OFF \
- -Dveccore:BOOL=OFF \
-Dvecgeom:BOOL=OFF \
-Dwebgui:BOOL=ON \
-Dx11:BOOL=ON \
@@ -2130,43 +2180,24 @@ mv %{buildroot}%{python3_sitearch}/ROOT/libROOTPythonizations.so \
mv %{buildroot}%{python3_sitearch}/cppyy/libcppyy.so \
%{buildroot}%{python3_sitearch}/cppyy/libcppyy%{python3_ext_suffix}
-# Move noarch python modules to sitelib
-if [ "%{python3_sitelib}" != "%{python3_sitearch}" ] ; then
-mkdir -p %{buildroot}%{python3_sitelib}
-mv %{buildroot}%{python3_sitearch}/JupyROOT %{buildroot}%{python3_sitelib}
-%if %{distrdf}
-mv %{buildroot}%{python3_sitearch}/DistRDF %{buildroot}%{python3_sitelib}
-%endif
-fi
-
# Create .dist-info files so that rpm auto-generates provides
mkdir %{buildroot}%{python3_sitearch}/ROOT-%{version}.dist-info
-echo 'Name: ROOT' > \
- %{buildroot}%{python3_sitearch}/ROOT-%{version}.dist-info/METADATA
-echo 'Version: %{version}' >> \
- %{buildroot}%{python3_sitearch}/ROOT-%{version}.dist-info/METADATA
-mkdir %{buildroot}%{python3_sitelib}/JupyROOT-%{version}.dist-info
-echo 'Name: JupyROOT' > \
- %{buildroot}%{python3_sitelib}/JupyROOT-%{version}.dist-info/METADATA
-echo 'Version: %{version}' >> \
- %{buildroot}%{python3_sitelib}/JupyROOT-%{version}.dist-info/METADATA
-%if %{distrdf}
-mkdir %{buildroot}%{python3_sitelib}/DistRDF-%{version}.dist-info
-echo 'Name: DistRDF' > \
- %{buildroot}%{python3_sitelib}/DistRDF-%{version}.dist-info/METADATA
-echo 'Version: %{version}' >> \
- %{buildroot}%{python3_sitelib}/DistRDF-%{version}.dist-info/METADATA
-%endif
+cat > %{buildroot}%{python3_sitearch}/ROOT-%{version}.dist-info/METADATA << EOF
+Name: ROOT
+Version: %{version}
+Provides-Extra: distrdf
+Provides-Extra: jupyroot
+EOF
# Put jupyter stuff in the right places
mkdir -p %{buildroot}%{_datadir}/jupyter/kernels
cp -pr %{buildroot}%{_datadir}/%{name}/notebook/kernels/root \
- %{buildroot}%{_datadir}/jupyter/kernels/python3-jupyroot
+ %{buildroot}%{_datadir}/jupyter/kernels/root
sed -e 's!python[0-9]*\.[0-9]*!%{__python3}!' \
- -i %{buildroot}%{_datadir}/jupyter/kernels/python3-jupyroot/kernel.json
+ -i %{buildroot}%{_datadir}/jupyter/kernels/root/kernel.json
sed -e '/^\#!/d' \
- -i %{buildroot}%{python3_sitelib}/JupyROOT/kernel/rootkernel.py
+ -i %{buildroot}%{python3_sitearch}/ROOT/_jupyroot/kernel/rootkernel.py
rm -rf %{buildroot}%{_datadir}/%{name}/notebook/custom
rm -rf %{buildroot}%{_datadir}/%{name}/notebook/html
@@ -2196,12 +2227,9 @@ sed -e 's!/usr/bin/env python3!%{__python3}!' \
-e '/import sys/d' \
-e '/import cmdLineUtils/iimport sys' \
-e '/import cmdLineUtils/isys.path.insert(0, "%{_datadir}/%{name}/cli")' \
- -i %{buildroot}%{_bindir}/rootcp \
- %{buildroot}%{_bindir}/rooteventselector \
- %{buildroot}%{_bindir}/rootmkdir \
+ -i %{buildroot}%{_bindir}/rooteventselector \
%{buildroot}%{_bindir}/rootmv \
%{buildroot}%{_bindir}/rootprint \
- %{buildroot}%{_bindir}/rootrm \
%{buildroot}%{_bindir}/rootslimtree
sed -e 's!/usr/bin/env python3!%{__python3}!' \
-i %{buildroot}%{_bindir}/rootdrawtree
@@ -2214,7 +2242,6 @@ sed -e 's!/usr/bin/python!%{__python3}!' \
rm %{buildroot}%{_datadir}/%{name}/root.desktop
rm %{buildroot}%{_pkgdocdir}/INSTALL
rm %{buildroot}%{_pkgdocdir}/README.CXXMODULES.md
-rm -rf %{buildroot}%{_datadir}/%{name}/html
# Only used on Windows
rm %{buildroot}%{_datadir}/%{name}/macros/fileopen.C
@@ -2268,7 +2295,6 @@ done
# ... and merge some of them
cat includelist-core-{[^mw],m[^au]}* > includelist-core
cat includelist-graf2d-x11ttf >> includelist-graf2d-x11
-cat includelist-graf3d-rglew >> includelist-graf3d-gl
# Do python byte compilation (for non-standard paths)
%py_byte_compile %{__python3} %{buildroot}%{_datadir}/%{name}/cli
@@ -2281,14 +2307,14 @@ ln -s ../../files files
popd
pushd runtutorials
ln -s ../../files files
-ln -s ../../files/tutorials/df014_CsvDataSource_MuRun2010B.csv CsvDataSource_MuRun2010B.csv
ln -s ../../files/usa.root usa.root
popd
popd
# Exclude some tests that can not be run
#
-# - test-stressIOPlugins-*
+# - test-stressIOPlugins-http
+# - test-stressIOPlugins-xroot
# requires network access (by design since they test the remote file IO)
#
# - tutorial-analysis-dataframe-df101_h1Analysis
@@ -2305,12 +2331,14 @@ popd
#
# - tutorial-analysis-dataframe-df033_Describe-py
# - tutorial-analysis-dataframe-df102_NanoAODDimuonAnalysis(-py)?
+# - tutorial-hist-histv7-hist102_NanoAODDimuonAnalysis
# reads input data over network:
# root://eospublic.cern.ch//eos/opendata/cms/derived-data/
# AOD2NanoAODOutreachTool/Run2012BC_DoubleMuParked_Muons.root
#
# - gtest-tree-treeplayer-treeprocessormt-remotefiles
# - tutorial-analysis-dataframe-df103_NanoAODHiggsAnalysis(-py)?
+# - tutorial-hist-histv7-hist103_NanoAODHiggsAnalysis
# reads input data over network:
# root://eospublic.cern.ch//eos/root-eos/cms_opendata_2012_nanoaod/
#
@@ -2323,6 +2351,15 @@ popd
# reads input data over network:
# root://eospublic.cern.ch//eos/opendata/atlas/OutreachDatasets/2020-01-22/
#
+# - tutorial-analysis-dataframe-df014_CSVDataSource(-py)
+# - tutorial-analysis-dataframe-df015_LazyDataSource
+# reads input data over network:
+# http://root.cern/files/tutorials/df014_CsvDataSource_MuRun2010B.csv
+#
+# - tutorial-hist-hist039_TH2Poly_usa-py
+# reads input data over network:
+# http://root.cern/files/usa.root
+#
# - tutorial-io-ntuple-ntpl004_dimuon
# reads input data over network
# http://root.cern.ch/files/NanoAOD_DoubleMuon_CMS2011OpenData.root (1.5 GB)
@@ -2331,9 +2368,9 @@ popd
# reads input data over network
# http://root.cern.ch/files/HiggsTauTauReduced/GluGluToHToTauTau.root (20 MB)
#
-# - tutorial-io-ntuple-ntpl011_global_temperatures
-# reads input data over network
-# http://root.cern.ch/files/tutorials/GlobalLandTemperaturesByCity.csv
+# - gtest-net-curl-rawfile-curl
+# - gtest-net-curl-tfile-curl
+# reads input file over network
#
# - gtest-net-davix-RRawFileDavix
# reads input file over network
@@ -2355,7 +2392,7 @@ popd
# - test-webgui-ping
# error: Cannot display window in native
#
-# - test-stressgraphics-firefox-skip3d:
+# - test-stressgraphics-firefox-skip3d
# requires firefox...
#
# - test-stressgraphics-svg
@@ -2363,8 +2400,12 @@ popd
#
# - tutorial-visualisation-webcanv-fonts_ttf.cxx:
# Requires web graphics
+#
+# - tmva-sofie-test-TestCladAutodiff
+# Fails often...
excluded="\
-test-stressIOPlugins|\
+test-stressIOPlugins-http|\
+test-stressIOPlugins-xroot|\
tutorial-analysis-dataframe-df101_h1Analysis|\
tutorial-analysis-tree-run_h1analysis|\
tutorial-legacy-multicore-mp104_processH1|\
@@ -2372,17 +2413,23 @@ tutorial-io-tree-imt_parTreeProcessing|\
tutorial-analysis-dataframe-df..._SQlite|\
tutorial-analysis-dataframe-df033_Describe-py|\
tutorial-analysis-dataframe-df102_NanoAODDimuonAnalysis|\
+tutorial-hist-histv7-hist102_NanoAODDimuonAnalysis|\
gtest-tree-treeplayer-treeprocessormt-remotefiles|\
tutorial-analysis-dataframe-df103_NanoAODHiggsAnalysis|\
+tutorial-hist-histv7-hist103_NanoAODHiggsAnalysis|\
tutorial-analysis-dataframe-df104_HiggsToTwoPhotons-py|\
tutorial-analysis-dataframe-df105_WBosonAnalysis-py|\
tutorial-analysis-dataframe-df106_HiggsToFourLeptons|\
tutorial-analysis-dataframe-df107_SingleTopAnalysis-py|\
tutorial-visualisation-rcanvas-df104-py|\
tutorial-visualisation-rcanvas-df105-py|\
+tutorial-analysis-dataframe-df014_CSVDataSource|\
+tutorial-analysis-dataframe-df015_LazyDataSource|\
+tutorial-hist-hist039_TH2Poly_usa-py|\
tutorial-io-ntuple-ntpl004_dimuon|\
tutorial-io-ntuple-ntpl008_import|\
-tutorial-io-ntuple-ntpl011_global_temperatures|\
+gtest-net-curl-rawfile-curl|\
+gtest-net-curl-tfile-curl|\
gtest-net-davix-RRawFileDavix|\
gtest-net-netxng-RRawFileNetXNG|\
gtest-net-netxng-TNetXNGFileTest|\
@@ -2391,49 +2438,57 @@ tutorial-machine_learning-tmva100_DataPreparation-py|\
test-webgui-ping|\
test-stressgraphics-firefox-skip3d|\
test-stressgraphics-svg|\
-tutorial-visualisation-webcanv-fonts_ttf.cxx"
+tutorial-visualisation-webcanv-fonts_ttf.cxx|\
+tmva-sofie-test-TestCladAutodiff"
+
+%if %{?rhel}%{!?rhel:0} == 9
+# - pyunittests-bindings-pyroot-cppyy-cppyy-test-datatypes
+# Fails on EPEL 9 (see patch above)
+excluded="${excluded}|\
+pyunittests-bindings-pyroot-cppyy-cppyy-test-datatypes"
+%endif
%ifarch %{ix86}
# - gtest-hist-hist-TFormulaGradientTests
# out of memory
#
# - tmva-sofie-test-TestCustomModelsFromONNX
-# Expected equality of these values:
-# output.size()
-# Which is: 1000
-# sizeof(Slice_Neg::output) / sizeof(float)
-# Which is: 900
+# many failures ...
+#
+# - pyunittests-bindings-pyroot-cppyy-cppyy-test-datatypes
+# - pyunittests-bindings-pyroot-cppyy-cppyy-test-lowlevel
+# - pyunittests-bindings-pyroot-cppyy-cppyy-test-regression
+# cppyy tests failing
excluded="${excluded}|\
gtest-hist-hist-TFormulaGradientTests|\
-tmva-sofie-test-TestCustomModelsFromONNX\$\$"
+tmva-sofie-test-TestCustomModelsFromONNX|\
+pyunittests-bindings-pyroot-cppyy-cppyy-test-datatypes|\
+pyunittests-bindings-pyroot-cppyy-cppyy-test-lowlevel|\
+pyunittests-bindings-pyroot-cppyy-cppyy-test-regression"
%endif
%ifarch %{power64}
-%if %{?fedora}%{!?fedora:0} >= 42
+# - gtest-tree-ntuple-ntuple-emulated
# - gtest-tree-ntuple-ntuple-evolution-shape
# waitpid() failed
excluded="${excluded}|\
-gtest-tree-ntuple-ntuple-evolution-shape"
-%endif
-
-# - gtest-tree-ntuple-ntuple-emulated
-# - gtest-tree-ntuple-ntuple-merger
-# Random failures
-excluded="${excluded}|\
gtest-tree-ntuple-ntuple-emulated|\
-gtest-tree-ntuple-ntuple-merger"
+gtest-tree-ntuple-ntuple-evolution-shape"
%endif
%ifarch s390x
# - gtest-roofit-roofitcore-testNaNPacker
-# - gtest-roofit-roofitcore-testLikelihoodGradientJob
# Uses "Packed NaN" feature, not implemented for big endian.
excluded="${excluded}|\
-gtest-roofit-roofitcore-testNaNPacker|\
-gtest-roofit-roofitcore-testLikelihoodGradientJob"
+gtest-roofit-roofitcore-testNaNPacker"
# - gtest-core-dictgen-dictgen-base
+# - gtest-net-httpsniff-testRootSniffer
+# - gtest-net-net-testParallelMergingFile
+# - gtest-roofit-roofitcore-testLikelihoodGradientJob
# - gtest-tree-dataframe-dataframe-concurrency
+# - gtest-tree-dataframe-dataframe-snapshot-interpreted-class-read
+# - gtest-tree-dataframe-dataframe-snapshot-interpreted-class-write
# - gtest-tree-dataframe-dataframe-snapshot-ntuple
# - gtest-tree-dataframe-dataframe-unified-constructor
# - gtest-tree-dataframe-dataframe-vary
@@ -2458,6 +2513,7 @@ gtest-roofit-roofitcore-testLikelihoodGradientJob"
# - gtest-tree-ntuple-ntuple-processor-join
# - gtest-tree-ntuple-ntuple-project
# - gtest-tree-ntuple-ntuple-show
+# - gtest-tree-ntuple-ntuple-soa
# - gtest-tree-ntuple-ntuple-storage
# - gtest-tree-ntuple-ntuple-storage-daos
# - gtest-tree-ntuple-ntuple-types
@@ -2474,10 +2530,10 @@ gtest-roofit-roofitcore-testLikelihoodGradientJob"
# - pyunittests-bindings-distrdf-backend-distrdf-unit-backend-graph-caching
# - pyunittests-bindings-pyroot-pythonizations-pyroot-pyz-rtensor
# - pyunittests-bindings-pyroot-pythonizations-pyroot-pyz-stl-vector
+# - pyunittests-hist-histv7-hist-py
# - pyunittests-io-io-rfile-py
# - tmva-sofie-test-TestCustomModelsFromONNX
# - tutorial-analysis-dataframe-df006_ranges-py
-# - tutorial-hist-hist007_TH1_liveupdate-py
# - tutorial-math-exampleFunction-py
# - tutorial-math-fit-combinedFit-py
# - tutorial-math-fit-NumericalMinimization-py
@@ -2488,9 +2544,16 @@ gtest-roofit-roofitcore-testLikelihoodGradientJob"
# - test-stresshistofit-interpreted
# - test-stresshistogram
# - test-stresshistogram-interpreted
+#
+# - pyunittests-bindings-pyroot-cppyy-cppyy-test-*
excluded="${excluded}|\
gtest-core-dictgen-dictgen-base|\
+gtest-net-httpsniff-testRootSniffer|\
+gtest-net-net-testParallelMergingFile|\
+gtest-roofit-roofitcore-testLikelihoodGradientJob|\
gtest-tree-dataframe-dataframe-concurrency|\
+gtest-tree-dataframe-dataframe-snapshot-interpreted-class-read|\
+gtest-tree-dataframe-dataframe-snapshot-interpreted-class-write|\
gtest-tree-dataframe-dataframe-snapshot-ntuple|\
gtest-tree-dataframe-dataframe-unified-constructor|\
gtest-tree-dataframe-dataframe-vary|\
@@ -2515,6 +2578,7 @@ gtest-tree-ntuple-ntuple-processor-chain|\
gtest-tree-ntuple-ntuple-processor-join|\
gtest-tree-ntuple-ntuple-project|\
gtest-tree-ntuple-ntuple-show|\
+gtest-tree-ntuple-ntuple-soa|\
gtest-tree-ntuple-ntuple-storage\$\$|\
gtest-tree-ntuple-ntuple-storage-daos|\
gtest-tree-ntuple-ntuple-types|\
@@ -2529,10 +2593,10 @@ gtest-tree-tree-testTTreeRegressions|\
pyunittests-bindings-distrdf-backend-distrdf-unit-backend-graph-caching|\
pyunittests-bindings-pyroot-pythonizations-pyroot-pyz-rtensor|\
pyunittests-bindings-pyroot-pythonizations-pyroot-pyz-stl-vector|\
+pyunittests-hist-histv7-hist-py|\
pyunittests-io-io-rfile-py|\
tmva-sofie-test-TestCustomModelsFromONNX|\
tutorial-analysis-dataframe-df006_ranges-py|\
-tutorial-hist-hist007_TH1_liveupdate-py|\
tutorial-math-exampleFunction-py|\
tutorial-math-fit-combinedFit-py|\
tutorial-math-fit-NumericalMinimization-py|\
@@ -2540,19 +2604,16 @@ tutorial-visualisation-rcanvas-rbox-py|\
test-stresshistofit\$\$|\
test-stresshistofit-interpreted|\
test-stresshistogram\$\$|\
-test-stresshistogram-interpreted"
+test-stresshistogram-interpreted|\
+pyunittests-bindings-pyroot-cppyy-cppyy-test"
# The zlib-ng library is compiled with hardware acceleration support on s390x
# in Fedora 43 and later and RHEL 10.1 and later
# This means that some tests that compare the size of compressed data fail.
# - test-stress
-# - gtest-tree-readspeed-readspeed-general
-# - gtest-tree-tree-testTBranch
%if %{?fedora}%{!?fedora:0} >= 43 || %{?rhel}%{!?rhel:0} >= 10
excluded="${excluded}|\
-test-stress\$\$|\
-gtest-tree-readspeed-readspeed-general|\
-gtest-tree-tree-testTBranch"
+test-stress\$\$"
%endif
%endif
@@ -2571,32 +2632,60 @@ gtest-math-matrix-testMatrixTSparse"
%endif
# Filter out parts of tests that require remote network access
-# RNTuple.StdAtomic fails on ix86 (different alignment 64 bit (non)atomic)
-# InterpreterTest.Evaluate fails on s390x
-# TClingDataMemberInfo.Offset fails on s390x
+# gtest-io-io-rfile: RFile.RemoteRead
+# gtest-io-io-RRawFile: RRawFile.Remote
+# gtest-io-io-TFile: TFile.ReadWithoutGlobalRegistrationNet
+# TFile.ReadWithoutGlobalRegistrationWeb
+# TFile.ReadWithCacheWithoutGlobalRegistration
+# gtest-tree-dataframe-datasource-csv: RCsvDS.Remote
+# gtest-tree-dataframe-datasource-sqlite: RSqliteDS.Remote
+# gtest-tree-ntuple-ntuple-storage: RNTuple.OpenHTTP
+# gtest-tree-tree-testTChainParsing: TChainParsing.DoubleSlash
+# TChainParsing.RemoteGlob
+#
+# Fails on ix86 (different alignment 64 bit (non)atomic)
+# gtest-tree-ntuple-ntuple-types: RNTuple.StdAtomic
+#
+# Fails on ppc64le (no __float128 support)
+# cppinterop-CppInterOpTests: CppInterOpTest/InProcessJIT.Interpreter_Evaluate
+#
+# Fails on s390x (big endian)
# https://github.com/root-project/root/issues/14512
-# TTreeRegressions.PrintClustersRounding
-# relies on specific versions of compression libraries
+# cppinterop-CppInterOpTests: CppInterOpTest/InProcessJIT.Interpreter_Evaluate
+# gtest-core-metacling-TClingTest: TClingDataMemberInfo.Offset
+# gtest-io-io-rfile: RFile.RNTuple
+# gtest-tree-treeplayer-treeplayer-branchobject: TTreeReaderBasic.LorentzVector32
+# gtest-tree-tree-testTTreeRegressions: TTreeRegressions.TTreeFormulaMemberIndex
+#
+# Fails on s390x (differnt compression size with zlib-ng)
# https://github.com/root-project/root/issues/18995
+# gtest-tree-tree-testTTreeRegressions: TTreeRegressions.PrintClustersRounding
export GTEST_FILTER=-\
%ifarch %{ix86}
RNTuple.StdAtomic:\
%endif
+%ifarch %{power64}
+CppInterOpTest/InProcessJIT.Interpreter_Evaluate:\
+%endif
%ifarch s390x
-InterpreterTest.Evaluate:\
+CppInterOpTest/InProcessJIT.Interpreter_Evaluate:\
TClingDataMemberInfo.Offset:\
+RFile.RNTuple:\
TTreeReaderBasic.LorentzVector32:\
+TTreeRegressions.TTreeFormulaMemberIndex:\
+TTreeRegressions.PrintClustersRounding:\
%endif
RCsvDS.Remote:\
RFile.RemoteRead:\
RNTuple.OpenHTTP:\
RRawFile.Remote:\
RSqliteDS.Davix:\
+RSqliteDS.Remote:\
TChainParsing.DoubleSlash:\
TChainParsing.RemoteGlob:\
TFile.ReadWithoutGlobalRegistrationNet:\
TFile.ReadWithoutGlobalRegistrationWeb:\
-TTreeRegressions.PrintClustersRounding
+TFile.ReadWithCacheWithoutGlobalRegistration
%ctest -- -E "${excluded}"
%pretrans net-http -p <lua>
@@ -2619,7 +2708,7 @@ if [ -r /var/lib/alternatives/libPyROOT.so ] ; then
done
fi
-%post -n python3-jupyroot
+%post -n python3-root+jupyroot
mkdir -p /etc/jupyter
if [ -e /etc/jupyter/jupyter_notebook_config.py ] ; then
sed '/Extra static paths for JupyROOT - start/','/Extra static paths for JupyROOT - end/'d -i /etc/jupyter/jupyter_notebook_config.py
@@ -2638,7 +2727,7 @@ c.ServerApp.extra_static_paths.append('%{_jsdir}/jsroot')
# Extra static paths for JupyROOT - end - do not remove this line
EOF
-%postun -n python3-jupyroot
+%postun -n python3-root+jupyroot
if [ $1 -eq 0 ] ; then
if [ -e /etc/jupyter/jupyter_notebook_config.py ] ; then
sed '/Extra static paths for JupyROOT - start/','/Extra static paths for JupyROOT - end/'d -i /etc/jupyter/jupyter_notebook_config.py
@@ -2664,9 +2753,12 @@ fi
%{_bindir}/root
%{_bindir}/root.exe
%{_bindir}/rootbrowse
+%{_bindir}/rootcp
%{_bindir}/rootls
+%{_bindir}/rootmkdir
%{_bindir}/rootn.exe
%{_bindir}/rootreadspeed
+%{_bindir}/rootrm
%{_bindir}/roots
%{_bindir}/roots.exe
%{_bindir}/rootssh
@@ -2767,7 +2859,7 @@ fi
%files testsupport
%{_includedir}/%{name}/ROOT/TestSupport.hxx
-%{_libdir}/%{name}/TestSupport
+%{_libdir}/%{name}/libTestSupport
%doc core/testsupport/README.md
%files tpython -f includelist-bindings-tpython
@@ -2777,22 +2869,24 @@ fi
%files -n python3-%{name} -f includelist-bindings-pyroot
%{python3_sitearch}/cppyy
%{python3_sitearch}/ROOT
+%exclude %{python3_sitearch}/ROOT/_distrdf
+%exclude %{python3_sitearch}/ROOT/_jupyroot
%{python3_sitearch}/ROOT-*.dist-info
%{_libdir}/%{name}/libCPyCppyy.*
%dir %{_includedir}/%{name}/CPyCppyy
-%files -n python3-jupyroot
-%{python3_sitelib}/JupyROOT
-%{python3_sitelib}/JupyROOT-*.dist-info
-%{_datadir}/jupyter/kernels/python3-jupyroot
+%files -n python3-root+jupyroot
+%{python3_sitearch}/ROOT/_jupyroot
+%ghost %{python3_sitearch}/ROOT-*.dist-info
+%{_datadir}/jupyter/kernels/root
%{_bindir}/rootnb.exe
-%doc bindings/jupyroot/README.md
-%doc bindings/jupyroot/JupyROOT-on-EPEL
+%doc bindings/pyroot/pythonizations/python/ROOT/_jupyroot/README.md
+%doc bindings/pyroot/pythonizations/python/ROOT/_jupyroot/JupyROOT-on-EPEL
%if %{distrdf}
-%files -n python3-distrdf
-%{python3_sitelib}/DistRDF
-%{python3_sitelib}/DistRDF-*.dist-info
+%files -n python3-root+distrdf
+%{python3_sitearch}/ROOT/_distrdf
+%ghost %{python3_sitearch}/ROOT-*.dist-info
%endif
%if %{rrr}
@@ -2898,6 +2992,9 @@ fi
%{_datadir}/%{name}/plugins/TVirtualViewer3D/P020_TGLSAViewer.C
%{_datadir}/%{name}/plugins/TVirtualViewer3D/P030_TGLViewer.C
+%files graf3d-glad
+%{_libdir}/%{name}/libROOTGlad.*
+
%files graf3d-gviz3d -f includelist-graf3d-gviz3d
%{_libdir}/%{name}/libGviz3d.*
%{_libdir}/%{name}/libGviz3d_rdict.pcm
@@ -3122,6 +3219,12 @@ fi
%{_datadir}/%{name}/plugins/TVirtualAuth/P010_TRootAuth.C
%doc %{_pkgdocdir}/README.AUTH
+%files net-curl -f includelist-net-curl
+%{_libdir}/%{name}/libRCurlHttp.*
+%{_libdir}/%{name}/libRCurlHttp_rdict.pcm
+%{_datadir}/%{name}/plugins/ROOT@@Internal@@RRawFile/P015_RRawFileCurl.C
+%{_datadir}/%{name}/plugins/TFile/P140_TCurlFile.C
+
%files net-davix -f includelist-net-davix
%{_libdir}/%{name}/libRDAVIX.*
%{_libdir}/%{name}/libRDAVIX_rdict.pcm
@@ -3251,10 +3354,6 @@ fi
%exclude %{_includedir}/%{name}/TMVA/RSofieReader.hxx
%exclude %{_includedir}/%{name}/TMVA/RStandardScaler.hxx
%exclude %{_includedir}/%{name}/TMVA/RTensorUtils.hxx
-%exclude %{_includedir}/%{name}/TMVA/BatchGenerator/RBatchGenerator.hxx
-%exclude %{_includedir}/%{name}/TMVA/BatchGenerator/RBatchLoader.hxx
-%exclude %{_includedir}/%{name}/TMVA/BatchGenerator/RChunkConstructor.hxx
-%exclude %{_includedir}/%{name}/TMVA/BatchGenerator/RChunkLoader.hxx
%if %{dataframe}
%files tmva-utils
@@ -3267,11 +3366,6 @@ fi
%{_includedir}/%{name}/TMVA/RSofieReader.hxx
%{_includedir}/%{name}/TMVA/RStandardScaler.hxx
%{_includedir}/%{name}/TMVA/RTensorUtils.hxx
-%dir %{_includedir}/%{name}/TMVA/BatchGenerator
-%{_includedir}/%{name}/TMVA/BatchGenerator/RBatchGenerator.hxx
-%{_includedir}/%{name}/TMVA/BatchGenerator/RBatchLoader.hxx
-%{_includedir}/%{name}/TMVA/BatchGenerator/RChunkConstructor.hxx
-%{_includedir}/%{name}/TMVA/BatchGenerator/RChunkLoader.hxx
%endif
%files tmva-python -f includelist-tmva-pymva
@@ -3293,6 +3387,13 @@ fi
%files tmva-sofie-parser -f includelist-tmva-sofie_parsers
%{_libdir}/%{name}/libROOTTMVASofieParser.*
%{_libdir}/%{name}/libROOTTMVASofieParser_rdict.pcm
+%exclude %{_includedir}/%{name}/TMVA/RModelParser_Keras.h
+%exclude %{_includedir}/%{name}/TMVA/RModelParser_PyTorch.h
+
+%files tmva-sofie-parser-python
+%{_libdir}/%{name}/libROOTTMVASofiePyParsers.*
+%{_includedir}/%{name}/TMVA/RModelParser_Keras.h
+%{_includedir}/%{name}/TMVA/RModelParser_PyTorch.h
%endif
%files tmva-gui -f includelist-tmva-tmvagui
@@ -3308,6 +3409,11 @@ fi
%files tree-dataframe -f includelist-tree-dataframe
%{_libdir}/%{name}/libROOTDataFrame.*
%{_libdir}/%{name}/libROOTDataFrame_rdict.pcm
+
+%files tree-ml -f includelist-tree-ml
+%{_libdir}/%{name}/libROOTMLDataLoader.*
+%{_libdir}/%{name}/libROOTMLDataLoader_rdict.pcm
+%dir %{_includedir}/%{name}/ROOT/ML
%endif
%files tree-player -f includelist-tree-treeplayer
@@ -3331,13 +3437,10 @@ fi
%{_libdir}/%{name}/libUnfold_rdict.pcm
%files cli
-%{_bindir}/rootcp
%{_bindir}/rootdrawtree
%{_bindir}/rooteventselector
-%{_bindir}/rootmkdir
%{_bindir}/rootmv
%{_bindir}/rootprint
-%{_bindir}/rootrm
%{_bindir}/rootslimtree
%{_datadir}/%{name}/cli
@@ -3431,9 +3534,30 @@ fi
%files histv7 -f includelist-hist-histv7
%{_libdir}/%{name}/libROOTHist.*
%{_libdir}/%{name}/libROOTHist_rdict.pcm
+
+%files histv7util -f includelist-hist-histv7util
+%{_libdir}/%{name}/libROOTHistUtil.*
+%{_libdir}/%{name}/libROOTHistUtil_rdict.pcm
+%dir %{_includedir}/%{name}/ROOT/Hist
%endif
%changelog
+* Sat Jun 20 2026 Mattias Ellert <mattias.ellert@physics.uu.se> - 6.40.02-1
+- Update to 6.40.02
+- Rename the jupyroot and distrdf packages to reflect that they are
+ now submodules of the main pyyhon package
+- New subpackages: root-package graf3d-glad, root-package net-curl,
+ root-package tmva-sofie-parser-python, root-package tree-ml,
+ root-package histv7util
+- Dropped patches: 2
+- New patches: 7
+
+* Fri Jun 12 2026 Yaakov Selkowitz <yselkowi@redhat.com> - 6.38.04-7
+- Rebuilt for openssl 4.0
+
+* Thu Jun 04 2026 Python Maint <python-maint@redhat.com> - 6.38.04-6
+- Rebuilt for Python 3.15
+
* Wed May 06 2026 Mattias Ellert <mattias.ellert@physics.uu.se> - 6.38.04-6
- Combined rebuild for xrootd and R
diff --git a/sources b/sources
index 11e9563..f863ce7 100644
--- a/sources
+++ b/sources
@@ -1,3 +1,3 @@
-SHA512 (root-6.38.04.tar.xz) = 3f8b4bf1f778008e1d6d3a711ac791391fb32971c03bd6367994e137cc16a87a3e382ce962f9197eef386c736fb8a525eb47606eef5f3390d85942b0d6b641b6
+SHA512 (root-6.40.02.tar.xz) = 8a815a24db14a4160be00c21d275d5b527573b02844568b0f549f236c2b481c7ad3f43076a9e862a740c7b0784b2bfb54461d2c0d7eec2816f56d4428aa1c811
SHA512 (root-testfiles.tar.xz) = 4bb7f8ca00b1427ba49f6428e9cfe5908a2ffdd2ce4134d3bc169a0629198352b5500fe0cf92c121d148e5af41f7016c96038a77794a4d37d94e6ec0a9d75670
-SHA512 (clad-2.2.tar.gz) = 6f76d706a829901fc0fcdb38b5ddad6ea8ad9186ea48a4b6b585fc62974a2cda11b96a448c25daaba0586962d6428773e7ab751236c6afa72a91d12f30f2d05e
+SHA512 (clad-2.3.tar.gz) = 2d7e008ad88dd9e4b44d73e3187f8b1883e475845f5ac2d3b2c8e728508422e1e60e279940fefe322995751490f61f7d4768498c3660f9afa1206cc0e83bea33
reply other threads:[~2026-06-29 18:08 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=178275651524.1.16796755960698771550.rpms-root-e663491f10e1@fedoraproject.org \
--to=mattias.ellert@physics.uu.se \
--cc=git-commits@fedoraproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox