Compare commits

..

No commits in common. "rawhide" and "f35" have entirely different histories.

52 changed files with 5127 additions and 2797 deletions

170
root-32bit-dataframe.patch Normal file
View file

@ -0,0 +1,170 @@
From 686d5011df607fde2a42c729d6bd446486163784 Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Fri, 13 Mar 2020 16:20:17 +0100
Subject: [PATCH] Restore 32-bit dataframe
---
build/unix/makepchinput.py | 3 ---
cmake/modules/RootBuildOptions.cmake | 5 -----
tree/dataframe/test/dataframe_cache.cxx | 4 ----
tree/dataframe/test/datasource_arrow.cxx | 4 ----
tree/dataframe/test/datasource_csv.cxx | 4 ----
tree/dataframe/test/datasource_root.cxx | 4 ----
tree/dataframe/test/datasource_trivial.cxx | 4 ----
tutorials/CMakeLists.txt | 5 -----
8 files changed, 33 deletions(-)
diff --git a/build/unix/makepchinput.py b/build/unix/makepchinput.py
index 1adff487de..eec73f946d 100755
--- a/build/unix/makepchinput.py
+++ b/build/unix/makepchinput.py
@@ -252,9 +252,6 @@ def isDirForPCH(dirName, legacyPyROOT):
"math/vdt",
"tmva/rmva"]
- if (sys.platform != 'win32' and sys.maxsize <= 2**32): # https://docs.python.org/3/library/platform.html#cross-platform
- PCHPatternsBlacklist.append("tree/dataframe")
-
accepted = isAnyPatternInString(PCHPatternsWhitelist,dirName) and \
not isAnyPatternInString(PCHPatternsBlacklist,dirName)
diff --git a/cmake/modules/RootBuildOptions.cmake b/cmake/modules/RootBuildOptions.cmake
index 7886c5f3e9..6fbd8873f1 100644
--- a/cmake/modules/RootBuildOptions.cmake
+++ b/cmake/modules/RootBuildOptions.cmake
@@ -344,11 +344,6 @@ if(CMAKE_SYSTEM_PROCESSOR MATCHES aarch64)
set(runtime_cxxmodules_defvalue OFF)
endif()
-# Disable RDataFrame on 32-bit UNIX platforms due to ROOT-9236
-if(UNIX AND CMAKE_SIZEOF_VOID_P EQUAL 4)
- set(dataframe_defvalue OFF)
-endif()
-
# MultiProcess is not possible on Windows, so fail if it is manually set:
if(roofit_multiprocess AND WIN32)
message(FATAL_ERROR ">>> Option 'roofit_multiprocess' is not supported on Windows.")
diff --git a/tree/dataframe/test/dataframe_cache.cxx b/tree/dataframe/test/dataframe_cache.cxx
index 77be488052..8475b98acb 100644
--- a/tree/dataframe/test/dataframe_cache.cxx
+++ b/tree/dataframe/test/dataframe_cache.cxx
@@ -224,8 +224,6 @@ TEST(Cache, evtCounter)
}
-#ifdef R__B64
-
TEST(Cache, Regex)
{
@@ -329,8 +327,6 @@ TEST(Cache, Carrays)
gSystem->Unlink(fileName);
}
-#endif // R__B64
-
// ROOT-10563
TEST(Cache, Alias)
{
diff --git a/tree/dataframe/test/datasource_arrow.cxx b/tree/dataframe/test/datasource_arrow.cxx
index 5ac9fcf09a..5f5f94a666 100644
--- a/tree/dataframe/test/datasource_arrow.cxx
+++ b/tree/dataframe/test/datasource_arrow.cxx
@@ -177,8 +177,6 @@ TEST(RArrowDS, SetNSlotsTwice)
}
#endif
-#ifdef R__B64
-
TEST(RArrowDS, FromARDF)
{
std::unique_ptr<RDataSource> tds(new RArrowDS(createTestTable(), {}));
@@ -250,5 +248,3 @@ TEST(RArrowDS, FromARDFWithJittingMT)
}
#endif // R__USE_IMT
-
-#endif // R__B64
diff --git a/tree/dataframe/test/datasource_csv.cxx b/tree/dataframe/test/datasource_csv.cxx
index 6554719f98..d93117b67a 100644
--- a/tree/dataframe/test/datasource_csv.cxx
+++ b/tree/dataframe/test/datasource_csv.cxx
@@ -210,8 +210,6 @@ TEST(RCsvDS, SetNSlotsTwice)
}
#endif
-#ifdef R__B64
-
TEST(RCsvDS, FromARDF)
{
std::unique_ptr<RDataSource> tds(new RCsvDS(fileName0));
@@ -324,5 +322,3 @@ TEST(RCsvDS, ProgressiveReadingRDFMT)
}
#endif // R__USE_IMT
-
-#endif // R__B64
diff --git a/tree/dataframe/test/datasource_root.cxx b/tree/dataframe/test/datasource_root.cxx
index 79840d9fff..4c795fee6f 100644
--- a/tree/dataframe/test/datasource_root.cxx
+++ b/tree/dataframe/test/datasource_root.cxx
@@ -117,8 +117,6 @@ TEST(TRootTDS, SetNSlotsTwice)
}
#endif
-#ifdef R__B64
-
TEST(TRootTDS, FromARDF)
{
std::unique_ptr<RDataSource> tds(new ROOT::Internal::RDF::RRootDS(treeName, fileGlob));
@@ -190,5 +188,3 @@ TEST(TRootTDS, FromARDFWithJittingMT)
}
#endif // R__USE_IMT
-
-#endif // R__B64
diff --git a/tree/dataframe/test/datasource_trivial.cxx b/tree/dataframe/test/datasource_trivial.cxx
index 7da675c83b..deb89301c7 100644
--- a/tree/dataframe/test/datasource_trivial.cxx
+++ b/tree/dataframe/test/datasource_trivial.cxx
@@ -141,8 +141,6 @@ TEST(RTrivialDS, EarlyQuitWithRange)
EXPECT_EQ(df.Range(10).Count().GetValue(), 10);
}
-#ifdef R__B64
-
TEST(RTrivialDS, FromARDFWithJitting)
{
std::unique_ptr<RDataSource> tds(new RTrivialDS(32));
@@ -245,5 +243,3 @@ TEST(RTrivialDS, SkipEntriesMT)
}
#endif // R__USE_IMT
-
-#endif // R__B64
diff --git a/tutorials/CMakeLists.txt b/tutorials/CMakeLists.txt
index a6e5c97703..12bb610d67 100644
--- a/tutorials/CMakeLists.txt
+++ b/tutorials/CMakeLists.txt
@@ -332,10 +332,6 @@ else()
list(APPEND root7_veto ${v7_veto_files})
endif()
-if( CMAKE_SIZEOF_VOID_P EQUAL 4 )
- set(bits32_veto dataframe/*.C graphs/timeSeriesFrom*.C v7/ntuple/ntpl004_dimuon.C)
-endif()
-
if (APPLE AND CMAKE_SYSTEM_PROCESSOR MATCHES arm64)
set(macm1_veto dataframe/df107_SingleTopAnalysis.py)
endif()
@@ -391,7 +387,6 @@ set(all_veto hsimple.C
${classic_veto}
${pythia_veto}
${root7_veto}
- ${bits32_veto}
${xrootd_veto}
${mlp_veto}
${spectrum_veto}
--
2.35.1

View file

@ -1,7 +1,7 @@
From 55446dcd6eabc1fff218f266c11f31697fe99f09 Mon Sep 17 00:00:00 2001
From 70d941cd6ebbc3726e08ef7f52d0135453f0b840 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
Subject: [PATCH 2/3] Run tests on 32 bit
---
test/stressGeometry.cxx | 8 --------
@ -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 5e81f5f2ca..18e41a6f45 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,26 +28,26 @@ 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 0c1a39d01e..3bafe47934 100644
--- a/tree/tree/test/CMakeLists.txt
+++ b/tree/tree/test/CMakeLists.txt
@@ -17,13 +17,9 @@ endif()
@@ -12,13 +12,9 @@ ROOT_ADD_GTEST(testTOffsetGeneration TOffsetGeneration.cxx ElementStruct.cxx Ele
target_include_directories(testTOffsetGeneration PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
ROOT_STANDARD_LIBRARY_PACKAGE(SillyStruct NO_INSTALL_HEADERS HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/SillyStruct.h SOURCES SillyStruct.cxx LINKDEF SillyStructLinkDef.h DEPENDENCIES RIO)
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.
-if(NOT CMAKE_SIZEOF_VOID_P EQUAL 4)
- ROOT_ADD_GTEST(testBulkApiMultiple BulkApiMultiple.cxx LIBRARIES RIO Tree TreePlayer TIMEOUT 3000)
- ROOT_ADD_GTEST(testBulkApiMultiple BulkApiMultiple.cxx LIBRARIES RIO Tree TreePlayer)
- ROOT_ADD_GTEST(testBulkApiVarLength BulkApiVarLength.cxx LIBRARIES RIO Tree TreePlayer)
- ROOT_ADD_GTEST(testBulkApiSillyStruct BulkApiSillyStruct.cxx LIBRARIES RIO Tree TreePlayer SillyStruct)
-endif()
+ROOT_ADD_GTEST(testBulkApiMultiple BulkApiMultiple.cxx LIBRARIES RIO Tree TreePlayer TIMEOUT 3000)
+ROOT_ADD_GTEST(testBulkApiMultiple BulkApiMultiple.cxx LIBRARIES RIO Tree TreePlayer)
+ROOT_ADD_GTEST(testBulkApiVarLength BulkApiVarLength.cxx LIBRARIES RIO Tree TreePlayer)
+ROOT_ADD_GTEST(testBulkApiSillyStruct BulkApiSillyStruct.cxx LIBRARIES RIO Tree TreePlayer SillyStruct)
ROOT_ADD_GTEST(testTBasket TBasket.cxx LIBRARIES RIO Tree)
ROOT_ADD_GTEST(testTBranch TBranch.cxx LIBRARIES RIO Tree MathCore)
ROOT_ADD_GTEST(testTIOFeatures TIOFeatures.cxx LIBRARIES RIO Tree)
--
2.45.1
2.24.1

View file

@ -1,49 +0,0 @@
From f7bfa429deb9dbae9058998888bbcaa84af0ca08 Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Tue, 2 Dec 2025 05:33:31 +0100
Subject: [PATCH] Adjust test/stressGraphics.ref
---
test/stressGraphics.ref | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/test/stressGraphics.ref b/test/stressGraphics.ref
index 2498ec6d755..4520a5ab113 100644
--- a/test/stressGraphics.ref
+++ b/test/stressGraphics.ref
@@ -10,11 +10,11 @@ Test# PS1Ref# PS1Err# PDFRef# PDFErr# JPGRef# JPGErr# PNGRef# PN
9 9253 100 14377 150 19851 2400 12199 900 9283 100
10 8863 70 13645 100 24343 1100 23278 1700 8894 70
11 12971 100 14750 50 34063 2000 32033 1200 13070 150
- 12 7674 100 13533 50 83557 3000 38505 4000 7720 150
- 13 5600 400 13242 300 16881 400 15063 800 5638 400
+ 12 7674 100 13533 100 83557 3000 38505 4000 7720 150
+ 13 5600 400 13242 400 16881 400 15063 800 5638 400
14 14190539 4000000 12926 100 23076 9500 25987 3000 14190704 4000000
15 15690 5000 17179 200 23076 9500 14232 1500 10437 5000
- 16 28072 400 23520 200 44462 11000 30062 5000 38007 400
+ 16 28072 400 23520 250 44462 11000 30062 5000 38007 400
17 20444 400 21520 150 27511 11000 16867 600 20721 400
18 15894 100 19305 200 27187 10300 15925 350 15925 100
19 22521 300 42926 250 43868 17000 19232 11000 22729 300
@@ -44,7 +44,7 @@ Test# PS1Ref# PS1Err# PDFRef# PDFErr# JPGRef# JPGErr# PNGRef# PN
43 207729 750 87126 750 76094 38000 54717 11000 210497 800
44 401670 6500 156361 2000 62719 34100 45592 14000 410114 6500
45 566142 5000 225206 2000 65828 31800 53934 6500 573396 5000
- 46 3738751 35000 1292739 12000 60580 9900 133547 3500 3783013 35000
+ 46 3738751 35000 1292739 13000 60580 9900 133547 3500 3783013 35000
47 1466028 9000 853193 50000 38425 13500 91242 18100 1463263 7500
48 38312 200 56877 750 36524 11800 119641 8000 38121 200
49 19556 1000 31967 1000 36859 10000 37602 8000 19900 3000
@@ -53,7 +53,7 @@ Test# PS1Ref# PS1Err# PDFRef# PDFErr# JPGRef# JPGErr# PNGRef# PN
52 270825 10000 115500 1000 45496 11000 34685 5000 272950 10000
53 15025 3000 29289 500 42525 11300 33336 3900 14787 4000
54 254604 5000 383258 7000 55666 30400 46534 6500 259594 7000
- 55 4846 150 14075 150 33239 600 25303 500 4877 150
+ 55 4846 150 14075 200 33239 600 25303 500 4877 150
56 1435879 150000 12837 100 25830 100 365000 15000 1085792 250000
57 5884 500 16577 200 40706 14000 30026 4000 5884 500
58 5723 700 15720 200 32236 11000 16916 3200 5670 800
--
2.52.0

View file

@ -1,32 +0,0 @@
From 40f8cd0adeb7257778c789e1ae639f260780402b Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Sun, 7 Dec 2025 19:30:55 +0100
Subject: [PATCH] Fix a numpy test for 32 bit archs
The default dtype used in numpy array is "int". This type has
different sizes on 32 and 64 bit architectures. The test tries to use
the numpy array as a Long64_t dataframe. On 32 bit architectures this
results in an error.
This commit explicitly changes the numpy array's dtype to "int64" to
match the Long64_t dataframe type on all architectyres.
---
bindings/pyroot/pythonizations/test/rdataframe_misc.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/bindings/pyroot/pythonizations/test/rdataframe_misc.py b/bindings/pyroot/pythonizations/test/rdataframe_misc.py
index 1a1efd21b3e..150828613b3 100644
--- a/bindings/pyroot/pythonizations/test/rdataframe_misc.py
+++ b/bindings/pyroot/pythonizations/test/rdataframe_misc.py
@@ -132,7 +132,7 @@ class RDataFrameMisc(unittest.TestCase):
return
out_path = "dataframe_misc_regression_gh20291.root"
try:
- x, y = numpy.array([1, 2, 3]), numpy.array([4, 5, 6])
+ x, y = numpy.array([1, 2, 3], dtype='int64'), numpy.array([4, 5, 6], dtype='int64')
df = ROOT.RDF.FromNumpy({"x": x, "y": y})
df.Snapshot("tree", out_path)
--
2.52.0

View file

@ -1,63 +0,0 @@
From 0e1e1f0ba1908ae1020337ed7ec0565bf979b92c Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Tue, 2 Dec 2025 04:57:30 +0100
Subject: [PATCH] [Geom] Add missing includes of TMath.h
---
geom/geombuilder/src/TGeoParaEditor.cxx | 1 +
geom/geombuilder/src/TGeoPconEditor.cxx | 1 +
geom/geombuilder/src/TGeoPgonEditor.cxx | 1 +
geom/geombuilder/src/TGeoTrapEditor.cxx | 1 +
4 files changed, 4 insertions(+)
diff --git a/geom/geombuilder/src/TGeoParaEditor.cxx b/geom/geombuilder/src/TGeoParaEditor.cxx
index fdc344ba4d2..bd173607d2c 100644
--- a/geom/geombuilder/src/TGeoParaEditor.cxx
+++ b/geom/geombuilder/src/TGeoParaEditor.cxx
@@ -27,6 +27,7 @@ Editor for a TGeoPara.
#include "TVirtualGeoPainter.h"
#include "TVirtualPad.h"
#include "TView.h"
+#include "TMath.h"
#include "TGButton.h"
#include "TGTextEntry.h"
#include "TGNumberEntry.h"
diff --git a/geom/geombuilder/src/TGeoPconEditor.cxx b/geom/geombuilder/src/TGeoPconEditor.cxx
index a66359853be..50598d2cb90 100644
--- a/geom/geombuilder/src/TGeoPconEditor.cxx
+++ b/geom/geombuilder/src/TGeoPconEditor.cxx
@@ -27,6 +27,7 @@ Editor for a TGeoPcon.
#include "TVirtualGeoPainter.h"
#include "TVirtualPad.h"
#include "TView.h"
+#include "TMath.h"
#include "TGCanvas.h"
#include "TGButton.h"
#include "TGTextEntry.h"
diff --git a/geom/geombuilder/src/TGeoPgonEditor.cxx b/geom/geombuilder/src/TGeoPgonEditor.cxx
index 949d0045a66..33638d66b2b 100644
--- a/geom/geombuilder/src/TGeoPgonEditor.cxx
+++ b/geom/geombuilder/src/TGeoPgonEditor.cxx
@@ -27,6 +27,7 @@ Editor for a TGeoPgon.
#include "TVirtualGeoPainter.h"
#include "TVirtualPad.h"
#include "TView.h"
+#include "TMath.h"
#include "TGTextEntry.h"
#include "TGNumberEntry.h"
#include "TGLabel.h"
diff --git a/geom/geombuilder/src/TGeoTrapEditor.cxx b/geom/geombuilder/src/TGeoTrapEditor.cxx
index d9c2916d075..459e0191117 100644
--- a/geom/geombuilder/src/TGeoTrapEditor.cxx
+++ b/geom/geombuilder/src/TGeoTrapEditor.cxx
@@ -27,6 +27,7 @@ Editor for a TGeoTrap.
#include "TVirtualGeoPainter.h"
#include "TVirtualPad.h"
#include "TView.h"
+#include "TMath.h"
#include "TGButton.h"
#include "TGTextEntry.h"
#include "TGNumberEntry.h"
--
2.52.0

View file

@ -1,70 +0,0 @@
From f09b4ce027b31dcd19ea8a398c35c5dfbcc0507f Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Thu, 18 Dec 2025 11:49:12 +0100
Subject: [PATCH] [PyROOT] Don't install the python modules twice
The binary python modules were moved one directory level down into the
ROOT and cppyy directories, so that they reside alongside the python
files in the same directories. The install rule for the python files
must therefore be extended to exclude the binary modules (PATTERN *.so
EXCLUDE) so that these are not installed a second time overwriting the
files installed by the install rule for the binary modules with another
copy with the wrong file permissions.
Also use the no-version option for the cppyy binary module as is
already done for the pythonization binary module, since it is now
installed in the python directory. Before it was installed in the
library directory with an unversioned symlink in the python directory.
---
bindings/pyroot/cppyy/CPyCppyy/CMakeLists.txt | 2 +-
bindings/pyroot/cppyy/cppyy/CMakeLists.txt | 5 +++--
bindings/pyroot/pythonizations/CMakeLists.txt | 3 ++-
3 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/bindings/pyroot/cppyy/CPyCppyy/CMakeLists.txt b/bindings/pyroot/cppyy/CPyCppyy/CMakeLists.txt
index bb48c032974..065a89348ff 100644
--- a/bindings/pyroot/cppyy/CPyCppyy/CMakeLists.txt
+++ b/bindings/pyroot/cppyy/CPyCppyy/CMakeLists.txt
@@ -73,7 +73,7 @@ endif()
add_library(cppyy SHARED src/CPyCppyyPyModule.cxx)
# Set the suffix to '.so' and the prefix to 'lib'
-set_target_properties(cppyy PROPERTIES ${ROOT_LIBRARY_PROPERTIES}
+set_target_properties(cppyy PROPERTIES ${ROOT_LIBRARY_PROPERTIES_NO_VERSION}
LIBRARY_OUTPUT_DIRECTORY ${localruntimedir}/cppyy)
if(MSVC)
target_link_libraries(cppyy PRIVATE CPyCppyy)
diff --git a/bindings/pyroot/cppyy/cppyy/CMakeLists.txt b/bindings/pyroot/cppyy/cppyy/CMakeLists.txt
index 3a29b4525f7..842ad12df97 100644
--- a/bindings/pyroot/cppyy/cppyy/CMakeLists.txt
+++ b/bindings/pyroot/cppyy/cppyy/CMakeLists.txt
@@ -31,8 +31,9 @@ endforeach()
# Install Python sources and bytecode
install(DIRECTORY ${localruntimedir}/cppyy
DESTINATION ${CMAKE_INSTALL_PYTHONDIR}
- COMPONENT libraries)
+ COMPONENT libraries
+ PATTERN *.so EXCLUDE)
if(NOT MSVC)
ROOT_ADD_TEST_SUBDIRECTORY(test)
-endif()
\ No newline at end of file
+endif()
diff --git a/bindings/pyroot/pythonizations/CMakeLists.txt b/bindings/pyroot/pythonizations/CMakeLists.txt
index 1230f18ca47..b415ba13697 100644
--- a/bindings/pyroot/pythonizations/CMakeLists.txt
+++ b/bindings/pyroot/pythonizations/CMakeLists.txt
@@ -239,7 +239,8 @@ install(TARGETS ${libname} EXPORT ${CMAKE_PROJECT_NAME}Exports
# Install Python sources and bytecode
install(DIRECTORY ${localruntimedir}/ROOT
DESTINATION ${CMAKE_INSTALL_PYTHONDIR}
- COMPONENT libraries)
+ COMPONENT libraries
+ PATTERN *.so EXCLUDE)
# Install headers required by pythonizations
install(FILES ${PYROOT_EXTRA_HEADERS}
--
2.52.0

View file

@ -0,0 +1,29 @@
From a12f3b736a9c69e0d69e7f483e50e7cdf59d9fd2 Mon Sep 17 00:00:00 2001
From: Enric Tejedor Saavedra <enric.tejedor.saavedra@cern.ch>
Date: Fri, 10 Jun 2022 16:42:49 +0200
Subject: [PATCH] [PyROOT] Prevent cast error when calling PyTuple_SET_ITEM in
3.11
PyTuple_SET_ITEM ends up calling _PyObject_CAST(nullptr) which
causes "error: invalid cast from type 'std::nullptr_t' to type
'const PyObject*' {aka 'const _object*'}
---
bindings/pyroot/cppyy/CPyCppyy/src/CPPMethod.cxx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/bindings/pyroot/cppyy/CPyCppyy/src/CPPMethod.cxx b/bindings/pyroot/cppyy/CPyCppyy/src/CPPMethod.cxx
index 685ad3dc60..2189348594 100644
--- a/bindings/pyroot/cppyy/CPyCppyy/src/CPPMethod.cxx
+++ b/bindings/pyroot/cppyy/CPyCppyy/src/CPPMethod.cxx
@@ -580,7 +580,7 @@ PyObject* CPyCppyy::CPPMethod::ProcessKeywords(PyObject* self, PyObject* args, P
// set all values to zero to be able to check them later (this also guarantees normal
// cleanup by the tuple deallocation)
for (Py_ssize_t i = 0; i < nArgs+nKeys; ++i)
- PyTuple_SET_ITEM(newArgs, i, nullptr);
+ PyTuple_SET_ITEM(newArgs, i, static_cast<PyObject*>(nullptr));
// next, insert the keyword values
PyObject *key, *value;
--
2.36.1

View file

@ -0,0 +1,34 @@
From 484deb056dacf768aba4954073b41105c431bffc Mon Sep 17 00:00:00 2001
From: Enric Tejedor Saavedra <enric.tejedor.saavedra@cern.ch>
Date: Thu, 9 Jun 2022 12:24:07 +0200
Subject: [PATCH] [PyROOT] code.h must not be included directly in 3.11
It has been moved to Include/cpython, and it is included by Python.h.
See:
https://docs.python.org/3.11/whatsnew/3.11.html
---
bindings/pyroot/cppyy/CPyCppyy/src/CPPOverload.cxx | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/bindings/pyroot/cppyy/CPyCppyy/src/CPPOverload.cxx b/bindings/pyroot/cppyy/CPyCppyy/src/CPPOverload.cxx
index 59997e390d..28bbd635c2 100644
--- a/bindings/pyroot/cppyy/CPyCppyy/src/CPPOverload.cxx
+++ b/bindings/pyroot/cppyy/CPyCppyy/src/CPPOverload.cxx
@@ -1,10 +1,10 @@
// Bindings
#include "CPyCppyy.h"
#include "structmember.h" // from Python
-#if PY_VERSION_HEX >= 0x02050000
-#include "code.h" // from Python
-#else
+#if PY_VERSION_HEX < 0x02050000
#include "compile.h" // from Python
+#elif PY_VERSION_HEX < 0x030b0000
+#include "code.h" // from Python
#endif
#ifndef CO_NOFREE
// python2.2 does not have CO_NOFREE defined
--
2.36.1

View file

@ -1,82 +0,0 @@
From d5135f7869406396b3ba8e944c71dbdd67d3ea01 Mon Sep 17 00:00:00 2001
From: Jonas Rembser <jonas.rembser@cern.ch>
Date: Tue, 23 Dec 2025 19:04:45 +0100
Subject: [PATCH] [Python] Fix TF1 Pythonization test for NumPy 2.4.0
The new NumPy 2.4.0 is more strict when implicitly converting 1-element
arrays to scalars. It doesn't do that anymore, causing the TF1
Pythonization tests to fail (see log below).
This actually pointed to a real mistake in setting up the test, where a
2D array was used to define the TFormula parameters while it should be a
1D array.
```txt
962/3718 Test #93: pyunittests-bindings-pyroot-pythonizations-pyroot-pyz-tf-pycallables ..............................***Failed 3.05 sec
test_callable (tf_pycallables.TF1.test_callable)
Test function provided as callable ... ok
test_evalpar (tf_pycallables.TF1.test_evalpar)
Test the 2D Numpy array pythonizations for TF1::EvalPar ... ERROR
test_evalpar_dynamic (tf_pycallables.TF1.test_evalpar_dynamic)
Test the 2D NumPy pythonizations with dynamic TF1 data dimensions ... ok
test_fitgauss (tf_pycallables.TF1.test_fitgauss)
Test fitting a histogram to a Python function ... ok
test_identity (tf_pycallables.TF1.test_identity)
Test simple function without parameters ... ok
test_params (tf_pycallables.TF1.test_params)
Test function with parameters ... ok
test_params (tf_pycallables.TF2.test_params)
Test function with parameters ... ok
test_params (tf_pycallables.TF3.test_params)
Test function with parameters ... ok
======================================================================
ERROR: test_evalpar (tf_pycallables.TF1.test_evalpar)
Test the 2D Numpy array pythonizations for TF1::EvalPar
----------------------------------------------------------------------
Traceback (most recent call last):
File "/github/home/ROOT-CI/src/bindings/pyroot/pythonizations/test/tf_pycallables.py", line 129, in test_evalpar
expected_value = pyf_tf1_coulomb(x[i, ::2], params)
File "/github/home/ROOT-CI/src/bindings/pyroot/pythonizations/test/tf_pycallables.py", line 33, in pyf_tf1_coulomb
return p[1] * x[0] * x[1] / (p[0]**2) * math.exp(-p[2] / p[0])
~~~~~~~~^^^^^^^^^^^^^^
TypeError: only 0-dimensional arrays can be converted to Python scalars
----------------------------------------------------------------------
Ran 8 tests in 1.469s
FAILED (errors=1)
CMake Error at /github/home/ROOT-CI/src/cmake/modules/RootTestDriver.cmake:232 (message):
error code: 1
```
---
.../pyroot/pythonizations/test/tf_pycallables.py | 12 +++++++-----
1 file changed, 7 insertions(+), 5 deletions(-)
diff --git a/bindings/pyroot/pythonizations/test/tf_pycallables.py b/bindings/pyroot/pythonizations/test/tf_pycallables.py
index 2a7d6b72462..5a223030ec9 100644
--- a/bindings/pyroot/pythonizations/test/tf_pycallables.py
+++ b/bindings/pyroot/pythonizations/test/tf_pycallables.py
@@ -116,11 +116,13 @@ class TF1(unittest.TestCase):
[3.0, 10, 4.0]
])
- params = np.array([
- [1.0], # Distance between charges r
- [8.99e9], # Coulomb constant k (in N·m²/C²)
- [0.1] # Additional factor for modulation
- ])
+ params = np.array(
+ [
+ 1.0, # Distance between charges r
+ 8.99e9, # Coulomb constant k (in N·m²/C²)
+ 0.1, # Additional factor for modulation
+ ]
+ )
# Slice to avoid the dummy column of 10's
res = rtf1_coulomb.EvalPar(x[:, ::2], params)
--
2.52.0

View file

@ -1,50 +0,0 @@
From e1f42658629ad67ce7cb224a1379d133f61f2e35 Mon Sep 17 00:00:00 2001
From: Jonas Rembser <jonas.rembser@cern.ch>
Date: Sun, 11 Jan 2026 10:25:51 +0100
Subject: [PATCH] [RF] Use TRandom3 in test RooFuncWrapper
Use TRandom3 instead of the `<random>` to get compiler-independent,
reproducible behavior.
---
roofit/roofitcore/test/testRooFuncWrapper.cxx | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/roofit/roofitcore/test/testRooFuncWrapper.cxx b/roofit/roofitcore/test/testRooFuncWrapper.cxx
index 2ebdf95333f..189e8f2e266 100644
--- a/roofit/roofitcore/test/testRooFuncWrapper.cxx
+++ b/roofit/roofitcore/test/testRooFuncWrapper.cxx
@@ -34,12 +34,12 @@
#include <RooWorkspace.h>
#include <ROOT/StringUtils.hxx>
+#include <TMath.h>
#include <TROOT.h>
+#include <TRandom3.h>
#include <TSystem.h>
-#include <TMath.h>
#include <functional>
-#include <random>
#include "gtest_wrapper.h"
@@ -66,13 +66,13 @@ double getNumDerivative(const RooAbsReal &pdf, RooRealVar &var, const RooArgSet
void randomizeParameters(const RooArgSet &parameters)
{
+ TRandom3 rng(1337);
+
double lowerBound = -0.1;
double upperBound = 0.1;
- std::uniform_real_distribution<double> unif(lowerBound, upperBound);
- std::default_random_engine re;
for (auto *param : parameters) {
- double mul = unif(re);
+ double mul = rng.Uniform(lowerBound, upperBound);
auto par = dynamic_cast<RooAbsRealLValue *>(param);
if (!par)
--
2.52.0

View file

@ -1,60 +0,0 @@
From 4da50ef374cd231163dff77493f9367cd62583d9 Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Sun, 30 Mar 2025 21:23:14 +0200
Subject: [PATCH] Revert "[test] Fetch the geometries from EOS and not from the
website"
This reverts commit a8a879ce252e45405452db38d9178c7883582a7d.
---
test/stressGeometry.cxx | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/test/stressGeometry.cxx b/test/stressGeometry.cxx
index 7fb6bf97e7..f8d78f4f54 100644
--- a/test/stressGeometry.cxx
+++ b/test/stressGeometry.cxx
@@ -1,6 +1,6 @@
// Program to check a TGeo geometry
// The first time you run this program, the geometry files will be taken
-// from /eos/root-eos/testfiles/ (previously from http://root.cern/files)
+// from http://root.cern/files
//
// How the program works
// If the file <geom_name>_ref.root does not exist, it is generated. The file
@@ -274,13 +274,13 @@ void stressGeometry(const char *exp="*", Bool_t generate_ref=kFALSE, Bool_t vecg
delete gGeoManager;
gGeoManager = 0;
}
- TGeoManager::Import(Form("root://eospublic.cern.ch//eos/root-eos/testfiles/%s",fname.Data()));
+ TGeoManager::Import(Form("http://root.cern/files/%s",fname.Data()));
if (!gGeoManager) return;
if (vecgeom) TVirtualGeoConverter::Instance()->ConvertGeometry();
fname = TString::Format("files/%s_ref_%d.root", exps[i],versions[i]);
- if (gen_ref || !TFile::Open(Form("root://eospublic.cern.ch//eos/root-eos/testfiles//%s_ref_%d.root",exps[i],versions[i]),"CACHEREAD")) {
+ if (gen_ref || !TFile::Open(Form("http://root.cern/files/%s_ref_%d.root",exps[i],versions[i]),"CACHEREAD")) {
if (!gen_ref) fprintf(stderr,"File: %s does not exist, generating it\n", fname.Data());
else fprintf(stderr,"Generating reference file %s\n", fname.Data());
WriteRef(i);
@@ -320,7 +320,7 @@ void ReadRef(Int_t kexp) {
TFile *f = 0;
//use ref_[version[i]] files
if (!gen_ref)
- fname = TString::Format("root://eospublic.cern.ch//eos/root-eos/testfiles//%s_ref_%d.root", exps[kexp],versions[kexp]);
+ fname = TString::Format("http://root.cern/files/%s_ref_%d.root", exps[kexp],versions[kexp]);
else
fname.Format("files/%s_ref_%d.root", exps[kexp],versions[kexp]);
@@ -546,7 +546,7 @@ void InspectDiff(const char* exp="alice",Long64_t ientry=-1) {
Float_t rad = 0.;
TString fname(TString::Format("%s.root",exp));
if (gSystem->AccessPathName(fname)) {
- TGeoManager::Import(Form("root://eospublic.cern.ch//eos/root-eos/testfiles//%s",fname.Data()));
+ TGeoManager::Import(Form("http://root.cern/files/%s",fname.Data()));
} else {
TGeoManager::Import(fname);
}
--
2.49.0

View file

@ -1,47 +0,0 @@
From 98a5042a02dd7c1aaa9fbd5e54c8620c6b72484f 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
---
core/clingutils/test/CMakeLists.txt | 3 +++
interpreter/CppInterOp/unittests/CppInterOp/CMakeLists.txt | 6 ++++++
2 files changed, 9 insertions(+)
diff --git a/core/clingutils/test/CMakeLists.txt b/core/clingutils/test/CMakeLists.txt
index a6c7aedac99..90ac0139c24 100644
--- a/core/clingutils/test/CMakeLists.txt
+++ b/core/clingutils/test/CMakeLists.txt
@@ -36,3 +36,6 @@ if(NOT builtin_clang)
endif()
ROOT_ADD_UNITTEST_DIR(Core ${CLING_LIBRARIES} $<TARGET_OBJECTS:ClingUtils>)
+
+# 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
--- a/interpreter/CppInterOp/unittests/CppInterOp/CMakeLists.txt
+++ b/interpreter/CppInterOp/unittests/CppInterOp/CMakeLists.txt
@@ -66,6 +66,9 @@ target_link_libraries(CppInterOpTests
clangCppInterOp
)
+# 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
add_dependencies(DynamicLibraryManagerTests TestSharedLib)
+# Save memory. Do not link to LLVM libraries in parallel
+add_dependencies(DynamicLibraryManagerTests Cling)
+
#export_executable_symbols_for_plugins(TestSharedLib)
add_subdirectory(TestSharedLib)
--
2.52.0

View file

@ -1,34 +0,0 @@
From fd18e83ae79760f7e8cca6f28b6d0f89d912b152 Mon Sep 17 00:00:00 2001
From: Jonas Rembser <jonas.rembser@cern.ch>
Date: Wed, 26 Nov 2025 12:40:03 +0100
Subject: [PATCH] [VecOps] Remove outdated `IsSmall` helper function in tests
The commit 2605710bea7b1 changed from using the `ROOT::Detail::VecOps::`
namespace explicitly for `IsSmall` to a `using` statement. However,
there was also a remnant `IsSmall` function with an outdated
implementation in the test file itself, which we can now remove.
---
math/vecops/test/vecops_rvec.cxx | 7 -------
1 file changed, 7 deletions(-)
diff --git a/math/vecops/test/vecops_rvec.cxx b/math/vecops/test/vecops_rvec.cxx
index 034f06ca211..432c673a553 100644
--- a/math/vecops/test/vecops_rvec.cxx
+++ b/math/vecops/test/vecops_rvec.cxx
@@ -1493,13 +1493,6 @@ TEST(VecOps, Construct)
EXPECT_TRUE(fourVects[2] == ref2);
}
-bool IsSmall(const RVec<int> &v)
-{
- // the first array element is right after the 3 data members of SmallVectorBase
- return reinterpret_cast<std::uintptr_t>(v.begin()) - reinterpret_cast<std::uintptr_t>(&v) ==
- sizeof(void *) + 2 * sizeof(int);
-}
-
// this is a regression test for https://github.com/root-project/root/issues/6796
TEST(VecOps, MemoryAdoptionAndClear)
{
--
2.52.0

View file

@ -0,0 +1,37 @@
From c7dd58f3bc012690bab16763b1d73a4b7106ced9 Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Tue, 29 Mar 2022 15:40:35 +0200
Subject: [PATCH] Avoid deleting TFormulas twice
Example failure:
562/1224 Test #541: tutorial-gl-gltf3 ...................................................***Failed Error regular expression found in output. Regex=[Error in <] 1.36 sec
Processing /builddir/build/BUILD/root-6.26.00/tutorials/gl/gltf3.C...
Error in <TList::Delete>: A list is accessing an object (0x7fffd1c959a0) already deleted (list name = Functions)
Error in <TList::Delete>: A list is accessing an object (0x7fffd1c95750) already deleted (list name = Functions)
The commit also changes the filename used in
tutorials/hist/fillrandom.py to be different form the one used in
tutorials/hist/fillrandom.C (and tutorials/pyroot/fillrandom.py)
---
tutorials/gl/gltf3.C | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/tutorials/gl/gltf3.C b/tutorials/gl/gltf3.C
index 3697e69b7a..4089f0d2b7 100644
--- a/tutorials/gl/gltf3.C
+++ b/tutorials/gl/gltf3.C
@@ -27,8 +27,8 @@ void gltf3()
TPad *tf3Pad = new TPad("box", "box", 0.04, 0.04, 0.96, 0.8);
tf3Pad->Draw();
- TFormula f1 = TFormula("f1", "x*x + y*y + z*z + 2*y - 1");
- TFormula f2 = TFormula("f2", "x*x + y*y + z*z - 2*y - 1");
+ TFormula *f1 = new TFormula("f1", "x*x + y*y + z*z + 2*y - 1");
+ TFormula *f2 = new TFormula("f2", "x*x + y*y + z*z - 2*y - 1");
// Klein bottle with cut top&bottom parts
// The Klein bottle is a closed non-orientable surface that has no
--
2.35.1

View file

@ -0,0 +1,50 @@
From 91de99623d0e945610be46d46e84b54985415aeb Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Fri, 28 Oct 2022 06:27:10 +0200
Subject: [PATCH] Avoid race condition between
tutorial/roofit/rf512_wsfactory_oper.C and
tutorial/roofit/rf512_wsfactory_oper.py
When run in parallel they delete eachother's files:
cc1plus: fatal error: /builddir/build/BUILD/root-6.26.08/redhat-linux-build/runtutorials/RooCFAuto000Pdf_cxx_ACLiC_dict.cxx: No such file or directory
compilation terminated.
/usr/bin/ld: cannot find /builddir/build/BUILD/root-6.26.08/redhat-linux-build/runtutorials/RooCFAuto000Pdf_cxx_ACLiC_dict.o: No such file or directory
collect2: error: ld returned 1 exit status
---
tutorials/CMakeLists.txt | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/tutorials/CMakeLists.txt b/tutorials/CMakeLists.txt
index cfba4d3ed9..6ae9be5869 100644
--- a/tutorials/CMakeLists.txt
+++ b/tutorials/CMakeLists.txt
@@ -483,7 +483,7 @@ set(hist-hbars-depends tutorial-tree-cernbuild)
set(benchmarks-depends tutorial-hsimple
tutorial-fit-fit1
tutorial-fit-myfit
- tutorial-hist-h1ReadAndDraw
+ tutorial-hist-h1ReadAndDraw
tutorial-hist-FirstContour
tutorial-geom-na49view
tutorial-tree-ntuple1
@@ -731,7 +731,7 @@ if(ROOT_pyroot_FOUND)
set(pyroot-benchmarks-depends tutorial-pyroot-hsimple-py
tutorial-pyroot-fit1-py
tutorial-pyroot-na49view-py
- tutorial-pyroot-h1ReadAndDraw-py
+ tutorial-pyroot-h1ReadAndDraw-py
tutorial-pyroot-ntuple1-py)
set(pyroot-fit1-depends tutorial-pyroot-fillrandom-py)
set(pyroot-na49view-depends tutorial-pyroot-geometry-py)
@@ -739,6 +739,7 @@ if(ROOT_pyroot_FOUND)
# Avoid a race condition: make sure Python tutorial is ran after C++ tutorial
set(roofit-rf104_classfactory-depends tutorial-roofit-rf104_classfactory)
+ set(roofit-rf512_wsfactory_oper-depends tutorial-roofit-rf512_wsfactory_oper)
#----------------------------------------------------------------------
# List requirements for python tutorials.
--
2.37.3

View file

@ -0,0 +1,40 @@
From d9e03aad7a5132fe9db9992eecb47ee4e91c354c Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Fri, 25 Mar 2022 11:13:12 +0100
Subject: [PATCH] Byte swap values read from the protobuf raw data stream on
big endian
---
tmva/sofie_parsers/src/RModelParser_ONNX.cxx | 12 +++++++++---
1 file changed, 9 insertions(+), 3 deletions(-)
diff --git a/tmva/sofie_parsers/src/RModelParser_ONNX.cxx b/tmva/sofie_parsers/src/RModelParser_ONNX.cxx
index 3b0a30cdb0..23e41d746f 100644
--- a/tmva/sofie_parsers/src/RModelParser_ONNX.cxx
+++ b/tmva/sofie_parsers/src/RModelParser_ONNX.cxx
@@ -1,3 +1,4 @@
+#include "Byteswap.h"
#include "TMVA/RModelParser_ONNX.hxx"
#include "onnx_proto3.pb.h"
@@ -980,9 +981,14 @@ RModel RModelParser_ONNX::Parse(std::string filename){
//void* data = malloc (fLength * sizeof(float));
std::shared_ptr<void> data(malloc(fLength * sizeof(float)), free);
- if (tensorproto->raw_data().empty() == false){
- auto raw_data_ptr = reinterpret_cast<float*>(const_cast<char*>(tensorproto->raw_data().c_str()));
- std::memcpy(data.get(), raw_data_ptr, fLength * sizeof(float));
+ if (!tensorproto->raw_data().empty()) {
+#ifdef R__BYTESWAP
+ std::memcpy(data.get(), tensorproto->raw_data().c_str(), fLength * sizeof(float));
+#else
+ for (std::size_t k = 0; k < fLength; ++k)
+ (reinterpret_cast<UInt_t*>(data.get()))[k] =
+ R__bswap_32((reinterpret_cast<const UInt_t*>(tensorproto->raw_data().c_str()))[k]);
+#endif
}else{
tensorproto->mutable_float_data()->ExtractSubrange(0, tensorproto->float_data_size(), static_cast<float*>(data.get()));
}
--
2.35.1

31
root-core-base-test.patch Normal file
View file

@ -0,0 +1,31 @@
From 12d52a60629e1639ced23a1919bd85628d9135ea Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Sun, 3 Apr 2022 23:23:00 +0200
Subject: [PATCH] Fix library link order
Fixes undefined references when linking CoreBaseTests
../../../lib/libCling.so.6.26.00: undefined reference to `TMemFile::TMemFile(char const*, TMemFile::ZeroCopyView_t const&)'
../../../lib/libCling.so.6.26.00: undefined reference to `TFile::TFile(char const*, char const*, char const*, int)'
../../../lib/libCling.so.6.26.00: undefined reference to `TFile::~TFile()'
../../../lib/libCling.so.6.26.00: undefined reference to `TStreamerInfo::TStreamerInfo()'
../../../lib/libCling.so.6.26.00: undefined reference to `TMemFile::~TMemFile()'
---
core/base/test/CMakeLists.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/core/base/test/CMakeLists.txt b/core/base/test/CMakeLists.txt
index 4b08cb0390..9b52e83405 100644
--- a/core/base/test/CMakeLists.txt
+++ b/core/base/test/CMakeLists.txt
@@ -22,6 +22,6 @@ ROOT_ADD_GTEST(CoreBaseTests
TExceptionHandlerTests.cxx
TStringTest.cxx
TBitsTests.cxx
- LIBRARIES Core RIO ${extralibs})
+ LIBRARIES ${extralibs} RIO Core)
ROOT_ADD_GTEST(CoreErrorTests TErrorTests.cxx LIBRARIES Core)
--
2.35.1

View file

@ -1,109 +0,0 @@
From 251de0f8b237ce041df4960f831fe4a1fade6d92 Mon Sep 17 00:00:00 2001
From: Jonas Rembser <jonas.rembser@cern.ch>
Date: Sat, 6 Dec 2025 17:39:40 +0100
Subject: [PATCH] [cppyy] Remove code related to finding CPyCppyy API header
path
This is not needed for ROOT, because the CPyCppyy API headers are
installed with the other ROOT headers anyway, and ROOT knows where to
find them already.
---
.../cppyy/cppyy/python/cppyy/__init__.py | 82 -------------------
1 file changed, 82 deletions(-)
diff --git a/bindings/pyroot/cppyy/cppyy/python/cppyy/__init__.py b/bindings/pyroot/cppyy/cppyy/python/cppyy/__init__.py
index 68e3c49e5fe..c8dd458bfdd 100644
--- a/bindings/pyroot/cppyy/cppyy/python/cppyy/__init__.py
+++ b/bindings/pyroot/cppyy/cppyy/python/cppyy/__init__.py
@@ -297,88 +297,6 @@ elif ispypy:
if os.path.exists(apipath) and os.path.exists(os.path.join(apipath, 'Python.h')):
add_include_path(apipath)
-# add access to extra headers for dispatcher (CPyCppyy only (?))
-if not ispypy:
- try:
- apipath_extra = os.environ['CPPYY_API_PATH']
- if os.path.basename(apipath_extra) == 'CPyCppyy':
- apipath_extra = os.path.dirname(apipath_extra)
- except KeyError:
- apipath_extra = None
-
- if apipath_extra is None:
- try:
- if 0x30a0000 <= sys.hexversion:
- import importlib.metadata as m
-
- for p in m.files('CPyCppyy'):
- if p.match('API.h'):
- ape = p.locate()
- break
- del p, m
- else:
- import pkg_resources as pr
-
- d = pr.get_distribution('CPyCppyy')
- for line in d.get_metadata_lines('RECORD'):
- if 'API.h' in line:
- ape = os.path.join(d.location, line[0:line.find(',')])
- break
- del line, d, pr
-
- if os.path.exists(ape):
- apipath_extra = os.path.dirname(os.path.dirname(ape))
- del ape
- except Exception:
- pass
-
- if apipath_extra is None:
- ldversion = sysconfig.get_config_var('LDVERSION')
- if not ldversion:
- ldversion = sys.version[:3]
-
- apipath_extra = os.path.join(os.path.dirname(apipath), 'site', 'python'+ldversion)
- if not os.path.exists(os.path.join(apipath_extra, 'CPyCppyy')):
- import glob
- import platform
-
- if platform.system() == "Windows":
- # Install locations are handled differently on Windows
- import libcppyy
-
- ape = os.path.dirname(libcppyy.__file__)
- else:
- import cppyy.libcppyy as libcppyy
-
- ape = os.path.dirname(libcppyy.__file__)
- # a "normal" structure finds the include directory up to 3 levels up,
- # ie. dropping lib/pythonx.y[md]/site-packages
- for i in range(3):
- if os.path.exists(os.path.join(ape, 'include')):
- break
- ape = os.path.dirname(ape)
-
- ape = os.path.join(ape, 'include')
- if os.path.exists(os.path.join(ape, 'CPyCppyy')):
- apipath_extra = ape
- else:
- # add back pythonx.y or site/pythonx.y if present
- for p in glob.glob(os.path.join(ape, 'python'+sys.version[:3]+'*'))+\
- glob.glob(os.path.join(ape, '*', 'python'+sys.version[:3]+'*')):
- if os.path.exists(os.path.join(p, 'CPyCppyy')):
- apipath_extra = p
- break
-
- if apipath_extra.lower() != 'none':
- if not os.path.exists(os.path.join(apipath_extra, 'CPyCppyy')):
- warnings.warn("CPyCppyy API not found (tried: %s); "
- "set CPPYY_API_PATH envar to the 'CPyCppyy' API directory to fix"
- % apipath_extra)
- else:
- add_include_path(apipath_extra)
-
- del apipath_extra
-
if os.getenv('CONDA_PREFIX'):
# MacOS, Linux
include_path = os.path.join(os.getenv('CONDA_PREFIX'), 'include')
--
2.52.0

View file

@ -1,46 +0,0 @@
From f4577e76a5dc23842d6be0a82df804f71fc820ef Mon Sep 17 00:00:00 2001
From: Jonas Rembser <jonas.rembser@cern.ch>
Date: Mon, 1 Dec 2025 16:51:36 +0100
Subject: [PATCH] [cppyy] Remove now irrelevant `load_cpp_backend()` call
As we don't have a separate `cppyy_backend` anymore (neither as a Python
package, nor as a shared library), trying to load the backend library
will always give an exception that will be caught as an `ImportError`.
It would be cleaner if this code branch is not even taken.
---
.../cppyy/cppyy/python/cppyy/_cpython_cppyy.py | 12 ------------
1 file changed, 12 deletions(-)
diff --git a/bindings/pyroot/cppyy/cppyy/python/cppyy/_cpython_cppyy.py b/bindings/pyroot/cppyy/cppyy/python/cppyy/_cpython_cppyy.py
index bac078ea7c9..f98a34a697c 100644
--- a/bindings/pyroot/cppyy/cppyy/python/cppyy/_cpython_cppyy.py
+++ b/bindings/pyroot/cppyy/cppyy/python/cppyy/_cpython_cppyy.py
@@ -19,24 +19,12 @@ __all__ = [
'_end_capture_stderr'
]
-# First load the dependency libraries of the backend, then pull in the libcppyy
-# extension module. If the backed can't be loaded, it was probably linked
-# statically into the extension module, so we don't error out at this point.
-try:
- from cppyy_backend import loader
- c = loader.load_cpp_backend()
-except ImportError:
- c = None
-
if platform.system() == "Windows":
# On Windows, the library has to be searched without prefix
import libcppyy as _backend
else:
import cppyy.libcppyy as _backend
-if c is not None:
- _backend._cpp_backend = c
-
# explicitly expose APIs from libcppyy
_w = ctypes.CDLL(_backend.__file__, ctypes.RTLD_GLOBAL)
--
2.52.0

View file

@ -0,0 +1,45 @@
From d849bc502eec4ec95d15ca41319ba0467ab22759 Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Thu, 24 Mar 2022 15:55:29 +0100
Subject: [PATCH] =?UTF-8?q?NENTRIES=20is=20not=20always=20a=20multiple=20o?=
=?UTF-8?q?f=20the=20expected=20size.=20NENTRIES=20is=2010.=20On=20a=204?=
=?UTF-8?q?=20core=20machine=20the=20expected=20size=20in=202=20=C3=97=204?=
=?UTF-8?q?=20=3D=208.=20Looping=20over=20the=208=20IDs,=202=20have=202=20?=
=?UTF-8?q?entries=20the=20remaining=206=20have=201=20entry=20for=20a=20to?=
=?UTF-8?q?tal=20of=2010=20(NENTRIES)=20entries.=20The=20test=20checked=20?=
=?UTF-8?q?that=20each=20ID=20had=20NENTRIES/(expected=20size)=20entries,?=
=?UTF-8?q?=20which=20in=20this=20case=20with=20integer=20division=20equal?=
=?UTF-8?q?s=201=20entry,=20which=20was=20not=20the=20correct=20test.=20Th?=
=?UTF-8?q?is=20commit=20chenges=20to=20test=20to=20check=20that=20the=20t?=
=?UTF-8?q?otal=20number=20of=20entries=20summed=20for=20all=20IDs=20equal?=
=?UTF-8?q?s=20NENTRIES.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
tree/dataframe/test/dataframe_samplecallback.cxx | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/tree/dataframe/test/dataframe_samplecallback.cxx b/tree/dataframe/test/dataframe_samplecallback.cxx
index 188d58dd31..d387ea5f86 100644
--- a/tree/dataframe/test/dataframe_samplecallback.cxx
+++ b/tree/dataframe/test/dataframe_samplecallback.cxx
@@ -125,11 +125,13 @@ TEST_P(RDFSampleCallback, EmptySourceSampleID) {
// RDF with empty sources tries to produce 2 tasks per slot when MT is enabled
const auto expectedSize = std::min(NENTRIES, df.GetNSlots() * 2ull);
ASSERT_EQ(result->size(), expectedSize);
+ ULong64_t entries = 0;
for (auto &id : *result) {
// check that all entries start with the expected string
EXPECT_TRUE(id.AsString().rfind("Empty source, range: {", 0) == 0);
- EXPECT_EQ(id.NEntries(), NENTRIES / expectedSize);
+ entries += id.NEntries();
}
+ EXPECT_EQ(entries, NENTRIES);
} else {
ASSERT_EQ(result->size(), 1);
const auto &id = result->at(0);
--
2.35.1

View file

@ -0,0 +1,48 @@
From a486081a8065154308b23381c3a77f3fdb73de97 Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Wed, 16 Nov 2022 20:44:48 +0100
Subject: [PATCH] Use different filename in loopdir.C and loopdir11.C to avoid
race condition
Start 672: tutorial-io-loopdir
690/1156 Test #666: tutorial-io-double32 ................................................ Passed 2.42 sec
Start 673: tutorial-io-loopdir11
691/1156 Test #673: tutorial-io-loopdir11 ............................................... Passed 0.76 sec
Start 674: tutorial-io-mergeSelective
692/1156 Test #672: tutorial-io-loopdir .................................................***Failed Error regular expression found in output. Regex=[Error in <] 1.23 sec
Processing /builddir/build/BUILD/root-6.26.10/tutorials/io/loopdir.C...
Info in <TCanvas::Print>: ps file hsimple.ps has been created
Info in <TCanvas::Print>: Current canvas added to ps file hsimple.ps
Info in <TCanvas::Print>: Current canvas added to ps file hsimple.ps
Info in <TCanvas::Print>: Current canvas added to ps file hsimple.ps
Info in <TCanvas::Print>: ps file hsimple.ps has been closed
Error in <TPostScript::Text>: Cannot open temporary file: hsimple.ps_tmp_2089748
---
tutorials/io/loopdir11.C | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/tutorials/io/loopdir11.C b/tutorials/io/loopdir11.C
index b5f9f4719c..bf8c33b442 100644
--- a/tutorials/io/loopdir11.C
+++ b/tutorials/io/loopdir11.C
@@ -12,14 +12,14 @@
void loopdir11() {
TFile *f1 = TFile::Open("hsimple.root");
TCanvas c1;
- c1.Print("hsimple.ps[");
+ c1.Print("hsimple11.ps[");
for(auto k : *f1->GetListOfKeys()) {
TKey *key = static_cast<TKey*>(k);
TClass *cl = gROOT->GetClass(key->GetClassName());
if (!cl->InheritsFrom("TH1")) continue;
TH1 *h = key->ReadObject<TH1>();
h->Draw();
- c1.Print("hsimple.ps");
+ c1.Print("hsimple11.ps");
}
- c1.Print("hsimple.ps]");
+ c1.Print("hsimple11.ps]");
}
--
2.38.1

33
root-endian-warn.patch Normal file
View file

@ -0,0 +1,33 @@
From ba0dc65e558fd916dbe18f8dbe8208a3be932c25 Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Mon, 28 Mar 2022 09:20:18 +0200
Subject: [PATCH 2/2] Ignore warnings about RooNaNPacker not being implemented
for big endian
This warning is triggered in many tests, so it makes sense to put it
in the default ignored set.
---
test/unit_testing_support/ROOTUnitTestSupport.cxx | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/test/unit_testing_support/ROOTUnitTestSupport.cxx b/test/unit_testing_support/ROOTUnitTestSupport.cxx
index 259ab4e09c..79cd476950 100644
--- a/test/unit_testing_support/ROOTUnitTestSupport.cxx
+++ b/test/unit_testing_support/ROOTUnitTestSupport.cxx
@@ -73,6 +73,13 @@ static struct ForbidDiagnostics {
return;
}
+ // FIXME: RooNaNPacker warns about not being implemented for big endian
+ if (level == kWarning
+ && strcmp(msg, "Fast recovery from undefined function values only implemented for little-endian machines. If necessary, request an extension of functionality on https://root.cern") == 0) {
+ std::cerr << "Warning in " << location << " " << msg << std::endl;
+ return;
+ }
+
FAIL() << "Received unexpected diagnostic of severity "
<< level
<< " at '" << location << "' reading '" << msg << "'.\n"
--
2.35.1

View file

@ -0,0 +1,63 @@
From 3bc55ece1db8b32c5e86fd6b85856addd67265fb Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Sat, 15 Jan 2022 06:35:58 +0100
Subject: [PATCH] Fix compilation with gcc 12
Fixes error: use of deleted function
/builddir/build/BUILD/root-6.24.06/interpreter/llvm/src/lib/Target/NVPTX/NVPTXAsmPrinter.cpp: In member function 'std::string llvm::NVPTXAsmPrinter::getPTXFundamentalTypeStr(llvm::Type*, bool) const':
/builddir/build/BUILD/root-6.24.06/interpreter/llvm/src/lib/Target/NVPTX/NVPTXAsmPrinter.cpp:1319:10: error: use of deleted function 'std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::nullptr_t) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::nullptr_t = std::nullptr_t]'
1319 | return nullptr;
| ^~~~~~~
In file included from /usr/include/c++/12/string:53,
from /usr/include/c++/12/bits/locale_classes.h:40,
from /usr/include/c++/12/bits/ios_base.h:41,
from /usr/include/c++/12/streambuf:41,
from /usr/include/c++/12/bits/streambuf_iterator.h:35,
from /usr/include/c++/12/iterator:66,
from /builddir/build/BUILD/root-6.24.06/interpreter/llvm/src/include/llvm/ADT/iterator_range.h:21,
from /builddir/build/BUILD/root-6.24.06/interpreter/llvm/src/include/llvm/ADT/SmallVector.h:16,
from /builddir/build/BUILD/root-6.24.06/interpreter/llvm/src/include/llvm/ADT/STLExtras.h:20,
from /builddir/build/BUILD/root-6.24.06/interpreter/llvm/src/include/llvm/ADT/StringRef.h:12,
from /builddir/build/BUILD/root-6.24.06/interpreter/llvm/src/include/llvm/Pass.h:31,
from /builddir/build/BUILD/root-6.24.06/interpreter/llvm/src/lib/Target/NVPTX/NVPTX.h:17,
from /builddir/build/BUILD/root-6.24.06/interpreter/llvm/src/lib/Target/NVPTX/NVPTXAsmPrinter.h:17,
from /builddir/build/BUILD/root-6.24.06/interpreter/llvm/src/lib/Target/NVPTX/NVPTXAsmPrinter.cpp:14:
/usr/include/c++/12/bits/basic_string.h:732:7: note: declared here
732 | basic_string(nullptr_t) = delete;
| ^~~~~~~~~~~~
Fix backported from LLVM upstrea https://reviews.llvm.org/D87697
---
interpreter/llvm/src/lib/Target/NVPTX/NVPTXAsmPrinter.cpp | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/interpreter/llvm/src/lib/Target/NVPTX/NVPTXAsmPrinter.cpp b/interpreter/llvm/src/lib/Target/NVPTX/NVPTXAsmPrinter.cpp
index 5f38b4a3c4..bfa74bd98f 100644
--- a/interpreter/llvm/src/lib/Target/NVPTX/NVPTXAsmPrinter.cpp
+++ b/interpreter/llvm/src/lib/Target/NVPTX/NVPTXAsmPrinter.cpp
@@ -1281,9 +1281,6 @@ void NVPTXAsmPrinter::emitPTXAddressSpace(unsigned int AddressSpace,
std::string
NVPTXAsmPrinter::getPTXFundamentalTypeStr(Type *Ty, bool useB4PTR) const {
switch (Ty->getTypeID()) {
- default:
- llvm_unreachable("unexpected type");
- break;
case Type::IntegerTyID: {
unsigned NumBits = cast<IntegerType>(Ty)->getBitWidth();
if (NumBits == 1)
@@ -1314,9 +1311,10 @@ NVPTXAsmPrinter::getPTXFundamentalTypeStr(Type *Ty, bool useB4PTR) const {
return "b32";
else
return "u32";
+ default:
+ break;
}
llvm_unreachable("unexpected type");
- return nullptr;
}
void NVPTXAsmPrinter::emitPTXGlobalVariable(const GlobalVariable *GVar,
--
2.34.1

View file

@ -0,0 +1,43 @@
From ddc155795baa9d4690717c204e54a7fd4600c688 Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Mon, 17 Jan 2022 18:49:30 +0100
Subject: [PATCH] Fix test failure on ppc64le and aarch64 with gcc 12
.../hist/hist/test/test_tprofile2poly.cxx:61: Failure
The difference between cont1 and cont2 is 1.4551915228366852e-11, which exceeds delta, where
cont1 evaluates to 54886.064319363642,
cont2 evaluates to 54886.064319363628, and
delta evaluates to 9.999999960041972e-12.
.../hist/hist/test/test_tprofile2poly.cxx:61: Failure
The difference between cont1 and cont2 is 1.4551915228366852e-11, where
cont1 evaluates to 109868.61342004745,
cont2 evaluates to 109868.61342004743.
The abs_error parameter delta evaluates to 9.999999960041972e-12 which is smaller than the minimum distance between doubles for numbers of this magnitude which is 1.4551915228366852e-11, thus making this EXPECT_NEAR check equivalent to EXPECT_EQUAL. Consider using EXPECT_DOUBLE_EQ instead.
---
hist/hist/test/test_tprofile2poly.cxx | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/hist/hist/test/test_tprofile2poly.cxx b/hist/hist/test/test_tprofile2poly.cxx
index 40cb3052a2..5150da0bea 100644
--- a/hist/hist/test/test_tprofile2poly.cxx
+++ b/hist/hist/test/test_tprofile2poly.cxx
@@ -58,14 +58,14 @@ void binEntriesCompare(TProfile2D* tp2d, TProfile2Poly* tpp) {
for(Double_t x=0.5; x<10; x+=2.0) {
cont1 = tp2d->GetBinEffectiveEntries(tp2d->FindBin(x,y));
cont2 = tpp->GetBinEffectiveEntries(tpp->FindBin(x,y));
- ASSERT_NEAR(cont1, cont2, delta);
+ ASSERT_NEAR(cont1, cont2, 2*delta);
}
}
// test overflow
cont1 = tp2d->GetBinEffectiveEntries(tp2d->FindBin(11,11));
cont2 = tpp->GetBinEffectiveEntries(tpp->FindBin(11,11));
- ASSERT_NEAR(cont1, cont2, delta);
+ ASSERT_NEAR(cont1, cont2, 2*delta);
}
--
2.34.1

File diff suppressed because it is too large Load diff

View file

@ -1,32 +0,0 @@
From 7b1632f5602a1bb6e6278d66c25640349c852ab1 Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Fri, 9 Jan 2026 00:32:27 +0100
Subject: [PATCH] Starting with gcc 16, libstdc++ links to libatomic. Add to
whitelist.
$ ldd /lib64/libstdc++.so.6
linux-vdso.so.1 (0x00007f3cb4c13000)
libm.so.6 => /lib64/libm.so.6 (0x00007f3cb4afc000)
libatomic.so.1 => /lib64/libatomic.so.1 (0x00007f3cb4af1000)
libc.so.6 => /lib64/libc.so.6 (0x00007f3cb460d000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f3cb4ac5000)
/lib64/ld-linux-x86-64.so.2 (0x00007f3cb4c15000)
---
bindings/pyroot/pythonizations/test/import_load_libs.py | 1 +
1 file changed, 1 insertion(+)
diff --git a/bindings/pyroot/pythonizations/test/import_load_libs.py b/bindings/pyroot/pythonizations/test/import_load_libs.py
index 63feeca89ba..18906ff921e 100644
--- a/bindings/pyroot/pythonizations/test/import_load_libs.py
+++ b/bindings/pyroot/pythonizations/test/import_load_libs.py
@@ -77,6 +77,7 @@ class ImportLoadLibs(unittest.TestCase):
"ld.*",
"libffi",
"libgcc_s",
+ "libatomic",
# AddressSanitizer runtime and ROOT configuration
"libclang_rt.asan-.*",
"libROOTSanitizerConfig",
--
2.52.0

View file

@ -0,0 +1,245 @@
From 2dde3d060aa21ff9d4a0612b991bd300b7704bdc Mon Sep 17 00:00:00 2001
From: Axel Naumann <Axel.Naumann@cern.ch>
Date: Fri, 22 Jul 2022 15:54:03 +0200
Subject: [PATCH] [cmake,test] Get rid of `lsb_release`:
It is available less and less often, and we do not actually
benefit a lot from printing the distro (stress) or we can get
the same info from /etc/os-release (cmake).
---
cmake/modules/RootCPack.cmake | 11 +++++++++--
math/mathcore/test/stressGoFTest.cxx | 4 ----
test/bench.cxx | 4 ----
test/stress.cxx | 4 ----
test/stressFit.cxx | 4 ----
test/stressGUI.cxx | 4 ----
test/stressGeometry.cxx | 4 ----
test/stressGraphics.cxx | 4 ----
test/stressHepix.cxx | 4 ----
test/stressHistFactory.cxx | 4 ----
test/stressLinear.cxx | 4 ----
test/stressRooFit.cxx | 4 ----
test/stressRooStats.cxx | 4 ----
test/stressTMVA.cxx | 4 ----
14 files changed, 9 insertions(+), 54 deletions(-)
diff --git a/cmake/modules/RootCPack.cmake b/cmake/modules/RootCPack.cmake
index a960eb81fd..807eac6ef2 100644
--- a/cmake/modules/RootCPack.cmake
+++ b/cmake/modules/RootCPack.cmake
@@ -107,8 +107,15 @@ elseif(WIN32)
set(OS_NAME_VERSION win32)
endif()
else()
- execute_process(COMMAND lsb_release -is OUTPUT_VARIABLE osid OUTPUT_STRIP_TRAILING_WHITESPACE)
- execute_process(COMMAND lsb_release -rs OUTPUT_VARIABLE osvers OUTPUT_STRIP_TRAILING_WHITESPACE)
+ if(EXISTS "/etc/os-release")
+ file(STRINGS /etc/os-release osid REGEX "^NAME=")
+ string(REGEX REPLACE "NAME=\"(.*)\"" "\\1" osid "${osid}")
+ file(STRINGS /etc/os-release osvers REGEX "^VERSION_ID=")
+ string(REGEX REPLACE "NAME=\"(.*)\"" "\\1" osvers "${osvers}")
+ else()
+ execute_process(COMMAND lsb_release -is OUTPUT_VARIABLE osid OUTPUT_STRIP_TRAILING_WHITESPACE)
+ execute_process(COMMAND lsb_release -rs OUTPUT_VARIABLE osvers OUTPUT_STRIP_TRAILING_WHITESPACE)
+ endif()
if(osid MATCHES Ubuntu)
string(REGEX REPLACE "([0-9]+)[.].*" "\\1" osvers "${osvers}")
set(OS_NAME_VERSION Linux-ubuntu${osvers}-${arch})
diff --git a/math/mathcore/test/stressGoFTest.cxx b/math/mathcore/test/stressGoFTest.cxx
index a78ca99c90..5aa1b4ef70 100644
--- a/math/mathcore/test/stressGoFTest.cxx
+++ b/math/mathcore/test/stressGoFTest.cxx
@@ -56,10 +56,6 @@ struct GoFTStress {
TString sp = gSystem->GetFromPipe("uname -a");
sp.Resize(60);
printf("* SYS: %s\n",sp.Data());
- if (strstr(gSystem->GetBuildNode(),"Linux")) {
- sp = gSystem->GetFromPipe("lsb_release -d -s");
- printf("* SYS: %s\n",sp.Data());
- }
if (strstr(gSystem->GetBuildNode(),"Darwin")) {
sp = gSystem->GetFromPipe("sw_vers -productVersion");
sp += " Mac OS X ";
diff --git a/test/bench.cxx b/test/bench.cxx
index 82bc537e05..e89024e9d9 100644
--- a/test/bench.cxx
+++ b/test/bench.cxx
@@ -295,10 +295,6 @@ int main(int argc, char **argv)
TString sp = gSystem->GetFromPipe("uname -a");
sp.Resize(60);
printf("* SYS: %s\n",sp.Data());
- if (strstr(gSystem->GetBuildNode(),"Linux")) {
- sp = gSystem->GetFromPipe("lsb_release -d -s");
- printf("* SYS: %s\n",sp.Data());
- }
if (strstr(gSystem->GetBuildNode(),"Darwin")) {
sp = gSystem->GetFromPipe("sw_vers -productVersion");
sp += " Mac OS X ";
diff --git a/test/stress.cxx b/test/stress.cxx
index d3087fdd56..29dba1625d 100644
--- a/test/stress.cxx
+++ b/test/stress.cxx
@@ -200,10 +200,6 @@ void stress(Int_t nevent, Int_t style = 1,
TString sp = gSystem->GetFromPipe("uname -a");
sp.Resize(60);
printf("* SYS: %s\n",sp.Data());
- if (strstr(gSystem->GetBuildNode(),"Linux")) {
- sp = gSystem->GetFromPipe("lsb_release -d -s");
- printf("* SYS: %s\n",sp.Data());
- }
if (strstr(gSystem->GetBuildNode(),"Darwin")) {
sp = gSystem->GetFromPipe("sw_vers -productVersion");
sp += " Mac OS X ";
diff --git a/test/stressFit.cxx b/test/stressFit.cxx
index 667142eff9..80bbd0200f 100644
--- a/test/stressFit.cxx
+++ b/test/stressFit.cxx
@@ -646,10 +646,6 @@ Int_t stressFit(const char *type, const char *algo, Int_t N)
TString sp = gSystem->GetFromPipe("uname -a");
sp.Resize(60);
printf("* SYS: %s\n",sp.Data());
- if (strstr(gSystem->GetBuildNode(),"Linux")) {
- sp = gSystem->GetFromPipe("lsb_release -d -s");
- printf("* SYS: %s\n",sp.Data());
- }
if (strstr(gSystem->GetBuildNode(),"Darwin")) {
sp = gSystem->GetFromPipe("sw_vers -productVersion");
sp += " Mac OS X ";
diff --git a/test/stressGUI.cxx b/test/stressGUI.cxx
index 1a92df5341..9daae5f5fe 100644
--- a/test/stressGUI.cxx
+++ b/test/stressGUI.cxx
@@ -307,10 +307,6 @@ void stressGUI()
TString sp = gSystem->GetFromPipe("uname -a");
sp.Resize(60);
printf("* SYS: %s\n",sp.Data());
- if (strstr(gSystem->GetBuildNode(),"Linux")) {
- sp = gSystem->GetFromPipe("lsb_release -d -s");
- printf("* SYS: %s\n",sp.Data());
- }
if (strstr(gSystem->GetBuildNode(),"Darwin")) {
sp = gSystem->GetFromPipe("sw_vers -productVersion");
sp += " Mac OS X ";
diff --git a/test/stressGeometry.cxx b/test/stressGeometry.cxx
index 5e81f5f2ca..2dc366cbf8 100644
--- a/test/stressGeometry.cxx
+++ b/test/stressGeometry.cxx
@@ -295,10 +295,6 @@ void stressGeometry(const char *exp="*", Bool_t generate_ref=kFALSE, Bool_t vecg
TString sp = gSystem->GetFromPipe("uname -a");
sp.Resize(60);
printf("* SYS: %s\n",sp.Data());
- if (strstr(gSystem->GetBuildNode(),"Linux")) {
- sp = gSystem->GetFromPipe("lsb_release -d -s");
- printf("* SYS: %s\n",sp.Data());
- }
if (strstr(gSystem->GetBuildNode(),"Darwin")) {
sp = gSystem->GetFromPipe("sw_vers -productVersion");
sp += " Mac OS X ";
diff --git a/test/stressGraphics.cxx b/test/stressGraphics.cxx
index 5fe958774d..8b6aa9af9a 100644
--- a/test/stressGraphics.cxx
+++ b/test/stressGraphics.cxx
@@ -419,10 +419,6 @@ void stressGraphics(Int_t verbose = 0)
TString sp = gSystem->GetFromPipe("uname -a");
sp.Resize(60);
printf("* SYS: %s\n",sp.Data());
- if (strstr(gSystem->GetBuildNode(),"Linux")) {
- sp = gSystem->GetFromPipe("lsb_release -d -s");
- printf("* SYS: %s\n",sp.Data());
- }
if (strstr(gSystem->GetBuildNode(),"Darwin")) {
sp = gSystem->GetFromPipe("sw_vers -productVersion");
sp += " Mac OS X ";
diff --git a/test/stressHepix.cxx b/test/stressHepix.cxx
index d8d2a65a64..01dfc67a54 100644
--- a/test/stressHepix.cxx
+++ b/test/stressHepix.cxx
@@ -143,10 +143,6 @@ int main(int argc, char **argv)
TString sp = gSystem->GetFromPipe("uname -a");
sp.Resize(60);
printf("* SYS: %s\n",sp.Data());
- if (strstr(gSystem->GetBuildNode(),"Linux")) {
- sp = gSystem->GetFromPipe("lsb_release -d -s");
- printf("* SYS: %s\n",sp.Data());
- }
if (strstr(gSystem->GetBuildNode(),"Darwin")) {
sp = gSystem->GetFromPipe("sw_vers -productVersion");
sp += " Mac OS X ";
diff --git a/test/stressHistFactory.cxx b/test/stressHistFactory.cxx
index b84fa70f86..ec6deac031 100644
--- a/test/stressHistFactory.cxx
+++ b/test/stressHistFactory.cxx
@@ -139,10 +139,6 @@ Int_t stressHistFactory(const char* refFile, Bool_t writeRef, Int_t verbose, Boo
if (UNIX) {
TString sp = gSystem->GetFromPipe("uname -a");
cout << "* SYS: " << sp << endl;
- if (strstr(gSystem->GetBuildNode(), "Linux")) {
- sp = gSystem->GetFromPipe("lsb_release -d -s");
- cout << "* SYS: " << sp << endl;
- }
if (strstr(gSystem->GetBuildNode(), "Darwin")) {
sp = gSystem->GetFromPipe("sw_vers -productVersion");
sp += " Mac OS X ";
diff --git a/test/stressLinear.cxx b/test/stressLinear.cxx
index ce2e1af23d..e34ddf85a2 100644
--- a/test/stressLinear.cxx
+++ b/test/stressLinear.cxx
@@ -296,10 +296,6 @@ void stressLinear(Int_t maxSizeReq,Int_t verbose)
TString sp = gSystem->GetFromPipe("uname -a");
sp.Resize(60);
printf("* SYS: %s\n",sp.Data());
- if (strstr(gSystem->GetBuildNode(),"Linux")) {
- sp = gSystem->GetFromPipe("lsb_release -d -s");
- printf("* SYS: %s\n",sp.Data());
- }
if (strstr(gSystem->GetBuildNode(),"Darwin")) {
sp = gSystem->GetFromPipe("sw_vers -productVersion");
sp += " Mac OS X ";
diff --git a/test/stressRooFit.cxx b/test/stressRooFit.cxx
index 18e214ec0c..4f7c5a3d83 100644
--- a/test/stressRooFit.cxx
+++ b/test/stressRooFit.cxx
@@ -197,10 +197,6 @@ Int_t stressRooFit(const char* refFile, Bool_t writeRef, Int_t doVerbose, Int_t
TString sp = gSystem->GetFromPipe("uname -a");
sp.Resize(60);
printf("* SYS: %s\n",sp.Data());
- if (strstr(gSystem->GetBuildNode(),"Linux")) {
- sp = gSystem->GetFromPipe("lsb_release -d -s");
- printf("* SYS: %s\n",sp.Data());
- }
if (strstr(gSystem->GetBuildNode(),"Darwin")) {
sp = gSystem->GetFromPipe("sw_vers -productVersion");
sp += " Mac OS X ";
diff --git a/test/stressRooStats.cxx b/test/stressRooStats.cxx
index 35598b5919..adb3dc4cd8 100644
--- a/test/stressRooStats.cxx
+++ b/test/stressRooStats.cxx
@@ -232,10 +232,6 @@ Int_t stressRooStats(const char* refFile, Bool_t writeRef, Int_t verbose, Bool_t
if (UNIX) {
TString sp = gSystem->GetFromPipe("uname -a");
cout << "* SYS: " << sp << endl;
- if (strstr(gSystem->GetBuildNode(), "Linux")) {
- sp = gSystem->GetFromPipe("lsb_release -d -s");
- cout << "* SYS: " << sp << endl;
- }
if (strstr(gSystem->GetBuildNode(), "Darwin")) {
sp = gSystem->GetFromPipe("sw_vers -productVersion");
sp += " Mac OS X ";
diff --git a/test/stressTMVA.cxx b/test/stressTMVA.cxx
index f7638a73f6..22e3feaf65 100644
--- a/test/stressTMVA.cxx
+++ b/test/stressTMVA.cxx
@@ -3193,10 +3193,6 @@ int main(int argc, char **argv)
TString sp = gSystem->GetFromPipe("uname -a");
sp.Resize(60);
printf("* SYS: %s\n",sp.Data());
- if (strstr(gSystem->GetBuildNode(),"Linux")) {
- sp = gSystem->GetFromPipe("lsb_release -d -s");
- printf("* SYS: %s\n",sp.Data());
- }
if (strstr(gSystem->GetBuildNode(),"Darwin")) {
sp = gSystem->GetFromPipe("sw_vers -productVersion");
sp += " Mac OS X ";
--
2.37.1

36
root-ignore-prefix.patch Normal file
View file

@ -0,0 +1,36 @@
From 1aa9231becda09a89ec576e4a17ca4d9b6e2f310 Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Tue, 15 Mar 2022 14:55:37 +0100
Subject: [PATCH] Link to the blas library found by cmake, not hardcoded
"blas". Set ROOTIGNOREPREFIX=1 when running built binaries during build. Make
sure PCH is created before running emitters.
---
tmva/sofie/test/CMakeLists.txt | 14 ++++++++------
1 file changed, 8 insertions(+), 6 deletions(-)
diff --git a/tmva/sofie/test/CMakeLists.txt b/tmva/sofie/test/CMakeLists.txt
index e4f9d28748..a3a2c9ae16 100644
--- a/tmva/sofie/test/CMakeLists.txt
+++ b/tmva/sofie/test/CMakeLists.txt
@@ -51,7 +51,7 @@ foreach(onnx_file ${ONNX_FILES})
get_filename_component(fname ${onnx_file} NAME_WE)
get_filename_component(fdir ${onnx_file} DIRECTORY)
add_custom_command(TARGET SofieCompileModels_ONNX POST_BUILD
- COMMAND ./emitFromONNX ${onnx_file} ${CMAKE_CURRENT_BINARY_DIR}/${fname}
+ COMMAND ${CMAKE_COMMAND} -E env ROOTIGNOREPREFIX=1 ./emitFromONNX ${onnx_file} ${CMAKE_CURRENT_BINARY_DIR}/${fname}
USES_TERMINAL
)
endforeach()
@@ -100,7 +101,7 @@ foreach(onnx_file ${ONNX_FILES})
get_filename_component(fname ${onnx_file} NAME_WE)
get_filename_component(fdir ${onnx_file} DIRECTORY)
add_custom_command(TARGET SofieCompileModels_ROOT POST_BUILD
- COMMAND ./emitFromROOT ${onnx_file} ${CMAKE_CURRENT_BINARY_DIR}/${fname}
+ COMMAND ${CMAKE_COMMAND} -E env ROOTIGNOREPREFIX=1 ./emitFromROOT ${onnx_file} ${CMAKE_CURRENT_BINARY_DIR}/${fname}
USES_TERMINAL
)
endforeach()
--
2.35.1

36
root-jsmva-static.patch Normal file
View file

@ -0,0 +1,36 @@
diff -ur root-6.24.02.orig/bindings/jsmva/python/JsMVA/JPyInterface.py root-6.24.02/bindings/jsmva/python/JsMVA/JPyInterface.py
--- root-6.24.02.orig/bindings/jsmva/python/JsMVA/JPyInterface.py 2021-06-28 11:17:14.000000000 +0200
+++ root-6.24.02/bindings/jsmva/python/JsMVA/JPyInterface.py 2021-08-11 09:06:21.894746090 +0200
@@ -188,7 +188,7 @@
## Class for creating the output scripts and inserting them to cell output
class JsDraw:
## Base repository
- __jsMVARepo = "https://root.cern.ch/js/jsmva/latest"
+ __jsMVARepo = "/static/JsMVA"
## String containing the link to JavaScript files
__jsMVASourceDir = __jsMVARepo + "/js"
diff -ur root-6.24.02.orig/bindings/pyroot_legacy/JsMVA/JPyInterface.py root-6.24.02/bindings/pyroot_legacy/JsMVA/JPyInterface.py
--- root-6.24.02.orig/bindings/pyroot_legacy/JsMVA/JPyInterface.py 2021-06-28 11:17:14.000000000 +0200
+++ root-6.24.02/bindings/pyroot_legacy/JsMVA/JPyInterface.py 2021-08-11 09:06:21.925746168 +0200
@@ -188,7 +188,7 @@
## Class for creating the output scripts and inserting them to cell output
class JsDraw:
## Base repository
- __jsMVARepo = "https://root.cern.ch/js/jsmva/latest"
+ __jsMVARepo = "/static/JsMVA"
## String containing the link to JavaScript files
__jsMVASourceDir = __jsMVARepo + "/js"
diff -ur root-6.24.02.orig/etc/notebook/JsMVA/js/JsMVA.js root-6.24.02/etc/notebook/JsMVA/js/JsMVA.js
--- root-6.24.02.orig/etc/notebook/JsMVA/js/JsMVA.js 2021-06-28 11:17:14.000000000 +0200
+++ root-6.24.02/etc/notebook/JsMVA/js/JsMVA.js 2021-08-11 09:10:45.638410266 +0200
@@ -16,7 +16,7 @@
(function(factory){
- var JSROOT_source_dir = "https://root.cern/js/5.9.1/scripts/";
+ var JSROOT_source_dir = "/static/scripts/";
var url = "";
if (requirejs.s.contexts.hasOwnProperty("_")) {

42
root-longlong.patch Normal file
View file

@ -0,0 +1,42 @@
From 2aa02353663674a338c92fa4e72a0c0e529c410e Mon Sep 17 00:00:00 2001
From: Enrico Guiraud <enrico.guiraud@cern.ch>
Date: Fri, 8 Apr 2022 17:52:18 +0200
Subject: [PATCH] [DF] Fix long int + Snapshot test on 32 bit platforms
Co-authored-by: Mattias Ellert <mattias.ellert@physics.uu.se>
---
tree/dataframe/test/dataframe_snapshot.cxx | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/tree/dataframe/test/dataframe_snapshot.cxx b/tree/dataframe/test/dataframe_snapshot.cxx
index f41848e96a..ddbacaba0f 100644
--- a/tree/dataframe/test/dataframe_snapshot.cxx
+++ b/tree/dataframe/test/dataframe_snapshot.cxx
@@ -495,11 +495,14 @@ void ReadWriteCarray(const char *outFileNameBase)
t.Branch("vb", vb, "vb[size]/O");
t.Branch("vl", vl, "vl[size]/G");
+ // use 2**33 as a larger-than-int value on 64 bits, otherwise just something larger than short (2**30)
+ static constexpr long int longintTestValue = sizeof(long int) == 8 ? 8589934592 : 1073741824;
+
// Size 1
size = 1;
v[0] = 12;
vb[0] = true;
- vl[0] = 8589934592; // 2**33
+ vl[0] = longintTestValue;
t.Fill();
// Size 0 (see ROOT-9860)
@@ -546,7 +549,7 @@ void ReadWriteCarray(const char *outFileNameBase)
EXPECT_EQ(rvb.GetSize(), 1u);
EXPECT_TRUE(rvb[0]);
EXPECT_EQ(rvl.GetSize(), 1u);
- EXPECT_EQ(rvl[0], 8589934592);
+ EXPECT_EQ(rvl[0], longintTestValue);
// Size 0
EXPECT_TRUE(r.Next());
--
2.35.1

View file

@ -0,0 +1,147 @@
From 6ae602bba7d33c900a117c9de0187ab5a28e14b8 Mon Sep 17 00:00:00 2001
From: Vassil Vassilev <v.g.vassilev@gmail.com>
Date: Mon, 21 Mar 2022 22:16:54 +0000
Subject: [PATCH] Make the dyld-based library search behavior default for
non-modules.
The dyld-based system was developed in the context on C++ modules but it turned
into a modules-agnostic feature. Instead of having to maintain more code, we
should rely on it even for non-modules build of ROOT.
---
core/metacling/src/TCling.cxx | 109 +++-------------------------------
1 file changed, 8 insertions(+), 101 deletions(-)
diff --git a/core/metacling/src/TCling.cxx b/core/metacling/src/TCling.cxx
index dec399cf2b..3eae1c8570 100644
--- a/core/metacling/src/TCling.cxx
+++ b/core/metacling/src/TCling.cxx
@@ -6501,14 +6501,18 @@ bool TCling::LibraryLoadingFailed(const std::string& errmessage, const std::stri
return false;
}
-static void* LazyFunctionCreatorAutoloadForModule(const std::string &mangled_name,
- const cling::DynamicLibraryManager &DLM) {
+////////////////////////////////////////////////////////////////////////////////
+/// Autoload a library based on a missing symbol.
+
+void* TCling::LazyFunctionCreatorAutoload(const std::string& mangled_name) {
+
+ const cling::DynamicLibraryManager &DLM = *GetInterpreterImpl()->getDynamicLibraryManager();
R__LOCKGUARD(gInterpreterMutex);
auto LibLoader = [](const std::string& LibName) -> bool {
if (gSystem->Load(LibName.c_str(), "", false) < 0) {
- Error("TCling__LazyFunctionCreatorAutoloadForModule",
- "Failed to load library %s", LibName.c_str());
+ ::Error("TCling__LazyFunctionCreatorAutoloadForModule",
+ "Failed to load library %s", LibName.c_str());
return false;
}
return true; //success.
@@ -6536,103 +6540,6 @@ static void* LazyFunctionCreatorAutoloadForModule(const std::string &mangled_nam
return nullptr;
return llvm::sys::DynamicLibrary::SearchForAddressOfSymbol(mangled_name);
-
-}
-
-////////////////////////////////////////////////////////////////////////////////
-/// Autoload a library based on a missing symbol.
-
-void* TCling::LazyFunctionCreatorAutoload(const std::string& mangled_name) {
- if (fCxxModulesEnabled)
- return LazyFunctionCreatorAutoloadForModule(mangled_name,
- *GetInterpreterImpl()->getDynamicLibraryManager());
-
- // First see whether the symbol is in the library that we are currently
- // loading. It will have access to the symbols of its dependent libraries,
- // thus checking "back()" is sufficient.
- if (!fRegisterModuleDyLibs.empty()) {
- if (void* addr = dlsym(fRegisterModuleDyLibs.back(),
- mangled_name.c_str())) {
- return addr;
- }
- }
-
- int err = 0;
- char* demangled_name_c = TClassEdit::DemangleName(mangled_name.c_str(), err);
- if (err) {
- return 0;
- }
-
- std::string name(demangled_name_c);
- free(demangled_name_c);
-
- //fprintf(stderr, "demangled name: '%s'\n", demangled_name);
- //
- // Separate out the class or namespace part of the
- // function name.
- //
-
- std::string::size_type pos = name.find("__thiscall ");
- if (pos != std::string::npos) {
- name.erase(0, pos + sizeof("__thiscall ")-1);
- }
- pos = name.find("__cdecl ");
- if (pos != std::string::npos) {
- name.erase(0, pos + sizeof("__cdecl ")-1);
- }
- if (!strncmp(name.c_str(), "typeinfo for ", sizeof("typeinfo for ")-1)) {
- name.erase(0, sizeof("typeinfo for ")-1);
- } else if (!strncmp(name.c_str(), "vtable for ", sizeof("vtable for ")-1)) {
- name.erase(0, sizeof("vtable for ")-1);
- } else if (!strncmp(name.c_str(), "operator", sizeof("operator")-1)
- && !isalnum(name[sizeof("operator")])) {
- // operator...(A, B) - let's try with A!
- name.erase(0, sizeof("operator")-1);
- pos = name.rfind('(');
- if (pos != std::string::npos) {
- name.erase(0, pos + 1);
- pos = name.find(",");
- if (pos != std::string::npos) {
- // remove next arg up to end, leaving only the first argument type.
- name.erase(pos);
- }
- pos = name.rfind(" const");
- if (pos != std::string::npos) {
- name.erase(pos, strlen(" const"));
- }
- while (!name.empty() && strchr("&*", name.back()))
- name.erase(name.length() - 1);
- }
- } else {
- TClassEdit::FunctionSplitInfo fsi;
- TClassEdit::SplitFunction(name, fsi);
- name = fsi.fScopeName;
- }
- //fprintf(stderr, "name: '%s'\n", name.c_str());
- // Now we have the class or namespace name, so do the lookup.
- TString libs = GetClassSharedLibs(name.c_str());
- if (libs.IsNull()) {
- // Not found in the map, all done.
- return 0;
- }
- //fprintf(stderr, "library: %s\n", iter->second.c_str());
- // Now we have the name of the libraries to load, so load them.
-
- TString lib;
- Ssiz_t posLib = 0;
- while (libs.Tokenize(lib, posLib)) {
- if (gSystem->Load(lib, "", kFALSE /*system*/) < 0) {
- // The library load failed, all done.
- //fprintf(stderr, "load failed: %s\n", errmsg.c_str());
- return 0;
- }
- }
-
- //fprintf(stderr, "load succeeded.\n");
- // Get the address of the function being called.
- void* addr = llvm::sys::DynamicLibrary::SearchForAddressOfSymbol(mangled_name.c_str());
- //fprintf(stderr, "addr: %016lx\n", reinterpret_cast<unsigned long>(addr));
- return addr;
}
////////////////////////////////////////////////////////////////////////////////
--
2.35.1

