Compare commits

...
Sign in to create a new pull request.

3 commits

Author SHA1 Message Date
Mattias Ellert
daf8bdab01 Make DistRDF optional
Update the root-tmva-threads patch (upstream's version)
Exclude multiproc tests with random failures
2023-03-20 20:25:51 +01:00
Mattias Ellert
5b433dea92 Cleanup sources file 2022-10-22 19:06:42 +02:00
Mattias Ellert
7add16520d Update to 6.24.08
Drop patches accepted upstream:
  root-fix-ppc64le-compilation-with-gcc-10.patch
  root-ppc-codemodel.patch
  root-ppc-segfault-fix.patch
Drop the doxygen generated root-doc package (doxygen runs out of memory)
Backport python 3.11 fixes from upstream
Various test fixes - patches from the rawhide build
Don't use yuicompressor on Fedora (Java no longer available on ix86)
Backport locking of gInterpreterMutex in TClingClassInfo::IsEnum
2022-10-22 19:04:17 +02:00
27 changed files with 1516 additions and 844 deletions

View file

@ -0,0 +1,72 @@
From e77bcb0fdd0bc622213c33ad7094d28737fe51e7 Mon Sep 17 00:00:00 2001
From: Enric Tejedor Saavedra <enric.tejedor.saavedra@cern.ch>
Date: Wed, 28 Sep 2022 14:20:46 +0200
Subject: [PATCH] [PyROOT] Fixes for garbage collection in Python 3.11
According to the list of changes in Python 3.11:
https://docs.python.org/3.11/whatsnew/3.11.html
types defined with the Py_TPFLAGS_HAVE_GC flag set but with no
traverse function (PyTypeObject.tp_traverse) will cause an error.
The above is true for a few types that are defined in cppyy.
This commit removes the aforementioned flag from those type
definitions with no traverse function. It also sets the right
flags for the nonified object type; this fixes the teardown GC
crashes observed when the internal memory management of ROOT
was involved (e.g. the garbage collection of a tree that belongs
to a file).
---
.../pyroot/cppyy/CPyCppyy/src/CPPInstance.cxx | 1 -
.../cppyy/CPyCppyy/src/CustomPyTypes.cxx | 3 +--
.../cppyy/CPyCppyy/src/MemoryRegulator.cxx | 3 ++-
4 files changed, 3 insertions(+), 4 deletions(-)
diff --git a/bindings/pyroot/cppyy/CPyCppyy/src/CPPInstance.cxx b/bindings/pyroot/cppyy/CPyCppyy/src/CPPInstance.cxx
index 73fb8099b5dd..f2eea396af1b 100644
--- a/bindings/pyroot/cppyy/CPyCppyy/src/CPPInstance.cxx
+++ b/bindings/pyroot/cppyy/CPyCppyy/src/CPPInstance.cxx
@@ -764,7 +764,6 @@ PyTypeObject CPPInstance_Type = {
0, // tp_as_buffer
Py_TPFLAGS_DEFAULT |
Py_TPFLAGS_BASETYPE |
- Py_TPFLAGS_HAVE_GC |
Py_TPFLAGS_CHECKTYPES, // tp_flags
(char*)"cppyy object proxy (internal)", // tp_doc
0, // tp_traverse
diff --git a/bindings/pyroot/cppyy/CPyCppyy/src/CustomPyTypes.cxx b/bindings/pyroot/cppyy/CPyCppyy/src/CustomPyTypes.cxx
index 97ce06daa717..ed41b1637c67 100644
--- a/bindings/pyroot/cppyy/CPyCppyy/src/CustomPyTypes.cxx
+++ b/bindings/pyroot/cppyy/CPyCppyy/src/CustomPyTypes.cxx
@@ -78,8 +78,7 @@ PyTypeObject TypedefPointerToClass_Type = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
(ternaryfunc)tpc_call, // tp_call
0, 0, 0, 0,
- Py_TPFLAGS_DEFAULT |
- Py_TPFLAGS_HAVE_GC, // tp_flags
+ Py_TPFLAGS_DEFAULT, // tp_flags
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
#if PY_VERSION_HEX >= 0x02030000
, 0 // tp_del
diff --git a/bindings/pyroot/cppyy/CPyCppyy/src/MemoryRegulator.cxx b/bindings/pyroot/cppyy/CPyCppyy/src/MemoryRegulator.cxx
index f9e92f9c8c1b..510d65f88a8d 100644
--- a/bindings/pyroot/cppyy/CPyCppyy/src/MemoryRegulator.cxx
+++ b/bindings/pyroot/cppyy/CPyCppyy/src/MemoryRegulator.cxx
@@ -45,7 +45,7 @@ struct InitCPyCppyy_NoneType_t {
((PyVarObject&)CPyCppyy_NoneType).ob_size = 0;
CPyCppyy_NoneType.tp_name = const_cast<char*>("CPyCppyy_NoneType");
- CPyCppyy_NoneType.tp_flags = Py_TPFLAGS_HAVE_RICHCOMPARE | Py_TPFLAGS_HAVE_GC;
+ CPyCppyy_NoneType.tp_flags = Py_TPFLAGS_HAVE_RICHCOMPARE;
CPyCppyy_NoneType.tp_traverse = (traverseproc)0;
CPyCppyy_NoneType.tp_clear = (inquiry)0;
@@ -135,6 +135,7 @@ bool CPyCppyy::MemoryRegulator::RecursiveRemove(
CPyCppyy_NoneType.tp_traverse = Py_TYPE(pyobj)->tp_traverse;
CPyCppyy_NoneType.tp_clear = Py_TYPE(pyobj)->tp_clear;
CPyCppyy_NoneType.tp_free = Py_TYPE(pyobj)->tp_free;
+ CPyCppyy_NoneType.tp_flags = Py_TYPE(pyobj)->tp_flags;
} else if (CPyCppyy_NoneType.tp_traverse != Py_TYPE(pyobj)->tp_traverse) {
// TODO: SystemError?
std::cerr << "in CPyCppyy::MemoryRegulater, unexpected object of type: "

View file

@ -0,0 +1,30 @@
From 25fcf69c0662b09fbd9dc1c0446b7679ae020ed5 Mon Sep 17 00:00:00 2001
From: Vincenzo Eduardo Padulano <v.e.padulano@gmail.com>
Date: Sat, 8 Oct 2022 03:12:06 +0200
Subject: [PATCH] [core] Guard gInterpreterMutex in TClingClassInfo::IsEnum
Fixes https://github.com/root-project/root/issues/11515
This method leads to contention in some specific scenarios (see linked
issue).
Co-authored-by: Philippe Canal <pcanal@fnal.gov>
---
core/metacling/src/TClingClassInfo.cxx | 1 +
1 file changed, 1 insertion(+)
diff --git a/core/metacling/src/TClingClassInfo.cxx b/core/metacling/src/TClingClassInfo.cxx
index c0c061dfca..ce6e82d388 100644
--- a/core/metacling/src/TClingClassInfo.cxx
+++ b/core/metacling/src/TClingClassInfo.cxx
@@ -815,6 +815,7 @@ bool TClingClassInfo::IsBase(const char *name) const
bool TClingClassInfo::IsEnum(cling::Interpreter *interp, const char *name)
{
+ R__LOCKGUARD(gInterpreterMutex);
// Note: This is a static member function.
TClingClassInfo info(interp, name);
if (info.IsValid() && (info.Property() & kIsEnum)) {
--
2.37.3

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,50 @@
From c4175cb2fa0daf07ef03f460f2026c8bbc34b6a5 Mon Sep 17 00:00:00 2001
From: Enric Tejedor Saavedra <enric.tejedor.saavedra@cern.ch>
Date: Fri, 4 Mar 2022 11:32:29 +0100
Subject: [PATCH] [PyROOT] Py_TYPE is changed to an inline static function in
Py3.11
As mentioned in the Python docs:
https://docs.python.org/3.11/whatsnew/3.11.html
Already available upstream in:
https://github.com/wlav/CPyCppyy/commit/a8f41df0618f40ecc9a2a0b5a51fd12ddf2e6673
---
bindings/pyroot/cppyy/CPyCppyy/src/CPPConstructor.cxx | 2 +-
bindings/pyroot/cppyy/CPyCppyy/src/CPyCppyy.h | 7 +++++++
2 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/bindings/pyroot/cppyy/CPyCppyy/src/CPPConstructor.cxx b/bindings/pyroot/cppyy/CPyCppyy/src/CPPConstructor.cxx
index 0c564aff83..60b91d0b96 100644
--- a/bindings/pyroot/cppyy/CPyCppyy/src/CPPConstructor.cxx
+++ b/bindings/pyroot/cppyy/CPyCppyy/src/CPPConstructor.cxx
@@ -122,7 +122,7 @@ PyObject* CPyCppyy::CPPConstructor::Call(
if (pyclass) {
self->SetSmart((PyObject*)Py_TYPE(self));
Py_DECREF((PyObject*)Py_TYPE(self));
- Py_TYPE(self) = (PyTypeObject*)pyclass;
+ Py_SET_TYPE(self, (PyTypeObject*)pyclass);
}
}
diff --git a/bindings/pyroot/cppyy/CPyCppyy/src/CPyCppyy.h b/bindings/pyroot/cppyy/CPyCppyy/src/CPyCppyy.h
index 375ea1cb95..11221cd7ef 100644
--- a/bindings/pyroot/cppyy/CPyCppyy/src/CPyCppyy.h
+++ b/bindings/pyroot/cppyy/CPyCppyy/src/CPyCppyy.h
@@ -304,6 +304,13 @@ inline Py_ssize_t PyNumber_AsSsize_t(PyObject* obj, PyObject*) {
#define CPyCppyy_PyCFunction_Call PyCFunction_Call
#endif
+// Py_TYPE is changed to an inline static function in 3.11
+#if PY_VERSION_HEX < 0x030900A4 && !defined(Py_SET_TYPE)
+static inline
+void _Py_SET_TYPE(PyObject *ob, PyTypeObject *type) { ob->ob_type = type; }
+#define Py_SET_TYPE(ob, type) _Py_SET_TYPE((PyObject*)(ob), type)
+#endif
+
// C++ version of the cppyy API
#include "Cppyy.h"
--
2.37.3

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

@ -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

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
TQObjectTests.cxx
TExceptionHandlerTests.cxx
TStringTest.cxx
- LIBRARIES Core RIO ${extralibs})
+ LIBRARIES ${extralibs} RIO Core)
ROOT_ADD_GTEST(CoreErrorTests TErrorTests.cxx LIBRARIES Core)
--
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

View file

@ -0,0 +1,44 @@
From 0191a987b7583c2aa84b1293105db353fee40b1d Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Fri, 10 Mar 2023 20:49:02 +0100
Subject: [PATCH] Do not remove -Wp, before -D and -U when recording used
compiler flags
This breaks the pattern used when undefining and then defining a
variable in the same flag:
$ echo | g++ -Wp,-UVAR,-DVAR=1 -c -x c++ -
Here -Wp,-UVAR,-DVAR=1 will first undefine VAR and then define it to 1
If the -Wp, is dropped, this fails:
$ echo | g++ -UVAR,-DVAR=1 -c -x c++ -
<command-line>: warning: extra tokens at end of #undef directive
Now it will only undefine VAR, but not defin it. I.e.
insted of
you get
which explains the rather cryptic warning about extra token after #undef.
---
cmake/modules/RootConfiguration.cmake | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/cmake/modules/RootConfiguration.cmake b/cmake/modules/RootConfiguration.cmake
index 3d1ae9be53..042b43f039 100644
--- a/cmake/modules/RootConfiguration.cmake
+++ b/cmake/modules/RootConfiguration.cmake
@@ -729,7 +729,7 @@ if (cxxmodules)
endif()
string(REGEX REPLACE "(^|[ ]*)-W[^ ]*" "" __fflags "${CMAKE_Fortran_FLAGS}")
-string(REGEX MATCHALL "-(D|U)[^ ]*" __defs "${CMAKE_CXX_FLAGS}")
+string(REGEX MATCHALL "(-Wp,)?-(D|U)[^ ]*" __defs "${CMAKE_CXX_FLAGS}")
set(ROOT_COMPILER_FLAG_HINTS "#
set(ROOT_DEFINITIONS \"${__defs}\")
set(ROOT_CXX_FLAGS \"${__cxxflags}\")
--
2.39.2

View file

@ -1,21 +0,0 @@
diff -ur root-6.20.02.orig/documentation/doxygen/filter.cxx root-6.20.02/documentation/doxygen/filter.cxx
--- root-6.20.02.orig/documentation/doxygen/filter.cxx 2020-03-15 16:21:25.000000000 +0100
+++ root-6.20.02/documentation/doxygen/filter.cxx 2020-03-15 20:05:59.047270429 +0100
@@ -378,16 +378,7 @@
// notebook found
if (gLineString.find("\\notebook") != string::npos) {
- ExecuteCommand(StringFormat("%s converttonotebook.py %s %s/notebooks/",
- gPythonExec.c_str(),
- gFileName.c_str(), gOutDir.c_str()));
- if (gPython){
- gLineString = "## ";
- }
- else{
- gLineString = "/// ";
- }
- gLineString += StringFormat( "\\htmlonly <a href=\"https://nbviewer.jupyter.org/url/root.cern/doc/master/notebooks/%s.nbconvert.ipynb\" target=\"_blank\"><img src= notebook.gif alt=\"View in nbviewer\" style=\"height:1em\" ></a> <a href=\"https://cern.ch/swanserver/cgi-bin/go?projurl=https://root.cern/doc/master/notebooks/%s.nbconvert.ipynb\" target=\"_blank\"><img src=\"https://swanserver.web.cern.ch/swanserver/images/badge_swan_white_150.png\" alt=\"Open in SWAN\" style=\"height:1em\" ></a> \\endhtmlonly \n", gMacroName.c_str() , gMacroName.c_str());
+ gLineString = "";
}
// \macro_output found

View file

@ -1,44 +0,0 @@
diff -ur root-6.24.06.orig/tutorials/multicore/mp201_parallelHistoFill.C root-6.24.06/tutorials/multicore/mp201_parallelHistoFill.C
--- root-6.24.06.orig/tutorials/multicore/mp201_parallelHistoFill.C 2021-09-01 10:08:19.000000000 +0200
+++ root-6.24.06/tutorials/multicore/mp201_parallelHistoFill.C 2021-11-05 18:09:46.916687882 +0100
@@ -5,7 +5,6 @@
/// This tutorial shows how a histogram can be filled in parallel
/// with a multiprocess approach.
///
-/// \macro_image
/// \macro_code
///
/// \date January 2016
diff -ur root-6.24.06.orig/tutorials/multicore/mt201_parallelHistoFill.C root-6.24.06/tutorials/multicore/mt201_parallelHistoFill.C
--- root-6.24.06.orig/tutorials/multicore/mt201_parallelHistoFill.C 2021-09-01 10:08:19.000000000 +0200
+++ root-6.24.06/tutorials/multicore/mt201_parallelHistoFill.C 2021-12-06 18:19:08.498933048 +0100
@@ -10,7 +10,6 @@
/// method. This method is not thread safe: in presence of ROOT histograms, the
/// system will not crash but the result is not uniquely defined.
///
-/// \macro_image
/// \macro_code
///
/// \date January 2016
diff -ur root-6.24.06.orig/tutorials/multicore/mt304_fillHistos.C root-6.24.06/tutorials/multicore/mt304_fillHistos.C
--- root-6.24.06.orig/tutorials/multicore/mt304_fillHistos.C 2021-09-01 10:08:19.000000000 +0200
+++ root-6.24.06/tutorials/multicore/mt304_fillHistos.C 2021-12-06 19:54:20.634373797 +0100
@@ -5,7 +5,6 @@
/// Illustrates use of power-of-two autobin algorithm
///
/// \macro_code
-/// \macro_image
///
/// \date November 2017
/// \author Gerardo Ganis
diff -ur root-6.24.06.orig/tutorials/multicore/mtbb201_parallelHistoFill.C root-6.24.06/tutorials/multicore/mtbb201_parallelHistoFill.C
--- root-6.24.06.orig/tutorials/multicore/mtbb201_parallelHistoFill.C 2021-09-01 10:08:19.000000000 +0200
+++ root-6.24.06/tutorials/multicore/mtbb201_parallelHistoFill.C 2021-12-06 19:54:22.174377227 +0100
@@ -5,7 +5,6 @@
/// This tutorial shows how a histogram can be filled in parallel
/// with a multiprocess approach.
///
-/// \macro_image
/// \macro_code
///
/// \date January 2016

View file

@ -1,275 +0,0 @@
diff -ur root-6.24.02.orig/tutorials/dataframe/df002_dataModel.C root-6.24.02/tutorials/dataframe/df002_dataModel.C
--- root-6.24.02.orig/tutorials/dataframe/df002_dataModel.C 2021-06-28 11:17:14.000000000 +0200
+++ root-6.24.02/tutorials/dataframe/df002_dataModel.C 2021-08-11 03:55:11.021149115 +0200
@@ -7,7 +7,6 @@
/// complex than flat ntuples with RDataFrame
///
/// \macro_code
-/// \macro_image
///
/// \date December 2016
/// \author Danilo Piparo (CERN)
diff -ur root-6.24.02.orig/tutorials/dataframe/df002_dataModel.py root-6.24.02/tutorials/dataframe/df002_dataModel.py
--- root-6.24.02.orig/tutorials/dataframe/df002_dataModel.py 2021-06-28 11:17:14.000000000 +0200
+++ root-6.24.02/tutorials/dataframe/df002_dataModel.py 2021-08-11 03:55:11.084149272 +0200
@@ -7,7 +7,6 @@
## complex than flat ntuples with RDataFrame
##
## \macro_code
-## \macro_image
##
## \date May 2017
## \author Danilo Piparo (CERN)
diff -ur root-6.24.02.orig/tutorials/dataframe/df003_profiles.C root-6.24.02/tutorials/dataframe/df003_profiles.C
--- root-6.24.02.orig/tutorials/dataframe/df003_profiles.C 2021-06-28 11:17:14.000000000 +0200
+++ root-6.24.02/tutorials/dataframe/df003_profiles.C 2021-08-11 03:55:11.148149432 +0200
@@ -7,7 +7,6 @@
/// RDataFrame. See the documentation of TProfile and TProfile2D to better
/// understand the analogy of this code with the example one.
///
-/// \macro_image
/// \macro_code
///
/// \date February 2017
diff -ur root-6.24.02.orig/tutorials/dataframe/df003_profiles.py root-6.24.02/tutorials/dataframe/df003_profiles.py
--- root-6.24.02.orig/tutorials/dataframe/df003_profiles.py 2021-06-28 11:17:14.000000000 +0200
+++ root-6.24.02/tutorials/dataframe/df003_profiles.py 2021-08-11 03:55:11.211149590 +0200
@@ -8,7 +8,6 @@
## understand the analogy of this code with the example one.
##
## \macro_code
-## \macro_image
##
## \date February 2017
## \author Danilo Piparo (CERN)
diff -ur root-6.24.02.orig/tutorials/dataframe/df005_fillAnyObject.C root-6.24.02/tutorials/dataframe/df005_fillAnyObject.C
--- root-6.24.02.orig/tutorials/dataframe/df005_fillAnyObject.C 2021-06-28 11:17:14.000000000 +0200
+++ root-6.24.02/tutorials/dataframe/df005_fillAnyObject.C 2021-08-11 03:55:11.275149750 +0200
@@ -7,7 +7,6 @@
/// `Fill` method.
///
/// \macro_code
-/// \macro_image
///
/// \date March 2017
/// \author Danilo Piparo (CERN)
diff -ur root-6.24.02.orig/tutorials/dataframe/df007_snapshot.C root-6.24.02/tutorials/dataframe/df007_snapshot.C
--- root-6.24.02.orig/tutorials/dataframe/df007_snapshot.C 2021-06-28 11:17:14.000000000 +0200
+++ root-6.24.02/tutorials/dataframe/df007_snapshot.C 2021-08-11 03:55:11.338149907 +0200
@@ -5,7 +5,6 @@
///
/// This tutorial shows how to write out datasets in ROOT format using the RDataFrame
///
-/// \macro_image
/// \macro_code
///
/// \date April 2017
diff -ur root-6.24.02.orig/tutorials/dataframe/df007_snapshot.py root-6.24.02/tutorials/dataframe/df007_snapshot.py
--- root-6.24.02.orig/tutorials/dataframe/df007_snapshot.py 2021-06-28 11:17:14.000000000 +0200
+++ root-6.24.02/tutorials/dataframe/df007_snapshot.py 2021-08-11 03:55:11.402150067 +0200
@@ -5,7 +5,6 @@
##
## This tutorial shows how to write out datasets in ROOT format using the RDataFrame
##
-## \macro_image
## \macro_code
##
## \date April 2017
diff -ur root-6.24.02.orig/tutorials/dataframe/df014_CSVDataSource.C root-6.24.02/tutorials/dataframe/df014_CSVDataSource.C
--- root-6.24.02.orig/tutorials/dataframe/df014_CSVDataSource.C 2021-06-28 11:17:14.000000000 +0200
+++ root-6.24.02/tutorials/dataframe/df014_CSVDataSource.C 2021-08-11 03:55:11.465150225 +0200
@@ -14,7 +14,6 @@
/// DOI: [10.7483/OPENDATA.CMS.CB8H.MFFA](http://opendata.cern.ch/record/700).
///
/// \macro_code
-/// \macro_image
///
/// \date October 2017
/// \author Enric Tejedor (CERN)
diff -ur root-6.24.02.orig/tutorials/dataframe/df014_CSVDataSource.py root-6.24.02/tutorials/dataframe/df014_CSVDataSource.py
--- root-6.24.02.orig/tutorials/dataframe/df014_CSVDataSource.py 2021-06-28 11:17:14.000000000 +0200
+++ root-6.24.02/tutorials/dataframe/df014_CSVDataSource.py 2021-08-11 03:55:11.529150385 +0200
@@ -14,7 +14,6 @@
## DOI: [10.7483/OPENDATA.CMS.CB8H.MFFA](http://opendata.cern.ch/record/700).
##
## \macro_code
-## \macro_image
##
## \date October 2017
## \author Enric Tejedor (CERN)
diff -ur root-6.24.02.orig/tutorials/dataframe/df015_LazyDataSource.C root-6.24.02/tutorials/dataframe/df015_LazyDataSource.C
--- root-6.24.02.orig/tutorials/dataframe/df015_LazyDataSource.C 2021-06-28 11:17:14.000000000 +0200
+++ root-6.24.02/tutorials/dataframe/df015_LazyDataSource.C 2021-08-11 03:55:11.593150545 +0200
@@ -14,7 +14,6 @@
/// From the ROOT website: https://root.cern.ch/files/tutorials/tdf014_CsvDataSource_MuRun2010B.csv
///
/// \macro_code
-/// \macro_image
///
/// \date February 2018
/// \author Danilo Piparo (CERN)
diff -ur root-6.24.02.orig/tutorials/dataframe/df016_vecOps.C root-6.24.02/tutorials/dataframe/df016_vecOps.C
--- root-6.24.02.orig/tutorials/dataframe/df016_vecOps.C 2021-06-28 11:17:14.000000000 +0200
+++ root-6.24.02/tutorials/dataframe/df016_vecOps.C 2021-08-11 03:55:11.656150702 +0200
@@ -7,7 +7,6 @@
/// stored in datasets, a situation very common in HEP data analysis.
///
/// \macro_code
-/// \macro_image
///
/// \date February 2018
/// \author Danilo Piparo (CERN)
diff -ur root-6.24.02.orig/tutorials/dataframe/df016_vecOps.py root-6.24.02/tutorials/dataframe/df016_vecOps.py
--- root-6.24.02.orig/tutorials/dataframe/df016_vecOps.py 2021-06-28 11:17:14.000000000 +0200
+++ root-6.24.02/tutorials/dataframe/df016_vecOps.py 2021-08-11 03:55:11.720150862 +0200
@@ -6,7 +6,6 @@
## This tutorial shows the potential of the VecOps approach for treating collections
## stored in datasets, a situation very common in HEP data analysis.
##
-## \macro_image
## \macro_code
##
## \date February 2018
diff -ur root-6.24.02.orig/tutorials/dataframe/df017_vecOpsHEP.C root-6.24.02/tutorials/dataframe/df017_vecOpsHEP.C
--- root-6.24.02.orig/tutorials/dataframe/df017_vecOpsHEP.C 2021-06-28 11:17:14.000000000 +0200
+++ root-6.24.02/tutorials/dataframe/df017_vecOpsHEP.C 2021-08-11 03:55:11.783151020 +0200
@@ -11,7 +11,6 @@
/// greater than 100.
///
/// \macro_code
-/// \macro_image
///
/// \date March 2018
/// \authors Danilo Piparo (CERN), Andre Vieira Silva
diff -ur root-6.24.02.orig/tutorials/dataframe/df017_vecOpsHEP.py root-6.24.02/tutorials/dataframe/df017_vecOpsHEP.py
--- root-6.24.02.orig/tutorials/dataframe/df017_vecOpsHEP.py 2021-06-28 11:17:14.000000000 +0200
+++ root-6.24.02/tutorials/dataframe/df017_vecOpsHEP.py 2021-08-11 03:55:11.846151177 +0200
@@ -7,7 +7,6 @@
## model typically adopted in HEP for analysis.
##
## \macro_code
-## \macro_image
##
## \date March 2018
## \authors Danilo Piparo (CERN), Andre Vieira Silva
diff -ur root-6.24.02.orig/tutorials/dataframe/df019_Cache.C root-6.24.02/tutorials/dataframe/df019_Cache.C
--- root-6.24.02.orig/tutorials/dataframe/df019_Cache.C 2021-06-28 11:17:14.000000000 +0200
+++ root-6.24.02/tutorials/dataframe/df019_Cache.C 2021-08-11 03:55:11.910151337 +0200
@@ -18,7 +18,6 @@
/// only when the event loop is triggered on it.
///
/// \macro_code
-/// \macro_image
///
/// \date June 2018
/// \author Danilo Piparo (CERN)
diff -ur root-6.24.02.orig/tutorials/dataframe/df019_Cache.py root-6.24.02/tutorials/dataframe/df019_Cache.py
--- root-6.24.02.orig/tutorials/dataframe/df019_Cache.py 2021-06-28 11:17:14.000000000 +0200
+++ root-6.24.02/tutorials/dataframe/df019_Cache.py 2021-08-11 03:55:11.973151495 +0200
@@ -18,7 +18,6 @@
## only when the event loop is triggered on it.
##
## \macro_code
-## \macro_image
##
## \date June 2018
## \author Danilo Piparo (CERN)
diff -ur root-6.24.02.orig/tutorials/dataframe/df021_createTGraph.C root-6.24.02/tutorials/dataframe/df021_createTGraph.C
--- root-6.24.02.orig/tutorials/dataframe/df021_createTGraph.C 2021-06-28 11:17:14.000000000 +0200
+++ root-6.24.02/tutorials/dataframe/df021_createTGraph.C 2021-08-11 03:55:12.037151655 +0200
@@ -4,7 +4,6 @@
/// Fill a TGraph using RDataFrame.
///
/// \macro_code
-/// \macro_image
///
/// \date July 2018
/// \authors Enrico Guiraud, Danilo Piparo (CERN), Massimo Tumolo (Politecnico di Torino)
diff -ur root-6.24.02.orig/tutorials/dataframe/df021_createTGraph.py root-6.24.02/tutorials/dataframe/df021_createTGraph.py
--- root-6.24.02.orig/tutorials/dataframe/df021_createTGraph.py 2021-06-28 11:17:14.000000000 +0200
+++ root-6.24.02/tutorials/dataframe/df021_createTGraph.py 2021-08-11 03:55:12.100151813 +0200
@@ -4,7 +4,6 @@
## Fill a TGraph using RDataFrame.
##
## \macro_code
-## \macro_image
##
## \date July 2018
## \authors Enrico Guiraud, Danilo Piparo (CERN), Massimo Tumolo (Politecnico di Torino)
diff -ur root-6.24.02.orig/tutorials/tmva/tmva003_RReader.C root-6.24.02/tutorials/tmva/tmva003_RReader.C
--- root-6.24.02.orig/tutorials/tmva/tmva003_RReader.C 2021-06-28 11:17:14.000000000 +0200
+++ root-6.24.02/tutorials/tmva/tmva003_RReader.C 2021-08-11 04:16:33.833359421 +0200
@@ -5,7 +5,6 @@
/// TMVA XML files.
///
/// \macro_code
-/// \macro_output
///
/// \date July 2019
/// \author Stefan Wunsch
diff -ur root-6.24.02.orig/tutorials/tmva/tmva103_Application.C root-6.24.02/tutorials/tmva/tmva103_Application.C
--- root-6.24.02.orig/tutorials/tmva/tmva103_Application.C 2021-06-28 11:17:14.000000000 +0200
+++ root-6.24.02/tutorials/tmva/tmva103_Application.C 2021-08-11 21:56:49.387390340 +0200
@@ -6,7 +6,6 @@
/// event-by-event inference, batch inference and pipelines with RDataFrame.
///
/// \macro_code
-/// \macro_output
///
/// \date December 2018
/// \author Stefan Wunsch
diff -ur root-6.24.02.orig/tutorials/tmva/TMVA_CNN_Classification.C root-6.24.02/tutorials/tmva/TMVA_CNN_Classification.C
--- root-6.24.02.orig/tutorials/tmva/TMVA_CNN_Classification.C 2021-06-28 11:17:14.000000000 +0200
+++ root-6.24.02/tutorials/tmva/TMVA_CNN_Classification.C 2021-08-10 15:21:03.306171069 +0200
@@ -6,7 +6,6 @@
/// This is an example of using a CNN in TMVA. We do classification using a toy image data set
/// that is generated when running the example macro
///
-/// \macro_image
/// \macro_output
/// \macro_code
///
diff -ur root-6.24.02.orig/tutorials/tmva/TMVA_Higgs_Classification.C root-6.24.02/tutorials/tmva/TMVA_Higgs_Classification.C
--- root-6.24.02.orig/tutorials/tmva/TMVA_Higgs_Classification.C 2021-06-28 11:17:14.000000000 +0200
+++ root-6.24.02/tutorials/tmva/TMVA_Higgs_Classification.C 2021-08-10 15:21:33.974251559 +0200
@@ -7,7 +7,6 @@
/// used in this paper: Baldi, P., P. Sadowski, and D. Whiteson. “Searching for Exotic Particles in High-energy Physics
/// with Deep Learning.” Nature Communications 5 (July 2, 2014).
///
-/// \macro_image
/// \macro_output
/// \macro_code
///
diff -ur root-6.24.02.orig/tutorials/tmva/TMVA_RNN_Classification.C root-6.24.02/tutorials/tmva/TMVA_RNN_Classification.C
--- root-6.24.02.orig/tutorials/tmva/TMVA_RNN_Classification.C 2021-06-28 11:17:14.000000000 +0200
+++ root-6.24.02/tutorials/tmva/TMVA_RNN_Classification.C 2021-08-10 15:21:15.657203486 +0200
@@ -6,7 +6,6 @@
/// This is an example of using a RNN in TMVA. We do classification using a toy time dependent data set
/// that is generated when running this example macro
///
-/// \macro_image
/// \macro_output
/// \macro_code
///
diff -ur root-6.24.02.orig/tutorials/v7/line.cxx root-6.24.02/tutorials/v7/line.cxx
--- root-6.24.02.orig/tutorials/v7/line.cxx 2021-06-28 11:17:14.000000000 +0200
+++ root-6.24.02/tutorials/v7/line.cxx 2021-08-16 14:25:32.528867781 +0200
@@ -6,7 +6,6 @@
/// "normal" coordinates' system and changing the line color linearly from black
/// to red.
///
-/// \macro_image (line.png)
/// \macro_code
///
/// \date 2018-03-18
diff -ur root-6.24.02.orig/tutorials/v7/ntuple/ntpl005_introspection.C root-6.24.02/tutorials/v7/ntuple/ntpl005_introspection.C
--- root-6.24.02.orig/tutorials/v7/ntuple/ntpl005_introspection.C 2021-06-28 11:17:14.000000000 +0200
+++ root-6.24.02/tutorials/v7/ntuple/ntpl005_introspection.C 2021-08-10 15:22:06.504336763 +0200
@@ -4,7 +4,6 @@
/// Write and read an RNTuple from a user-defined class. Adapted from tv3.C
/// Illustrates various RNTuple introspection methods.
///
-/// \macro_image
/// \macro_code
///
/// \date April 2020

View file

@ -1,29 +0,0 @@
From 5b8e969ca045aa238c685009e0aa48d74cbdbf22 Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Fri, 13 Mar 2020 17:09:03 +0100
Subject: [PATCH 1/2] Fix ppc64le compilation with gcc 10
Reapply fix lost in the LLVM 9 upgrade. This fix is in LLVM 10.
Backported from llvm upstream
https://reviews.llvm.org/D74129
---
interpreter/llvm/src/tools/clang/lib/Lex/Lexer.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/interpreter/llvm/src/tools/clang/lib/Lex/Lexer.cpp b/interpreter/llvm/src/tools/clang/lib/Lex/Lexer.cpp
index c8ed42d266..16bb00d2e9 100644
--- a/interpreter/llvm/src/tools/clang/lib/Lex/Lexer.cpp
+++ b/interpreter/llvm/src/tools/clang/lib/Lex/Lexer.cpp
@@ -2546,7 +2546,7 @@ bool Lexer::SkipBlockComment(Token &Result, const char *CurPtr,
'/', '/', '/', '/', '/', '/', '/', '/'
};
while (CurPtr+16 <= BufferEnd &&
- !vec_any_eq(*(const vector unsigned char*)CurPtr, Slashes))
+ !vec_any_eq(*(const __vector unsigned char*)CurPtr, Slashes))
CurPtr += 16;
#else
// Scan for '/' quickly. Many block comments are very large.
--
2.30.2

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

6
root-get-src.sh Executable file
View file

@ -0,0 +1,6 @@
#!/bin/sh
VERSION=$1
wget -N https://root.cern/download/root_v${VERSION}.source.tar.gz
tar -z -x -f root_v${VERSION}.source.tar.gz
find root-${VERSION}/fonts -type f -a '!' -name 'STIX*' -exec rm {} ';'
tar -J -c --group root --owner root -f root-${VERSION}.tar.xz root-${VERSION}

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,17 @@
--- root-6.24.08/bindings/pyroot/pythonizations/python/ROOT/_facade.py.orig 2022-09-29 15:03:06.000000000 +0200
+++ root-6.24.08/bindings/pyroot/pythonizations/python/ROOT/_facade.py 2023-03-19 09:40:08.823564686 +0100
@@ -290,8 +290,12 @@
from libROOTPythonizations import MakeNumpyDataFrame
ns.MakeNumpyDataFrame = MakeNumpyDataFrame
- # Inject Experimental.Distributed package into namespace RDF
- ns.Experimental = _create_rdf_experimental_distributed_module(ns)
+ try:
+ # Inject Experimental.Distributed package into namespace RDF if available
+ ns.Experimental = _create_rdf_experimental_distributed_module(ns)
+ except ImportError:
+ pass
+
except:
raise Exception('Failed to pythonize the namespace RDF')
del type(self).RDF

View file

@ -1,36 +0,0 @@
From 774ab9358d852e2c004564183de4a60eaaa5ac98 Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Fri, 23 Apr 2021 21:40:14 +0200
Subject: [PATCH 2/2] Actually request the use of the large code model for
ppc64/ppc64le
Instead of erroring out with an assert.
---
interpreter/cling/lib/Interpreter/IncrementalExecutor.cpp | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/interpreter/cling/lib/Interpreter/IncrementalExecutor.cpp b/interpreter/cling/lib/Interpreter/IncrementalExecutor.cpp
index 46771aa8c0..93a48f31f3 100644
--- a/interpreter/cling/lib/Interpreter/IncrementalExecutor.cpp
+++ b/interpreter/cling/lib/Interpreter/IncrementalExecutor.cpp
@@ -73,14 +73,14 @@ CreateHostTargetMachine(const clang::CompilerInstance& CI) {
JTMB->getOptions().EmulatedTLS = false;
#endif // _WIN32
- std::unique_ptr<TargetMachine> TM = cantFail(JTMB->createTargetMachine());
-
#if defined(__powerpc64__) || defined(__PPC64__)
// We have to use large code model for PowerPC64 because TOC and text sections
// can be more than 2GB apart.
- assert(TM->getCodeModel() >= CodeModel::Large);
+ JTMB->setCodeModel(CodeModel::Large);
#endif
+ std::unique_ptr<TargetMachine> TM = cantFail(JTMB->createTargetMachine());
+
// Forcefully disable GlobalISel, it might be enabled on AArch64 without
// optimizations. In tests on an Apple M1 after the upgrade to LLVM 9, this
// new instruction selection framework emits branches / calls that expect all
--
2.30.2

View file

@ -1,49 +0,0 @@
From 55ae047b70e927de5c84cfa5ad42905cbd58d499 Mon Sep 17 00:00:00 2001
From: Vassil Vassilev <v.g.vassilev@gmail.com>
Date: Sat, 4 Dec 2021 00:06:19 +0000
Subject: [PATCH] [llvm] Restore the ppc64le support that we lost in llvm8.
This patch is backported from https://reviews.llvm.org/D94183
For more discussion see https://github.com/numba/numba/issues/4026
Fixes root-project/root#8072 and root-project/root#9297
---
.../src/lib/Target/PowerPC/PPCISelLowering.cpp | 17 +++++++++--------
1 file changed, 9 insertions(+), 8 deletions(-)
diff --git a/interpreter/llvm/src/lib/Target/PowerPC/PPCISelLowering.cpp b/interpreter/llvm/src/lib/Target/PowerPC/PPCISelLowering.cpp
index 24d50074860d..a922b40aa902 100644
--- a/interpreter/llvm/src/lib/Target/PowerPC/PPCISelLowering.cpp
+++ b/interpreter/llvm/src/lib/Target/PowerPC/PPCISelLowering.cpp
@@ -4463,7 +4463,15 @@ callsShareTOCBase(const Function *Caller, SDValue Callee,
if (!G)
return false;
- const GlobalValue *GV = G->getGlobal();
+ const GlobalValue *GV = G->getGlobal();
+
+ // If the GV is not a strong definition then we need to assume it can be
+ // replaced by another function at link time. The function that replaces
+ // it may not share the same TOC as the caller since the callee may be
+ // replaced by a PC Relative version of the same function.
+ if (!GV->isStrongDefinitionForLinker())
+ return false;
+
// The medium and large code models are expected to provide a sufficiently
// large TOC to provide all data addressing needs of a module with a
// single TOC. Since each module will be addressed with a single TOC then we
@@ -4472,13 +4480,6 @@ callsShareTOCBase(const Function *Caller, SDValue Callee,
CodeModel::Large == TM.getCodeModel())
return TM.shouldAssumeDSOLocal(*Caller->getParent(), GV);
- // Otherwise we need to ensure callee and caller are in the same section,
- // since the linker may allocate multiple TOCs, and we don't know which
- // sections will belong to the same TOC base.
-
- if (!GV->isStrongDefinitionForLinker())
- return false;
-
// Any explicitly-specified sections and section prefixes must also match.
// Also, if we're using -ffunction-sections, then each function is always in
// a different section (the same is true for COMDAT functions).

View file

@ -0,0 +1,63 @@
From 08ab7e03061e551647d707637957252d121f9c39 Mon Sep 17 00:00:00 2001
From: Jonas Rembser <jonas.rembser@cern.ch>
Date: Tue, 21 Sep 2021 15:15:17 +0200
Subject: [PATCH] [cmake] Protect against empty `COMPILE_DEFINITIONS` in
rootcint command
In the `rootcint` command defined in `RootMacros.cmake`, the
`COMPILE_DEFINITIONS` from the target are forwarded as compiler flags.
The `COMPILE_DEFINITIONS` are stored in the `module_defs` variable with
a generator expression:
```
set(module_defs $<TARGET_PROPERTY:${ARG_MODULE},COMPILE_DEFINITIONS>)
```
Then, the definitions are added to the rootcint command with this
expression:
```
"$<$<BOOL:${module_defs}>:-D$<JOIN:${module_defs},;-D>>"
```
This code was almost copied exactly from the CMake documentation
example:
https://cmake.org/cmake/help/latest/manual/cmake-generator-expressions.7.html
In particular, the `BOOL` check makes sure that the if the target
property is empty, we will not get a bare `-D` with nothing after it,
corrupting the rootcint command.
However, there is no protextion against the case where the
`COMPILE_DEFINITIONS` target property is not empty, but its elements are
empty strings! This happened to me in my recent build.
Instead of trying to figure out where the empty strings are added to the
`COMPILE_DEFINITIONS`, it is better to also protect against empty target
property elements in the CMake generator expressions, which is
implemented in this commit.
---
cmake/modules/RootMacros.cmake | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/cmake/modules/RootMacros.cmake b/cmake/modules/RootMacros.cmake
index c52c23d29a..c62ffc2152 100644
--- a/cmake/modules/RootMacros.cmake
+++ b/cmake/modules/RootMacros.cmake
@@ -628,7 +628,10 @@ function(ROOT_GENERATE_DICTIONARY dictionary)
else()
set(module_incs $<TARGET_PROPERTY:${ARG_MODULE},INCLUDE_DIRECTORIES>)
endif()
- set(module_defs $<TARGET_PROPERTY:${ARG_MODULE},COMPILE_DEFINITIONS>)
+ # The COMPILE_DEFINITIONS list might contain empty elements. These are
+ # removed with the FILTER generator expression, excluding elements that
+ # match the ^$ regexp (only matches empty strings).
+ set(module_defs "$<FILTER:$<TARGET_PROPERTY:${ARG_MODULE},COMPILE_DEFINITIONS>,EXCLUDE,^$>")
endif()
endif()
--
2.37.2

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

@ -0,0 +1,48 @@
From bfa7b7e59c3bcee4d6a5501c800b49334af326e5 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
---
tmva/tmva/test/DNN/CMakeLists.txt | 2 +-
tutorials/CMakeLists.txt | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
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/tutorials/CMakeLists.txt b/tutorials/CMakeLists.txt
index 520d682d2d..a846e7552f 100644
--- a/tutorials/CMakeLists.txt
+++ b/tutorials/CMakeLists.txt
@@ -479,7 +479,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()
@@ -513,7 +513,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.36.1

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

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

@ -0,0 +1,223 @@
diff --git a/tutorials/tmva/TMVA_CNN_Classification.C b/tutorials/tmva/TMVA_CNN_Classification.C
index 838581a925..db5af784d4 100644
--- a/tutorials/tmva/TMVA_CNN_Classification.C
+++ b/tutorials/tmva/TMVA_CNN_Classification.C
@@ -23,7 +23,7 @@
/// we create a signal and background 2D histograms from 2d gaussians
/// with a location (means in X and Y) different for each event
/// The difference between signal and background is in the gaussian width.
-/// The width for the bakground gaussian is slightly larger than the signal width by few % values
+/// The width for the background gaussian is slightly larger than the signal width by few % values
///
///
void MakeImagesTree(int n, int nh, int nw)
@@ -48,7 +48,7 @@ void MakeImagesTree(int n, int nh, int nw)
auto f1 = new TF2("f1", "xygaus");
auto f2 = new TF2("f2", "xygaus");
TTree sgn("sig_tree", "signal_tree");
- TTree bkg("bkg_tree", "bakground_tree");
+ TTree bkg("bkg_tree", "background_tree");
TFile f(fileOutName, "RECREATE");
@@ -107,7 +107,16 @@ void MakeImagesTree(int n, int nh, int nw)
f.Close();
}
-void TMVA_CNN_Classification(std::vector<bool> opt = {1, 1, 1, 1, 1})
+/// @brief Run the TMVA CNN Classification example
+/// @param nevts : number of signal/background events. Use by default a low value (1000)
+/// but increase to at least 5000 to get a good result
+/// @param opt : vector of bool with method used (default all on if available). The order is:
+/// - TMVA CNN
+/// - Keras CNN
+/// - TMVA DNN
+/// - TMVA BDT
+/// - PyTorch CNN
+void TMVA_CNN_Classification(int nevts = 1000, std::vector<bool> opt = {1, 1, 1, 1, 1})
{
bool useTMVACNN = (opt.size() > 0) ? opt[0] : false;
@@ -125,17 +134,17 @@ 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 = 4; // use max 4 threads
+ // switch off MT in OpenBLAS to avoid conflict with tbb
+ gSystem->Setenv("OMP_NUM_THREADS", "1");
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));
}
- else
- gSystem->Setenv("OMP_NUM_THREADS", "1");
+
std::cout << "Running with nthreads = " << ROOT::GetThreadPoolSize() << std::endl;
@@ -145,6 +154,7 @@ void TMVA_CNN_Classification(std::vector<bool> opt = {1, 1, 1, 1, 1})
TMVA::PyMethodBase::PyInitialize();
#else
useKerasCNN = false;
+ usePyTorchCNN = false;
#endif
TFile *outputFile = nullptr;
@@ -160,7 +170,7 @@ void TMVA_CNN_Classification(std::vector<bool> opt = {1, 1, 1, 1, 1})
The factory is the major TMVA object you have to interact with. Here is the list of parameters you need to pass
- The first argument is the base of the name of all the output
- weightfiles in the directory weight/ that will be created with the
+ weight files in the directory weight/ that will be created with the
method parameters
- The second argument is the output file for the training results
@@ -207,7 +217,7 @@ void TMVA_CNN_Classification(std::vector<bool> opt = {1, 1, 1, 1, 1})
// if file does not exists create it
if (!fileExist) {
- MakeImagesTree(5000, 16, 16);
+ MakeImagesTree(nevts, 16, 16);
}
// TString inputFileName = "tmva_class_example.root";
@@ -288,7 +298,7 @@ void TMVA_CNN_Classification(std::vector<bool> opt = {1, 1, 1, 1, 1})
// Boosted Decision Trees
if (useTMVABDT) {
factory.BookMethod(loader, TMVA::Types::kBDT, "BDT",
- "!V:NTrees=400:MinNodeSize=2.5%:MaxDepth=2:BoostType=AdaBoost:AdaBoostBeta=0.5:"
+ "!V:NTrees=200:MinNodeSize=2.5%:MaxDepth=2:BoostType=AdaBoost:AdaBoostBeta=0.5:"
"UseBaggedBoost:BaggedSampleFraction=0.5:SeparationType=GiniIndex:nCuts=20");
}
/**
@@ -354,7 +364,7 @@ void TMVA_CNN_Classification(std::vector<bool> opt = {1, 1, 1, 1, 1})
- note in this case we are using a filer 3x3 and padding=1 and stride=1 so we get the output dimension of the
conv layer equal to the input
- - note we use after the first convolutional layer a batch normalization layer. This seems to help significatly the
+ - note we use after the first convolutional layer a batch normalization layer. This seems to help significantly the
convergence
- For the MaxPool layer:
@@ -419,7 +429,7 @@ void TMVA_CNN_Classification(std::vector<bool> opt = {1, 1, 1, 1, 1})
Info("TMVA_CNN_Classification", "Building convolutional keras model");
// create python script which can be executed
- // crceate 2 conv2d layer + maxpool + dense
+ // create 2 conv2d layer + maxpool + dense
TMacro m;
m.AddLine("import tensorflow");
m.AddLine("from tensorflow.keras.models import Sequential");
@@ -439,13 +449,13 @@ void TMVA_CNN_Classification(std::vector<bool> opt = {1, 1, 1, 1, 1})
m.AddLine("model.add(Flatten())");
m.AddLine("model.add(Dense(256, activation = 'relu')) ");
m.AddLine("model.add(Dense(2, activation = 'sigmoid')) ");
- m.AddLine("model.compile(loss = 'binary_crossentropy', optimizer = Adam(lr = 0.001), metrics = ['accuracy'])");
+ m.AddLine("model.compile(loss = 'binary_crossentropy', optimizer = Adam(learning_rate = 0.001), weighted_metrics = ['accuracy'])");
m.AddLine("model.save('model_cnn.h5')");
m.AddLine("model.summary()");
m.SaveSource("make_cnn_model.py");
// execute
- gSystem->Exec("python make_cnn_model.py");
+ gSystem->Exec("python3 make_cnn_model.py");
if (gSystem->AccessPathName("model_cnn.h5")) {
Warning("TMVA_CNN_Classification", "Error creating Keras model file - skip using Keras");
@@ -465,10 +477,9 @@ void TMVA_CNN_Classification(std::vector<bool> opt = {1, 1, 1, 1, 1})
Info("TMVA_CNN_Classification", "Using Convolutional PyTorch Model");
TString pyTorchFileName = gROOT->GetTutorialDir() + TString("/tmva/PyTorch_Generate_CNN_Model.py");
// check that pytorch can be imported and file defining the model and used later when booking the method is existing
- if (gSystem->Exec("python -c 'import torch'") || gSystem->AccessPathName(pyTorchFileName) ) {
+ if (gSystem->Exec("python3 -c 'import torch'") || gSystem->AccessPathName(pyTorchFileName)) {
Warning("TMVA_CNN_Classification", "PyTorch is not installed or model building file is not existing - skip using PyTorch");
- }
- else {
+ } else {
// book PyTorch method only if PyTorch model could be created
Info("TMVA_CNN_Classification", "Booking PyTorch CNN model");
TString methodOpt = "H:!V:VarTransform=None:FilenameModel=PyTorchModelCNN.pt:"
diff --git a/tutorials/tmva/TMVA_RNN_Classification.C b/tutorials/tmva/TMVA_RNN_Classification.C
index 5bfec52196..d4bb7a4e4a 100644
--- a/tutorials/tmva/TMVA_RNN_Classification.C
+++ b/tutorials/tmva/TMVA_RNN_Classification.C
@@ -36,7 +36,7 @@
/// Helper function to generate the time data set
/// make some time data but not of fixed length.
-/// use a poisson with mu = 5 and troncated at 10
+/// use a poisson with mu = 5 and truncated at 10
///
void MakeTimeData(int n, int ntime, int ndim )
{
@@ -136,13 +136,14 @@ void MakeTimeData(int n, int ntime, int ndim )
}
}
/// macro for performing a classification using a Recurrent Neural Network
+/// @param nevts = 2000 Number of events used. (increase for better classification results)
/// @param use_type
/// use_type = 0 use Simple RNN network
/// use_type = 1 use LSTM network
/// use_type = 2 use GRU
/// use_type = 3 build 3 different networks with RNN, LSTM and GRU
-void TMVA_RNN_Classification(int use_type = 1)
+void TMVA_RNN_Classification(int nevts = 2000, int use_type = 1)
{
const int ninput = 30;
@@ -150,7 +151,7 @@ void TMVA_RNN_Classification(int use_type = 1)
const int batchSize = 100;
const int maxepochs = 20;
- int nTotEvts = 10000; // total events to be generated for signal or background
+ int nTotEvts = nevts; // total events to be generated for signal or background
bool useKeras = true;
@@ -190,14 +191,14 @@ void TMVA_RNN_Classification(int use_type = 1)
useKeras = false;
#endif
- int num_threads = 0; // use by default all threads
+ int num_threads = 4; // use max 4 threads
+ // switch off MT in OpenBLAS to avoid conflict with tbb
+ gSystem->Setenv("OMP_NUM_THREADS", "1");
+
// 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));
}
- else
- gSystem->Setenv("OMP_NUM_THREADS", "1");
TMVA::Config::Instance();
@@ -424,17 +425,17 @@ the option string
m.AddLine("model.add(Dense(64, activation = 'tanh')) ");
m.AddLine("model.add(Dense(2, activation = 'sigmoid')) ");
m.AddLine(
- "model.compile(loss = 'binary_crossentropy', optimizer = Adam(lr = 0.001), metrics = ['accuracy'])");
+ "model.compile(loss = 'binary_crossentropy', optimizer = Adam(learning_rate = 0.001), weighted_metrics = ['accuracy'])");
m.AddLine(TString::Format("modelName = '%s'", modelName.Data()));
m.AddLine("model.save(modelName)");
m.AddLine("model.summary()");
m.SaveSource("make_rnn_model.py");
- // execute
- gSystem->Exec("python make_rnn_model.py");
+ // execute python script to make the model
+ gSystem->Exec("python3 make_rnn_model.py");
if (gSystem->AccessPathName(modelName)) {
- Warning("TMVA_RNN_Classification", "Error creating Keras recurrennt model file - Skip using Keras");
+ Warning("TMVA_RNN_Classification", "Error creating Keras recurrent model file - Skip using Keras");
useKeras = false;
} else {
// book PyKeras method only if Keras model could be created

View file

@ -1,111 +1,186 @@
diff -ur root-6.24.02.orig/cmake/modules/SearchInstalledSoftware.cmake root-6.24.02/cmake/modules/SearchInstalledSoftware.cmake
--- root-6.24.02.orig/cmake/modules/SearchInstalledSoftware.cmake 2021-06-28 11:17:14.000000000 +0200
+++ root-6.24.02/cmake/modules/SearchInstalledSoftware.cmake 2021-08-11 10:56:26.680731609 +0200
@@ -1699,102 +1699,17 @@
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)
#---Download googletest--------------------------------------------------------------
if (testing)
- # FIXME: Remove our version of gtest in roottest. We can reuse this one.
- # Add googletest
- # http://stackoverflow.com/questions/9689183/cmake-googletest
+ # Workaround for missing libraries in Fedora's gmock packaging < 1.8.0
+ if(EXISTS ${CMAKE_SOURCE_DIR}/googlemock)
+ set(_G_LIBRARY_PATH ${CMAKE_SOURCE_DIR}/googlemock)
set_property(TEST ${test} APPEND PROPERTY ENVIRONMENT ROOT_HIST=0)
- set(_gtest_byproduct_binary_dir
- ${CMAKE_CURRENT_BINARY_DIR}/googletest-prefix/src/googletest-build)
- set(_gtest_byproducts
- ${_gtest_byproduct_binary_dir}/lib/libgtest.a
- ${_gtest_byproduct_binary_dir}/lib/libgtest_main.a
- ${_gtest_byproduct_binary_dir}/lib/libgmock.a
- ${_gtest_byproduct_binary_dir}/lib/libgmock_main.a
- )
-
- if(MSVC)
- set(EXTRA_GTEST_OPTS
- -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG:PATH=${_gtest_byproduct_binary_dir}/lib/
- -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_MINSIZEREL:PATH=${_gtest_byproduct_binary_dir}/lib/
- -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE:PATH=${_gtest_byproduct_binary_dir}/lib/
- -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELWITHDEBINFO:PATH=${_gtest_byproduct_binary_dir}/lib/
- -Dgtest_force_shared_crt=ON
- BUILD_COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR> --config Release)
- endif()
- if(APPLE)
- set(EXTRA_GTEST_OPTS
- -DCMAKE_OSX_SYSROOT=${CMAKE_OSX_SYSROOT})
- endif()
-
- ExternalProject_Add(
- googletest
- GIT_REPOSITORY https://github.com/google/googletest.git
- GIT_SHALLOW 1
- GIT_TAG release-1.10.0
- UPDATE_COMMAND ""
- # TIMEOUT 10
- # # Force separate output paths for debug and release builds to allow easy
- # # identification of correct lib in subsequent TARGET_LINK_LIBRARIES commands
- # CMAKE_ARGS -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG:PATH=DebugLibs
- # -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE:PATH=ReleaseLibs
- # -Dgtest_force_shared_crt=ON
- CMAKE_ARGS -G ${CMAKE_GENERATOR}
- -DCMAKE_BUILD_TYPE=Release
- -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
- -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS}
- -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
- -DCMAKE_CXX_FLAGS=${ROOT_EXTERNAL_CXX_FLAGS}
- -DCMAKE_AR=${CMAKE_AR}
- -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}
- ${EXTRA_GTEST_OPTS}
- # Disable install step
- INSTALL_COMMAND ""
- BUILD_BYPRODUCTS ${_gtest_byproducts}
- # Wrap download, configure and build steps in a script to log output
- LOG_DOWNLOAD ON
- LOG_CONFIGURE ON
- LOG_BUILD ON
- TIMEOUT 600
- )
-
- # Specify include dirs for gtest and gmock
- ExternalProject_Get_Property(googletest source_dir)
- set(GTEST_INCLUDE_DIR ${source_dir}/googletest/include)
- set(GMOCK_INCLUDE_DIR ${source_dir}/googlemock/include)
- # Create the directories. Prevents bug https://gitlab.kitware.com/cmake/cmake/issues/15052
- file(MAKE_DIRECTORY ${GTEST_INCLUDE_DIR} ${GMOCK_INCLUDE_DIR})
-
- # Libraries
- ExternalProject_Get_Property(googletest binary_dir)
- set(_G_LIBRARY_PATH ${binary_dir}/lib/)
-
- # Use gmock_main instead of gtest_main because it initializes gtest as well.
- # Note: The libraries are listed in reverse order of their dependancies.
- foreach(lib gtest gtest_main gmock gmock_main)
+ foreach(lib gmock gmock_main)
add_library(${lib} IMPORTED STATIC GLOBAL)
- set_target_properties(${lib} PROPERTIES
- IMPORTED_LOCATION "${_G_LIBRARY_PATH}${CMAKE_STATIC_LIBRARY_PREFIX}${lib}${CMAKE_STATIC_LIBRARY_SUFFIX}"
- INTERFACE_INCLUDE_DIRECTORIES "${GTEST_INCLUDE_DIRS}"
- )
- add_dependencies(${lib} googletest)
- if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" AND
- ${CMAKE_CXX_COMPILER_VERSION} VERSION_GREATER_EQUAL 9)
- target_compile_options(${lib} INTERFACE -Wno-deprecated-copy)
- endif()
endforeach()
- # Once we require at least cmake 3.11, target_include_directories will work for imported targets
- # Because of https://gitlab.kitware.com/cmake/cmake/-/merge_requests/1264
- # We need this workaround:
- SET_PROPERTY(TARGET gtest APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${GTEST_INCLUDE_DIR})
- SET_PROPERTY(TARGET gmock APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${GMOCK_INCLUDE_DIR})
- #target_include_directories(gtest INTERFACE ${GTEST_INCLUDE_DIR})
- #target_include_directories(gmock INTERFACE ${GMOCK_INCLUDE_DIR})
-
- set_property(TARGET gtest PROPERTY IMPORTED_LOCATION ${_G_LIBRARY_PATH}/${CMAKE_STATIC_LIBRARY_PREFIX}gtest${CMAKE_STATIC_LIBRARY_SUFFIX})
- set_property(TARGET gtest_main PROPERTY IMPORTED_LOCATION ${_G_LIBRARY_PATH}/${CMAKE_STATIC_LIBRARY_PREFIX}gtest_main${CMAKE_STATIC_LIBRARY_SUFFIX})
set_property(TARGET gmock PROPERTY IMPORTED_LOCATION ${_G_LIBRARY_PATH}/${CMAKE_STATIC_LIBRARY_PREFIX}gmock${CMAKE_STATIC_LIBRARY_SUFFIX})
set_property(TARGET gmock_main PROPERTY IMPORTED_LOCATION ${_G_LIBRARY_PATH}/${CMAKE_STATIC_LIBRARY_PREFIX}gmock_main${CMAKE_STATIC_LIBRARY_SUFFIX})
+ endif()
- #- 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
@@ -1942,8 +1933,41 @@ if (roofit_multiprocess)
endif()
endif()
#------------------------------------------------------------------------------------
-#---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

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

523
root.spec

File diff suppressed because it is too large Load diff

View file

@ -1,2 +1,2 @@
SHA512 (root-6.24.06.tar.xz) = fe316283503dae60acb26d2ae3e838e6f9c01e1f89ff9973aa2b666a30c00f99f5e0df02b54e3744cd14a45a49ca2fc7d1f19fbac6b69071b9c9e0c98f2e0645
SHA512 (root-6.24.08.tar.xz) = 88d289bf360557b9e8e006975d108d12aa9b08003d2ddccd4cb40290cc6a09d6c41daa4525432a8914f0573fe436b616a60f31d28637f20b85a1bf3d8e9aa415
SHA512 (root-testfiles.tar.xz) = 945aef1a0cf5af672d4ab84b0ac00b76118e93008ff72447658ee82d9e955a1540af3ff7126e701418872f1d91b92ee96d4985840a519036c42732023a13f00f