diff --git a/root-Fixes-for-garbage-collection-in-Python-3.11.patch b/root-Fixes-for-garbage-collection-in-Python-3.11.patch new file mode 100644 index 0000000..a5c8752 --- /dev/null +++ b/root-Fixes-for-garbage-collection-in-Python-3.11.patch @@ -0,0 +1,72 @@ +From e77bcb0fdd0bc622213c33ad7094d28737fe51e7 Mon Sep 17 00:00:00 2001 +From: Enric Tejedor Saavedra +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("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: " diff --git a/root-Guard-gInterpreterMutex-in-TClingClassInfo-IsEnum.patch b/root-Guard-gInterpreterMutex-in-TClingClassInfo-IsEnum.patch new file mode 100644 index 0000000..d407f38 --- /dev/null +++ b/root-Guard-gInterpreterMutex-in-TClingClassInfo-IsEnum.patch @@ -0,0 +1,30 @@ +From 25fcf69c0662b09fbd9dc1c0446b7679ae020ed5 Mon Sep 17 00:00:00 2001 +From: Vincenzo Eduardo Padulano +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 +--- + 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 + diff --git a/root-PyROOT-Prevent-cast-error-when-calling-PyTuple_SET_I.patch b/root-PyROOT-Prevent-cast-error-when-calling-PyTuple_SET_I.patch new file mode 100644 index 0000000..ca908b8 --- /dev/null +++ b/root-PyROOT-Prevent-cast-error-when-calling-PyTuple_SET_I.patch @@ -0,0 +1,29 @@ +From a12f3b736a9c69e0d69e7f483e50e7cdf59d9fd2 Mon Sep 17 00:00:00 2001 +From: Enric Tejedor Saavedra +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(nullptr)); + + // next, insert the keyword values + PyObject *key, *value; +-- +2.36.1 + diff --git a/root-PyROOT-Py_TYPE-is-changed-to-an-inline-static-functi.patch b/root-PyROOT-Py_TYPE-is-changed-to-an-inline-static-functi.patch new file mode 100644 index 0000000..5ce8ad2 --- /dev/null +++ b/root-PyROOT-Py_TYPE-is-changed-to-an-inline-static-functi.patch @@ -0,0 +1,50 @@ +From c4175cb2fa0daf07ef03f460f2026c8bbc34b6a5 Mon Sep 17 00:00:00 2001 +From: Enric Tejedor Saavedra +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 + diff --git a/root-PyROOT-code.h-must-not-be-included-directly-in-3.11.patch b/root-PyROOT-code.h-must-not-be-included-directly-in-3.11.patch new file mode 100644 index 0000000..a845fa4 --- /dev/null +++ b/root-PyROOT-code.h-must-not-be-included-directly-in-3.11.patch @@ -0,0 +1,34 @@ +From 484deb056dacf768aba4954073b41105c431bffc Mon Sep 17 00:00:00 2001 +From: Enric Tejedor Saavedra +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 + diff --git a/root-avoid-deleting-TFormulas-twice.patch b/root-avoid-deleting-TFormulas-twice.patch new file mode 100644 index 0000000..af758ed --- /dev/null +++ b/root-avoid-deleting-TFormulas-twice.patch @@ -0,0 +1,37 @@ +From c7dd58f3bc012690bab16763b1d73a4b7106ced9 Mon Sep 17 00:00:00 2001 +From: Mattias Ellert +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 : A list is accessing an object (0x7fffd1c959a0) already deleted (list name = Functions) +Error in : 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 + diff --git a/root-core-base-test.patch b/root-core-base-test.patch new file mode 100644 index 0000000..c0cc7b3 --- /dev/null +++ b/root-core-base-test.patch @@ -0,0 +1,31 @@ +From 12d52a60629e1639ced23a1919bd85628d9135ea Mon Sep 17 00:00:00 2001 +From: Mattias Ellert +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 + diff --git a/root-different-filename.patch b/root-different-filename.patch new file mode 100644 index 0000000..ef42c3d --- /dev/null +++ b/root-different-filename.patch @@ -0,0 +1,48 @@ +From a486081a8065154308b23381c3a77f3fdb73de97 Mon Sep 17 00:00:00 2001 +From: Mattias Ellert +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 : ps file hsimple.ps has been created +Info in : Current canvas added to ps file hsimple.ps +Info in : Current canvas added to ps file hsimple.ps +Info in : Current canvas added to ps file hsimple.ps +Info in : ps file hsimple.ps has been closed +Error in : 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(k); + TClass *cl = gROOT->GetClass(key->GetClassName()); + if (!cl->InheritsFrom("TH1")) continue; + TH1 *h = key->ReadObject(); + h->Draw(); +- c1.Print("hsimple.ps"); ++ c1.Print("hsimple11.ps"); + } +- c1.Print("hsimple.ps]"); ++ c1.Print("hsimple11.ps]"); + } +-- +2.38.1 + diff --git a/root-do-not-remove-Wp-before-D-and-U.patch b/root-do-not-remove-Wp-before-D-and-U.patch new file mode 100644 index 0000000..820b7af --- /dev/null +++ b/root-do-not-remove-Wp-before-D-and-U.patch @@ -0,0 +1,44 @@ +From 0191a987b7583c2aa84b1293105db353fee40b1d Mon Sep 17 00:00:00 2001 +From: Mattias Ellert +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++ - +: 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 + diff --git a/root-doc-no-notebooks.patch b/root-doc-no-notebooks.patch deleted file mode 100644 index f94d31f..0000000 --- a/root-doc-no-notebooks.patch +++ /dev/null @@ -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 \"View \"Open \\endhtmlonly \n", gMacroName.c_str() , gMacroName.c_str()); -+ gLineString = ""; - } - - // \macro_output found diff --git a/root-doxygen-crash-el7.patch b/root-doxygen-crash-el7.patch deleted file mode 100644 index 28fb075..0000000 --- a/root-doxygen-crash-el7.patch +++ /dev/null @@ -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 diff --git a/root-doxygen-crash.patch b/root-doxygen-crash.patch deleted file mode 100644 index d69d7e7..0000000 --- a/root-doxygen-crash.patch +++ /dev/null @@ -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 diff --git a/root-fix-ppc64le-compilation-with-gcc-10.patch b/root-fix-ppc64le-compilation-with-gcc-10.patch deleted file mode 100644 index 2624de8..0000000 --- a/root-fix-ppc64le-compilation-with-gcc-10.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 5b8e969ca045aa238c685009e0aa48d74cbdbf22 Mon Sep 17 00:00:00 2001 -From: Mattias Ellert -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 - diff --git a/root-get-rid-of-lsb_release.patch b/root-get-rid-of-lsb_release.patch new file mode 100644 index 0000000..8dca2cc --- /dev/null +++ b/root-get-rid-of-lsb_release.patch @@ -0,0 +1,245 @@ +From 2dde3d060aa21ff9d4a0612b991bd300b7704bdc Mon Sep 17 00:00:00 2001 +From: Axel Naumann +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 + diff --git a/root-get-src.sh b/root-get-src.sh new file mode 100755 index 0000000..d83c34a --- /dev/null +++ b/root-get-src.sh @@ -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} diff --git a/root-longlong.patch b/root-longlong.patch new file mode 100644 index 0000000..3c43542 --- /dev/null +++ b/root-longlong.patch @@ -0,0 +1,42 @@ +From 2aa02353663674a338c92fa4e72a0c0e529c410e Mon Sep 17 00:00:00 2001 +From: Enrico Guiraud +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 +--- + 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 + diff --git a/root-make-DistRDF-optional.patch b/root-make-DistRDF-optional.patch new file mode 100644 index 0000000..904e622 --- /dev/null +++ b/root-make-DistRDF-optional.patch @@ -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 diff --git a/root-ppc-codemodel.patch b/root-ppc-codemodel.patch deleted file mode 100644 index 223dc7c..0000000 --- a/root-ppc-codemodel.patch +++ /dev/null @@ -1,36 +0,0 @@ -From 774ab9358d852e2c004564183de4a60eaaa5ac98 Mon Sep 17 00:00:00 2001 -From: Mattias Ellert -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 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 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 - diff --git a/root-ppc-segfault-fix.patch b/root-ppc-segfault-fix.patch deleted file mode 100644 index b9cba0f..0000000 --- a/root-ppc-segfault-fix.patch +++ /dev/null @@ -1,49 +0,0 @@ -From 55ae047b70e927de5c84cfa5ad42905cbd58d499 Mon Sep 17 00:00:00 2001 -From: Vassil Vassilev -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). diff --git a/root-protect-against-empty-COMPILE_DEFINITIONS.patch b/root-protect-against-empty-COMPILE_DEFINITIONS.patch new file mode 100644 index 0000000..a3097bc --- /dev/null +++ b/root-protect-against-empty-COMPILE_DEFINITIONS.patch @@ -0,0 +1,63 @@ +From 08ab7e03061e551647d707637957252d121f9c39 Mon Sep 17 00:00:00 2001 +From: Jonas Rembser +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 $) +``` + +Then, the definitions are added to the rootcint command with this +expression: + +``` +"$<$:-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 $) + endif() +- set(module_defs $) ++ # 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 "$,EXCLUDE,^$>") + endif() + endif() + +-- +2.37.2 + diff --git a/root-test-timeout.patch b/root-test-timeout.patch new file mode 100644 index 0000000..9b14ad8 --- /dev/null +++ b/root-test-timeout.patch @@ -0,0 +1,48 @@ +From bfa7b7e59c3bcee4d6a5501c800b49334af326e5 Mon Sep 17 00:00:00 2001 +From: Mattias Ellert +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 + diff --git a/root-threadsh1-avoid-heap-use-after-free.patch b/root-threadsh1-avoid-heap-use-after-free.patch new file mode 100644 index 0000000..6111f2b --- /dev/null +++ b/root-threadsh1-avoid-heap-use-after-free.patch @@ -0,0 +1,48 @@ +From 493c4210168fa475aa4130c12e8fdff3b7d85c09 Mon Sep 17 00:00:00 2001 +From: Philippe Canal +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 + diff --git a/root-tmva-threads.patch b/root-tmva-threads.patch new file mode 100644 index 0000000..718c6f9 --- /dev/null +++ b/root-tmva-threads.patch @@ -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 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 opt = {1, 1, 1, 1, 1}) + { + + bool useTMVACNN = (opt.size() > 0) ? opt[0] : false; +@@ -125,17 +134,17 @@ void TMVA_CNN_Classification(std::vector 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 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 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 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 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 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 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 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 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 diff --git a/root-unbundle-gtest.patch b/root-unbundle-gtest.patch index ae180a2..e384888 100644 --- a/root-unbundle-gtest.patch +++ b/root-unbundle-gtest.patch @@ -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 +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 --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 + diff --git a/root-use-unique-filenames-in-fillrandom-tutorials.patch b/root-use-unique-filenames-in-fillrandom-tutorials.patch new file mode 100644 index 0000000..724eb79 --- /dev/null +++ b/root-use-unique-filenames-in-fillrandom-tutorials.patch @@ -0,0 +1,25 @@ +From b781f954ac80cc227777992dcb4fbe1837c7e351 Mon Sep 17 00:00:00 2001 +From: Mattias Ellert +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 + diff --git a/root.spec b/root.spec index 3a305ae..7db1332 100644 --- a/root.spec +++ b/root.spec @@ -25,13 +25,7 @@ %global root7 0 %endif -%if %{?fedora}%{!?fedora:0} >= 33 || %{?rhel}%{!?rhel:0} >= 7 -%global xrootd5 1 -%else -%global xrootd5 0 -%endif - -%if %{?fedora}%{!?fedora:0} >= 35 +%if %{?fedora}%{!?fedora:0} >= 35 || %{?rhel}%{!?rhel:0} >= 9 # The required __malloc_hook was removed from glibc 2.33.9000-48 # The memstat module is deprecated and will be removed in root 6.26 %global memstat 0 @@ -53,18 +47,15 @@ %global __provides_exclude_from ^(%{?python2_sitearch:%{python2_sitearch}|}%{python3_sitearch})/lib.*\\.so$ Name: root -Version: 6.24.06 +Version: 6.24.08 %global libversion %(cut -d. -f 1-2 <<< %{version}) -Release: 6%{?dist} +Release: 2%{?dist} Summary: Numerical data analysis framework License: LGPLv2+ URL: https://root.cern/ -# The upstream source is modified to exclude proprietary fonts: -# 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} +# The upstream source is modified to exclude proprietary fonts +# See Source8 for how to create Source0 Source0: %{name}-%{version}.tar.xz # Input data for the tests Source1: %{name}-testfiles.tar.xz @@ -79,89 +70,113 @@ Source6: application-x-root.png # Instructions for setting up a python virtual environment # for running the JupyROOT notebook on EPEL Source7: JupyROOT-on-EPEL +# Script to generate Source0 +Source8: %{name}-get-src.sh # Use system fonts Patch0: %{name}-fontconfig.patch # Revert the removal of DataFrame for 32 bit architectures +# https://github.com/root-project/root/pull/10300 Patch1: %{name}-32bit-dataframe.patch # Unbundle gtest +# Add builtin_gtest cmake option +# https://github.com/root-project/root/pull/10301 Patch2: %{name}-unbundle-gtest.patch # Reduce memory usage of build # Do not link rootcling_stage1 and libCling in parallel Patch3: %{name}-memory-usage.patch # Reduce memory usage during linking on ARM and x86 by generating -# smaller debuginfo for the llmv libraries. -# Fedora builders run out of memory with the default setting. +# smaller debuginfo for the llvm libraries +# Fedora builders run out of memory with the default setting Patch4: %{name}-memory-arm-x86.patch # Don't install minicern static library Patch5: %{name}-dont-install-minicern.patch # Do not export Python modules in CMake config Patch6: %{name}-no-export-python-modules.patch -# Don't create documentation notebooks -Patch7: %{name}-doc-no-notebooks.patch -# Don't run tutorials that crash during doc generation -Patch8: %{name}-doxygen-crash.patch # Compatibility with older gtest -Patch9: %{name}-old-gtest-compat.patch +Patch7: %{name}-old-gtest-compat.patch # Run some test on 32 bit that upstream has disabled -Patch10: %{name}-32bit-tests.patch +Patch8: %{name}-32bit-tests.patch # Workaround for initialization problems for PyROOT on # EPEL7 ppc64le # https://sft.its.cern.ch/jira/browse/ROOT-10622 -Patch11: %{name}-epel7-ppc64le-pyroot.patch +Patch9: %{name}-epel7-ppc64le-pyroot.patch # Use local static script and style files for JsMVA -Patch12: %{name}-jsmva-static.patch +Patch10: %{name}-jsmva-static.patch +# Fix python bytecode compilation on EPEL 7 # Compatibility with older python versions (no f-strings) -Patch13: %{name}-older-python.patch +Patch11: %{name}-older-python.patch # Fix multicore tests when running on machines with few cores # https://github.com/root-project/root/pull/8068 -Patch14: %{name}-fix-multicore-tests-with-few-cores.patch -# Reapply altivec fix lost in the LLVM 9 upgrade -# https://github.com/root-project/root/pull/8069 -Patch15: %{name}-fix-ppc64le-compilation-with-gcc-10.patch -# Actually request the use of the large code model for ppc64le -# https://github.com/root-project/root/pull/8230 -Patch16: %{name}-ppc-codemodel.patch -# Fix segfaults on ppc64le when using the large code model -# PR by Vassil Vassilev based on upstream fix -# https://reviews.llvm.org/D91983 -# https://github.com/root-project/root/pull/9380 -Patch17: %{name}-ppc-segfault-fix.patch +Patch12: %{name}-fix-multicore-tests-with-few-cores.patch # Fall back to blocking I/O if uring fails # Backported # - commit 691403b2cc504fd4e3e7227894023913014a61ff # - commit 956951ee2af83426d73ad72b2d966f9f1acbea83 # - commit 16e64da11edf91fcf31c2fc474f573fca2ee863c # - commit 311a6822f9b0fd438c4210ed60617b45f2ddbe74 -Patch18: %{name}-uring.patch +Patch13: %{name}-uring.patch # Add missing classes in LinkDef.h files # Backported -Patch19: %{name}-add-TTreeProcessorMP-to-LinkDef-file.patch -Patch20: %{name}-add-RDisplay-to-LinkDef-file.patch -Patch21: %{name}-add-RCutFlowReport-to-LinkDef-file.patch +Patch14: %{name}-add-TTreeProcessorMP-to-LinkDef-file.patch +Patch15: %{name}-add-RDisplay-to-LinkDef-file.patch +Patch16: %{name}-add-RCutFlowReport-to-LinkDef-file.patch # Fix "pointer is null" warnings # Backported -Patch22: %{name}-ptr-is-null-RooFit-TMVA.patch -Patch23: %{name}-ptr-is-null-TStreamerInfo.patch +Patch17: %{name}-ptr-is-null-RooFit-TMVA.patch +Patch18: %{name}-ptr-is-null-TStreamerInfo.patch # Fix two failing tests on s390x # https://github.com/root-project/root/pull/8826 -Patch24: %{name}-stress-s390x.patch +Patch19: %{name}-stress-s390x.patch # Doxygen warning fixes # Backported from upstream -Patch25: root-doxygen-fix1.patch +Patch20: root-doxygen-fix1.patch # Doxygen warning fixes # https://github.com/root-project/root/pull/9388 -Patch26: root-doxygen-fix2.patch -# Don't run tutorials that crash during doc generation -# EPEL 7 specific -Patch27: %{name}-doxygen-crash-el7.patch +Patch21: root-doxygen-fix2.patch # Backported fix from LLVM upstream -Patch28: %{name}-symbol-rewrite.patch +Patch22: %{name}-symbol-rewrite.patch # Backport gcc 12 fix from LLVM # https://github.com/root-project/root/pull/9586 -Patch29: %{name}-fix-compilation-with-gcc-12.patch +Patch23: %{name}-fix-compilation-with-gcc-12.patch # Fix test failure on ppc64le and aarch64 with gcc 12 # https://github.com/root-project/root/pull/9601 -Patch30: %{name}-fix-test-failure-on-ppc64le-and-aarch64-with-gcc-12.patch +Patch24: %{name}-fix-test-failure-on-ppc64le-and-aarch64-with-gcc-12.patch +# Adjust some test timeouts +# https://github.com/root-project/root/pull/10886 +Patch25: %{name}-test-timeout.patch +# Fixes for garbage collection in Python 3.11 +# https://github.com/root-project/root/pull/11457 +Patch26: %{name}-Fixes-for-garbage-collection-in-Python-3.11.patch +# Fix test when long is 32 bits +# https://github.com/root-project/root/pull/10302 +Patch27: %{name}-longlong.patch +# Avoid deleting TFormulas twice +# https://github.com/root-project/root/pull/10310 +Patch28: %{name}-avoid-deleting-TFormulas-twice.patch +# Use unique filenames in fillrandom.py and fillrandom.C +# https://github.com/root-project/root/pull/10311 +Patch29: %{name}-use-unique-filenames-in-fillrandom-tutorials.patch +# Limit the number of threads in TMVA CNN/DNN test to save memory +# https://github.com/root-project/root/pull/10312 +Patch30: %{name}-tmva-threads.patch +# Fix library link order +# https://github.com/root-project/root/pull/10313 +Patch31: %{name}-core-base-test.patch +# Backports +Patch32: %{name}-get-rid-of-lsb_release.patch +Patch33: %{name}-threadsh1-avoid-heap-use-after-free.patch +Patch34: %{name}-PyROOT-Py_TYPE-is-changed-to-an-inline-static-functi.patch +Patch35: %{name}-PyROOT-code.h-must-not-be-included-directly-in-3.11.patch +Patch36: %{name}-PyROOT-Prevent-cast-error-when-calling-PyTuple_SET_I.patch +Patch37: %{name}-protect-against-empty-COMPILE_DEFINITIONS.patch +Patch38: %{name}-Guard-gInterpreterMutex-in-TClingClassInfo-IsEnum.patch +# Use different filenames in io/loopdir tests +# https://github.com/root-project/root/pull/11725 +Patch39: %{name}-different-filename.patch +# https://github.com/root-project/root/pull/12407 +Patch40: %{name}-make-DistRDF-optional.patch +# https://github.com/root-project/root/pull/12476 +Patch41: %{name}-do-not-remove-Wp-before-D-and-U.patch BuildRequires: make %if %{?rhel}%{!?rhel:0} == 7 @@ -177,8 +192,8 @@ BuildRequires: fontconfig-devel BuildRequires: freetype-devel BuildRequires: fcgi-devel BuildRequires: ftgl-devel -BuildRequires: glew-devel BuildRequires: gl2ps-devel +BuildRequires: glew-devel BuildRequires: pcre-devel BuildRequires: zlib-devel BuildRequires: xz-devel @@ -200,8 +215,8 @@ BuildRequires: mysql-devel %endif BuildRequires: sqlite-devel BuildRequires: unixODBC-devel -BuildRequires: mesa-libGL-devel -BuildRequires: mesa-libGLU-devel +BuildRequires: libGL-devel +BuildRequires: libGLU-devel %if %{?fedora}%{!?fedora:0} >= 27 || %{?rhel}%{!?rhel:0} >= 8 BuildRequires: libpq-devel %else @@ -225,12 +240,7 @@ BuildRequires: openssl-devel BuildRequires: libtool-ltdl-devel BuildRequires: desktop-file-utils BuildRequires: dcap-devel -%if %{xrootd5} BuildRequires: xrootd-client-devel >= 1:5.0.0 -%else -BuildRequires: xrootd-client-devel >= 1:3.3.5 -BuildRequires: xrootd-private-devel >= 1:3.3.5 -%endif BuildRequires: cfitsio-devel BuildRequires: davix-devel >= 0.2.8 BuildRequires: gfal2-devel @@ -247,7 +257,7 @@ BuildRequires: gcc-gfortran BuildRequires: graphviz-devel BuildRequires: expat-devel BuildRequires: pythia8-devel >= 8.1.80 -%if %{?fedora}%{!?fedora:0} >= 33 +%if %{?fedora}%{!?fedora:0} >= 33 || %{?rhel}%{!?rhel:0} >= 9 BuildRequires: flexiblas-devel # Required for FlexiBLAS support in FindBLAS.cmake # (in cmake 3.19.0, backported to cmake 3.18.3-1 in Fedora) @@ -259,17 +269,18 @@ BuildRequires: json-devel %if %{?fedora}%{!?fedora:0} BuildRequires: liburing-devel %endif -%if %{?fedora}%{!?fedora:0} || %{?rhel}%{!?rhel:0} >= 8 +%if %{?fedora}%{!?fedora:0} || %{?rhel}%{!?rhel:0} == 8 BuildRequires: python%{python3_pkgversion}-pandas %endif -BuildRequires: doxygen -BuildRequires: graphviz +%if %{?fedora}%{!?fedora:0} +BuildRequires: python3-rcssmin +BuildRequires: uglify-js +%else BuildRequires: yuicompressor +%endif BuildRequires: perl-generators BuildRequires: gtest-devel BuildRequires: gmock-devel -# Some of the tests call lsb_release -BuildRequires: redhat-lsb-core # Fonts BuildRequires: font(freesans) BuildRequires: font(freeserif) @@ -280,6 +291,8 @@ BuildRequires: font(z003) BuildRequires: font(droidsansfallback) # With gdb installed test failures will show backtraces BuildRequires: gdb +# Defines _jsdir +BuildRequires: web-assets-devel Requires: %{name}-core%{?_isa} = %{version}-%{release} Requires: %{name}-io%{?_isa} = %{version}-%{release} Requires: %{name}-mathcore%{?_isa} = %{version}-%{release} @@ -340,16 +353,6 @@ Requires: %{name}-core = %{version}-%{release} This package contains fonts used by ROOT that are not available in Fedora. In particular it contains STIX version 0.9 that is used by TMathText. -%package doc -Summary: Documentation for the ROOT system -BuildArch: noarch -License: LGPLv2+ and GPLv2+ and BSD -Requires: mathjax - -%description doc -This package contains the automatically generated ROOT class -documentation. - %package tutorial Summary: ROOT tutorial scripts and test suite BuildArch: noarch @@ -360,7 +363,7 @@ This package contains the tutorial scripts and test suite for ROOT. %package core Summary: ROOT core libraries -License: LGPLv2+ and BSD +License: LGPLv2+ and ISC and MIT and NCSA Requires: %{name}-fonts = %{version}-%{release} Requires: %{name}-icons = %{version}-%{release} # Dynamic dependencies @@ -425,6 +428,7 @@ Obsoletes: python%{?python3_other_pkgversion}-jsmva < 6.22.00 %if ! %{memstat} Obsoletes: %{name}-memstat < %{version}-%{release} %endif +Obsoletes: %{name}-doc < 6.24.08 %description core This package contains the core libraries used by ROOT: libCore, libNew, @@ -441,7 +445,7 @@ This package provides ROOT's multi-processor support library: libMultiProc. %package cling Summary: Cling C++ interpreter -License: NCSA and (NCSA or LGPLv2+) +License: (NCSA or LGPLv2) and (ASL 2.0 or NCSA) and BSD and MIT Requires: %{name}-core%{?_isa} = %{version}-%{release} Requires: %{name}-io%{?_isa} = %{version}-%{release} # Root's cling interpreter uses a particular git commit of @@ -449,10 +453,10 @@ Requires: %{name}-io%{?_isa} = %{version}-%{release} # not work with the system libraries. The bundled llvm and # clang are compiled using -fvisibility=hidden, and are not # visible outside of the libCling module. -Requires: gcc-c++ -Requires: redhat-rpm-config Provides: bundled(clang-libs) Provides: bundled(llvm-libs) +Requires: gcc-c++ +Requires: redhat-rpm-config Obsoletes: %{name}-cint7 < 5.26.00c Obsoletes: %{name}-cint < 6.00.00 Obsoletes: %{name}-cintex < 6.00.00 @@ -476,7 +480,7 @@ to call Python from ROOT. %if %{buildpy2} %package -n python2-%{name} Summary: Python extension for ROOT -%{?python_provide:%python_provide python2-%{name}} +%py_provides python2-%{name} Provides: %{name}-python = %{version}-%{release} Obsoletes: %{name}-python < 6.08.00 Requires: %{name}-core%{?_isa} = %{version}-%{release} @@ -489,7 +493,7 @@ possible to use ROOT classes in Python. %package -n python2-jupyroot Summary: ROOT Jupyter kernel -%{?python_provide:%python_provide python2-jupyroot} +%py_provides python2-jupyroot Requires: python2-%{name}%{?_isa} = %{version}-%{release} Requires: python2-jsmva = %{version}-%{release} Requires: %{name}-core%{?_isa} = %{version}-%{release} @@ -511,7 +515,7 @@ The Jupyter kernel for the ROOT notebook. %package -n python2-jsmva Summary: TMVA interface used by JupyROOT BuildArch: noarch -%{?python_provide:%python_provide python2-jsmva} +%py_provides python2-jsmva Requires: %{name}-tmva = %{version}-%{release} %description -n python2-jsmva @@ -520,7 +524,7 @@ TMVA interface used by JupyROOT. %package -n python2-distrdf Summary: Distributed RDataFrame BuildArch: noarch -%{?python_provide:%python_provide python2-distrdf} +%py_provides python2-distrdf Requires: python2-%{name} = %{version}-%{release} Requires: %{name}-tree-dataframe = %{version}-%{release} @@ -531,7 +535,7 @@ a port of the previously known PyRDF python package. %package -n python%{python3_pkgversion}-%{name} Summary: Python extension for ROOT -%{?python_provide:%python_provide python%{python3_pkgversion}-%{name}} +%py_provides python%{python3_pkgversion}-%{name} Provides: %{name}-python%{python3_pkgversion} = %{version}-%{release} Obsoletes: %{name}-python%{python3_pkgversion} < 6.08.00 Requires: %{name}-core%{?_isa} = %{version}-%{release} @@ -546,7 +550,7 @@ possible to use ROOT classes in Python. %package -n python%{python3_pkgversion}-jupyroot Summary: ROOT Jupyter kernel -%{?python_provide:%python_provide python%{python3_pkgversion}-jupyroot} +%py_provides python%{python3_pkgversion}-jupyroot Requires: python%{python3_pkgversion}-%{name}%{?_isa} = %{version}-%{release} Requires: python%{python3_pkgversion}-jsmva = %{version}-%{release} Requires: %{name}-core%{?_isa} = %{version}-%{release} @@ -567,7 +571,7 @@ The Jupyter kernel for the ROOT notebook. %package -n python%{python3_pkgversion}-jsmva Summary: TMVA interface used by JupyROOT BuildArch: noarch -%{?python_provide:%python_provide python%{python3_pkgversion}-jsmva} +%py_provides python%{python3_pkgversion}-jsmva Requires: %{name}-tmva = %{version}-%{release} %description -n python%{python3_pkgversion}-jsmva @@ -576,7 +580,7 @@ TMVA interface used by JupyROOT. %package -n python%{python3_pkgversion}-distrdf Summary: Distributed RDataFrame BuildArch: noarch -%{?python_provide:%python_provide python%{python3_pkgversion}-distrdf} +%py_provides python%{python3_pkgversion}-distrdf Requires: python%{python3_pkgversion}-%{name} = %{version}-%{release} Requires: %{name}-tree-dataframe = %{version}-%{release} @@ -1342,8 +1346,7 @@ Requires: %{name}-net%{?_isa} = %{version}-%{release} %description netx This package contains the NetX extension for ROOT, i.e. a client for -the xrootd server. Both the old (NetX) and the new (NetXNG) version are -provided. +the xrootd server. Only the new (NetXNG) version is provided. %package proof Summary: PROOF extension for ROOT @@ -1357,9 +1360,7 @@ Obsoletes: %{name}-peac < 5.34.01 # Package split (proof-player from proof) Obsoletes: %{name}-proof < 6.14.00 Obsoletes: %{name}-proofd < 6.16.00 -%if %{xrootd5} -Obsoletes: %{name}-xproof < %{version}-%{release} -%endif +Obsoletes: %{name}-xproof < 6.22.02-2 %description proof This package contains the proof extension for ROOT. This provides a @@ -1411,22 +1412,6 @@ Requires: %{name}-tree%{?_isa} = %{version}-%{release} This package contains a library for browsing an interactive PROOF session in ROOT. -%if ! %{xrootd5} -%package xproof -Summary: XPROOF extension for ROOT -Requires: %{name}-core%{?_isa} = %{version}-%{release} -Requires: %{name}-io%{?_isa} = %{version}-%{release} -Requires: %{name}-net%{?_isa} = %{version}-%{release} -Requires: %{name}-proof%{?_isa} = %{version}-%{release} -# Dynamic dependency -Requires: %{name}-net-rpdutils%{?_isa} = %{version}-%{release} -Requires: xrootd-server%{?_isa} - -%description xproof -This package contains the xproof extension for ROOT. This provides a -client to be used in a PROOF environment. -%endif - %package roofit Summary: ROOT extension for modeling expected distributions - toolkit License: BSD @@ -1515,6 +1500,7 @@ This package contains RooFit classes that use the mathmore library. %package roofit-batchcompute Summary: Optimized computation functions for PDFs +License: BSD Requires: %{name}-core%{?_isa} = %{version}-%{release} Requires: %{name}-mathcore%{?_isa} = %{version}-%{release} Requires: %{name}-roofit-core%{?_isa} = %{version}-%{release} @@ -1534,7 +1520,6 @@ automatic hardware detection mechanism that this library contains. %package roostats Summary: Statistical tools built on top of RooFit -License: BSD Requires: %{name}-core%{?_isa} = %{version}-%{release} Requires: %{name}-graf%{?_isa} = %{version}-%{release} Requires: %{name}-graf-gpad%{?_isa} = %{version}-%{release} @@ -1937,12 +1922,21 @@ This package contains an ntuple extension for ROOT 7. %patch24 -p1 %patch25 -p1 %patch26 -p1 -%if %{?rhel}%{!?rhel:0} == 7 %patch27 -p1 -%endif %patch28 -p1 %patch29 -p1 %patch30 -p1 +%patch31 -p1 +%patch32 -p1 +%patch33 -p1 +%patch34 -p1 +%patch35 -p1 +%patch36 -p1 +%patch37 -p1 +%patch38 -p1 +%patch39 -p1 +%patch40 -p1 +%patch41 -p1 # Remove bundled sources in order to be sure they are not used # * afterimage @@ -1974,29 +1968,8 @@ rm -rf proof/xrdinc rm -rf graf2d/x11/inc/X11 # * mathjax rm -rf documentation/doxygen/mathjax.tar.gz -sed /mathjax.tar.gz/d -i documentation/doxygen/Makefile -%if %{root7} -# * string_view ( requires c++-14) -rm core/foundation/inc/ROOT/libcpp_string_view.h \ - core/foundation/inc/ROOT/RWrap_libcpp_string_view.h -sed /RWrap_libcpp_string_view.h/d -i build/unix/module.modulemap -%endif # * jsroot -rm -rf js/* - -# Remove unsupported man page macros -sed -e '/^\.UR/d' -e '/^\.UE/d' -i man/man1/* - -# Work around missing libraries in Fedora's gmock packaging < 1.8.0 -if [ ! -r %{_libdir}/libgmock.so ] ; then -mkdir googlemock -pushd googlemock -g++ %{optflags} -DGTEST_HAS_PTHREAD=1 -c -o gmock-all.o /usr/src/gmock/gmock-all.cc -ar rv libgmock.a gmock-all.o -g++ %{optflags} -DGTEST_HAS_PTHREAD=1 -c -o gmock_main.o /usr/src/gmock/gmock_main.cc -ar rv libgmock_main.a gmock_main.o -popd -fi +rm -rf js/[^f]* js/files/draw.htm js/files/online.htm # Remove pre-minified script and style files rm etc/notebook/JsMVA/js/*.min.js @@ -2013,10 +1986,18 @@ unset QTINC # Minify script and style files for s in etc/notebook/JsMVA/js/*.js ; do +%if %{?fedora}%{!?fedora:0} + uglifyjs ${s} -c -m -o ${s%.js}.min.js +%else yuicompressor ${s} -o ${s%.js}.min.js +%endif done for s in etc/notebook/JsMVA/css/*.css ; do +%if %{?fedora}%{!?fedora:0} + python3 -m rcssmin < ${s} > ${s%.css}.min.css +%else yuicompressor ${s} -o ${s%.css}.min.css +%endif done # Avoid overlinking (this used to be the default with the old configure script) @@ -2040,6 +2021,7 @@ LDFLAGS="-Wl,--as-needed %{?__global_ldflags}" -Dbuiltin_gl2ps:BOOL=OFF \ -Dbuiltin_glew:BOOL=OFF \ -Dbuiltin_gsl:BOOL=OFF \ + -Dbuiltin_gtest:BOOL=OFF \ -Dbuiltin_llvm:BOOL=ON \ -Dbuiltin_lz4:BOOL=OFF \ -Dbuiltin_lzma:BOOL=OFF \ @@ -2155,11 +2137,7 @@ LDFLAGS="-Wl,--as-needed %{?__global_ldflags}" -Dx11:BOOL=ON \ -Dxml:BOOL=ON \ -Dxrootd:BOOL=ON \ -%if %{xrootd5} -Dxproofd:BOOL=OFF \ -%else - -Dxproofd:BOOL=ON \ -%endif -Dfail-on-missing:BOOL=ON \ -Dtesting:BOOL=ON \ -Dclingtest:BOOL=OFF \ @@ -2172,6 +2150,11 @@ LDFLAGS="-Wl,--as-needed %{?__global_ldflags}" %install %cmake3_install +# Let rpm redo the python byte compilation +find %{buildroot}%{_libdir}/%{name} -depth -type d -name __pycache__ -exec rm -r {} ';' +find %{buildroot}%{_libdir}/%{name} -type f -name *.pyc -delete +find %{buildroot}%{_libdir}/%{name} -type f -name *.pyo -delete + # Do emacs byte compilation emacs -batch -no-site-file -f batch-byte-compile \ %{buildroot}%{_emacs_sitelispdir}/%{name}/*.el @@ -2194,9 +2177,8 @@ install -p -m 644 %{SOURCE7} %{buildroot}%{_pkgdocdir} # Move python cli helper to its own directory mkdir -p %{buildroot}%{_datadir}/%{name}/cli -mv %{buildroot}%{_libdir}/%{name}/cmdLineUtils.py* \ +mv %{buildroot}%{_libdir}/%{name}/cmdLineUtils.py \ %{buildroot}%{_datadir}/%{name}/cli -rm %{buildroot}%{_libdir}/%{name}/__pycache__/cmdLineUtils.* sed -e '/^\#!/d' -i %{buildroot}%{_datadir}/%{name}/cli/cmdLineUtils.py # Install GDB pretty printers to auto load safe path @@ -2208,25 +2190,17 @@ install -p -m 644 build/gdbPrinters/libCore.so-gdb.py \ install -p -m 644 build/gdbPrinters/libRooFitCore.so-gdb.py \ %{buildroot}%{_datadir}/gdb/auto-load%{_libdir}/%{name}/libRooFitCore.so.%{version}-gdb.py -# Do python byte compilation (for non-standard paths) -%if %{?fedora}%{!?fedora:0} >= 28 || %{?rhel}%{!?rhel:0} >= 8 -# This is the default for Fedora 30+, set it for Fedora 28-29 -%global _python_bytecompile_extra 0 -%py_byte_compile %{__python3} %{buildroot}%{_datadir}/%{name}/cli -%py_byte_compile %{__python3} %{buildroot}%{_datadir}/gdb/auto-load%{_libdir}/%{name} -%endif - %if %{buildpy2} # Move the python modules to sitearch/sitelib mkdir -p %{buildroot}%{python2_sitearch} cp -pr %{buildroot}%{_libdir}/%{name}/cppyy %{buildroot}%{python2_sitearch} -ln -s ../../root/libcppyy%{python2_version_uscore}.so.%{version} \ +ln -rs %{buildroot}%{_libdir}/%{name}/libcppyy%{python2_version_uscore}.so.%{version} \ %{buildroot}%{python2_sitearch}/libcppyy%{python2_version_uscore}.so cp -pr %{buildroot}%{_libdir}/%{name}/cppyy_backend %{buildroot}%{python2_sitearch} -ln -s ../../root/libcppyy_backend%{python2_version_uscore}.so.%{version} \ +ln -rs %{buildroot}%{_libdir}/%{name}/libcppyy_backend%{python2_version_uscore}.so.%{version} \ %{buildroot}%{python2_sitearch}/libcppyy_backend%{python2_version_uscore}.so cp -pr %{buildroot}%{_libdir}/%{name}/ROOT %{buildroot}%{python2_sitearch} @@ -2269,11 +2243,11 @@ echo 'Version: %{version}' >> \ mkdir -p %{buildroot}%{python3_sitearch} mv %{buildroot}%{_libdir}/%{name}/cppyy %{buildroot}%{python3_sitearch} -ln -s ../../root/libcppyy%{python3_version_uscore}.so.%{version} \ +ln -rs %{buildroot}%{_libdir}/%{name}/libcppyy%{python3_version_uscore}.so.%{version} \ %{buildroot}%{python3_sitearch}/libcppyy%{python3_version_uscore}%{python3_ext_suffix} mv %{buildroot}%{_libdir}/%{name}/cppyy_backend %{buildroot}%{python3_sitearch} -ln -s ../../root/libcppyy_backend%{python3_version_uscore}.so.%{version} \ +ln -rs %{buildroot}%{_libdir}/%{name}/libcppyy_backend%{python3_version_uscore}.so.%{version} \ %{buildroot}%{python3_sitearch}/libcppyy_backend%{python3_version_uscore}.so mv %{buildroot}%{_libdir}/%{name}/ROOT %{buildroot}%{python3_sitearch} @@ -2405,11 +2379,9 @@ rm TGrid/P010_TAlien.C %if ! %{root7} rm TGuiFactory/P030_TWebGuiFactory.C %endif -%if %{xrootd5} rm TProofMgr/P010_TXProofMgr.C rm TProofServ/P010_TXProofServ.C rm TSlave/P010_TXSlave.C -%endif rm TSQLServer/P040_TOracleServer.C rm TSystem/P030_TAlienSystem.C rm TVirtualGeoConverter/P010_TGeoVGConverter.C @@ -2421,17 +2393,17 @@ rm TVirtualMonitoringWriter/P010_TMonaLisaWriter.C rm TVirtualX/P030_TGWin32.C rm TVirtualX/P050_TGQuartz.C rmdir TGrid -%if %{xrootd5} rmdir TProofMgr rmdir TProofServ rmdir TSlave -%endif rmdir TVirtualGeoConverter popd -# Replace bundled jsroot with symlink to system version -rmdir %{buildroot}%{_datadir}/%{name}/js -ln -s /usr/share/javascript/jsroot %{buildroot}%{_datadir}/%{name}/js +# Replace bundled jsroot with symlinks to system version +for x in img libs scripts style files/draw.htm files/online.htm ; do + ln -nrs %{buildroot}%{_jsdir}/jsroot/$x \ + %{buildroot}%{_datadir}/%{name}/js/$x +done # Create ldconfig configuration mkdir -p %{buildroot}%{_sysconfdir}/ld.so.conf.d @@ -2445,12 +2417,13 @@ echo %{_libdir}/%{name} > \ %else %global pkgmgr yum %endif -sed -e '/FATAL.*import/i\ message(WARNING "The imported target \\"\${target}\\" references the file\ - \\"\${file}\\"\ -but this file does not exist. If this target is used you need to install the package that provides this file\ - %{pkgmgr} install \${file}\ +sed -e 's/FATAL_ERROR \(.*imported\)/WARNING \1/' \ + -e '/Possible reasons include/i\ +but this file does not exist.\ +If this target is used you need to install the package that provides this\ +file using \\"%{pkgmgr} install\\".\ If this target is not used this warning can be ignored.")' \ - -e '/FATAL.*import/,/)/d' \ + -e '/Possible reasons include/,/)/d' \ -i %{buildroot}%{_datadir}/%{name}/cmake/ROOTConfig-targets.cmake # Rename to avoid name clashes @@ -2458,30 +2431,6 @@ cp -p interpreter/llvm/src/CREDITS.TXT interpreter/llvm/src/llvm-CREDITS.TXT cp -p interpreter/llvm/src/LICENSE.TXT interpreter/llvm/src/llvm-LICENSE.TXT cp -p interpreter/llvm/src/README.txt interpreter/llvm/src/llvm-README.txt -# Generate documentation -pushd documentation/doxygen -mkdir -p doc/html -ln -s /usr/share/javascript/mathjax doc/html/mathjax -ln -s ../../files files -for x in df014_CsvDataSource_MuRun2010B_cpp.csv \ - df014_CsvDataSource_MuRun2010B_py.csv \ - df015_CsvDataSource_MuRun2010B.csv ; do - ln -sf ../../files/tutorials/df014_CsvDataSource_MuRun2010B.csv $x -done -# Create the py-hsimple.root file in advance (needed as input) -ROOTIGNOREPREFIX=1 PATH=${PWD}/../../%{_vpath_builddir}/bin:${PATH} \ - ROOTSYS=${PWD}/../../%{_vpath_builddir} \ - LD_LIBRARY_PATH=${PWD}/../../%{_vpath_builddir}/lib \ - PYTHONPATH=${PWD}/../../%{_vpath_builddir}/lib \ - %{__python3} ../../tutorials/pyroot/hsimple.py -ROOTIGNOREPREFIX=1 PATH=${PWD}/../../%{_vpath_builddir}/bin:${PATH} \ - ROOTSYS=${PWD}/../../%{_vpath_builddir} \ - LD_LIBRARY_PATH=${PWD}/../../%{_vpath_builddir}/lib \ - PYTHONPATH=${PWD}/../../%{_vpath_builddir}/lib \ - make DOXYGEN_OUTPUT_DIRECTORY=${PWD}/doc PYTHON_EXECUTABLE=%{__python3} -mv doc/html %{buildroot}%{_pkgdocdir}/html -popd - # Create includelist files ... for f in `find %{_vpath_builddir} -name cmake_install.cmake -a '!' -path '*/llvm/*'` ; do l=`sed 's!%{_vpath_builddir}/\(.*\)/cmake_install.cmake!includelist-\1!' <<< $f` @@ -2501,9 +2450,25 @@ cat includelist-core-{[^mw],m[^au]}* > includelist-core cat includelist-geom-geom* > includelist-geom cat includelist-graf2d-x11ttf >> includelist-graf2d-x11 cat includelist-graf3d-rglew >> includelist-graf3d-gl -cat includelist-net-netxng > includelist-netx -%if ! %{xrootd5} -cat includelist-net-netx >> includelist-netx + +# Do python byte compilation (for non-standard paths) +%if %{?fedora}%{!?fedora:0} >= 28 || %{?rhel}%{!?rhel:0} >= 8 +# This is the default for Fedora 30+, set it for Fedora 28-29 +%global _python_bytecompile_extra 0 +%py_byte_compile %{__python3} %{buildroot}%{_datadir}/%{name}/cli +%py_byte_compile %{__python3} %{buildroot}%{_datadir}/gdb/auto-load%{_libdir}/%{name} +%else +%global __os_install_post %(sed /brp-python-bytecompile/d <<< "%__os_install_post") +%py_byte_compile %{__python2} %{python2_sitelib} +%if ! ( "%{python2_sitearch}" == "%{python2_sitelib}" ) +%py_byte_compile %{__python2} %{python2_sitearch} +%endif +%py_byte_compile %{__python3} %{python3_sitelib} +%if ! ( "%{python3_sitearch}" == "%{python3_sitelib}" ) +%py_byte_compile %{__python3} %{python3_sitearch} +%endif +%py_byte_compile %{__python3} %{buildroot}%{_datadir}/%{name}/cli +%py_byte_compile %{__python2} %{buildroot}%{_datadir}/gdb/auto-load%{_libdir}/%{name} %endif %check @@ -2525,6 +2490,7 @@ popd pushd tmva/tmva/test/envelope ln -s ../../../../../files files popd + # Exclude some tests that can not be run # # - test-stressIOPlugins-* @@ -2545,8 +2511,12 @@ popd # reads sqlite data over network: # http://root.cern.ch/files/root_download_stats.sqlite # -# - gtest-tree-treeplayer-test-treeprocessormt-remotefiles # - tutorial-dataframe-df102_NanoAODDimuonAnalysis(-py)? +# reads input data over network: +# root://eospublic.cern.ch//eos/opendata/cms/derived-data/ +# AOD2NanoAODOutreachTool/Run2012BC_DoubleMuParked_Muons.root +# +# - gtest-tree-treeplayer-test-treeprocessormt-remotefiles # - tutorial-dataframe-df103_NanoAODHiggsAnalysis(-py)? # reads input data over network: # root://eospublic.cern.ch//eos/root-eos/cms_opendata_2012_nanoaod/ @@ -2560,7 +2530,7 @@ popd # # - tutorial-v7-climate-global_temperatures # reads input data over network -# http://root.cern./files/tutorials/GlobalLandTemperaturesByCity.csv +# http://root.cern.ch/files/tutorials/GlobalLandTemperaturesByCity.csv # # - tutorial-v7-ntuple-ntpl003_lhcbOpenData # reads input data over network @@ -2603,8 +2573,8 @@ tutorial-multicore-mp104_processH1|\ tutorial-multicore-mp105_processEntryList|\ tutorial-multicore-imt101_parTreeProcessing|\ tutorial-dataframe-df..._SQlite|\ -gtest-tree-treeplayer-test-treeprocessormt-remotefiles|\ tutorial-dataframe-df102_NanoAODDimuonAnalysis|\ +gtest-tree-treeplayer-test-treeprocessormt-remotefiles|\ tutorial-dataframe-df103_NanoAODHiggsAnalysis|\ tutorial-dataframe-df104_HiggsToTwoPhotons-py|\ tutorial-dataframe-df105_WBosonAnalysis-py|\ @@ -2663,67 +2633,38 @@ tutorial-v7-perf.cxx|\ tutorial-v7-perfcomp.cxx|\ tutorial-v7-simple.cxx" -%if %{?rhel}%{!?rhel:0} == 7 -# - test-import-pandas -# - tutorial-dataframe-df026_AsNumpyArrays-py -# requires the pandas python module which is not available in EPEL 7 -# # - tutorial-multicore-mp001_fillHistos # - tutorial-multicore-mp101_fillNtuples # - tutorial-multicore-mp102_readNtuplesFillHistosAndFit # - tutorial-multicore-mp201_parallelHistoFill -# fails intermittently on EPEL 7 with the error -# symbol '_Z6MPRecvP7TSocket' unresolved while linking -# symbol '_Z6MPSendP7TSocketj' unresolved while linking +# Random failures: unresolved while linking [cling interface function]! +# You are probably missing the definition of MPSend(TSocket*, unsigned int) +# You are probably missing the definition of MPRecv(TSocket*) excluded="${excluded}|\ -test-import-pandas|\ -tutorial-dataframe-df026_AsNumpyArrays-py|\ tutorial-multicore-mp001_fillHistos|\ tutorial-multicore-mp101_fillNtuples|\ tutorial-multicore-mp102_readNtuplesFillHistosAndFit|\ tutorial-multicore-mp201_parallelHistoFill" + +%if ! ( %{?fedora}%{!?fedora:0} || %{?rhel}%{!?rhel:0} == 8 ) +# - test-import-pandas +# - tutorial-dataframe-df026_AsNumpyArrays-py +# requires the pandas python module which is not available in EPEL 7 +# or EPEL 9 +excluded="${excluded}|\ +test-import-pandas|\ +tutorial-dataframe-df026_AsNumpyArrays-py" %endif %ifarch %{ix86} %{arm} +%if %{?fedora}%{!?fedora:0} <= 35 # Tests failing on 32 bit architectures (dataframe) -# A bit random - not all the tests fail every time... -# - gtest-tree-dataframe-test-dataframe-cache -# - gtest-tree-dataframe-test-dataframe-callbacks -# - gtest-tree-dataframe-test-dataframe-colnames -# - gtest-tree-dataframe-test-dataframe-concurrency -# - gtest-tree-dataframe-test-dataframe-display -# - gtest-tree-dataframe-test-dataframe-friends -# - gtest-tree-dataframe-test-dataframe-helpers -# - gtest-tree-dataframe-test-dataframe-interface -# - gtest-tree-dataframe-test-dataframe-leaves -# - gtest-tree-dataframe-test-dataframe-ranges -# - gtest-tree-dataframe-test-dataframe-regression -# - gtest-tree-dataframe-test-dataframe-simple -# - gtest-tree-dataframe-test-dataframe-snapshot -# - gtest-tree-dataframe-test-dataframe-vecops -# - gtest-tree-dataframe-test-datasource-csv -# - gtest-tree-dataframe-test-datasource-more -# - gtest-tree-dataframe-test-datasource-sqlite -# - gtest-tree-dataframe-test-datasource-trivial +# - gtest-tree-dataframe-test-dataframe-* +# - gtest-tree-dataframe-test-datasource-* excluded="${excluded}|\ -gtest-tree-dataframe-test-dataframe-cache|\ -gtest-tree-dataframe-test-dataframe-callbacks|\ -gtest-tree-dataframe-test-dataframe-colnames|\ -gtest-tree-dataframe-test-dataframe-concurrency|\ -gtest-tree-dataframe-test-dataframe-display|\ -gtest-tree-dataframe-test-dataframe-friends|\ -gtest-tree-dataframe-test-dataframe-helpers|\ -gtest-tree-dataframe-test-dataframe-interface|\ -gtest-tree-dataframe-test-dataframe-leaves|\ -gtest-tree-dataframe-test-dataframe-ranges|\ -gtest-tree-dataframe-test-dataframe-regression|\ -gtest-tree-dataframe-test-dataframe-simple|\ -gtest-tree-dataframe-test-dataframe-snapshot|\ -gtest-tree-dataframe-test-dataframe-vecops|\ -gtest-tree-dataframe-test-datasource-csv|\ -gtest-tree-dataframe-test-datasource-more|\ -gtest-tree-dataframe-test-datasource-sqlite|\ -gtest-tree-dataframe-test-datasource-trivial" +gtest-tree-dataframe-test-dataframe|\ +gtest-tree-dataframe-test-datasource" +%endif %endif %ifarch %{arm} @@ -2733,7 +2674,8 @@ gtest-tree-dataframe-test-datasource-trivial" # - gtest-tree-tree-test-testBulkApiSillyStruct # segmentation fault - bus error # -# - gtest-tree-dataframe-test-dataframe-histomodels +# - gtest-tree-dataframe-test-dataframe-* +# - gtest-tree-dataframe-test-datasource-* # - gtest-tree-ntuple-v7-test-ntuple-rdf # - pyunittests-dataframe-cache # - pyunittests-dataframe-histograms @@ -2772,7 +2714,8 @@ gtest-tree-dataframe-test-datasource-trivial" excluded="${excluded}|\ gtest-tree-tree-test-testBulkApi\$\$|\ gtest-tree-tree-test-testBulkApiSillyStruct|\ -gtest-tree-dataframe-test-dataframe-histomodels|\ +gtest-tree-dataframe-test-dataframe|\ +gtest-tree-dataframe-test-datasource|\ gtest-tree-ntuple-v7-test-ntuple-rdf|\ pyunittests-dataframe-cache|\ pyunittests-dataframe-histograms|\ @@ -2840,16 +2783,13 @@ test-stressroostats-interpreted" # - libc-2.28 # - librt-2.28 # - pyunittests-pyroot-import-load-libs +# +# segmentation violation +# - tutorial-multicore-mt304_fillHistos excluded="${excluded}|\ gtest-tree-dataframe-test-dataframe-snapshot|\ -pyunittests-pyroot-import-load-libs" -%endif - -%if %{?fedora}%{!?fedora:0} >= 36 -# Fails on Fedora 36 ppc64le -# - test-stressHistFactory(-interpreted) -excluded="${excluded}|\ -test-stressHistFactory" +pyunittests-pyroot-import-load-libs|\ +tutorial-multicore-mt304_fillHistos" %endif %endif @@ -2861,8 +2801,8 @@ test-stressHistFactory" # - gtest-tree-ntuple-v7-test-ntuple-extended # - gtest-tree-ntuple-v7-test-ntuple-minifile # - pyunittests-pyroot-pyz-rtensor -# - test-stresshistogram(-interpreted) # - test-stresshistofit(-interpreted) +# - test-stresshistogram(-interpreted) # - tutorial-dataframe-df006_ranges-py # - tutorial-roofit-rf203_ranges-py # - tutorial-roofit-rf612_recoverFromInvalidParameters @@ -2873,8 +2813,8 @@ gtest-tree-ntuple-v7-test-ntuple-basics|\ gtest-tree-ntuple-v7-test-ntuple-extended|\ gtest-tree-ntuple-v7-test-ntuple-minifile|\ pyunittests-pyroot-pyz-rtensor|\ -test-stresshistogram|\ test-stresshistofit|\ +test-stresshistogram|\ tutorial-dataframe-df006_ranges-py|\ tutorial-roofit-rf203_ranges-py|\ tutorial-roofit-rf612_recoverFromInvalidParameters|\ @@ -2915,6 +2855,22 @@ update-mime-database %{_datadir}/mime >/dev/null 2>&1 || : gtk-update-icon-cache %{_datadir}/icons/hicolor >/dev/null 2>&1 || : %endif +%pretrans net-http -p +path = "%{_datadir}/%{name}/js" +st = posix.stat(path) +if st and st.type == "link" then + os.remove(path) +end + +%post net-http +# Replace bundled jsroot with symlinks to system version +for x in img libs scripts style files/draw.htm files/online.htm ; do + ln -fnrs %{_jsdir}/jsroot/$x %{_datadir}/%{name}/js/$x +done +%{?ldconfig} + +%ldconfig_postun net-http + %if %{buildpy2} %pre -n python2-%{name} if [ -r /var/lib/alternatives/libPyROOT.so ] ; then @@ -2942,7 +2898,7 @@ if [ -e /etc/jupyter/jupyter_notebook_config.py ] ; then fi cat << EOF >> /etc/jupyter/jupyter_notebook_config.py # Extra static path for JupyROOT - start - do not remove this line -c.NotebookApp.extra_static_paths.append('%{_datadir}/javascript/jsroot') +c.NotebookApp.extra_static_paths.append('%{_jsdir}/jsroot') c.NotebookApp.extra_static_paths.append('%{_datadir}/%{name}/notebook') # Extra static path for JupyROOT - end - do not remove this line EOF @@ -2951,7 +2907,7 @@ if [ -e /etc/jupyter/jupyter_server_config.py ] ; then fi cat << EOF >> /etc/jupyter/jupyter_server_config.py # Extra static path for JupyROOT - start - do not remove this line -c.ServerApp.extra_static_paths.append('%{_datadir}/javascript/jsroot') +c.ServerApp.extra_static_paths.append('%{_jsdir}/jsroot') c.ServerApp.extra_static_paths.append('%{_datadir}/%{name}/notebook') # Extra static path for JupyROOT - end - do not remove this line EOF @@ -3047,16 +3003,12 @@ fi %ldconfig_scriptlets net-rpdutils %ldconfig_scriptlets net-auth %ldconfig_scriptlets net-davix -%ldconfig_scriptlets net-http %ldconfig_scriptlets net-httpsniff %ldconfig_scriptlets netx %ldconfig_scriptlets proof %ldconfig_scriptlets proof-bench %ldconfig_scriptlets proof-player %ldconfig_scriptlets proof-sessionviewer -%if ! %{xrootd5} -%ldconfig_scriptlets xproof -%endif %ldconfig_scriptlets roofit %ldconfig_scriptlets roofit-core %ldconfig_scriptlets roofit-more @@ -3119,9 +3071,6 @@ fi %files fonts %{_datadir}/%{name}/fonts -%files doc -%doc %{_pkgdocdir}/html - %files tutorial %doc %{_pkgdocdir}/tutorials @@ -3622,18 +3571,24 @@ fi %files net-http -f includelist-net-http %{_libdir}/%{name}/libRHTTP.* %{_libdir}/%{name}/libRHTTP_rdict.pcm -%{_datadir}/%{name}/js +%dir %{_datadir}/%{name}/js +%dir %{_datadir}/%{name}/js/files +%{_datadir}/%{name}/js/files/canv_batch.htm +%{_datadir}/%{name}/js/files/web.config +%{_datadir}/%{name}/js/files/wslist.htm +%ghost %{_datadir}/%{name}/js/img +%ghost %{_datadir}/%{name}/js/libs +%ghost %{_datadir}/%{name}/js/scripts +%ghost %{_datadir}/%{name}/js/style +%ghost %{_datadir}/%{name}/js/files/draw.htm +%ghost %{_datadir}/%{name}/js/files/online.htm %doc net/http/README.txt net/http/civetweb/*.md %files net-httpsniff -f includelist-net-httpsniff %{_libdir}/%{name}/libRHTTPSniff.* %{_libdir}/%{name}/libRHTTPSniff_rdict.pcm -%files netx -f includelist-netx -%if ! %{xrootd5} -%{_libdir}/%{name}/libNetx.* -%{_libdir}/%{name}/libNetx_rdict.pcm -%endif +%files netx -f includelist-net-netxng %{_libdir}/%{name}/libNetxNG.* %{_libdir}/%{name}/libNetxNG_rdict.pcm %{_datadir}/%{name}/plugins/TFile/P100_TXNetFile.C @@ -3682,19 +3637,6 @@ fi %{_datadir}/%{name}/plugins/TProofProgressLog/P010_TProofProgressLog.C %{_datadir}/%{name}/plugins/TSessionViewer/P010_TSessionViewer.C -%if ! %{xrootd5} -%files xproof -f includelist-proof-proofx -%{_bindir}/proofexecv -%{_bindir}/xproofd -%{_mandir}/man1/xproofd.1* -%{_libdir}/%{name}/libProofx.* -%{_libdir}/%{name}/libProofx_rdict.pcm -%{_libdir}/%{name}/libXrdProofd.* -%{_datadir}/%{name}/plugins/TProofMgr/P010_TXProofMgr.C -%{_datadir}/%{name}/plugins/TProofServ/P010_TXProofServ.C -%{_datadir}/%{name}/plugins/TSlave/P010_TXSlave.C -%endif - %files roofit -f includelist-roofit-roofit %{_libdir}/%{name}/libRooFit.* %{_libdir}/%{name}/libRooFit_rdict.pcm @@ -3876,13 +3818,30 @@ fi %endif %changelog +* Sun Mar 19 2023 Mattias Ellert - 6.24.08-2 +- Make DistRDF optional +- Update the root-tmva-threads patch (upstream's version) +- Exclude multiproc tests with random failures + +* Fri Oct 21 2022 Mattias Ellert - 6.24.08-1 +- 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 + * Thu Feb 10 2022 Orion Poplawski - 6.24.06-6 - Rebuild for glew 2.2 * Fri Jan 28 2022 Mattias Ellert - 6.24.06-5 - Exclude failing test on Fedora 36 ppc64le: test-stressHistFactory(-interpreted) -# Disable package note flags +- Disable package note flags * Fri Jan 21 2022 Fedora Release Engineering - 6.24.06-4 - Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild diff --git a/sources b/sources index 31dae3c..c586bda 100644 --- a/sources +++ b/sources @@ -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