30
root-memory-usage.patch Normal file
View file

@ -0,0 +1,30 @@
From 5618a02bd7ca4107f545e07a19b8a0762f31e45a Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Mon, 16 Aug 2021 19:45:00 +0200
Subject: [PATCH] Reduce memory usage for all builds - not only debug builds
---
core/metacling/src/CMakeLists.txt | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)
diff --git a/core/metacling/src/CMakeLists.txt b/core/metacling/src/CMakeLists.txt
index 8cbbe4ba08..f205b24602 100644
--- a/core/metacling/src/CMakeLists.txt
+++ b/core/metacling/src/CMakeLists.txt
@@ -107,11 +107,8 @@ ROOT_LINKER_LIBRARY(Cling
$<TARGET_OBJECTS:MetaCling>
LIBRARIES ${CLING_LIBRARIES} ${LINK_LIBS} ${CLING_PLUGIN_LINK_LIBS})
-string(TOUPPER "${LLVM_BUILD_TYPE}" THE_BUILD_TYPE)
-if("${THE_BUILD_TYPE}" STREQUAL DEBUG OR "${THE_BUILD_TYPE}" STREQUAL RELWITHDEBINFO)
- # When these two link at the same time, they can exhaust the RAM on many machines, since they both link against llvm.
- add_dependencies(Cling rootcling_stage1)
-endif()
+# When these two link at the same time, they can exhaust the RAM on many machines, since they both link against llvm.
+add_dependencies(Cling rootcling_stage1)
if(MSVC)
set_target_properties(Cling PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS TRUE)
--
2.35.1

View file

@ -0,0 +1,31 @@
From 0a969f5376af248e76cbcee45c9bdb6463e18c05 Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Thu, 24 Mar 2022 21:20:07 +0100
Subject: [PATCH 3/3] Add namespaces to LinkDef
Fixes error:
IncrementalExecutor::executeFunction: symbol '_ZN4TMVA12Experimental5SOFIE7PyTorch5ParseENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS9_ImSaImEESaISB_EE' unresolved while linking function '_GLOBAL__sub_I_cling_module_8'!
You are probably missing the definition of TMVA::Experimental::SOFIE::PyTorch::Parse(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<std::vector<unsigned long, std::allocator<unsigned long> >, std::allocator<std::vector<unsigned long, std::allocator<unsigned long> > > >)
Maybe you need to load the corresponding shared library?
Symbol found in '/builddir/build/BUILD/root-6.26.00/redhat-linux-build/lib/libPyMVA.so.6.26.00'; did you mean to load it with '.L /builddir/build/BUILD/root-6.26.00/redhat-linux-build/lib/libPyMVA.so.6.26.00'?
---
tmva/pymva/inc/LinkDef.h | 2 ++
1 file changed, 2 insertions(+)
diff --git a/tmva/pymva/inc/LinkDef.h b/tmva/pymva/inc/LinkDef.h
index 92da99a4f7..83145077dd 100644
--- a/tmva/pymva/inc/LinkDef.h
+++ b/tmva/pymva/inc/LinkDef.h
@@ -15,6 +15,8 @@
#pragma link C++ class TMVA::MethodPyGTB+;
#pragma link C++ class TMVA::MethodPyKeras+;
#pragma link C++ class TMVA::MethodPyTorch+;
+#pragma link C++ namespace TMVA::Experimental::SOFIE::PyKeras;
#pragma link C++ function TMVA::Experimental::SOFIE::PyKeras::Parse+;
+#pragma link C++ namespace TMVA::Experimental::SOFIE::PyTorch;
#pragma link C++ function TMVA::Experimental::SOFIE::PyTorch::Parse+;
#endif
--
2.35.1

View file

@ -0,0 +1,43 @@
From 4a4df0190ad24c0a3636994c2c23cb6c22e04589 Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Thu, 24 Mar 2022 15:41:33 +0100
Subject: [PATCH 2/3] Remove namespace RooFit from libRooFitCore's LinkDef
The namespace is listed in the LinkDef's for both libRooFit and libRooFitCore.
ROOT only autoloads one of the libraries, for some reason usually
libRooFitCore. After this only symbols in the namespace from that
library are present. By removing the namespace from liRooFitCore's
LinkDef, only libRooFit can be chosen when autoloading. Since
libRooFit depends on libRooFitCore, both libraries are loaded, and the
symbols from the namespace in both libraries are available.
Fixes error:
IncrementalExecutor::executeFunction: symbol '_ZN6RooFit12bindFunctionEPKcPFddER10RooAbsReal' unresolved while linking function '_GLOBAL__sub_I_cling_module_217'!
You are probably missing the definition of RooFit::bindFunction(char const*, double (*)(double), RooAbsReal&)
Maybe you need to load the corresponding shared library?
Symbol found in '/builddir/build/BUILD/root-6.26.00/redhat-linux-build/lib/libRooFit.so.6.26.00'; did you mean to load it with '.L /builddir/build/BUILD/root-6.26.00/redhat-linux-build/lib/libRooFit.so.6.26.00'?
---
roofit/roofitcore/inc/LinkDef.h | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/roofit/roofitcore/inc/LinkDef.h b/roofit/roofitcore/inc/LinkDef.h
index d421fd95cd..72c66db33b 100644
--- a/roofit/roofitcore/inc/LinkDef.h
+++ b/roofit/roofitcore/inc/LinkDef.h
@@ -105,7 +105,10 @@
// Old LinkDef2.h
-#pragma link C++ namespace RooFit ;
+
+// "namespace RooFit" is in roofit/roofit/inc/Linkdef1.h
+// should not be in the dictionary for two different libraries
+// #pragma link C++ namespace RooFit ;
#pragma link C++ namespace RooFitShortHand ;
#pragma link C++ class RooDouble+ ;
#pragma link C++ class RooEffGenContext+ ;
--
2.35.1

View file

@ -0,0 +1,30 @@
From c66ae9d9c035090584f465a41ce2e438e502be81 Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Thu, 24 Mar 2022 15:23:59 +0100
Subject: [PATCH 1/3] Add namespace TMVA::Experimental::SOFIE to LinkDef
Fixes error:
IncrementalExecutor::executeFunction: symbol '_ZN4TMVA12Experimental5SOFIE19ConvertTypeToStringB5cxx11ENS1_11ETensorTypeE' unresolved while linking function '_GLOBAL__sub_I_cling_module_8'!
You are probably missing the definition of TMVA::Experimental::SOFIE::ConvertTypeToString[abi:cxx11](TMVA::Experimental::SOFIE::ETensorType)
Maybe you need to load the corresponding shared library?
Symbol found in '/builddir/build/BUILD/root-6.26.00/redhat-linux-build/lib/libROOTTMVASofie.so.6.26.00'; did you mean to load it with '.L /builddir/build/BUILD/root-6.26.00/redhat-linux-build/lib/libROOTTMVASofie.so.6.26.00'?
---
tmva/sofie/inc/LinkDef.h | 1 +
1 file changed, 1 insertion(+)
diff --git a/tmva/sofie/inc/LinkDef.h b/tmva/sofie/inc/LinkDef.h
index 715cf35560..3282ff22c1 100644
--- a/tmva/sofie/inc/LinkDef.h
+++ b/tmva/sofie/inc/LinkDef.h
@@ -7,6 +7,7 @@
#pragma link C++ nestedclass;
+#pragma link C++ namespace TMVA::Experimental::SOFIE;
#pragma link C++ class TMVA::Experimental::SOFIE::RModel-;
#pragma link C++ class TMVA::Experimental::SOFIE::ROperator+;
#pragma link C++ struct TMVA::Experimental::SOFIE::InitializedTensor+;
--
2.35.1

View file

@ -1,53 +1,30 @@
From b4e57c8ccd59d69fe61fa5f6470b3a99ba52aeeb 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(-)
diff --git a/bindings/pyroot/cppyy/CPyCppyy/CMakeLists.txt b/bindings/pyroot/cppyy/CPyCppyy/CMakeLists.txt
index bb48c032974..c34069855b2 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
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries)
diff -ur root-6.24.02.orig/bindings/jupyroot/CMakeLists.txt root-6.24.02/bindings/jupyroot/CMakeLists.txt
--- root-6.24.02.orig/bindings/jupyroot/CMakeLists.txt 2021-06-28 11:17:14.000000000 +0200
+++ root-6.24.02/bindings/jupyroot/CMakeLists.txt 2021-08-11 10:53:03.272202496 +0200
@@ -70,8 +70,7 @@
endforeach()
-install(TARGETS cppyy EXPORT ${CMAKE_PROJECT_NAME}Exports
- RUNTIME DESTINATION ${CMAKE_INSTALL_PYTHONDIR}/cppyy COMPONENT libraries # Windows
+install(TARGETS cppyy RUNTIME DESTINATION ${CMAKE_INSTALL_PYTHONDIR}/cppyy COMPONENT libraries # Windows
LIBRARY DESTINATION ${CMAKE_INSTALL_PYTHONDIR}/cppyy COMPONENT libraries
ARCHIVE DESTINATION ${CMAKE_INSTALL_PYTHONDIR}/cppyy COMPONENT libraries)
# Install library
- install(TARGETS ${libname} EXPORT ${CMAKE_PROJECT_NAME}Exports
- RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT libraries
+ install(TARGETS ${libname} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT libraries
LIBRARY DESTINATION ${CMAKE_INSTALL_PYTHONDIR} COMPONENT libraries
ARCHIVE DESTINATION ${CMAKE_INSTALL_PYTHONDIR} COMPONENT libraries)
diff --git a/bindings/pyroot/pythonizations/CMakeLists.txt b/bindings/pyroot/pythonizations/CMakeLists.txt
index 1230f18ca47..2df4b733320 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()
diff -ur root-6.24.02.orig/bindings/pyroot/pythonizations/CMakeLists.txt root-6.24.02/bindings/pyroot/pythonizations/CMakeLists.txt
--- root-6.24.02.orig/bindings/pyroot/pythonizations/CMakeLists.txt 2021-06-28 11:17:14.000000000 +0200
+++ root-6.24.02/bindings/pyroot/pythonizations/CMakeLists.txt 2021-08-11 10:53:03.272202496 +0200
@@ -137,11 +137,10 @@
# Create meta-target PyROOT2 and PyROOT3 (INTERFACE library)
# Export of targets are not supported for custom targets(add_custom_targets())
add_library(PyROOT${python_major_version_string} INTERFACE)
- target_link_libraries(PyROOT${python_major_version_string} INTERFACE cppyy_backend${python_under_version_string} cppyy${python_under_version_string} ROOTPythonizations${python_under_version_string})
+ target_link_libraries(PyROOT${python_major_version_string} INTERFACE cppyy_backend${python_under_version_string} cppyy${python_under_version_string})
-# Create meta-target PyROOT3 (INTERFACE library)
-# Export of targets are not supported for custom targets(add_custom_targets())
-add_library(PyROOT INTERFACE)
-target_link_libraries(PyROOT INTERFACE cppyy_backend cppyy ROOTPythonizations)
-
# 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)
endif()
# Install library
- install(TARGETS ${libname} EXPORT ${CMAKE_PROJECT_NAME}Exports
- RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT libraries
+ install(TARGETS ${libname} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT libraries
LIBRARY DESTINATION ${CMAKE_INSTALL_PYTHONDIR} COMPONENT libraries
ARCHIVE DESTINATION ${CMAKE_INSTALL_PYTHONDIR} COMPONENT libraries)
# Install library
-install(TARGETS ${libname} EXPORT ${CMAKE_PROJECT_NAME}Exports
- RUNTIME DESTINATION ${pymoduledir_install} COMPONENT libraries
+install(TARGETS ${libname} RUNTIME DESTINATION ${pymoduledir_install} COMPONENT libraries
LIBRARY DESTINATION ${pymoduledir_install} COMPONENT libraries
ARCHIVE DESTINATION ${pymoduledir_install} COMPONENT libraries)
--
2.52.0

39
root-ntuplewait.patch Normal file
View file

@ -0,0 +1,39 @@
From ad043f8e3304aab4f0ee3ad9e0cf8480c4bbadf0 Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Thu, 24 Mar 2022 16:10:22 +0100
Subject: [PATCH] Always call WaitForInFlightClusters before checking cluster
IDs
---
tree/ntuple/v7/test/ntuple_cluster.cxx | 3 +++
1 file changed, 3 insertions(+)
diff --git a/tree/ntuple/v7/test/ntuple_cluster.cxx b/tree/ntuple/v7/test/ntuple_cluster.cxx
index afc2fc32e9..0c299d97de 100644
--- a/tree/ntuple/v7/test/ntuple_cluster.cxx
+++ b/tree/ntuple/v7/test/ntuple_cluster.cxx
@@ -213,6 +213,7 @@ TEST(ClusterPool, GetClusterBasics)
RPageSourceMock p1;
RClusterPool c1(p1, 1);
c1.GetCluster(3, {0});
+ c1.WaitForInFlightClusters();
ASSERT_EQ(2U, p1.fReqsClusterIds.size());
EXPECT_EQ(3U, p1.fReqsClusterIds[0]);
EXPECT_EQ(4U, p1.fReqsClusterIds[1]);
@@ -267,11 +268,13 @@ TEST(ClusterPool, GetClusterIncrementally)
RPageSourceMock p1;
RClusterPool c1(p1, 1);
c1.GetCluster(3, {0});
+ c1.WaitForInFlightClusters();
ASSERT_EQ(2U, p1.fReqsClusterIds.size());
EXPECT_EQ(3U, p1.fReqsClusterIds[0]);
EXPECT_EQ(RCluster::ColumnSet_t({0}), p1.fReqsColumns[0]);
c1.GetCluster(3, {1});
+ c1.WaitForInFlightClusters();
ASSERT_EQ(4U, p1.fReqsClusterIds.size());
EXPECT_EQ(3U, p1.fReqsClusterIds[2]);
EXPECT_EQ(RCluster::ColumnSet_t({1}), p1.fReqsColumns[2]);
--
2.35.1

477
root-old-gtest-compat.patch Normal file
View file

@ -0,0 +1,477 @@
From 99e9ad9ea54369296537ceb012ccdcb333b5f513 Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Sat, 26 Mar 2022 10:55:38 +0100
Subject: [PATCH 2/2] Backward compatibility with older googletest versions in
EPEL
---
hist/hist/test/test_THBinIterator.cxx | 5 +++++
math/mathcore/test/stress/testGenVector.cxx | 10 ++++++++++
math/mathcore/test/stress/testSMatrix.cxx | 10 ++++++++++
math/mathcore/test/stress/testVector.cxx | 10 ++++++++++
math/mathcore/test/stress/testVector34.cxx | 10 ++++++++++
math/mathcore/test/testGradient.cxx | 4 ++++
math/mathcore/test/testGradientFitting.cxx | 10 ++++++++++
math/mathmore/test/testStress.cxx | 10 ++++++++++
roofit/histfactory/test/testHistFactory.cxx | 4 ++++
roofit/multiprocess/test/test_Job.cxx | 5 +++++
roofit/roofitZMQ/test/test_ZMQ.cpp | 4 ++++
roofit/roofitcore/test/TestStatistics/RooRealL.cpp | 4 ++++
.../test/TestStatistics/testLikelihoodGradientJob.cpp | 5 +++++
roofit/roofitcore/test/testProxiesAndCategories.cxx | 3 +++
roofit/roofitcore/test/testRooDataHist.cxx | 4 ++++
roofit/roofitcore/test/testRooGradMinimizerFcn.cxx | 5 +++++
tree/dataframe/test/dataframe_definepersample.cxx | 4 ++++
tree/dataframe/test/dataframe_merge_results.cxx | 2 +-
tree/dataframe/test/dataframe_regression.cxx | 4 ++++
tree/dataframe/test/dataframe_samplecallback.cxx | 4 ++++
tree/dataframe/test/dataframe_simple.cxx | 5 +++++
tree/dataframe/test/dataframe_vary.cxx | 4 ++++
tree/tree/test/TOffsetGeneration.cxx | 4 ++++
23 files changed, 129 insertions(+), 1 deletion(-)
diff --git a/hist/hist/test/test_THBinIterator.cxx b/hist/hist/test/test_THBinIterator.cxx
index e30585b8cb..04f1e1487b 100644
--- a/hist/hist/test/test_THBinIterator.cxx
+++ b/hist/hist/test/test_THBinIterator.cxx
@@ -1,5 +1,10 @@
#include "gtest/gtest.h"
+#ifndef INSTANTIATE_TEST_SUITE_P
+#define SetUpTestSuite SetUpTestCase
+#define TearDownTestSuite TearDownTestCase
+#endif
+
// test iterating histogram bins and using the new THistRange and
// THBinIterator classes
diff --git a/math/mathcore/test/stress/testGenVector.cxx b/math/mathcore/test/stress/testGenVector.cxx
index 93c0bb6aec..b3259158da 100644
--- a/math/mathcore/test/stress/testGenVector.cxx
+++ b/math/mathcore/test/stress/testGenVector.cxx
@@ -4,6 +4,16 @@
#include "gtest/gtest.h"
+#ifndef TYPED_TEST_SUITE_P
+#define TYPED_TEST_SUITE_P TYPED_TEST_CASE_P
+#endif
+#ifndef REGISTER_TYPED_TEST_SUITE_P
+#define REGISTER_TYPED_TEST_SUITE_P REGISTER_TYPED_TEST_CASE_P
+#endif
+#ifndef INSTANTIATE_TYPED_TEST_SUITE_P
+#define INSTANTIATE_TYPED_TEST_SUITE_P INSTANTIATE_TYPED_TEST_CASE_P
+#endif
+
#include "StatFunction.h"
#include "TestHelper.h"
#include "VectorTest.h"
diff --git a/math/mathcore/test/stress/testSMatrix.cxx b/math/mathcore/test/stress/testSMatrix.cxx
index a4d7fc4cd5..a35d88b7c2 100644
--- a/math/mathcore/test/stress/testSMatrix.cxx
+++ b/math/mathcore/test/stress/testSMatrix.cxx
@@ -7,6 +7,16 @@
#include "TestHelper.h"
#include "gtest/gtest.h"
+#ifndef TYPED_TEST_SUITE_P
+#define TYPED_TEST_SUITE_P TYPED_TEST_CASE_P
+#endif
+#ifndef REGISTER_TYPED_TEST_SUITE_P
+#define REGISTER_TYPED_TEST_SUITE_P REGISTER_TYPED_TEST_CASE_P
+#endif
+#ifndef INSTANTIATE_TYPED_TEST_SUITE_P
+#define INSTANTIATE_TYPED_TEST_SUITE_P INSTANTIATE_TYPED_TEST_CASE_P
+#endif
+
#include "VectorTest.h"
#include "TROOT.h"
#include "TSystem.h"
diff --git a/math/mathcore/test/stress/testVector.cxx b/math/mathcore/test/stress/testVector.cxx
index 72e933f0d5..938e27d83c 100644
--- a/math/mathcore/test/stress/testVector.cxx
+++ b/math/mathcore/test/stress/testVector.cxx
@@ -4,6 +4,16 @@
#include "gtest/gtest.h"
+#ifndef TYPED_TEST_SUITE_P
+#define TYPED_TEST_SUITE_P TYPED_TEST_CASE_P
+#endif
+#ifndef REGISTER_TYPED_TEST_SUITE_P
+#define REGISTER_TYPED_TEST_SUITE_P REGISTER_TYPED_TEST_CASE_P
+#endif
+#ifndef INSTANTIATE_TYPED_TEST_SUITE_P
+#define INSTANTIATE_TYPED_TEST_SUITE_P INSTANTIATE_TYPED_TEST_CASE_P
+#endif
+
#include "StatFunction.h"
#include "TestHelper.h"
#include "VectorTest.h"
diff --git a/math/mathcore/test/stress/testVector34.cxx b/math/mathcore/test/stress/testVector34.cxx
index 4b31184559..80d6dd6314 100644
--- a/math/mathcore/test/stress/testVector34.cxx
+++ b/math/mathcore/test/stress/testVector34.cxx
@@ -4,6 +4,16 @@
#include "gtest/gtest.h"
+#ifndef TYPED_TEST_SUITE_P
+#define TYPED_TEST_SUITE_P TYPED_TEST_CASE_P
+#endif
+#ifndef REGISTER_TYPED_TEST_SUITE_P
+#define REGISTER_TYPED_TEST_SUITE_P REGISTER_TYPED_TEST_CASE_P
+#endif
+#ifndef INSTANTIATE_TYPED_TEST_SUITE_P
+#define INSTANTIATE_TYPED_TEST_SUITE_P INSTANTIATE_TYPED_TEST_CASE_P
+#endif
+
#include "StatFunction.h"
#include "VectorTest.h"
diff --git a/math/mathcore/test/testGradient.cxx b/math/mathcore/test/testGradient.cxx
index 49a5391b7b..271e89e43c 100644
--- a/math/mathcore/test/testGradient.cxx
+++ b/math/mathcore/test/testGradient.cxx
@@ -22,6 +22,10 @@
#include "gtest/gtest.h"
+#ifndef TYPED_TEST_SUITE
+#define TYPED_TEST_SUITE TYPED_TEST_CASE
+#endif
+
#include <chrono>
#include <iostream>
#include <string>
diff --git a/math/mathcore/test/testGradientFitting.cxx b/math/mathcore/test/testGradientFitting.cxx
index f85f826d9f..1818d1c22f 100644
--- a/math/mathcore/test/testGradientFitting.cxx
+++ b/math/mathcore/test/testGradientFitting.cxx
@@ -13,6 +13,16 @@
#include "gtest/gtest.h"
+#ifndef TYPED_TEST_SUITE_P
+#define TYPED_TEST_SUITE_P TYPED_TEST_CASE_P
+#endif
+#ifndef REGISTER_TYPED_TEST_SUITE_P
+#define REGISTER_TYPED_TEST_SUITE_P REGISTER_TYPED_TEST_CASE_P
+#endif
+#ifndef INSTANTIATE_TYPED_TEST_SUITE_P
+#define INSTANTIATE_TYPED_TEST_SUITE_P INSTANTIATE_TYPED_TEST_CASE_P
+#endif
+
#include <iostream>
#include <string>
diff --git a/math/mathmore/test/testStress.cxx b/math/mathmore/test/testStress.cxx
index 47bcdd250f..5cf20e69a1 100644
--- a/math/mathmore/test/testStress.cxx
+++ b/math/mathmore/test/testStress.cxx
@@ -26,6 +26,16 @@
#include "gtest/gtest.h"
+#ifndef TYPED_TEST_SUITE_P
+#define TYPED_TEST_SUITE_P TYPED_TEST_CASE_P
+#endif
+#ifndef REGISTER_TYPED_TEST_SUITE_P
+#define REGISTER_TYPED_TEST_SUITE_P REGISTER_TYPED_TEST_CASE_P
+#endif
+#ifndef INSTANTIATE_TYPED_TEST_SUITE_P
+#define INSTANTIATE_TYPED_TEST_SUITE_P INSTANTIATE_TYPED_TEST_CASE_P
+#endif
+
using ::testing::TestWithParam;
using ::testing::Values;
diff --git a/roofit/histfactory/test/testHistFactory.cxx b/roofit/histfactory/test/testHistFactory.cxx
index 71d7b632d2..9063e51070 100644
--- a/roofit/histfactory/test/testHistFactory.cxx
+++ b/roofit/histfactory/test/testHistFactory.cxx
@@ -22,6 +22,10 @@
#include "TCanvas.h"
#include "gtest/gtest.h"
+#ifndef INSTANTIATE_TEST_SUITE_P
+#define INSTANTIATE_TEST_SUITE_P INSTANTIATE_TEST_CASE_P
+#endif
+
#include <set>
using namespace RooStats;
diff --git a/roofit/multiprocess/test/test_Job.cxx b/roofit/multiprocess/test/test_Job.cxx
index 22e66fc73c..61cc11771d 100644
--- a/roofit/multiprocess/test/test_Job.cxx
+++ b/roofit/multiprocess/test/test_Job.cxx
@@ -24,6 +24,11 @@
#include "RooFit/MultiProcess/Queue.h" // ... JobManager::queue()
#include "gtest/gtest.h"
+
+#ifndef INSTANTIATE_TEST_SUITE_P
+#define INSTANTIATE_TEST_SUITE_P INSTANTIATE_TEST_CASE_P
+#endif
+
#include "utils.h"
class xSquaredPlusBVectorSerial {
diff --git a/roofit/roofitZMQ/test/test_ZMQ.cpp b/roofit/roofitZMQ/test/test_ZMQ.cpp
index 6dcceaff08..73e75be147 100644
--- a/roofit/roofitZMQ/test/test_ZMQ.cpp
+++ b/roofit/roofitZMQ/test/test_ZMQ.cpp
@@ -16,6 +16,10 @@
#include "gtest/gtest.h"
+#ifndef INSTANTIATE_TEST_SUITE_P
+#define INSTANTIATE_TEST_SUITE_P INSTANTIATE_TEST_CASE_P
+#endif
+
#include <unistd.h> // fork, usleep
#include <sstream>
diff --git a/roofit/roofitcore/test/TestStatistics/RooRealL.cpp b/roofit/roofitcore/test/TestStatistics/RooRealL.cpp
index f8421613ac..3ae6285a12 100644
--- a/roofit/roofitcore/test/TestStatistics/RooRealL.cpp
+++ b/roofit/roofitcore/test/TestStatistics/RooRealL.cpp
@@ -34,6 +34,10 @@
#include "gtest/gtest.h"
+#ifndef INSTANTIATE_TEST_SUITE_P
+#define INSTANTIATE_TEST_SUITE_P INSTANTIATE_TEST_CASE_P
+#endif
+
class RooRealL
: public ::testing::TestWithParam<std::tuple<std::size_t>> {
};
diff --git a/roofit/roofitcore/test/TestStatistics/testLikelihoodGradientJob.cpp b/roofit/roofitcore/test/TestStatistics/testLikelihoodGradientJob.cpp
index f4adf63eec..05164277f0 100644
--- a/roofit/roofitcore/test/TestStatistics/testLikelihoodGradientJob.cpp
+++ b/roofit/roofitcore/test/TestStatistics/testLikelihoodGradientJob.cpp
@@ -33,6 +33,11 @@
#include <stdexcept> // runtime_error
#include "gtest/gtest.h"
+
+#ifndef INSTANTIATE_TEST_SUITE_P
+#define INSTANTIATE_TEST_SUITE_P INSTANTIATE_TEST_CASE_P
+#endif
+
#include "../test_lib.h" // generate_1D_gaussian_pdf_nll
using RooFit::TestStatistics::LikelihoodWrapper;
diff --git a/roofit/roofitcore/test/testProxiesAndCategories.cxx b/roofit/roofitcore/test/testProxiesAndCategories.cxx
index bed3c399bb..550e0c5ac9 100644
--- a/roofit/roofitcore/test/testProxiesAndCategories.cxx
+++ b/roofit/roofitcore/test/testProxiesAndCategories.cxx
@@ -16,6 +16,9 @@
#include "gtest/gtest.h"
+#ifndef INSTANTIATE_TEST_SUITE_P
+#define INSTANTIATE_TEST_SUITE_P INSTANTIATE_TEST_CASE_P
+#endif
TEST(RooCategory, CategoryDefineMultiState) {
RooCategory myCat("myCat", "A category", { {"0Lep", 0}, {"1Lep", 1}, {"2Lep", 2}, {"3Lep", 3} });
diff --git a/roofit/roofitcore/test/testRooDataHist.cxx b/roofit/roofitcore/test/testRooDataHist.cxx
index 90782e0749..f6b5e087ae 100644
--- a/roofit/roofitcore/test/testRooDataHist.cxx
+++ b/roofit/roofitcore/test/testRooDataHist.cxx
@@ -18,6 +18,10 @@
#include "gtest/gtest.h"
+#ifndef INSTANTIATE_TEST_SUITE_P
+#define INSTANTIATE_TEST_SUITE_P INSTANTIATE_TEST_CASE_P
+#endif
+
#include <algorithm>
#include <memory>
diff --git a/roofit/roofitcore/test/testRooGradMinimizerFcn.cxx b/roofit/roofitcore/test/testRooGradMinimizerFcn.cxx
index c1978ae47e..877ab1525f 100644
--- a/roofit/roofitcore/test/testRooGradMinimizerFcn.cxx
+++ b/roofit/roofitcore/test/testRooGradMinimizerFcn.cxx
@@ -22,6 +22,11 @@
#include <stdio.h> // remove redundant workspace files
#include "gtest/gtest.h"
+
+#ifndef INSTANTIATE_TEST_SUITE_P
+#define INSTANTIATE_TEST_SUITE_P INSTANTIATE_TEST_CASE_P
+#endif
+
#include "test_lib.h"
#include <RooMsgService.h>
diff --git a/tree/dataframe/test/dataframe_definepersample.cxx b/tree/dataframe/test/dataframe_definepersample.cxx
index 772b8baa70..37da9f3f95 100644
--- a/tree/dataframe/test/dataframe_definepersample.cxx
+++ b/tree/dataframe/test/dataframe_definepersample.cxx
@@ -6,6 +6,10 @@
#include <gtest/gtest.h>
+#ifndef INSTANTIATE_TEST_SUITE_P
+#define INSTANTIATE_TEST_SUITE_P INSTANTIATE_TEST_CASE_P
+#endif
+
#include <atomic>
#include <memory>
#include <thread> // std::thread::hardware_concurrency
diff --git a/tree/dataframe/test/dataframe_merge_results.cxx b/tree/dataframe/test/dataframe_merge_results.cxx
index 9354b75a39..ea439ea006 100644
--- a/tree/dataframe/test/dataframe_merge_results.cxx
+++ b/tree/dataframe/test/dataframe_merge_results.cxx
@@ -340,7 +340,7 @@ TEST(RDataFrameMergeResults, Merge5Hists)
EXPECT_FALSE(mh3);
EXPECT_FALSE(mh4);
EXPECT_FALSE(mh5);
- EXPECT_TRUE(mergedptr);
+ EXPECT_TRUE(!!mergedptr);
const auto &mh = mergedptr->GetValue();
diff --git a/tree/dataframe/test/dataframe_regression.cxx b/tree/dataframe/test/dataframe_regression.cxx
index 9801067cf4..8a991f40c5 100644
--- a/tree/dataframe/test/dataframe_regression.cxx
+++ b/tree/dataframe/test/dataframe_regression.cxx
@@ -9,6 +9,10 @@
#include "gtest/gtest.h"
+#ifndef INSTANTIATE_TEST_SUITE_P
+#define INSTANTIATE_TEST_SUITE_P INSTANTIATE_TEST_CASE_P
+#endif
+
// Fixture for all tests in this file. If parameter is true, run with implicit MT, else run sequentially
class RDFRegressionTests : public ::testing::TestWithParam<bool> {
protected:
diff --git a/tree/dataframe/test/dataframe_samplecallback.cxx b/tree/dataframe/test/dataframe_samplecallback.cxx
index 188d58dd31..7734586eb3 100644
--- a/tree/dataframe/test/dataframe_samplecallback.cxx
+++ b/tree/dataframe/test/dataframe_samplecallback.cxx
@@ -11,6 +11,10 @@
#include <gtest/gtest.h>
+#ifndef INSTANTIATE_TEST_SUITE_P
+#define INSTANTIATE_TEST_SUITE_P INSTANTIATE_TEST_CASE_P
+#endif
+
#include <algorithm> // std::min
#include <memory>
#include <mutex>
diff --git a/tree/dataframe/test/dataframe_simple.cxx b/tree/dataframe/test/dataframe_simple.cxx
index 6006f99017..b507edc13f 100644
--- a/tree/dataframe/test/dataframe_simple.cxx
+++ b/tree/dataframe/test/dataframe_simple.cxx
@@ -1,5 +1,10 @@
/****** Run RDataFrame tests both with and without IMT enabled *******/
#include <gtest/gtest.h>
+
+#ifndef INSTANTIATE_TEST_SUITE_P
+#define INSTANTIATE_TEST_SUITE_P INSTANTIATE_TEST_CASE_P
+#endif
+
#include <ROOTUnitTestSupport.h>
#include <ROOT/RDataFrame.hxx>
#include <ROOT/TSeq.hxx>
diff --git a/tree/dataframe/test/dataframe_vary.cxx b/tree/dataframe/test/dataframe_vary.cxx
index 2284b21f53..5a26c43cdc 100644
--- a/tree/dataframe/test/dataframe_vary.cxx
+++ b/tree/dataframe/test/dataframe_vary.cxx
@@ -7,6 +7,10 @@
#include <gtest/gtest.h>
+#ifndef INSTANTIATE_TEST_SUITE_P
+#define INSTANTIATE_TEST_SUITE_P INSTANTIATE_TEST_CASE_P
+#endif
+
using ROOT::RDF::Experimental::VariationsFor;
class RDFVary : public ::testing::TestWithParam<bool> {
diff --git a/tree/tree/test/TOffsetGeneration.cxx b/tree/tree/test/TOffsetGeneration.cxx
index 7b6b7647aa..77f125ca60 100644
--- a/tree/tree/test/TOffsetGeneration.cxx
+++ b/tree/tree/test/TOffsetGeneration.cxx
@@ -9,6 +9,10 @@
#include "ROOTUnitTestSupport.h"
#include "gtest/gtest.h"
+#ifndef INSTANTIATE_TEST_SUITE_P
+#define SetUpTestSuite SetUpTestCase
+#endif
+
#include "ElementStruct.h"
class TOffsetGeneration : public ::testing::Test {
--
2.35.1
From 33e5da8c1f678382ab2fd65d000d388bb0dbf3ab Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Sun, 17 Apr 2022 22:17:56 +0200
Subject: [PATCH] Backward compatibility with older googletest versions in EPEL
---
math/vecops/test/vecops_rvec.cxx | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/math/vecops/test/vecops_rvec.cxx b/math/vecops/test/vecops_rvec.cxx
index 7b513a858b..bea39636ce 100644
--- a/math/vecops/test/vecops_rvec.cxx
+++ b/math/vecops/test/vecops_rvec.cxx
@@ -13,6 +13,10 @@
#include <sstream>
#include <cmath>
+#ifndef INSTANTIATE_TEST_SUITE_P
+#define INSTANTIATE_TEST_SUITE_P INSTANTIATE_TEST_CASE_P
+#endif
+
using namespace ROOT;
using namespace ROOT::VecOps;
using namespace ROOT::Detail::VecOps; // for `IsSmall` and `IsAdopting`
--
2.35.1
From cae450e0210fe584ef30d155a4217cfe2f5aa358 Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Sat, 30 Jul 2022 17:05:31 +0200
Subject: [PATCH] Backward compatibility with older googletest versions in EPEL
---
tree/dataframe/test/dataframe_datasetspec.cxx | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/tree/dataframe/test/dataframe_datasetspec.cxx b/tree/dataframe/test/dataframe_datasetspec.cxx
index b422dcf28b..14329102af 100644
--- a/tree/dataframe/test/dataframe_datasetspec.cxx
+++ b/tree/dataframe/test/dataframe_datasetspec.cxx
@@ -1,4 +1,9 @@
#include <gtest/gtest.h>
+
+#ifndef INSTANTIATE_TEST_SUITE_P
+#define INSTANTIATE_TEST_SUITE_P INSTANTIATE_TEST_CASE_P
+#endif
+
#include <ROOT/RDataFrame.hxx>
#include <ROOT/RVec.hxx>
#include <ROOT/RDFHelpers.hxx>
@@ -36,6 +41,7 @@ protected:
~RDatasetSpecTest() {}
+public:
static void SetUpTestCase()
{
auto dfWriter0 = RDataFrame(5).Define("z", [](ULong64_t e) { return e + 100; }, {"rdfentry_"});
--
2.37.1

46
root-older-python.patch Normal file
View file

@ -0,0 +1,46 @@
From 61116151cce8fe5b397555a65f7b55001b8e416b Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Fri, 23 Apr 2021 21:39:17 +0200
Subject: [PATCH] Compat with no f-strings
---
tutorials/tmva/PyTorch_Generate_CNN_Model.py | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/tutorials/tmva/PyTorch_Generate_CNN_Model.py b/tutorials/tmva/PyTorch_Generate_CNN_Model.py
index 7024112f03..5a314f86dd 100644
--- a/tutorials/tmva/PyTorch_Generate_CNN_Model.py
+++ b/tutorials/tmva/PyTorch_Generate_CNN_Model.py
@@ -56,7 +56,7 @@ def fit(model, train_loader, val_loader, num_epochs, batch_size, optimizer, crit
# print train statistics
running_train_loss += train_loss.item()
if i % 4 == 3: # print every 4 mini-batches
- print(f"[{epoch+1}, {i+1}] train loss: {running_train_loss / 4 :.3f}")
+ print("[{}, {}] train loss: {:.3f}".format(epoch+1, i+1, running_train_loss / 4))
running_train_loss = 0.0
if schedule:
@@ -75,15 +75,15 @@ def fit(model, train_loader, val_loader, num_epochs, batch_size, optimizer, crit
curr_val = running_val_loss / len(val_loader)
if save_best:
- if best_val==None:
- best_val = curr_val
- best_val = save_best(model, curr_val, best_val)
+ if best_val is None:
+ best_val = curr_val
+ best_val = save_best(model, curr_val, best_val)
# print val statistics per epoch
- print(f"[{epoch+1}] val loss: {curr_val :.3f}")
+ print("[{}] val loss: {:.3f}".format(epoch+1, curr_val))
running_val_loss = 0.0
- print(f"Finished Training on {epoch+1} Epochs!")
+ print("Finished Training on {} Epochs!".format(epoch+1))
return model
--
2.30.2

View file

@ -0,0 +1,42 @@
From c4df90861879f45b281c2a8e55212b711cfdbfa0 Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Tue, 29 Mar 2022 15:30:20 +0200
Subject: [PATCH] Avoid crashes due to static initialization order
Most commonly seen on ppc64le. Backtrace:
===========================================================
The lines below might hint at the cause of the crash.
You may get help by asking at the ROOT forum https://root.cern/forum
Only if you are really convinced it is a bug in ROOT then please submit a
report at https://root.cern/bugs Please post the ENTIRE stack trace
from above as an attachment in addition to anything else
that might help us fixing this issue.
===========================================================
#11 ROOT::Experimental::RColor::toHex[abi:cxx11](unsigned char) (v=<optimized out>) at /usr/include/c++/11/ext/new_allocator.h:82
#12 0x00007fff90c220ec in ROOT::Experimental::RColor::SetRGB (this=0x7fffeadf5d10, r=<optimized out>, g=<optimized out>, b=<optimized out>) at /usr/include/c++/11/ext/new_allocator.h:89
---
graf2d/gpadv7/src/RColor.cxx | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/graf2d/gpadv7/src/RColor.cxx b/graf2d/gpadv7/src/RColor.cxx
index de325f1ea3..6878360073 100644
--- a/graf2d/gpadv7/src/RColor.cxx
+++ b/graf2d/gpadv7/src/RColor.cxx
@@ -232,10 +232,10 @@ std::vector<uint8_t> RColor::AsRGBA() const
std::string RColor::toHex(uint8_t v)
{
- static const char *digits = "0123456789ABCDEF";
+ auto digits = [](auto d) { return d < 10 ? '0' + d : 'A' - 10 + d; };
std::string res(2,'0');
- res[0] = digits[v >> 4];
- res[1] = digits[v & 0xf];
+ res[0] = digits(v >> 4);
+ res[1] = digits(v & 0xf);
return res;
}
--
2.35.1

View file

@ -0,0 +1,74 @@
From 914e46f1c591f8b9b34115863ff31e42e19bfb97 Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Mon, 28 Mar 2022 09:32:24 +0200
Subject: [PATCH] Use calls from Python directly
The rf105_funcbinding.py tutorial used to trigger errors due to unknown
symbols. In particular the custum new and delete operators used in RooFit
were not autoloaded when needed.
In the tutorial there was a workaround implemented to call ProcessLine
instead of making calls directly form Python, to make the autoloading
from the C++ side of ROOT instead. This did not quite fix the problem,
and the tutorial still randomly failed due to missing symbols.
After changing the algorthm used for autoloading in commit
6ae602bba7d33c900a117c9de0187ab5a28e14b8 these problems were solved.
After this fix using the direct calls from Python also works, so this
PR suggests updating the tutorial to do that.
---
tutorials/roofit/rf105_funcbinding.py | 30 ++++++---------------------
1 file changed, 6 insertions(+), 24 deletions(-)
diff --git a/tutorials/roofit/rf105_funcbinding.py b/tutorials/roofit/rf105_funcbinding.py
index 72d9cf62fc..b9de2a095a 100644
--- a/tutorials/roofit/rf105_funcbinding.py
+++ b/tutorials/roofit/rf105_funcbinding.py
@@ -17,15 +17,8 @@ import ROOT
# ---------------------------------------------------
# Bind one-dimensional ROOT.TMath.Erf function as ROOT.RooAbsReal function
-# Directly trying this in python doesn't work:
-# x = ROOT.RooRealVar("x", "x", -3, 3)
-# erf = ROOT.RooFit.bindFunction("erf", ROOT.TMath.Erf, x)
-# Need to go through C interface
-ROOT.gInterpreter.ProcessLine(
- 'auto x = RooRealVar("x", "x", -3, 3); auto myerf = RooFit::bindFunction("erf", TMath::Erf, x)'
-)
-x = ROOT.x
-erf = ROOT.myerf
+x = ROOT.RooRealVar("x", "x", -3, 3)
+erf = ROOT.RooFit.bindFunction("erf", ROOT.TMath.Erf, x)
# Print erf definition
erf.Print()
@@ -38,21 +31,10 @@ erf.plotOn(frame1)
# -----------------------------------------------------------------------
# Bind pdf ROOT.Math.Beta with three variables as ROOT.RooAbsPdf function
-# As above, this does not work directly in python
-# x2 = ROOT.RooRealVar("x2", "x2", 0, 0.999)
-# a = ROOT.RooRealVar("a", "a", 5, 0, 10)
-# b = ROOT.RooRealVar("b", "b", 2, 0, 10)
-# beta = ROOT.RooFit.bindPdf("beta", ROOT.Math.beta_pdf, x2, a, b)
-ROOT.gInterpreter.ProcessLine(
- 'auto x2 = RooRealVar("x2", "x2", 0, 0.999);\
- auto a = RooRealVar("a", "a", 5, 0, 10);\
- auto b = RooRealVar("b", "b", 5, 0, 10);\
- auto beta = RooFit::bindPdf("beta", ROOT::Math::beta_pdf, x2, a, b)'
-)
-x2 = ROOT.x2
-a = ROOT.a
-b = ROOT.b
-beta = ROOT.beta
+x2 = ROOT.RooRealVar("x2", "x2", 0, 0.999)
+a = ROOT.RooRealVar("a", "a", 5, 0, 10)
+b = ROOT.RooRealVar("b", "b", 2, 0, 10)
+beta = ROOT.RooFit.bindPdf("beta", ROOT.Math.beta_pdf, x2, a, b)
# Perf beta definition
beta.Print()
--
2.35.1

31
root-symbol-rewrite.patch Normal file
View file

@ -0,0 +1,31 @@
From f99eedeb72644671cd584f48e4c136d47f6b0020 Mon Sep 17 00:00:00 2001
From: Fangrui Song <maskray@google.com>
Date: Thu, 12 Dec 2019 16:18:57 -0800
Subject: [PATCH] [MC][PowerPC] Fix a crash when redefining a symbol after .set
Fix PR44284. This is probably not valid assembly but we should not crash.
Reviewed By: luporl, #powerpc, steven.zhang
Differential Revision: https://reviews.llvm.org/D71443
---
interpreter/llvm/src/lib/Target/PowerPC/MCTargetDesc/PPCMCTargetDesc.cpp | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/interpreter/llvm/src/lib/Target/PowerPC/MCTargetDesc/PPCMCTargetDesc.cpp b/interpreter/llvm/src/lib/Target/PowerPC/MCTargetDesc/PPCMCTargetDesc.cpp
index 00df9e41fdae..5e91bdb2f8de 100644
--- a/interpreter/llvm/src/lib/Target/PowerPC/MCTargetDesc/PPCMCTargetDesc.cpp
+++ b/interpreter/llvm/src/lib/Target/PowerPC/MCTargetDesc/PPCMCTargetDesc.cpp
@@ -201,7 +201,8 @@ public:
void finish() override {
for (auto *Sym : UpdateOther)
- copyLocalEntry(Sym, Sym->getVariableValue());
+ if (Sym->isVariable())
+ copyLocalEntry(Sym, Sym->getVariableValue());
}
private:
--
2.33.1

110
root-test-timeout.patch Normal file
View file

@ -0,0 +1,110 @@
From 4d09235937ea29913cbf9a9b5bcd002b52557c0e Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Sun, 3 Jul 2022 08:18:57 +0200
Subject: [PATCH] Increase test timeout
---
cmake/modules/RootMacros.cmake | 14 +++++++-------
tmva/tmva/test/DNN/CMakeLists.txt | 2 +-
tree/tree/test/CMakeLists.txt | 2 +-
tutorials/CMakeLists.txt | 4 ++--
4 files changed, 11 insertions(+), 11 deletions(-)
diff --git a/cmake/modules/RootMacros.cmake b/cmake/modules/RootMacros.cmake
index cc61f4bbad..3e4559fc19 100644
--- a/cmake/modules/RootMacros.cmake
+++ b/cmake/modules/RootMacros.cmake
@@ -1779,6 +1779,7 @@ endfunction()
#----------------------------------------------------------------------------
# function ROOT_ADD_GTEST(<testsuite> source1 source2...
# [WILLFAIL] Negate output of test
+# [TIMEOUT seconds]
# [COPY_TO_BUILDDIR file1 file2] Copy listed files when ctest invokes the test.
# [LIBRARIES lib1 lib2...] -- Libraries to link against
# [LABELS label1 label2...] -- Labels to annotate the test
@@ -1790,7 +1791,7 @@ endfunction()
function(ROOT_ADD_GTEST test_suite)
cmake_parse_arguments(ARG
"WILLFAIL"
- "REPEATS;FAILREGEX"
+ "TIMEOUT;REPEATS;FAILREGEX"
"COPY_TO_BUILDDIR;LIBRARIES;LABELS;INCLUDE_DIRS" ${ARGN})
ROOT_GET_SOURCES(source_files . ${ARG_UNPARSED_ARGUMENTS})
@@ -1821,9 +1822,7 @@ function(ROOT_ADD_GTEST test_suite)
if(ARG_WILLFAIL)
set(willfail WILLFAIL)
endif()
- if(ARG_LABELS)
- set(labels "LABELS ${ARG_LABELS}")
- endif()
+
if(ARG_REPEATS)
set(extra_command --gtest_repeat=${ARG_REPEATS} --gtest_break_on_failure)
endif()
@@ -1833,10 +1832,11 @@ function(ROOT_ADD_GTEST test_suite)
gtest${mangled_name}
COMMAND ${test_suite} ${extra_command}
WORKING_DIR ${CMAKE_CURRENT_BINARY_DIR}
- COPY_TO_BUILDDIR ${ARG_COPY_TO_BUILDDIR}
+ COPY_TO_BUILDDIR "${ARG_COPY_TO_BUILDDIR}"
${willfail}
- ${labels}
- FAILREGEX ${ARG_FAILREGEX}
+ TIMEOUT "${ARG_TIMEOUT}"
+ LABELS "${ARG_LABELS}"
+ FAILREGEX "${ARG_FAILREGEX}"
)
endfunction()
diff --git a/tmva/tmva/test/DNN/CMakeLists.txt b/tmva/tmva/test/DNN/CMakeLists.txt
index a9233682f6..653540e9e3 100644
--- a/tmva/tmva/test/DNN/CMakeLists.txt
+++ b/tmva/tmva/test/DNN/CMakeLists.txt
@@ -144,7 +144,7 @@ ROOT_ADD_TEST(TMVA-DNN-MethodDL-SGD-Optimization-Cpu COMMAND testMethodDLSGDOpti
# DNN - MethodDL Adam Optimization CPU
ROOT_EXECUTABLE(testMethodDLAdamOptimizationCpu TestMethodDLAdamOptimizationCpu.cxx LIBRARIES ${Libraries})
-ROOT_ADD_TEST(TMVA-DNN-MethodDL-Adam-Optimization-Cpu COMMAND testMethodDLAdamOptimizationCpu)
+ROOT_ADD_TEST(TMVA-DNN-MethodDL-Adam-Optimization-Cpu COMMAND testMethodDLAdamOptimizationCpu TIMEOUT 1800)
# DNN - MethodDL Adagrad Optimization CPU
ROOT_EXECUTABLE(testMethodDLAdagradOptimizationCpu TestMethodDLAdagradOptimizationCpu.cxx LIBRARIES ${Libraries})
diff --git a/tree/tree/test/CMakeLists.txt b/tree/tree/test/CMakeLists.txt
index dbe664f8a0..6284e3c4c5 100644
--- a/tree/tree/test/CMakeLists.txt
+++ b/tree/tree/test/CMakeLists.txt
@@ -20,7 +20,7 @@ ROOT_ADD_GTEST(testBulkApi BulkApi.cxx LIBRARIES RIO Tree TreePlayer)
target_include_directories(testTOffsetGeneration PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
ROOT_STANDARD_LIBRARY_PACKAGE(SillyStruct NO_INSTALL_HEADERS HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/SillyStruct.h SOURCES SillyStruct.cxx LINKDEF SillyStructLinkDef.h DEPENDENCIES RIO)
ROOT_ADD_GTEST(testBulkApi BulkApi.cxx LIBRARIES RIO Tree TreePlayer)
-ROOT_ADD_GTEST(testBulkApiMultiple BulkApiMultiple.cxx LIBRARIES RIO Tree TreePlayer)
+ROOT_ADD_GTEST(testBulkApiMultiple BulkApiMultiple.cxx LIBRARIES RIO Tree TreePlayer TIMEOUT 2400)
ROOT_ADD_GTEST(testBulkApiVarLength BulkApiVarLength.cxx LIBRARIES RIO Tree TreePlayer)
ROOT_ADD_GTEST(testBulkApiSillyStruct BulkApiSillyStruct.cxx LIBRARIES RIO Tree TreePlayer SillyStruct)
ROOT_ADD_GTEST(testTBasket TBasket.cxx LIBRARIES RIO Tree)
diff --git a/tutorials/CMakeLists.txt b/tutorials/CMakeLists.txt
index 6ae9be5869..982432fe15 100644
--- a/tutorials/CMakeLists.txt
+++ b/tutorials/CMakeLists.txt
@@ -532,7 +532,7 @@ foreach(t ${tutorials})
# These tests on ARM64 need much more than 20 minutes - increase the timeout
if(ROOT_ARCHITECTURE MATCHES arm64 OR ROOT_ARCHITECTURE MATCHES ppc64)
- set(thisTestTimeout 2400) # 40m
+ set(thisTestTimeout 3000) # 50m
else()
set(thisTestTimeout 1200) # 20m
endif()
@@ -566,7 +566,7 @@ foreach(t ${mpi_tutorials})
# These tests on ARM64 need much more than 20 minutes - increase the timeout
if(ROOT_ARCHITECTURE MATCHES arm64 OR ROOT_ARCHITECTURE MATCHES ppc64)
- set(thisTestTimeout 2400) # 40m
+ set(thisTestTimeout 3000) # 50m
else()
set(thisTestTimeout 1200) # 20m
endif()
--
2.38.1

View file

@ -72,7 +72,14 @@ wget -N ${SITE}/tesla.root
wget -N ${SITE}/wa91_ref_3.root
wget -N ${SITE}/wa91.root
wget -N ${SITE}/AtlasGraphs.root
wget -N ${SITE}/europe.root
wget -N ${SITE}/Higgs_data.root
wget -N ${SITE}/linearIO.root
wget -N ${SITE}/stressHistogram.5.18.00.root
wget -N ${SITE}/tmva_class_example.root
wget -N ${SITE}/tmva_multiclass_example.root
wget -N ${SITE}/tmva_reg_example.root
wget -N ${SITE}/usa.root
for f in *.root ; do ln -s $f $f.ROOT.cachefile ; done

View file

@ -0,0 +1,48 @@
From 493c4210168fa475aa4130c12e8fdff3b7d85c09 Mon Sep 17 00:00:00 2001
From: Philippe Canal <pcanal@fnal.gov>
Date: Mon, 7 Mar 2022 13:32:37 -0600
Subject: [PATCH] threadsh1: Avoid heap-use-after-free.
Previously, the Canvas `Close` signal which triggers a call to the local function `close` which
was unconditionally call `Kill` on its associated thread would call it on an already deleted
object if the `TThread` was deleted before the `TCanvas`.
This fix #10015 (detected by using ASAN).
---
tutorials/legacy/thread/threadsh1.C | 13 +++++++------
1 file changed, 7 insertions(+), 6 deletions(-)
diff --git a/tutorials/legacy/thread/threadsh1.C b/tutorials/legacy/thread/threadsh1.C
index b819f5d020..d6abc67e36 100644
--- a/tutorials/legacy/thread/threadsh1.C
+++ b/tutorials/legacy/thread/threadsh1.C
@@ -67,7 +67,8 @@ void *joiner(void *)
void closed(Int_t id)
{
// kill the thread matching the canvas being closed
- t[id]->Kill();
+ if (t[id])
+ t[id]->Kill();
// and set the canvas pointer to 0
c[id] = 0;
}
@@ -142,11 +143,11 @@ void threadsh1()
t[4]->Join();
TThread::Ps();
- delete t[0];
- delete t[1];
- delete t[2];
- delete t[3];
- delete t[4];
+ delete t[0]; t[0] = nullptr; // Prevents after deletion access.
+ delete t[1]; t[1] = nullptr;
+ delete t[2]; t[2] = nullptr;
+ delete t[3]; t[3] = nullptr;
+ delete t[4]; t[4] = nullptr;
delete rng[0];
delete rng[1];
--
2.35.1

79
root-tmva-threads.patch Normal file
View file

@ -0,0 +1,79 @@
From 589ac491519446191b7d480a476ab831dc09b5f9 Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Wed, 30 Mar 2022 15:51:07 +0200
Subject: [PATCH] Limit the number of threads in TMVA CNN/DNN test to save
memory
Processing /builddir/build/BUILD/root-6.26.00/tutorials/tmva/TMVA_CNN_Classification.C...
Running with nthreads = 224
[ ... ]
OpenBLAS warning: precompiled NUM_THREADS exceeded, adding auxiliary array for thread metadata.
OpenBLAS warning: precompiled NUM_THREADS exceeded, adding auxiliary array for thread metadata.
OpenBLAS warning: precompiled NUM_THREADS exceeded, adding auxiliary array for thread metadata.
OpenBLAS warning: precompiled NUM_THREADS exceeded, adding auxiliary array for thread metadata.
OpenBLAS warning: precompiled NUM_THREADS exceeded, adding auxiliary array for thread metadata.
OpenBLAS warning: precompiled NUM_THREADS exceeded, adding auxiliary array for thread metadata.
OpenBLAS warning: precompiled NUM_THREADS exceeded, adding auxiliary array for thread metadata.
OpenBLAS warning: precompiled NUM_THREADS exceeded, adding auxiliary array for thread metadata.
OpenBLAS warning: precompiled NUM_THREADS exceeded, adding auxiliary array for thread metadata.
OpenBLAS warning: precompiled NUM_THREADS exceeded, adding auxiliary array for thread metadata.
OpenBLAS warning: precompiled NUM_THREADS exceeded, adding auxiliary array for thread metadata.
*** Break *** segmentation violation
*** Break *** segmentation violation
*** Break *** segmentation violation
*** Break *** segmentation violation
*** Break *** segmentation violation
*** Break *** segmentation violation
---
tutorials/tmva/TMVA_CNN_Classification.C | 6 ++++--
tutorials/tmva/TMVA_RNN_Classification.C | 6 ++++--
2 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/tutorials/tmva/TMVA_CNN_Classification.C b/tutorials/tmva/TMVA_CNN_Classification.C
index 3e590c5958..b748fcee6c 100644
--- a/tutorials/tmva/TMVA_CNN_Classification.C
+++ b/tutorials/tmva/TMVA_CNN_Classification.C
@@ -125,14 +125,16 @@ void TMVA_CNN_Classification(std::vector<bool> opt = {1, 1, 1, 1, 1})
bool writeOutputFile = true;
- int num_threads = 0; // use default threads
+ int num_threads = 32;
TMVA::Tools::Instance();
// do enable MT running
if (num_threads >= 0) {
ROOT::EnableImplicitMT(num_threads);
- if (num_threads > 0) gSystem->Setenv("OMP_NUM_THREADS", TString::Format("%d",num_threads));
+ if (ROOT::GetThreadPoolSize() > 0)
+ gSystem->Setenv("OMP_NUM_THREADS",
+ TString::Format("%u", ROOT::GetThreadPoolSize()));
}
else
gSystem->Setenv("OMP_NUM_THREADS", "1");
diff --git a/tutorials/tmva/TMVA_RNN_Classification.C b/tutorials/tmva/TMVA_RNN_Classification.C
index 5be80824f9..f902025875 100644
--- a/tutorials/tmva/TMVA_RNN_Classification.C
+++ b/tutorials/tmva/TMVA_RNN_Classification.C
@@ -190,11 +190,13 @@ void TMVA_RNN_Classification(int use_type = 1)
useKeras = false;
#endif
- int num_threads = 0; // use by default all threads
+ int num_threads = 32;
// do enable MT running
if (num_threads >= 0) {
ROOT::EnableImplicitMT(num_threads);
- if (num_threads > 0) gSystem->Setenv("OMP_NUM_THREADS", TString::Format("%d",num_threads));
+ if (ROOT::GetThreadPoolSize() > 0)
+ gSystem->Setenv("OMP_NUM_THREADS",
+ TString::Format("%u", ROOT::GetThreadPoolSize()));
}
else
gSystem->Setenv("OMP_NUM_THREADS", "1");
--
2.35.1

202
root-unbundle-gtest.patch Normal file
View file

@ -0,0 +1,202 @@
From 29884ae01fde27204d92f554da4e92227a2ed1e6 Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Sat, 26 Mar 2022 10:22:07 +0100
Subject: [PATCH 1/2] Implement builtin_gtest option
By setting the option to OFF the system gtest and gmock are used.
This allows doing tests without network available, e.g. during a
package build for Fedora/EPEL.
---
cmake/modules/FindGTest.cmake | 81 +++++++++++++++++++++
cmake/modules/RootBuildOptions.cmake | 2 +
cmake/modules/RootMacros.cmake | 2 +-
cmake/modules/SearchInstalledSoftware.cmake | 44 ++++++++---
4 files changed, 118 insertions(+), 11 deletions(-)
create mode 100644 cmake/modules/FindGTest.cmake
diff --git a/cmake/modules/FindGTest.cmake b/cmake/modules/FindGTest.cmake
new file mode 100644
index 0000000000..438ec501c2
--- /dev/null
+++ b/cmake/modules/FindGTest.cmake
@@ -0,0 +1,81 @@
+# Find the gtest and gmock includes and library.
+#
+# This module defines
+# GTEST_LIBRARIES
+# GTEST_MAIN_LIBRARIES
+# GTEST_INCLUDE_DIRS
+# GMOCK_LIBRARIES
+# GMOCK_MAIN_LIBRARIES
+# GMOCK_INCLUDE_DIRS
+#
+# GTEST_FOUND true if all libraries present
+
+find_package(Threads QUIET)
+
+find_path(GTEST_INCLUDE_DIRS NAMES gtest/gtest.h)
+find_library(GTEST_LIBRARIES NAMES gtest)
+find_library(GTEST_MAIN_LIBRARIES NAMES gtest_main)
+
+find_path(GMOCK_INCLUDE_DIRS NAMES gmock/gmock.h)
+find_library(GMOCK_LIBRARIES NAMES gmock)
+find_library(GMOCK_MAIN_LIBRARIES NAMES gmock_main)
+
+# Special for EPEL 7's gmock
+if(NOT GMOCK_LIBRARIES)
+ find_path(GMOCK_SRC_DIR NAMES gmock-all.cc PATHS /usr/src/gmock)
+endif()
+
+if(NOT GMOCK_MAIN_LIBRARIES)
+ find_path(GMOCK_MAIN_SRC_DIR NAMES gmock_main.cc PATHS /usr/src/gmock)
+endif()
+
+if (GTEST_INCLUDE_DIRS AND
+ GTEST_LIBRARIES AND
+ GTEST_MAIN_LIBRARIES AND
+ GMOCK_INCLUDE_DIRS AND
+ (GMOCK_LIBRARIES OR GMOCK_SRC_DIR) AND
+ (GMOCK_MAIN_LIBRARIES OR GMOCK_MAIN_SRC_DIR))
+
+ add_library(gtest UNKNOWN IMPORTED)
+ set_target_properties(gtest PROPERTIES
+ IMPORTED_LOCATION ${GTEST_LIBRARIES}
+ INTERFACE_INCLUDE_DIRECTORIES ${GTEST_INCLUDE_DIRS})
+ target_link_libraries(gtest INTERFACE Threads::Threads)
+
+ add_library(gtest_main UNKNOWN IMPORTED)
+ set_target_properties(gtest_main PROPERTIES
+ IMPORTED_LOCATION ${GTEST_MAIN_LIBRARIES})
+ target_link_libraries(gtest_main INTERFACE gtest Threads::Threads)
+
+ if(GMOCK_LIBRARIES)
+ add_library(gmock UNKNOWN IMPORTED)
+ set_target_properties(gmock PROPERTIES
+ IMPORTED_LOCATION ${GMOCK_LIBRARIES}
+ INTERFACE_INCLUDE_DIRECTORIES ${GMOCK_INCLUDE_DIRS})
+ else()
+ add_library(gmock STATIC ${GMOCK_SRC_DIR}/gmock-all.cc)
+ target_include_directories(gmock PUBLIC ${GMOCK_INCLUDE_DIRS})
+ set(GMOCK_LIBRARIES gmock)
+ endif()
+ target_link_libraries(gmock INTERFACE gtest Threads::Threads)
+
+ if(GMOCK_MAIN_LIBRARIES)
+ add_library(gmock_main UNKNOWN IMPORTED)
+ set_target_properties(gmock_main PROPERTIES
+ IMPORTED_LOCATION ${GMOCK_MAIN_LIBRARIES})
+ else()
+ add_library(gmock_main STATIC ${GMOCK_MAIN_SRC_DIR}/gmock_main.cc)
+ set(GMOCK_MAIN_LIBRARIES gmock_main)
+ endif()
+ target_link_libraries(gmock_main INTERFACE gmock Threads::Threads)
+
+endif()
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(GTest DEFAULT_MSG
+ GTEST_LIBRARIES
+ GTEST_MAIN_LIBRARIES
+ GTEST_INCLUDE_DIRS
+ GMOCK_LIBRARIES
+ GMOCK_MAIN_LIBRARIES
+ GMOCK_INCLUDE_DIRS)
diff --git a/cmake/modules/RootBuildOptions.cmake b/cmake/modules/RootBuildOptions.cmake
index 7886c5f3e9..01108a18c9 100644
--- a/cmake/modules/RootBuildOptions.cmake
+++ b/cmake/modules/RootBuildOptions.cmake
@@ -94,6 +94,7 @@ ROOT_BUILD_OPTION(builtin_ftgl OFF "Build bundled copy of FTGL")
ROOT_BUILD_OPTION(builtin_gl2ps OFF "Build bundled copy of gl2ps")
ROOT_BUILD_OPTION(builtin_glew OFF "Build bundled copy of GLEW")
ROOT_BUILD_OPTION(builtin_gsl OFF "Build GSL internally (requires network)")
+ROOT_BUILD_OPTION(builtin_gtest OFF "Build googletest internally (requires network)")
ROOT_BUILD_OPTION(builtin_llvm ON "Build bundled copy of LLVM")
ROOT_BUILD_OPTION(builtin_lz4 OFF "Build bundled copy of lz4")
ROOT_BUILD_OPTION(builtin_lzma OFF "Build bundled copy of lzma")
@@ -293,6 +294,7 @@ if(builtin_all)
set(builtin_gl2ps_defvalue ON)
set(builtin_glew_defvalue ON)
set(builtin_gsl_defvalue ON)
+ set(builtin_gtest_defvalue ON)
set(builtin_llvm_defvalue ON)
set(builtin_lz4_defvalue ON)
set(builtin_lzma_defvalue ON)
diff --git a/cmake/modules/RootMacros.cmake b/cmake/modules/RootMacros.cmake
index cb75c0b1da..38fd5d6baf 100644
--- a/cmake/modules/RootMacros.cmake
+++ b/cmake/modules/RootMacros.cmake
@@ -1671,7 +1671,7 @@ function(ROOT_ADD_TEST test)
set_property(TEST ${test} APPEND PROPERTY ENVIRONMENT ROOT_HIST=0)
- #- Handle TIMOUT and DEPENDS arguments
+ #- Handle TIMEOUT and DEPENDS arguments
if(ARG_TIMEOUT)
set_property(TEST ${test} PROPERTY TIMEOUT ${ARG_TIMEOUT})
endif()
diff --git a/cmake/modules/SearchInstalledSoftware.cmake b/cmake/modules/SearchInstalledSoftware.cmake
index fe40898d12..b6a3cc4c76 100644
--- a/cmake/modules/SearchInstalledSoftware.cmake
+++ b/cmake/modules/SearchInstalledSoftware.cmake
@@ -1860,15 +1860,6 @@ if (mpi)
endif()
endif()
-if(testing AND NO_CONNECTION)
- if(fail-on-missing)
- message(FATAL_ERROR "No internet connection. Please check your connection, or either disable the 'testing' option or the 'fail-on-missing' to automatically disable options requiring internet access")
- else()
- message(STATUS "No internet connection, disabling 'testing' option")
- set(testing OFF CACHE BOOL "Disabled because there is no internet connection" FORCE)
- endif()
-endif()
-
#---Check for ZeroMQ when building RooFit::MultiProcess--------------------------------------------
if (roofit_multiprocess)
@@ -1942,8 +1933,41 @@ if (roofit_multiprocess)
target_compile_definitions(cppzmq INTERFACE ZMQ_NO_EXPORT)
endif (roofit_multiprocess)
-#---Download googletest--------------------------------------------------------------
+#---Check for googletest---------------------------------------------------------------
if (testing)
+ if (NOT builtin_gtest)
+ if(fail-on-missing)
+ find_package(GTest REQUIRED)
+ else()
+ find_package(GTest)
+ if(NOT GTEST_FOUND)
+ if(NO_CONNECTION)
+ if(fail-on-missing)
+ message(FATAL_ERROR "No internet connection and GTest was not found. Please check your connection, or either disable the 'testing' option or the 'fail-on-missing' to automatically disable options requiring internet access")
+ else()
+ message(STATUS "GTest not found, and no internet connection. Disabing the 'testing' option.")
+ set(testing OFF CACHE BOOL "Disabled because testing requested and GTest not found (${builtin_gtest_description}) and there is no internet connection" FORCE)
+ endif()
+ else()
+ message(STATUS "GTest not found, switching ON 'builtin_gtest' option.")
+ set(builtin_gtest ON CACHE BOOL "Enabled because testing requested and GTest not found (${builtin_gtest_description})" FORCE)
+ endif()
+ endif()
+ endif()
+ else()
+ if(NO_CONNECTION)
+ if(fail-on-missing)
+ message(FATAL_ERROR "No internet connection. Please check your connection, or either disable the 'testing' option or the 'builtin_gtest' option or the 'fail-on-missing' option to automatically disable options requiring internet access")
+ else()
+ message(STATUS "No internet connection, disabling the 'testing' and 'builtin_gtest' options")
+ set(testing OFF CACHE BOOL "Disabled because there is no internet connection" FORCE)
+ set(builtin_gtest OFF CACHE BOOL "Disabled because there is no internet connection" FORCE)
+ endif()
+ endif()
+ endif()
+endif()
+
+if (builtin_gtest)
# FIXME: Remove our version of gtest in roottest. We can reuse this one.
# Add googletest
# http://stackoverflow.com/questions/9689183/cmake-googletest
--
2.35.1

43
root-uring-warn.patch Normal file
View file

@ -0,0 +1,43 @@
From 580fcf8fe95c45e337d222a7fd2338fdef2f52c5 Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Thu, 24 Mar 2022 16:18:57 +0100
Subject: [PATCH 1/2] Ignore warnings about uring failing during test
---
tree/ntuple/v7/test/ntuple_extended.cxx | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/tree/ntuple/v7/test/ntuple_extended.cxx b/tree/ntuple/v7/test/ntuple_extended.cxx
index 8e3998996c..98d65ef319 100644
--- a/tree/ntuple/v7/test/ntuple_extended.cxx
+++ b/tree/ntuple/v7/test/ntuple_extended.cxx
@@ -4,6 +4,8 @@
#include "TROOT.h"
+#include "ROOTUnitTestSupport.h"
+
TEST(RNTuple, RealWorld1)
{
ROOT::EnableImplicitMT();
@@ -111,6 +113,17 @@ TEST(RNTuple, RandomAccess)
#if !defined(_MSC_VER) || defined(R__ENABLE_BROKEN_WIN_TESTS)
TEST(RNTuple, LargeFile)
{
+ ROOTUnitTestSupport::CheckDiagsRAII raii;
+ raii.optionalDiag(kWarning, "RIoUring",
+ "io_uring is unexpectedly not available because:", false);
+ raii.optionalDiag(kWarning, "RRawFileUnix",
+ "io_uring setup failed, falling back to blocking I/O in ReadV", true);
+
+ raii.optionalDiag(kWarning, "ROOT.NTuple",
+ "The RNTuple file format will change. Do not store real data with this version of RNTuple!", true);
+ raii.optionalDiag(kWarning, "ROOT.NTuple",
+ "Pre-release format version: ", false);
+
ROOT::EnableImplicitMT();
FileRaii fileGuard("test_large_file.root");
--
2.35.1

View file

@ -0,0 +1,25 @@
From b781f954ac80cc227777992dcb4fbe1837c7e351 Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Tue, 29 Mar 2022 15:44:17 +0200
Subject: [PATCH] Use unique filenames in fillrandom.py and fillrandom.C
---
tutorials/hist/fillrandom.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tutorials/hist/fillrandom.py b/tutorials/hist/fillrandom.py
index d5eb3f6f38..4b1a94a37e 100644
--- a/tutorials/hist/fillrandom.py
+++ b/tutorials/hist/fillrandom.py
@@ -41,7 +41,7 @@ h1f.FillRandom("sqroot",10000)
h1f.Draw()
c1.Update()
-f = ROOT.TFile("fillrandom.root","RECREATE")
+f = ROOT.TFile("fillrandom-py.root","RECREATE")
form1.Write()
sqroot.Write()
h1f.Write()
--
2.35.1

View file

@ -1,135 +0,0 @@
From 44c501ac9fdb9049783d9738a9603eec572f52f0 Mon Sep 17 00:00:00 2001
From: Jonas Rembser <jonas.rembser@cern.ch>
Date: Wed, 26 Nov 2025 18:11:25 +0100
Subject: [PATCH] [vecops] Adaptive size of long RVec instances in RVec test
For the tests to make sense, some vectors need to be longer than the
maximum small vector size. This maximum size is compiler and
architecture dependent. For `RVec<int>` on ARM64 with gcc 14, the
small vector capacity turns out to be 60, which is larger than the
current test vector size of 18.
Therefore, the test is refactored to adapt the large vector size
automatically, according to the maximum small vector size.
---
math/vecops/test/vecops_rvec.cxx | 81 +++++++++++++++++++++++++-------
1 file changed, 63 insertions(+), 18 deletions(-)
diff --git a/math/vecops/test/vecops_rvec.cxx b/math/vecops/test/vecops_rvec.cxx
index 432c673a553..8cbe36ee6d8 100644
--- a/math/vecops/test/vecops_rvec.cxx
+++ b/math/vecops/test/vecops_rvec.cxx
@@ -1672,15 +1672,35 @@ TEST_P(VecOpsSwap, BothSmallVectors)
TEST_P(VecOpsSwap, BothRegularVectors)
{
- RVec<int> fixed_vreg1{1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3};
- RVec<int> fixed_vreg2{4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6};
- RVec<int> fixed_vreg3{7, 8, 9, 7, 8, 9, 7, 8, 9, 7, 8, 9, 7, 8, 9, 7, 8, 9, 7};
+ constexpr std::size_t smallVecSize = ROOT::Internal::VecOps::RVecInlineStorageSize<int>::value;
+
+ // The number of elemens in the large RVecs will be the smallest multiple of
+ // three that larger than smallVecSize.
+ constexpr int nCycle = 3;
+ constexpr std::size_t nElems = ((smallVecSize / nCycle) + 1) * nCycle;
+
+ RVec<int> fixed_vreg1(nElems);
+ RVec<int> fixed_vreg2(nElems);
+ RVec<int> fixed_vreg3(nElems + 1);
RVec<int> fixed_vmocksmall{0, 7};
- RVec<int> vreg1{1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3};
- RVec<int> vreg2{4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6};
- RVec<int> vreg3{7, 8, 9, 7, 8, 9, 7, 8, 9, 7, 8, 9, 7, 8, 9, 7, 8, 9, 7};
- RVec<int> vmocksmall{0, 7, 8, 9, 7, 8, 9, 7, 8, 9, 7, 8, 7, 8, 9, 7, 8, 9};
+ RVec<int> vreg1(nElems);
+ RVec<int> vreg2(nElems);
+ RVec<int> vreg3(nElems + 1);
+ RVec<int> vmocksmall(nElems + 1);
+
+ for (std::size_t i = 0; i < nElems; ++i) {
+ vreg1[i] = (i % nCycle) + 1;
+ vreg2[i] = vreg1[i] + nCycle;
+ vreg3[i] = vreg2[i] + nCycle;
+ fixed_vreg1[i] = vreg1[i];
+ fixed_vreg2[i] = vreg2[i];
+ fixed_vreg3[i] = vreg3[i];
+ vmocksmall[i + 1] = vreg3[i];
+ }
+ fixed_vreg3[nElems] = fixed_vreg3[0];
+ vreg3[nElems] = vreg3[0];
+
vmocksmall.erase(vmocksmall.begin() + 2, vmocksmall.end());
// vmocksmall is a regular vector of size 2
@@ -1798,11 +1818,22 @@ TEST_P(VecOpsSwap, BothAdoptingVectors)
// in cases where ROOT::VecOps::swap produces 1 regular and 1 adopting vector
TEST_P(VecOpsSwap, SmallRegularVectors)
{
+ constexpr std::size_t smallVecSize = ROOT::Internal::VecOps::RVecInlineStorageSize<int>::value;
+
+ // The number of elemens in the large RVecs will be the smallest multiple of
+ // three that larger than smallVecSize.
+ constexpr int nCycle = 3;
+ constexpr std::size_t nElems1 = ((smallVecSize / nCycle) + 1) * nCycle;
+ constexpr std::size_t nElems2 = nElems1 + nCycle; // some vectors should be larger than others
+
RVec<int> fixed_vsmall{1, 2, 3};
RVec<int> fixed_vreg1{4, 5, 6};
RVec<int> fixed_vreg2{7, 8};
RVec<int> fixed_vreg3{9, 10, 11, 12, 13, 14};
- RVec<int> fixed_vreg4{15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30};
+ RVec<int> fixed_vreg4(nElems1);
+ for (std::size_t i = 0; i < nElems1; ++i) {
+ fixed_vreg4[i] = i + 15;
+ }
// need multiple hard copies since after swap of a small and a regular,
// there is no fixed policy whether 2 regular vectors are produced or 1 small and 1 regular
@@ -1815,19 +1846,33 @@ TEST_P(VecOpsSwap, SmallRegularVectors)
RVec<int> vsmall7{1, 2, 3};
RVec<int> vsmall8{1, 2, 3};
- RVec<int> vreg1{4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6};
- vreg1.erase(vreg1.begin() + 3, vreg1.end()); // regular vector of size 3
- RVec<int> vreg10{4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6};
+ RVec<int> vreg1;
+ RVec<int> vreg10;
+ RVec<int> vreg2{7, 8};
+ RVec<int> vreg20{7, 8};
+ RVec<int> vreg3{9, 10, 11, 12, 13, 14};
+ RVec<int> vreg30{9, 10, 11, 12, 13, 14};
+ RVec<int> vreg4(nElems1);
+
+ for (std::size_t i = 0; i < nElems2; ++i) {
+ double val = (i % nCycle) + 4;
+ vreg1.push_back(val);
+ vreg10.push_back(vreg1.back());
+ vreg2.push_back(val);
+ vreg20.push_back(vreg2.back());
+ vreg3.push_back(val);
+ vreg30.push_back(vreg3.back());
+ }
+ for (std::size_t i = 0; i < nElems1; ++i) {
+ vreg4[i] = i + 15;
+ }
+
+ vreg1.erase(vreg1.begin() + 3, vreg1.end()); // regular vector of size 3
vreg10.erase(vreg10.begin() + 3, vreg10.end()); // regular vector of size 3
- RVec<int> vreg2{7, 8, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6};
- vreg2.erase(vreg2.begin() + 2, vreg2.end()); // regular vector of size 2
- RVec<int> vreg20{7, 8, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6};
+ vreg2.erase(vreg2.begin() + 2, vreg2.end()); // regular vector of size 2
vreg20.erase(vreg20.begin() + 2, vreg20.end()); // regular vector of size 2
- RVec<int> vreg3{9, 10, 11, 12, 13, 14, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6};
- vreg3.erase(vreg3.begin() + 6, vreg3.end()); // regular vector of size 6
- RVec<int> vreg30{9, 10, 11, 12, 13, 14, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6};
+ vreg3.erase(vreg3.begin() + 6, vreg3.end()); // regular vector of size 6
vreg30.erase(vreg30.begin() + 6, vreg30.end()); // regular vector of size 6
- RVec<int> vreg4{15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30};
// vreg4 is a regular vector that cannot "fit" to small vector
// verify that initially vectors are not small
--
2.52.0

2977
root.spec

File diff suppressed because it is too large Load diff

View file

@ -1,3 +1,2 @@
SHA512 (root-6.38.00.tar.xz) = 7c452b509e8171a0cbb7c102a3d4c07333fc8535f1b2c2ab0b9f7434604f098989a78bb71c41039dd41dbbd3438ea8703939826092f075d9d730b6b53c84ac55
SHA512 (root-testfiles.tar.xz) = 4bb7f8ca00b1427ba49f6428e9cfe5908a2ffdd2ce4134d3bc169a0629198352b5500fe0cf92c121d148e5af41f7016c96038a77794a4d37d94e6ec0a9d75670
SHA512 (clad-2.2.tar.gz) = 6f76d706a829901fc0fcdb38b5ddad6ea8ad9186ea48a4b6b585fc62974a2cda11b96a448c25daaba0586962d6428773e7ab751236c6afa72a91d12f30f2d05e
SHA512 (root-6.26.10.tar.xz) = 896727ce6da68871a52894a0a3c1b749fece9f08c8cefe62f5beac505710d579c41b84832a727a2ba39dab09e4456773c05b5b23a0fd859ace8062470653bbdb
SHA512 (root-testfiles.tar.xz) = 945aef1a0cf5af672d4ab84b0ac00b76118e93008ff72447658ee82d9e955a1540af3ff7126e701418872f1d91b92ee96d4985840a519036c42732023a13f00f