diff --git a/root-32bit-dataframe.patch b/root-32bit-dataframe.patch deleted file mode 100644 index 89e3c95..0000000 --- a/root-32bit-dataframe.patch +++ /dev/null @@ -1,170 +0,0 @@ -From 686d5011df607fde2a42c729d6bd446486163784 Mon Sep 17 00:00:00 2001 -From: Mattias Ellert -Date: Fri, 13 Mar 2020 16:20:17 +0100 -Subject: [PATCH] Restore 32-bit dataframe - ---- - build/unix/makepchinput.py | 3 --- - cmake/modules/RootBuildOptions.cmake | 5 ----- - tree/dataframe/test/dataframe_cache.cxx | 4 ---- - tree/dataframe/test/datasource_arrow.cxx | 4 ---- - tree/dataframe/test/datasource_csv.cxx | 4 ---- - tree/dataframe/test/datasource_root.cxx | 4 ---- - tree/dataframe/test/datasource_trivial.cxx | 4 ---- - tutorials/CMakeLists.txt | 5 ----- - 8 files changed, 33 deletions(-) - -diff --git a/build/unix/makepchinput.py b/build/unix/makepchinput.py -index 1adff487de..eec73f946d 100755 ---- a/build/unix/makepchinput.py -+++ b/build/unix/makepchinput.py -@@ -252,9 +252,6 @@ def isDirForPCH(dirName, legacyPyROOT): - "math/vdt", - "tmva/rmva"] - -- if (sys.platform != 'win32' and sys.maxsize <= 2**32): # https://docs.python.org/3/library/platform.html#cross-platform -- PCHPatternsBlacklist.append("tree/dataframe") -- - accepted = isAnyPatternInString(PCHPatternsWhitelist,dirName) and \ - not isAnyPatternInString(PCHPatternsBlacklist,dirName) - -diff --git a/cmake/modules/RootBuildOptions.cmake b/cmake/modules/RootBuildOptions.cmake -index 7886c5f3e9..6fbd8873f1 100644 ---- a/cmake/modules/RootBuildOptions.cmake -+++ b/cmake/modules/RootBuildOptions.cmake -@@ -344,11 +344,6 @@ if(CMAKE_SYSTEM_PROCESSOR MATCHES aarch64) - set(runtime_cxxmodules_defvalue OFF) - endif() - --# Disable RDataFrame on 32-bit UNIX platforms due to ROOT-9236 --if(UNIX AND CMAKE_SIZEOF_VOID_P EQUAL 4) -- set(dataframe_defvalue OFF) --endif() -- - # MultiProcess is not possible on Windows, so fail if it is manually set: - if(roofit_multiprocess AND WIN32) - message(FATAL_ERROR ">>> Option 'roofit_multiprocess' is not supported on Windows.") -diff --git a/tree/dataframe/test/dataframe_cache.cxx b/tree/dataframe/test/dataframe_cache.cxx -index 77be488052..8475b98acb 100644 ---- a/tree/dataframe/test/dataframe_cache.cxx -+++ b/tree/dataframe/test/dataframe_cache.cxx -@@ -224,8 +224,6 @@ TEST(Cache, evtCounter) - - } - --#ifdef R__B64 -- - TEST(Cache, Regex) - { - -@@ -329,8 +327,6 @@ TEST(Cache, Carrays) - gSystem->Unlink(fileName); - } - --#endif // R__B64 -- - // ROOT-10563 - TEST(Cache, Alias) - { -diff --git a/tree/dataframe/test/datasource_arrow.cxx b/tree/dataframe/test/datasource_arrow.cxx -index 5ac9fcf09a..5f5f94a666 100644 ---- a/tree/dataframe/test/datasource_arrow.cxx -+++ b/tree/dataframe/test/datasource_arrow.cxx -@@ -177,8 +177,6 @@ TEST(RArrowDS, SetNSlotsTwice) - } - #endif - --#ifdef R__B64 -- - TEST(RArrowDS, FromARDF) - { - std::unique_ptr tds(new RArrowDS(createTestTable(), {})); -@@ -250,5 +248,3 @@ TEST(RArrowDS, FromARDFWithJittingMT) - } - - #endif // R__USE_IMT -- --#endif // R__B64 -diff --git a/tree/dataframe/test/datasource_csv.cxx b/tree/dataframe/test/datasource_csv.cxx -index 6554719f98..d93117b67a 100644 ---- a/tree/dataframe/test/datasource_csv.cxx -+++ b/tree/dataframe/test/datasource_csv.cxx -@@ -210,8 +210,6 @@ TEST(RCsvDS, SetNSlotsTwice) - } - #endif - --#ifdef R__B64 -- - TEST(RCsvDS, FromARDF) - { - std::unique_ptr tds(new RCsvDS(fileName0)); -@@ -324,5 +322,3 @@ TEST(RCsvDS, ProgressiveReadingRDFMT) - } - - #endif // R__USE_IMT -- --#endif // R__B64 -diff --git a/tree/dataframe/test/datasource_root.cxx b/tree/dataframe/test/datasource_root.cxx -index 79840d9fff..4c795fee6f 100644 ---- a/tree/dataframe/test/datasource_root.cxx -+++ b/tree/dataframe/test/datasource_root.cxx -@@ -117,8 +117,6 @@ TEST(TRootTDS, SetNSlotsTwice) - } - #endif - --#ifdef R__B64 -- - TEST(TRootTDS, FromARDF) - { - std::unique_ptr tds(new ROOT::Internal::RDF::RRootDS(treeName, fileGlob)); -@@ -190,5 +188,3 @@ TEST(TRootTDS, FromARDFWithJittingMT) - } - - #endif // R__USE_IMT -- --#endif // R__B64 -diff --git a/tree/dataframe/test/datasource_trivial.cxx b/tree/dataframe/test/datasource_trivial.cxx -index 7da675c83b..deb89301c7 100644 ---- a/tree/dataframe/test/datasource_trivial.cxx -+++ b/tree/dataframe/test/datasource_trivial.cxx -@@ -141,8 +141,6 @@ TEST(RTrivialDS, EarlyQuitWithRange) - EXPECT_EQ(df.Range(10).Count().GetValue(), 10); - } - --#ifdef R__B64 -- - TEST(RTrivialDS, FromARDFWithJitting) - { - std::unique_ptr tds(new RTrivialDS(32)); -@@ -245,5 +243,3 @@ TEST(RTrivialDS, SkipEntriesMT) - } - - #endif // R__USE_IMT -- --#endif // R__B64 -diff --git a/tutorials/CMakeLists.txt b/tutorials/CMakeLists.txt -index a6e5c97703..12bb610d67 100644 ---- a/tutorials/CMakeLists.txt -+++ b/tutorials/CMakeLists.txt -@@ -332,10 +332,6 @@ else() - list(APPEND root7_veto ${v7_veto_files}) - endif() - --if( CMAKE_SIZEOF_VOID_P EQUAL 4 ) -- set(bits32_veto dataframe/*.C graphs/timeSeriesFrom*.C v7/ntuple/ntpl004_dimuon.C) --endif() -- - if (APPLE AND CMAKE_SYSTEM_PROCESSOR MATCHES arm64) - set(macm1_veto dataframe/df107_SingleTopAnalysis.py) - endif() -@@ -391,7 +387,6 @@ set(all_veto hsimple.C - ${classic_veto} - ${pythia_veto} - ${root7_veto} -- ${bits32_veto} - ${xrootd_veto} - ${mlp_veto} - ${spectrum_veto} --- -2.35.1 - diff --git a/root-32bit-tests.patch b/root-32bit-tests.patch index ea926b4..ae15a5d 100644 --- a/root-32bit-tests.patch +++ b/root-32bit-tests.patch @@ -1,7 +1,7 @@ -From 70d941cd6ebbc3726e08ef7f52d0135453f0b840 Mon Sep 17 00:00:00 2001 +From 55446dcd6eabc1fff218f266c11f31697fe99f09 Mon Sep 17 00:00:00 2001 From: Mattias Ellert Date: Fri, 13 Mar 2020 16:21:55 +0100 -Subject: [PATCH 2/3] Run tests on 32 bit +Subject: [PATCH] Run tests on 32 bit --- test/stressGeometry.cxx | 8 -------- @@ -9,7 +9,7 @@ Subject: [PATCH 2/3] Run tests on 32 bit 2 files changed, 3 insertions(+), 15 deletions(-) diff --git a/test/stressGeometry.cxx b/test/stressGeometry.cxx -index 5e81f5f2ca..18e41a6f45 100644 +index f8d78f4f54..617b9e1644 100644 --- a/test/stressGeometry.cxx +++ b/test/stressGeometry.cxx @@ -257,14 +257,6 @@ void stressGeometry(const char *exp="*", Bool_t generate_ref=kFALSE, Bool_t vecg @@ -28,26 +28,26 @@ index 5e81f5f2ca..18e41a6f45 100644 TString fname; for (i=0; i +Date: Tue, 2 Dec 2025 05:33:31 +0100 +Subject: [PATCH] Adjust test/stressGraphics.ref + +--- + test/stressGraphics.ref | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +diff --git a/test/stressGraphics.ref b/test/stressGraphics.ref +index 2498ec6d755..4520a5ab113 100644 +--- a/test/stressGraphics.ref ++++ b/test/stressGraphics.ref +@@ -10,11 +10,11 @@ Test# PS1Ref# PS1Err# PDFRef# PDFErr# JPGRef# JPGErr# PNGRef# PN + 9 9253 100 14377 150 19851 2400 12199 900 9283 100 + 10 8863 70 13645 100 24343 1100 23278 1700 8894 70 + 11 12971 100 14750 50 34063 2000 32033 1200 13070 150 +- 12 7674 100 13533 50 83557 3000 38505 4000 7720 150 +- 13 5600 400 13242 300 16881 400 15063 800 5638 400 ++ 12 7674 100 13533 100 83557 3000 38505 4000 7720 150 ++ 13 5600 400 13242 400 16881 400 15063 800 5638 400 + 14 14190539 4000000 12926 100 23076 9500 25987 3000 14190704 4000000 + 15 15690 5000 17179 200 23076 9500 14232 1500 10437 5000 +- 16 28072 400 23520 200 44462 11000 30062 5000 38007 400 ++ 16 28072 400 23520 250 44462 11000 30062 5000 38007 400 + 17 20444 400 21520 150 27511 11000 16867 600 20721 400 + 18 15894 100 19305 200 27187 10300 15925 350 15925 100 + 19 22521 300 42926 250 43868 17000 19232 11000 22729 300 +@@ -44,7 +44,7 @@ Test# PS1Ref# PS1Err# PDFRef# PDFErr# JPGRef# JPGErr# PNGRef# PN + 43 207729 750 87126 750 76094 38000 54717 11000 210497 800 + 44 401670 6500 156361 2000 62719 34100 45592 14000 410114 6500 + 45 566142 5000 225206 2000 65828 31800 53934 6500 573396 5000 +- 46 3738751 35000 1292739 12000 60580 9900 133547 3500 3783013 35000 ++ 46 3738751 35000 1292739 13000 60580 9900 133547 3500 3783013 35000 + 47 1466028 9000 853193 50000 38425 13500 91242 18100 1463263 7500 + 48 38312 200 56877 750 36524 11800 119641 8000 38121 200 + 49 19556 1000 31967 1000 36859 10000 37602 8000 19900 3000 +@@ -53,7 +53,7 @@ Test# PS1Ref# PS1Err# PDFRef# PDFErr# JPGRef# JPGErr# PNGRef# PN + 52 270825 10000 115500 1000 45496 11000 34685 5000 272950 10000 + 53 15025 3000 29289 500 42525 11300 33336 3900 14787 4000 + 54 254604 5000 383258 7000 55666 30400 46534 6500 259594 7000 +- 55 4846 150 14075 150 33239 600 25303 500 4877 150 ++ 55 4846 150 14075 200 33239 600 25303 500 4877 150 + 56 1435879 150000 12837 100 25830 100 365000 15000 1085792 250000 + 57 5884 500 16577 200 40706 14000 30026 4000 5884 500 + 58 5723 700 15720 200 32236 11000 16916 3200 5670 800 +-- +2.52.0 + diff --git a/root-Fix-a-numpy-test-for-32-bit-archs.patch b/root-Fix-a-numpy-test-for-32-bit-archs.patch new file mode 100644 index 0000000..5e095f3 --- /dev/null +++ b/root-Fix-a-numpy-test-for-32-bit-archs.patch @@ -0,0 +1,32 @@ +From 40f8cd0adeb7257778c789e1ae639f260780402b Mon Sep 17 00:00:00 2001 +From: Mattias Ellert +Date: Sun, 7 Dec 2025 19:30:55 +0100 +Subject: [PATCH] Fix a numpy test for 32 bit archs + +The default dtype used in numpy array is "int". This type has +different sizes on 32 and 64 bit architectures. The test tries to use +the numpy array as a Long64_t dataframe. On 32 bit architectures this +results in an error. + +This commit explicitly changes the numpy array's dtype to "int64" to +match the Long64_t dataframe type on all architectyres. +--- + bindings/pyroot/pythonizations/test/rdataframe_misc.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/bindings/pyroot/pythonizations/test/rdataframe_misc.py b/bindings/pyroot/pythonizations/test/rdataframe_misc.py +index 1a1efd21b3e..150828613b3 100644 +--- a/bindings/pyroot/pythonizations/test/rdataframe_misc.py ++++ b/bindings/pyroot/pythonizations/test/rdataframe_misc.py +@@ -132,7 +132,7 @@ class RDataFrameMisc(unittest.TestCase): + return + out_path = "dataframe_misc_regression_gh20291.root" + try: +- x, y = numpy.array([1, 2, 3]), numpy.array([4, 5, 6]) ++ x, y = numpy.array([1, 2, 3], dtype='int64'), numpy.array([4, 5, 6], dtype='int64') + df = ROOT.RDF.FromNumpy({"x": x, "y": y}) + + df.Snapshot("tree", out_path) +-- +2.52.0 + diff --git a/root-Geom-Add-missing-includes-of-TMath.h.patch b/root-Geom-Add-missing-includes-of-TMath.h.patch new file mode 100644 index 0000000..966d8da --- /dev/null +++ b/root-Geom-Add-missing-includes-of-TMath.h.patch @@ -0,0 +1,63 @@ +From 0e1e1f0ba1908ae1020337ed7ec0565bf979b92c Mon Sep 17 00:00:00 2001 +From: Mattias Ellert +Date: Tue, 2 Dec 2025 04:57:30 +0100 +Subject: [PATCH] [Geom] Add missing includes of TMath.h + +--- + geom/geombuilder/src/TGeoParaEditor.cxx | 1 + + geom/geombuilder/src/TGeoPconEditor.cxx | 1 + + geom/geombuilder/src/TGeoPgonEditor.cxx | 1 + + geom/geombuilder/src/TGeoTrapEditor.cxx | 1 + + 4 files changed, 4 insertions(+) + +diff --git a/geom/geombuilder/src/TGeoParaEditor.cxx b/geom/geombuilder/src/TGeoParaEditor.cxx +index fdc344ba4d2..bd173607d2c 100644 +--- a/geom/geombuilder/src/TGeoParaEditor.cxx ++++ b/geom/geombuilder/src/TGeoParaEditor.cxx +@@ -27,6 +27,7 @@ Editor for a TGeoPara. + #include "TVirtualGeoPainter.h" + #include "TVirtualPad.h" + #include "TView.h" ++#include "TMath.h" + #include "TGButton.h" + #include "TGTextEntry.h" + #include "TGNumberEntry.h" +diff --git a/geom/geombuilder/src/TGeoPconEditor.cxx b/geom/geombuilder/src/TGeoPconEditor.cxx +index a66359853be..50598d2cb90 100644 +--- a/geom/geombuilder/src/TGeoPconEditor.cxx ++++ b/geom/geombuilder/src/TGeoPconEditor.cxx +@@ -27,6 +27,7 @@ Editor for a TGeoPcon. + #include "TVirtualGeoPainter.h" + #include "TVirtualPad.h" + #include "TView.h" ++#include "TMath.h" + #include "TGCanvas.h" + #include "TGButton.h" + #include "TGTextEntry.h" +diff --git a/geom/geombuilder/src/TGeoPgonEditor.cxx b/geom/geombuilder/src/TGeoPgonEditor.cxx +index 949d0045a66..33638d66b2b 100644 +--- a/geom/geombuilder/src/TGeoPgonEditor.cxx ++++ b/geom/geombuilder/src/TGeoPgonEditor.cxx +@@ -27,6 +27,7 @@ Editor for a TGeoPgon. + #include "TVirtualGeoPainter.h" + #include "TVirtualPad.h" + #include "TView.h" ++#include "TMath.h" + #include "TGTextEntry.h" + #include "TGNumberEntry.h" + #include "TGLabel.h" +diff --git a/geom/geombuilder/src/TGeoTrapEditor.cxx b/geom/geombuilder/src/TGeoTrapEditor.cxx +index d9c2916d075..459e0191117 100644 +--- a/geom/geombuilder/src/TGeoTrapEditor.cxx ++++ b/geom/geombuilder/src/TGeoTrapEditor.cxx +@@ -27,6 +27,7 @@ Editor for a TGeoTrap. + #include "TVirtualGeoPainter.h" + #include "TVirtualPad.h" + #include "TView.h" ++#include "TMath.h" + #include "TGButton.h" + #include "TGTextEntry.h" + #include "TGNumberEntry.h" +-- +2.52.0 + diff --git a/root-PyROOT-Don-t-install-the-python-modules-twice.patch b/root-PyROOT-Don-t-install-the-python-modules-twice.patch new file mode 100644 index 0000000..608765d --- /dev/null +++ b/root-PyROOT-Don-t-install-the-python-modules-twice.patch @@ -0,0 +1,70 @@ +From f09b4ce027b31dcd19ea8a398c35c5dfbcc0507f Mon Sep 17 00:00:00 2001 +From: Mattias Ellert +Date: Thu, 18 Dec 2025 11:49:12 +0100 +Subject: [PATCH] [PyROOT] Don't install the python modules twice + +The binary python modules were moved one directory level down into the +ROOT and cppyy directories, so that they reside alongside the python +files in the same directories. The install rule for the python files +must therefore be extended to exclude the binary modules (PATTERN *.so +EXCLUDE) so that these are not installed a second time overwriting the +files installed by the install rule for the binary modules with another +copy with the wrong file permissions. + +Also use the no-version option for the cppyy binary module as is +already done for the pythonization binary module, since it is now +installed in the python directory. Before it was installed in the +library directory with an unversioned symlink in the python directory. +--- + bindings/pyroot/cppyy/CPyCppyy/CMakeLists.txt | 2 +- + bindings/pyroot/cppyy/cppyy/CMakeLists.txt | 5 +++-- + bindings/pyroot/pythonizations/CMakeLists.txt | 3 ++- + 3 files changed, 6 insertions(+), 4 deletions(-) + +diff --git a/bindings/pyroot/cppyy/CPyCppyy/CMakeLists.txt b/bindings/pyroot/cppyy/CPyCppyy/CMakeLists.txt +index bb48c032974..065a89348ff 100644 +--- a/bindings/pyroot/cppyy/CPyCppyy/CMakeLists.txt ++++ b/bindings/pyroot/cppyy/CPyCppyy/CMakeLists.txt +@@ -73,7 +73,7 @@ endif() + add_library(cppyy SHARED src/CPyCppyyPyModule.cxx) + + # Set the suffix to '.so' and the prefix to 'lib' +-set_target_properties(cppyy PROPERTIES ${ROOT_LIBRARY_PROPERTIES} ++set_target_properties(cppyy PROPERTIES ${ROOT_LIBRARY_PROPERTIES_NO_VERSION} + LIBRARY_OUTPUT_DIRECTORY ${localruntimedir}/cppyy) + if(MSVC) + target_link_libraries(cppyy PRIVATE CPyCppyy) +diff --git a/bindings/pyroot/cppyy/cppyy/CMakeLists.txt b/bindings/pyroot/cppyy/cppyy/CMakeLists.txt +index 3a29b4525f7..842ad12df97 100644 +--- a/bindings/pyroot/cppyy/cppyy/CMakeLists.txt ++++ b/bindings/pyroot/cppyy/cppyy/CMakeLists.txt +@@ -31,8 +31,9 @@ endforeach() + # Install Python sources and bytecode + install(DIRECTORY ${localruntimedir}/cppyy + DESTINATION ${CMAKE_INSTALL_PYTHONDIR} +- COMPONENT libraries) ++ COMPONENT libraries ++ PATTERN *.so EXCLUDE) + + if(NOT MSVC) + ROOT_ADD_TEST_SUBDIRECTORY(test) +-endif() +\ No newline at end of file ++endif() +diff --git a/bindings/pyroot/pythonizations/CMakeLists.txt b/bindings/pyroot/pythonizations/CMakeLists.txt +index 1230f18ca47..b415ba13697 100644 +--- a/bindings/pyroot/pythonizations/CMakeLists.txt ++++ b/bindings/pyroot/pythonizations/CMakeLists.txt +@@ -239,7 +239,8 @@ install(TARGETS ${libname} EXPORT ${CMAKE_PROJECT_NAME}Exports + # Install Python sources and bytecode + install(DIRECTORY ${localruntimedir}/ROOT + DESTINATION ${CMAKE_INSTALL_PYTHONDIR} +- COMPONENT libraries) ++ COMPONENT libraries ++ PATTERN *.so EXCLUDE) + + # Install headers required by pythonizations + install(FILES ${PYROOT_EXTRA_HEADERS} +-- +2.52.0 + 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 deleted file mode 100644 index ca908b8..0000000 --- a/root-PyROOT-Prevent-cast-error-when-calling-PyTuple_SET_I.patch +++ /dev/null @@ -1,29 +0,0 @@ -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-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 deleted file mode 100644 index a845fa4..0000000 --- a/root-PyROOT-code.h-must-not-be-included-directly-in-3.11.patch +++ /dev/null @@ -1,34 +0,0 @@ -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-Python-Fix-TF1-Pythonization-test-for-NumPy-2.4.0.patch b/root-Python-Fix-TF1-Pythonization-test-for-NumPy-2.4.0.patch new file mode 100644 index 0000000..2bc2576 --- /dev/null +++ b/root-Python-Fix-TF1-Pythonization-test-for-NumPy-2.4.0.patch @@ -0,0 +1,82 @@ +From d5135f7869406396b3ba8e944c71dbdd67d3ea01 Mon Sep 17 00:00:00 2001 +From: Jonas Rembser +Date: Tue, 23 Dec 2025 19:04:45 +0100 +Subject: [PATCH] [Python] Fix TF1 Pythonization test for NumPy 2.4.0 + +The new NumPy 2.4.0 is more strict when implicitly converting 1-element +arrays to scalars. It doesn't do that anymore, causing the TF1 +Pythonization tests to fail (see log below). + +This actually pointed to a real mistake in setting up the test, where a +2D array was used to define the TFormula parameters while it should be a +1D array. + +```txt + 962/3718 Test #93: pyunittests-bindings-pyroot-pythonizations-pyroot-pyz-tf-pycallables ..............................***Failed 3.05 sec +test_callable (tf_pycallables.TF1.test_callable) +Test function provided as callable ... ok +test_evalpar (tf_pycallables.TF1.test_evalpar) +Test the 2D Numpy array pythonizations for TF1::EvalPar ... ERROR +test_evalpar_dynamic (tf_pycallables.TF1.test_evalpar_dynamic) +Test the 2D NumPy pythonizations with dynamic TF1 data dimensions ... ok +test_fitgauss (tf_pycallables.TF1.test_fitgauss) +Test fitting a histogram to a Python function ... ok +test_identity (tf_pycallables.TF1.test_identity) +Test simple function without parameters ... ok +test_params (tf_pycallables.TF1.test_params) +Test function with parameters ... ok +test_params (tf_pycallables.TF2.test_params) +Test function with parameters ... ok +test_params (tf_pycallables.TF3.test_params) +Test function with parameters ... ok + +====================================================================== +ERROR: test_evalpar (tf_pycallables.TF1.test_evalpar) +Test the 2D Numpy array pythonizations for TF1::EvalPar +---------------------------------------------------------------------- +Traceback (most recent call last): + File "/github/home/ROOT-CI/src/bindings/pyroot/pythonizations/test/tf_pycallables.py", line 129, in test_evalpar + expected_value = pyf_tf1_coulomb(x[i, ::2], params) + File "/github/home/ROOT-CI/src/bindings/pyroot/pythonizations/test/tf_pycallables.py", line 33, in pyf_tf1_coulomb + return p[1] * x[0] * x[1] / (p[0]**2) * math.exp(-p[2] / p[0]) + ~~~~~~~~^^^^^^^^^^^^^^ +TypeError: only 0-dimensional arrays can be converted to Python scalars + +---------------------------------------------------------------------- +Ran 8 tests in 1.469s + +FAILED (errors=1) +CMake Error at /github/home/ROOT-CI/src/cmake/modules/RootTestDriver.cmake:232 (message): + error code: 1 + +``` +--- + .../pyroot/pythonizations/test/tf_pycallables.py | 12 +++++++----- + 1 file changed, 7 insertions(+), 5 deletions(-) + +diff --git a/bindings/pyroot/pythonizations/test/tf_pycallables.py b/bindings/pyroot/pythonizations/test/tf_pycallables.py +index 2a7d6b72462..5a223030ec9 100644 +--- a/bindings/pyroot/pythonizations/test/tf_pycallables.py ++++ b/bindings/pyroot/pythonizations/test/tf_pycallables.py +@@ -116,11 +116,13 @@ class TF1(unittest.TestCase): + [3.0, 10, 4.0] + ]) + +- params = np.array([ +- [1.0], # Distance between charges r +- [8.99e9], # Coulomb constant k (in N·m²/C²) +- [0.1] # Additional factor for modulation +- ]) ++ params = np.array( ++ [ ++ 1.0, # Distance between charges r ++ 8.99e9, # Coulomb constant k (in N·m²/C²) ++ 0.1, # Additional factor for modulation ++ ] ++ ) + + # Slice to avoid the dummy column of 10's + res = rtf1_coulomb.EvalPar(x[:, ::2], params) +-- +2.52.0 + diff --git a/root-RF-Use-TRandom3-in-test-RooFuncWrapper.patch b/root-RF-Use-TRandom3-in-test-RooFuncWrapper.patch new file mode 100644 index 0000000..34bdebc --- /dev/null +++ b/root-RF-Use-TRandom3-in-test-RooFuncWrapper.patch @@ -0,0 +1,50 @@ +From e1f42658629ad67ce7cb224a1379d133f61f2e35 Mon Sep 17 00:00:00 2001 +From: Jonas Rembser +Date: Sun, 11 Jan 2026 10:25:51 +0100 +Subject: [PATCH] [RF] Use TRandom3 in test RooFuncWrapper + +Use TRandom3 instead of the `` to get compiler-independent, +reproducible behavior. +--- + roofit/roofitcore/test/testRooFuncWrapper.cxx | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +diff --git a/roofit/roofitcore/test/testRooFuncWrapper.cxx b/roofit/roofitcore/test/testRooFuncWrapper.cxx +index 2ebdf95333f..189e8f2e266 100644 +--- a/roofit/roofitcore/test/testRooFuncWrapper.cxx ++++ b/roofit/roofitcore/test/testRooFuncWrapper.cxx +@@ -34,12 +34,12 @@ + #include + + #include ++#include + #include ++#include + #include +-#include + + #include +-#include + + #include "gtest_wrapper.h" + +@@ -66,13 +66,13 @@ double getNumDerivative(const RooAbsReal &pdf, RooRealVar &var, const RooArgSet + + void randomizeParameters(const RooArgSet ¶meters) + { ++ TRandom3 rng(1337); ++ + double lowerBound = -0.1; + double upperBound = 0.1; +- std::uniform_real_distribution unif(lowerBound, upperBound); +- std::default_random_engine re; + + for (auto *param : parameters) { +- double mul = unif(re); ++ double mul = rng.Uniform(lowerBound, upperBound); + + auto par = dynamic_cast(param); + if (!par) +-- +2.52.0 + diff --git a/root-Revert-test-Fetch-the-geometries-from-EOS-and-not-fr.patch b/root-Revert-test-Fetch-the-geometries-from-EOS-and-not-fr.patch new file mode 100644 index 0000000..a45ae41 --- /dev/null +++ b/root-Revert-test-Fetch-the-geometries-from-EOS-and-not-fr.patch @@ -0,0 +1,60 @@ +From 4da50ef374cd231163dff77493f9367cd62583d9 Mon Sep 17 00:00:00 2001 +From: Mattias Ellert +Date: Sun, 30 Mar 2025 21:23:14 +0200 +Subject: [PATCH] Revert "[test] Fetch the geometries from EOS and not from the + website" + +This reverts commit a8a879ce252e45405452db38d9178c7883582a7d. +--- + test/stressGeometry.cxx | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +diff --git a/test/stressGeometry.cxx b/test/stressGeometry.cxx +index 7fb6bf97e7..f8d78f4f54 100644 +--- a/test/stressGeometry.cxx ++++ b/test/stressGeometry.cxx +@@ -1,6 +1,6 @@ + // Program to check a TGeo geometry + // The first time you run this program, the geometry files will be taken +-// from /eos/root-eos/testfiles/ (previously from http://root.cern/files) ++// from http://root.cern/files + // + // How the program works + // If the file _ref.root does not exist, it is generated. The file +@@ -274,13 +274,13 @@ void stressGeometry(const char *exp="*", Bool_t generate_ref=kFALSE, Bool_t vecg + delete gGeoManager; + gGeoManager = 0; + } +- TGeoManager::Import(Form("root://eospublic.cern.ch//eos/root-eos/testfiles/%s",fname.Data())); ++ TGeoManager::Import(Form("http://root.cern/files/%s",fname.Data())); + if (!gGeoManager) return; + if (vecgeom) TVirtualGeoConverter::Instance()->ConvertGeometry(); + + fname = TString::Format("files/%s_ref_%d.root", exps[i],versions[i]); + +- if (gen_ref || !TFile::Open(Form("root://eospublic.cern.ch//eos/root-eos/testfiles//%s_ref_%d.root",exps[i],versions[i]),"CACHEREAD")) { ++ if (gen_ref || !TFile::Open(Form("http://root.cern/files/%s_ref_%d.root",exps[i],versions[i]),"CACHEREAD")) { + if (!gen_ref) fprintf(stderr,"File: %s does not exist, generating it\n", fname.Data()); + else fprintf(stderr,"Generating reference file %s\n", fname.Data()); + WriteRef(i); +@@ -320,7 +320,7 @@ void ReadRef(Int_t kexp) { + TFile *f = 0; + //use ref_[version[i]] files + if (!gen_ref) +- fname = TString::Format("root://eospublic.cern.ch//eos/root-eos/testfiles//%s_ref_%d.root", exps[kexp],versions[kexp]); ++ fname = TString::Format("http://root.cern/files/%s_ref_%d.root", exps[kexp],versions[kexp]); + else + fname.Format("files/%s_ref_%d.root", exps[kexp],versions[kexp]); + +@@ -546,7 +546,7 @@ void InspectDiff(const char* exp="alice",Long64_t ientry=-1) { + Float_t rad = 0.; + TString fname(TString::Format("%s.root",exp)); + if (gSystem->AccessPathName(fname)) { +- TGeoManager::Import(Form("root://eospublic.cern.ch//eos/root-eos/testfiles//%s",fname.Data())); ++ TGeoManager::Import(Form("http://root.cern/files/%s",fname.Data())); + } else { + TGeoManager::Import(fname); + } +-- +2.49.0 + diff --git a/root-Save-memory-Do-not-link-to-LLVM-libraries-in-parallel.patch b/root-Save-memory-Do-not-link-to-LLVM-libraries-in-parallel.patch new file mode 100644 index 0000000..4d5587f --- /dev/null +++ b/root-Save-memory-Do-not-link-to-LLVM-libraries-in-parallel.patch @@ -0,0 +1,47 @@ +From 98a5042a02dd7c1aaa9fbd5e54c8620c6b72484f Mon Sep 17 00:00:00 2001 +From: Mattias Ellert +Date: Mon, 2 Jun 2025 21:22:39 +0200 +Subject: [PATCH] Save memory. Do not link to LLVM libraries in parallel + +--- + core/clingutils/test/CMakeLists.txt | 3 +++ + interpreter/CppInterOp/unittests/CppInterOp/CMakeLists.txt | 6 ++++++ + 2 files changed, 9 insertions(+) + +diff --git a/core/clingutils/test/CMakeLists.txt b/core/clingutils/test/CMakeLists.txt +index a6c7aedac99..90ac0139c24 100644 +--- a/core/clingutils/test/CMakeLists.txt ++++ b/core/clingutils/test/CMakeLists.txt +@@ -36,3 +36,6 @@ if(NOT builtin_clang) + endif() + + ROOT_ADD_UNITTEST_DIR(Core ${CLING_LIBRARIES} $) ++ ++# Save memory. Do not link to LLVM libraries in parallel ++add_dependencies(coreclingutilstestUnit CppInterOpTests) +diff --git a/interpreter/CppInterOp/unittests/CppInterOp/CMakeLists.txt b/interpreter/CppInterOp/unittests/CppInterOp/CMakeLists.txt +index 4b4b43bdd29..a028802fedc 100644 +--- a/interpreter/CppInterOp/unittests/CppInterOp/CMakeLists.txt ++++ b/interpreter/CppInterOp/unittests/CppInterOp/CMakeLists.txt +@@ -66,6 +66,9 @@ target_link_libraries(CppInterOpTests + clangCppInterOp + ) + ++# Save memory. Do not link to LLVM libraries in parallel ++add_dependencies(CppInterOpTests DynamicLibraryManagerTests) ++ + set_output_directory(CppInterOpTests + BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${EXTRA_PATH_TEST_BINARIES} + LIBRARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${EXTRA_PATH_TEST_BINARIES} +@@ -129,5 +132,8 @@ set_output_directory(DynamicLibraryManagerTests + + add_dependencies(DynamicLibraryManagerTests TestSharedLib) + ++# Save memory. Do not link to LLVM libraries in parallel ++add_dependencies(DynamicLibraryManagerTests Cling) ++ + #export_executable_symbols_for_plugins(TestSharedLib) + add_subdirectory(TestSharedLib) +-- +2.52.0 + diff --git a/root-VecOps-Remove-outdated-IsSmall-helper-function-in-te.patch b/root-VecOps-Remove-outdated-IsSmall-helper-function-in-te.patch new file mode 100644 index 0000000..58ba414 --- /dev/null +++ b/root-VecOps-Remove-outdated-IsSmall-helper-function-in-te.patch @@ -0,0 +1,34 @@ +From fd18e83ae79760f7e8cca6f28b6d0f89d912b152 Mon Sep 17 00:00:00 2001 +From: Jonas Rembser +Date: Wed, 26 Nov 2025 12:40:03 +0100 +Subject: [PATCH] [VecOps] Remove outdated `IsSmall` helper function in tests + +The commit 2605710bea7b1 changed from using the `ROOT::Detail::VecOps::` +namespace explicitly for `IsSmall` to a `using` statement. However, +there was also a remnant `IsSmall` function with an outdated +implementation in the test file itself, which we can now remove. +--- + math/vecops/test/vecops_rvec.cxx | 7 ------- + 1 file changed, 7 deletions(-) + +diff --git a/math/vecops/test/vecops_rvec.cxx b/math/vecops/test/vecops_rvec.cxx +index 034f06ca211..432c673a553 100644 +--- a/math/vecops/test/vecops_rvec.cxx ++++ b/math/vecops/test/vecops_rvec.cxx +@@ -1493,13 +1493,6 @@ TEST(VecOps, Construct) + EXPECT_TRUE(fourVects[2] == ref2); + } + +-bool IsSmall(const RVec &v) +-{ +- // the first array element is right after the 3 data members of SmallVectorBase +- return reinterpret_cast(v.begin()) - reinterpret_cast(&v) == +- sizeof(void *) + 2 * sizeof(int); +-} +- + // this is a regression test for https://github.com/root-project/root/issues/6796 + TEST(VecOps, MemoryAdoptionAndClear) + { +-- +2.52.0 + diff --git a/root-avoid-deleting-TFormulas-twice.patch b/root-avoid-deleting-TFormulas-twice.patch deleted file mode 100644 index af758ed..0000000 --- a/root-avoid-deleting-TFormulas-twice.patch +++ /dev/null @@ -1,37 +0,0 @@ -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-avoid-race-condition-tutorial-roofit-rf512.patch b/root-avoid-race-condition-tutorial-roofit-rf512.patch deleted file mode 100644 index d0c40e8..0000000 --- a/root-avoid-race-condition-tutorial-roofit-rf512.patch +++ /dev/null @@ -1,50 +0,0 @@ -From 91de99623d0e945610be46d46e84b54985415aeb Mon Sep 17 00:00:00 2001 -From: Mattias Ellert -Date: Fri, 28 Oct 2022 06:27:10 +0200 -Subject: [PATCH] Avoid race condition between - tutorial/roofit/rf512_wsfactory_oper.C and - tutorial/roofit/rf512_wsfactory_oper.py - -When run in parallel they delete eachother's files: - -cc1plus: fatal error: /builddir/build/BUILD/root-6.26.08/redhat-linux-build/runtutorials/RooCFAuto000Pdf_cxx_ACLiC_dict.cxx: No such file or directory -compilation terminated. -/usr/bin/ld: cannot find /builddir/build/BUILD/root-6.26.08/redhat-linux-build/runtutorials/RooCFAuto000Pdf_cxx_ACLiC_dict.o: No such file or directory -collect2: error: ld returned 1 exit status ---- - tutorials/CMakeLists.txt | 5 +++-- - 1 file changed, 3 insertions(+), 2 deletions(-) - -diff --git a/tutorials/CMakeLists.txt b/tutorials/CMakeLists.txt -index cfba4d3ed9..6ae9be5869 100644 ---- a/tutorials/CMakeLists.txt -+++ b/tutorials/CMakeLists.txt -@@ -483,7 +483,7 @@ set(hist-hbars-depends tutorial-tree-cernbuild) - set(benchmarks-depends tutorial-hsimple - tutorial-fit-fit1 - tutorial-fit-myfit -- tutorial-hist-h1ReadAndDraw -+ tutorial-hist-h1ReadAndDraw - tutorial-hist-FirstContour - tutorial-geom-na49view - tutorial-tree-ntuple1 -@@ -731,7 +731,7 @@ if(ROOT_pyroot_FOUND) - set(pyroot-benchmarks-depends tutorial-pyroot-hsimple-py - tutorial-pyroot-fit1-py - tutorial-pyroot-na49view-py -- tutorial-pyroot-h1ReadAndDraw-py -+ tutorial-pyroot-h1ReadAndDraw-py - tutorial-pyroot-ntuple1-py) - set(pyroot-fit1-depends tutorial-pyroot-fillrandom-py) - set(pyroot-na49view-depends tutorial-pyroot-geometry-py) -@@ -739,6 +739,7 @@ if(ROOT_pyroot_FOUND) - - # Avoid a race condition: make sure Python tutorial is ran after C++ tutorial - set(roofit-rf104_classfactory-depends tutorial-roofit-rf104_classfactory) -+ set(roofit-rf512_wsfactory_oper-depends tutorial-roofit-rf512_wsfactory_oper) - - #---------------------------------------------------------------------- - # List requirements for python tutorials. --- -2.37.3 - diff --git a/root-big-endian-byte-swap.patch b/root-big-endian-byte-swap.patch deleted file mode 100644 index 63490b5..0000000 --- a/root-big-endian-byte-swap.patch +++ /dev/null @@ -1,40 +0,0 @@ -From d9e03aad7a5132fe9db9992eecb47ee4e91c354c Mon Sep 17 00:00:00 2001 -From: Mattias Ellert -Date: Fri, 25 Mar 2022 11:13:12 +0100 -Subject: [PATCH] Byte swap values read from the protobuf raw data stream on - big endian - ---- - tmva/sofie_parsers/src/RModelParser_ONNX.cxx | 12 +++++++++--- - 1 file changed, 9 insertions(+), 3 deletions(-) - -diff --git a/tmva/sofie_parsers/src/RModelParser_ONNX.cxx b/tmva/sofie_parsers/src/RModelParser_ONNX.cxx -index 3b0a30cdb0..23e41d746f 100644 ---- a/tmva/sofie_parsers/src/RModelParser_ONNX.cxx -+++ b/tmva/sofie_parsers/src/RModelParser_ONNX.cxx -@@ -1,3 +1,4 @@ -+#include "Byteswap.h" - #include "TMVA/RModelParser_ONNX.hxx" - #include "onnx_proto3.pb.h" - -@@ -980,9 +981,14 @@ RModel RModelParser_ONNX::Parse(std::string filename){ - //void* data = malloc (fLength * sizeof(float)); - std::shared_ptr data(malloc(fLength * sizeof(float)), free); - -- if (tensorproto->raw_data().empty() == false){ -- auto raw_data_ptr = reinterpret_cast(const_cast(tensorproto->raw_data().c_str())); -- std::memcpy(data.get(), raw_data_ptr, fLength * sizeof(float)); -+ if (!tensorproto->raw_data().empty()) { -+#ifdef R__BYTESWAP -+ std::memcpy(data.get(), tensorproto->raw_data().c_str(), fLength * sizeof(float)); -+#else -+ for (std::size_t k = 0; k < fLength; ++k) -+ (reinterpret_cast(data.get()))[k] = -+ R__bswap_32((reinterpret_cast(tensorproto->raw_data().c_str()))[k]); -+#endif - }else{ - tensorproto->mutable_float_data()->ExtractSubrange(0, tensorproto->float_data_size(), static_cast(data.get())); - } --- -2.35.1 - diff --git a/root-core-base-test.patch b/root-core-base-test.patch deleted file mode 100644 index c268390..0000000 --- a/root-core-base-test.patch +++ /dev/null @@ -1,31 +0,0 @@ -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 - TExceptionHandlerTests.cxx - TStringTest.cxx - TBitsTests.cxx -- LIBRARIES Core RIO ${extralibs}) -+ LIBRARIES ${extralibs} RIO Core) - - ROOT_ADD_GTEST(CoreErrorTests TErrorTests.cxx LIBRARIES Core) --- -2.35.1 - diff --git a/root-cppyy-Remove-code-related-to-finding-CPyCppyy-API-he.patch b/root-cppyy-Remove-code-related-to-finding-CPyCppyy-API-he.patch new file mode 100644 index 0000000..882247f --- /dev/null +++ b/root-cppyy-Remove-code-related-to-finding-CPyCppyy-API-he.patch @@ -0,0 +1,109 @@ +From 251de0f8b237ce041df4960f831fe4a1fade6d92 Mon Sep 17 00:00:00 2001 +From: Jonas Rembser +Date: Sat, 6 Dec 2025 17:39:40 +0100 +Subject: [PATCH] [cppyy] Remove code related to finding CPyCppyy API header + path + +This is not needed for ROOT, because the CPyCppyy API headers are +installed with the other ROOT headers anyway, and ROOT knows where to +find them already. +--- + .../cppyy/cppyy/python/cppyy/__init__.py | 82 ------------------- + 1 file changed, 82 deletions(-) + +diff --git a/bindings/pyroot/cppyy/cppyy/python/cppyy/__init__.py b/bindings/pyroot/cppyy/cppyy/python/cppyy/__init__.py +index 68e3c49e5fe..c8dd458bfdd 100644 +--- a/bindings/pyroot/cppyy/cppyy/python/cppyy/__init__.py ++++ b/bindings/pyroot/cppyy/cppyy/python/cppyy/__init__.py +@@ -297,88 +297,6 @@ elif ispypy: + if os.path.exists(apipath) and os.path.exists(os.path.join(apipath, 'Python.h')): + add_include_path(apipath) + +-# add access to extra headers for dispatcher (CPyCppyy only (?)) +-if not ispypy: +- try: +- apipath_extra = os.environ['CPPYY_API_PATH'] +- if os.path.basename(apipath_extra) == 'CPyCppyy': +- apipath_extra = os.path.dirname(apipath_extra) +- except KeyError: +- apipath_extra = None +- +- if apipath_extra is None: +- try: +- if 0x30a0000 <= sys.hexversion: +- import importlib.metadata as m +- +- for p in m.files('CPyCppyy'): +- if p.match('API.h'): +- ape = p.locate() +- break +- del p, m +- else: +- import pkg_resources as pr +- +- d = pr.get_distribution('CPyCppyy') +- for line in d.get_metadata_lines('RECORD'): +- if 'API.h' in line: +- ape = os.path.join(d.location, line[0:line.find(',')]) +- break +- del line, d, pr +- +- if os.path.exists(ape): +- apipath_extra = os.path.dirname(os.path.dirname(ape)) +- del ape +- except Exception: +- pass +- +- if apipath_extra is None: +- ldversion = sysconfig.get_config_var('LDVERSION') +- if not ldversion: +- ldversion = sys.version[:3] +- +- apipath_extra = os.path.join(os.path.dirname(apipath), 'site', 'python'+ldversion) +- if not os.path.exists(os.path.join(apipath_extra, 'CPyCppyy')): +- import glob +- import platform +- +- if platform.system() == "Windows": +- # Install locations are handled differently on Windows +- import libcppyy +- +- ape = os.path.dirname(libcppyy.__file__) +- else: +- import cppyy.libcppyy as libcppyy +- +- ape = os.path.dirname(libcppyy.__file__) +- # a "normal" structure finds the include directory up to 3 levels up, +- # ie. dropping lib/pythonx.y[md]/site-packages +- for i in range(3): +- if os.path.exists(os.path.join(ape, 'include')): +- break +- ape = os.path.dirname(ape) +- +- ape = os.path.join(ape, 'include') +- if os.path.exists(os.path.join(ape, 'CPyCppyy')): +- apipath_extra = ape +- else: +- # add back pythonx.y or site/pythonx.y if present +- for p in glob.glob(os.path.join(ape, 'python'+sys.version[:3]+'*'))+\ +- glob.glob(os.path.join(ape, '*', 'python'+sys.version[:3]+'*')): +- if os.path.exists(os.path.join(p, 'CPyCppyy')): +- apipath_extra = p +- break +- +- if apipath_extra.lower() != 'none': +- if not os.path.exists(os.path.join(apipath_extra, 'CPyCppyy')): +- warnings.warn("CPyCppyy API not found (tried: %s); " +- "set CPPYY_API_PATH envar to the 'CPyCppyy' API directory to fix" +- % apipath_extra) +- else: +- add_include_path(apipath_extra) +- +- del apipath_extra +- + if os.getenv('CONDA_PREFIX'): + # MacOS, Linux + include_path = os.path.join(os.getenv('CONDA_PREFIX'), 'include') +-- +2.52.0 + diff --git a/root-cppyy-Remove-now-irrelevant-load_cpp_backend-call.patch b/root-cppyy-Remove-now-irrelevant-load_cpp_backend-call.patch new file mode 100644 index 0000000..a79c861 --- /dev/null +++ b/root-cppyy-Remove-now-irrelevant-load_cpp_backend-call.patch @@ -0,0 +1,46 @@ +From f4577e76a5dc23842d6be0a82df804f71fc820ef Mon Sep 17 00:00:00 2001 +From: Jonas Rembser +Date: Mon, 1 Dec 2025 16:51:36 +0100 +Subject: [PATCH] [cppyy] Remove now irrelevant `load_cpp_backend()` call + +As we don't have a separate `cppyy_backend` anymore (neither as a Python +package, nor as a shared library), trying to load the backend library +will always give an exception that will be caught as an `ImportError`. + +It would be cleaner if this code branch is not even taken. +--- + .../cppyy/cppyy/python/cppyy/_cpython_cppyy.py | 12 ------------ + 1 file changed, 12 deletions(-) + +diff --git a/bindings/pyroot/cppyy/cppyy/python/cppyy/_cpython_cppyy.py b/bindings/pyroot/cppyy/cppyy/python/cppyy/_cpython_cppyy.py +index bac078ea7c9..f98a34a697c 100644 +--- a/bindings/pyroot/cppyy/cppyy/python/cppyy/_cpython_cppyy.py ++++ b/bindings/pyroot/cppyy/cppyy/python/cppyy/_cpython_cppyy.py +@@ -19,24 +19,12 @@ __all__ = [ + '_end_capture_stderr' + ] + +-# First load the dependency libraries of the backend, then pull in the libcppyy +-# extension module. If the backed can't be loaded, it was probably linked +-# statically into the extension module, so we don't error out at this point. +-try: +- from cppyy_backend import loader +- c = loader.load_cpp_backend() +-except ImportError: +- c = None +- + if platform.system() == "Windows": + # On Windows, the library has to be searched without prefix + import libcppyy as _backend + else: + import cppyy.libcppyy as _backend + +-if c is not None: +- _backend._cpp_backend = c +- + # explicitly expose APIs from libcppyy + _w = ctypes.CDLL(_backend.__file__, ctypes.RTLD_GLOBAL) + +-- +2.52.0 + diff --git a/root-dataframe-callback.patch b/root-dataframe-callback.patch deleted file mode 100644 index 57ffc08..0000000 --- a/root-dataframe-callback.patch +++ /dev/null @@ -1,45 +0,0 @@ -From d849bc502eec4ec95d15ca41319ba0467ab22759 Mon Sep 17 00:00:00 2001 -From: Mattias Ellert -Date: Thu, 24 Mar 2022 15:55:29 +0100 -Subject: [PATCH] =?UTF-8?q?NENTRIES=20is=20not=20always=20a=20multiple=20o?= - =?UTF-8?q?f=20the=20expected=20size.=20NENTRIES=20is=2010.=20On=20a=204?= - =?UTF-8?q?=20core=20machine=20the=20expected=20size=20in=202=20=C3=97=204?= - =?UTF-8?q?=20=3D=208.=20Looping=20over=20the=208=20IDs,=202=20have=202=20?= - =?UTF-8?q?entries=20the=20remaining=206=20have=201=20entry=20for=20a=20to?= - =?UTF-8?q?tal=20of=2010=20(NENTRIES)=20entries.=20The=20test=20checked=20?= - =?UTF-8?q?that=20each=20ID=20had=20NENTRIES/(expected=20size)=20entries,?= - =?UTF-8?q?=20which=20in=20this=20case=20with=20integer=20division=20equal?= - =?UTF-8?q?s=201=20entry,=20which=20was=20not=20the=20correct=20test.=20Th?= - =?UTF-8?q?is=20commit=20chenges=20to=20test=20to=20check=20that=20the=20t?= - =?UTF-8?q?otal=20number=20of=20entries=20summed=20for=20all=20IDs=20equal?= - =?UTF-8?q?s=20NENTRIES.?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - tree/dataframe/test/dataframe_samplecallback.cxx | 4 +++- - 1 file changed, 3 insertions(+), 1 deletion(-) - -diff --git a/tree/dataframe/test/dataframe_samplecallback.cxx b/tree/dataframe/test/dataframe_samplecallback.cxx -index 188d58dd31..d387ea5f86 100644 ---- a/tree/dataframe/test/dataframe_samplecallback.cxx -+++ b/tree/dataframe/test/dataframe_samplecallback.cxx -@@ -125,11 +125,13 @@ TEST_P(RDFSampleCallback, EmptySourceSampleID) { - // RDF with empty sources tries to produce 2 tasks per slot when MT is enabled - const auto expectedSize = std::min(NENTRIES, df.GetNSlots() * 2ull); - ASSERT_EQ(result->size(), expectedSize); -+ ULong64_t entries = 0; - for (auto &id : *result) { - // check that all entries start with the expected string - EXPECT_TRUE(id.AsString().rfind("Empty source, range: {", 0) == 0); -- EXPECT_EQ(id.NEntries(), NENTRIES / expectedSize); -+ entries += id.NEntries(); - } -+ EXPECT_EQ(entries, NENTRIES); - } else { - ASSERT_EQ(result->size(), 1); - const auto &id = result->at(0); --- -2.35.1 - diff --git a/root-different-filename.patch b/root-different-filename.patch deleted file mode 100644 index ef42c3d..0000000 --- a/root-different-filename.patch +++ /dev/null @@ -1,48 +0,0 @@ -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-endian-warn.patch b/root-endian-warn.patch deleted file mode 100644 index 77cd6b9..0000000 --- a/root-endian-warn.patch +++ /dev/null @@ -1,33 +0,0 @@ -From ba0dc65e558fd916dbe18f8dbe8208a3be932c25 Mon Sep 17 00:00:00 2001 -From: Mattias Ellert -Date: Mon, 28 Mar 2022 09:20:18 +0200 -Subject: [PATCH 2/2] Ignore warnings about RooNaNPacker not being implemented - for big endian - -This warning is triggered in many tests, so it makes sense to put it -in the default ignored set. ---- - test/unit_testing_support/ROOTUnitTestSupport.cxx | 7 +++++++ - 1 file changed, 7 insertions(+) - -diff --git a/test/unit_testing_support/ROOTUnitTestSupport.cxx b/test/unit_testing_support/ROOTUnitTestSupport.cxx -index 259ab4e09c..79cd476950 100644 ---- a/test/unit_testing_support/ROOTUnitTestSupport.cxx -+++ b/test/unit_testing_support/ROOTUnitTestSupport.cxx -@@ -73,6 +73,13 @@ static struct ForbidDiagnostics { - return; - } - -+ // FIXME: RooNaNPacker warns about not being implemented for big endian -+ if (level == kWarning -+ && strcmp(msg, "Fast recovery from undefined function values only implemented for little-endian machines. If necessary, request an extension of functionality on https://root.cern") == 0) { -+ std::cerr << "Warning in " << location << " " << msg << std::endl; -+ return; -+ } -+ - FAIL() << "Received unexpected diagnostic of severity " - << level - << " at '" << location << "' reading '" << msg << "'.\n" --- -2.35.1 - diff --git a/root-fix-compilation-with-gcc-12.patch b/root-fix-compilation-with-gcc-12.patch deleted file mode 100644 index 2c34516..0000000 --- a/root-fix-compilation-with-gcc-12.patch +++ /dev/null @@ -1,63 +0,0 @@ -From 3bc55ece1db8b32c5e86fd6b85856addd67265fb Mon Sep 17 00:00:00 2001 -From: Mattias Ellert -Date: Sat, 15 Jan 2022 06:35:58 +0100 -Subject: [PATCH] Fix compilation with gcc 12 - -Fixes error: use of deleted function - -/builddir/build/BUILD/root-6.24.06/interpreter/llvm/src/lib/Target/NVPTX/NVPTXAsmPrinter.cpp: In member function 'std::string llvm::NVPTXAsmPrinter::getPTXFundamentalTypeStr(llvm::Type*, bool) const': -/builddir/build/BUILD/root-6.24.06/interpreter/llvm/src/lib/Target/NVPTX/NVPTXAsmPrinter.cpp:1319:10: error: use of deleted function 'std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::nullptr_t) [with _CharT = char; _Traits = std::char_traits; _Alloc = std::allocator; std::nullptr_t = std::nullptr_t]' - 1319 | return nullptr; - | ^~~~~~~ -In file included from /usr/include/c++/12/string:53, - from /usr/include/c++/12/bits/locale_classes.h:40, - from /usr/include/c++/12/bits/ios_base.h:41, - from /usr/include/c++/12/streambuf:41, - from /usr/include/c++/12/bits/streambuf_iterator.h:35, - from /usr/include/c++/12/iterator:66, - from /builddir/build/BUILD/root-6.24.06/interpreter/llvm/src/include/llvm/ADT/iterator_range.h:21, - from /builddir/build/BUILD/root-6.24.06/interpreter/llvm/src/include/llvm/ADT/SmallVector.h:16, - from /builddir/build/BUILD/root-6.24.06/interpreter/llvm/src/include/llvm/ADT/STLExtras.h:20, - from /builddir/build/BUILD/root-6.24.06/interpreter/llvm/src/include/llvm/ADT/StringRef.h:12, - from /builddir/build/BUILD/root-6.24.06/interpreter/llvm/src/include/llvm/Pass.h:31, - from /builddir/build/BUILD/root-6.24.06/interpreter/llvm/src/lib/Target/NVPTX/NVPTX.h:17, - from /builddir/build/BUILD/root-6.24.06/interpreter/llvm/src/lib/Target/NVPTX/NVPTXAsmPrinter.h:17, - from /builddir/build/BUILD/root-6.24.06/interpreter/llvm/src/lib/Target/NVPTX/NVPTXAsmPrinter.cpp:14: -/usr/include/c++/12/bits/basic_string.h:732:7: note: declared here - 732 | basic_string(nullptr_t) = delete; - | ^~~~~~~~~~~~ - -Fix backported from LLVM upstrea https://reviews.llvm.org/D87697 ---- - interpreter/llvm/src/lib/Target/NVPTX/NVPTXAsmPrinter.cpp | 6 ++---- - 1 file changed, 2 insertions(+), 4 deletions(-) - -diff --git a/interpreter/llvm/src/lib/Target/NVPTX/NVPTXAsmPrinter.cpp b/interpreter/llvm/src/lib/Target/NVPTX/NVPTXAsmPrinter.cpp -index 5f38b4a3c4..bfa74bd98f 100644 ---- a/interpreter/llvm/src/lib/Target/NVPTX/NVPTXAsmPrinter.cpp -+++ b/interpreter/llvm/src/lib/Target/NVPTX/NVPTXAsmPrinter.cpp -@@ -1281,9 +1281,6 @@ void NVPTXAsmPrinter::emitPTXAddressSpace(unsigned int AddressSpace, - std::string - NVPTXAsmPrinter::getPTXFundamentalTypeStr(Type *Ty, bool useB4PTR) const { - switch (Ty->getTypeID()) { -- default: -- llvm_unreachable("unexpected type"); -- break; - case Type::IntegerTyID: { - unsigned NumBits = cast(Ty)->getBitWidth(); - if (NumBits == 1) -@@ -1314,9 +1311,10 @@ NVPTXAsmPrinter::getPTXFundamentalTypeStr(Type *Ty, bool useB4PTR) const { - return "b32"; - else - return "u32"; -+ default: -+ break; - } - llvm_unreachable("unexpected type"); -- return nullptr; - } - - void NVPTXAsmPrinter::emitPTXGlobalVariable(const GlobalVariable *GVar, --- -2.34.1 - diff --git a/root-fix-test-failure-on-ppc64le-and-aarch64-with-gcc-12.patch b/root-fix-test-failure-on-ppc64le-and-aarch64-with-gcc-12.patch deleted file mode 100644 index 007c3cd..0000000 --- a/root-fix-test-failure-on-ppc64le-and-aarch64-with-gcc-12.patch +++ /dev/null @@ -1,43 +0,0 @@ -From ddc155795baa9d4690717c204e54a7fd4600c688 Mon Sep 17 00:00:00 2001 -From: Mattias Ellert -Date: Mon, 17 Jan 2022 18:49:30 +0100 -Subject: [PATCH] Fix test failure on ppc64le and aarch64 with gcc 12 - -.../hist/hist/test/test_tprofile2poly.cxx:61: Failure -The difference between cont1 and cont2 is 1.4551915228366852e-11, which exceeds delta, where -cont1 evaluates to 54886.064319363642, -cont2 evaluates to 54886.064319363628, and -delta evaluates to 9.999999960041972e-12. -.../hist/hist/test/test_tprofile2poly.cxx:61: Failure -The difference between cont1 and cont2 is 1.4551915228366852e-11, where -cont1 evaluates to 109868.61342004745, -cont2 evaluates to 109868.61342004743. -The abs_error parameter delta evaluates to 9.999999960041972e-12 which is smaller than the minimum distance between doubles for numbers of this magnitude which is 1.4551915228366852e-11, thus making this EXPECT_NEAR check equivalent to EXPECT_EQUAL. Consider using EXPECT_DOUBLE_EQ instead. ---- - hist/hist/test/test_tprofile2poly.cxx | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/hist/hist/test/test_tprofile2poly.cxx b/hist/hist/test/test_tprofile2poly.cxx -index 40cb3052a2..5150da0bea 100644 ---- a/hist/hist/test/test_tprofile2poly.cxx -+++ b/hist/hist/test/test_tprofile2poly.cxx -@@ -58,14 +58,14 @@ void binEntriesCompare(TProfile2D* tp2d, TProfile2Poly* tpp) { - for(Double_t x=0.5; x<10; x+=2.0) { - cont1 = tp2d->GetBinEffectiveEntries(tp2d->FindBin(x,y)); - cont2 = tpp->GetBinEffectiveEntries(tpp->FindBin(x,y)); -- ASSERT_NEAR(cont1, cont2, delta); -+ ASSERT_NEAR(cont1, cont2, 2*delta); - } - - } - // test overflow - cont1 = tp2d->GetBinEffectiveEntries(tp2d->FindBin(11,11)); - cont2 = tpp->GetBinEffectiveEntries(tpp->FindBin(11,11)); -- ASSERT_NEAR(cont1, cont2, delta); -+ ASSERT_NEAR(cont1, cont2, 2*delta); - - } - --- -2.34.1 - diff --git a/root-fontconfig.patch b/root-fontconfig.patch index 35705a4..4e5e607 100644 --- a/root-fontconfig.patch +++ b/root-fontconfig.patch @@ -1,39 +1,60 @@ -diff -ur root-6.24.02.orig/core/base/src/TApplication.cxx root-6.24.02/core/base/src/TApplication.cxx ---- root-6.24.02.orig/core/base/src/TApplication.cxx 2021-06-28 11:17:14.000000000 +0200 -+++ root-6.24.02/core/base/src/TApplication.cxx 2021-08-11 10:49:08.583579248 +0200 -@@ -265,18 +265,11 @@ - LoadGraphicsLibs(); +From 4d450f306a8ab8220f43675c70f399d89e5a4a03 Mon Sep 17 00:00:00 2001 +From: Mattias Ellert +Date: Sat, 11 May 2024 20:09:47 +0200 +Subject: [PATCH] Use system fonts via fontconfig + +--- + core/base/src/TApplication.cxx | 11 +- + graf2d/asimage/CMakeLists.txt | 1 + + graf2d/asimage/src/TASImage.cxx | 91 +++++++- + graf2d/graf/CMakeLists.txt | 1 + + graf2d/graf/inc/TTF.h | 3 +- + graf2d/graf/src/TTF.cxx | 295 +++++++++++++++++--------- + graf2d/postscript/CMakeLists.txt | 1 + + graf2d/postscript/src/TPostScript.cxx | 106 ++++----- + graf3d/gl/CMakeLists.txt | 1 + + graf3d/gl/src/TGLFontManager.cxx | 123 ++++++++++- + graf3d/gl/src/TGLText.cxx | 56 +++-- + 11 files changed, 495 insertions(+), 194 deletions(-) + +diff --git a/core/base/src/TApplication.cxx b/core/base/src/TApplication.cxx +index f0d2124a8f6..41ad4c73020 100644 +--- a/core/base/src/TApplication.cxx ++++ b/core/base/src/TApplication.cxx +@@ -253,18 +253,12 @@ void TApplication::InitializeGraphics(Bool_t only_web) + LoadGraphicsLibs(); - // Try to load TrueType font renderer. Only try to load if not in batch -- // mode and Root.UseTTFonts is true and Root.TTFontPath exists. Abort silently -+ // mode and Root.UseTTFonts is true. Abort silently - // if libttf or libGX11TTF are not found in $ROOTSYS/lib or $ROOTSYS/ttf/lib. -- const char *ttpath = gEnv->GetValue("Root.TTFontPath", -- TROOT::GetTTFFontDir()); -- char *ttfont = gSystem->Which(ttpath, "arialbd.ttf", kReadPermission); -- // Check for use of DFSG - fonts -- if (!ttfont) -- ttfont = gSystem->Which(ttpath, "FreeSansBold.ttf", kReadPermission); -- - #if !defined(R__WIN32) - if (!gROOT->IsBatch() && !strcmp(gVirtualX->GetName(), "X11") && -- ttfont && gEnv->GetValue("Root.UseTTFonts", 1)) { -+ gEnv->GetValue("Root.UseTTFonts", 1)) { - if (gClassTable->GetDict("TGX11TTF")) { - // in principle we should not have linked anything against libGX11TTF - // but with ACLiC this can happen, initialize TGX11TTF by hand -@@ -290,7 +283,6 @@ + // Try to load TrueType font renderer. Only try to load if not in batch +- // mode and Root.UseTTFonts is true and Root.TTFontPath exists. Abort silently ++ // mode and Root.UseTTFonts is true. Abort silently + // if libttf or libGX11TTF are not found in $ROOTSYS/lib or $ROOTSYS/ttf/lib. +- const char *ttpath = gEnv->GetValue("Root.TTFontPath", +- TROOT::GetTTFFontDir()); +- char *ttfont = gSystem->Which(ttpath, "arialbd.ttf", kReadPermission); +- // Check for use of DFSG - fonts +- if (!ttfont) +- ttfont = gSystem->Which(ttpath, "FreeSansBold.ttf", kReadPermission); + + #if !defined(R__WIN32) + if (!gROOT->IsBatch() && !strcmp(gVirtualX->GetName(), "X11") && +- ttfont && gEnv->GetValue("Root.UseTTFonts", 1)) { ++ gEnv->GetValue("Root.UseTTFonts", 1)) { + if (gClassTable->GetDict("TGX11TTF")) { + // in principle we should not have linked anything against libGX11TTF + // but with ACLiC this can happen, initialize TGX11TTF by hand +@@ -278,7 +272,6 @@ void TApplication::InitializeGraphics(Bool_t only_web) + } } + #endif +- delete [] ttfont; } - #endif -- delete [] ttfont; - // Create WM dependent application environment - if (fAppImp) -diff -ur root-6.24.02.orig/graf2d/asimage/CMakeLists.txt root-6.24.02/graf2d/asimage/CMakeLists.txt ---- root-6.24.02.orig/graf2d/asimage/CMakeLists.txt 2021-06-28 11:17:14.000000000 +0200 -+++ root-6.24.02/graf2d/asimage/CMakeLists.txt 2021-08-11 10:49:08.583579248 +0200 -@@ -30,6 +30,7 @@ + if (!only_web || !fAppImp) { +diff --git a/graf2d/asimage/CMakeLists.txt b/graf2d/asimage/CMakeLists.txt +index b5ccf983473..8ee57c1fac0 100644 +--- a/graf2d/asimage/CMakeLists.txt ++++ b/graf2d/asimage/CMakeLists.txt +@@ -28,6 +28,7 @@ ROOT_STANDARD_LIBRARY_PACKAGE(ASImage ${FREETYPE_LIBRARIES} ${X11_LIBRARIES} ZLIB::ZLIB @@ -41,10 +62,11 @@ diff -ur root-6.24.02.orig/graf2d/asimage/CMakeLists.txt root-6.24.02/graf2d/asi DEPENDENCIES Core Graf -diff -ur root-6.24.02.orig/graf2d/asimage/src/TASImage.cxx root-6.24.02/graf2d/asimage/src/TASImage.cxx ---- root-6.24.02.orig/graf2d/asimage/src/TASImage.cxx 2021-06-28 11:17:14.000000000 +0200 -+++ root-6.24.02/graf2d/asimage/src/TASImage.cxx 2021-08-11 10:49:08.585579253 +0200 -@@ -112,6 +112,8 @@ +diff --git a/graf2d/asimage/src/TASImage.cxx b/graf2d/asimage/src/TASImage.cxx +index 6ea60a78801..e85d804b7ec 100644 +--- a/graf2d/asimage/src/TASImage.cxx ++++ b/graf2d/asimage/src/TASImage.cxx +@@ -117,6 +117,8 @@ extern "C" { # include } @@ -53,135 +75,101 @@ diff -ur root-6.24.02.orig/graf2d/asimage/src/TASImage.cxx root-6.24.02/graf2d/a // auxiliary functions for general polygon filling #include "TASPolyUtils.c" -@@ -2595,14 +2597,120 @@ - TString fn = font_name; - fn.Strip(); - -- // This is for backward compatibility... -- if (fn.Last('/') == 0) fn = fn(1, fn.Length() - 1); -+ const char *basename = gSystem->BaseName(fn); -+ -+ char *ttfnt = NULL; -+ int ttindex = 0; -+ -+ FcPattern *pat, *match; -+ FcResult result; -+ -+ pat = FcPatternCreate (); -+ -+ if (strcmp(basename, "timesi.ttf") == 0 || -+ strcmp(basename, "FreeSerifItalic.otf") == 0) { -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freeserif"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ITALIC); -+ } -+ else if (strcmp(basename, "timesbd.ttf") == 0 || -+ strcmp(basename, "FreeSerifBold.otf") == 0) { -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freeserif"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_BOLD); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ } -+ else if (strcmp(basename, "timesbi.ttf") == 0 || -+ strcmp(basename, "FreeSerifBoldItalic.otf") == 0) { -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freeserif"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_BOLD); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ITALIC); -+ } -+ else if (strcmp(basename, "arial.ttf") == 0 || -+ strcmp(basename, "FreeSans.otf") == 0) { -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freesans"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ } -+ else if (strcmp(basename, "ariali.ttf") == 0 || -+ strcmp(basename, "FreeSansOblique.otf") == 0) { -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freesans"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ITALIC); -+ } -+ else if (strcmp(basename, "arialbd.ttf") == 0 || -+ strcmp(basename, "FreeSansBold.otf") == 0) { -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freesans"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_BOLD); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ } -+ else if (strcmp(basename, "arialbi.ttf") == 0 || -+ strcmp(basename, "FreeSansBoldOblique.otf") == 0) { -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freesans"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_BOLD); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ITALIC); -+ } -+ else if (strcmp(basename, "cour.ttf") == 0 || -+ strcmp(basename, "FreeMono.otf") == 0) { -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freemono"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ } -+ else if (strcmp(basename, "couri.ttf") == 0 || -+ strcmp(basename, "FreeMonoOblique.otf") == 0) { -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freemono"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ITALIC); -+ } -+ else if (strcmp(basename, "courbd.ttf") == 0 || -+ strcmp(basename, "FreeMonoBold.otf") == 0) { -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freemono"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_BOLD); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ } -+ else if (strcmp(basename, "courbi.ttf") == 0 || -+ strcmp(basename, "FreeMonoBoldOblique.otf") == 0) { -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freemono"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_BOLD); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ITALIC); -+ } -+ else if (strcmp(basename, "symbol.ttf") == 0) { -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"symbol"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ } -+ else if (strcmp(basename, "times.ttf") == 0 || -+ strcmp(basename, "FreeSerif.otf") == 0) { -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freeserif"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ } -+ else if (strcmp(basename, "wingding.ttf") == 0) { -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"dingbats"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ } -+ else if (strcmp(basename, "BlackChancery.ttf") == 0) { -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"urwchanceryl"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ITALIC); -+ } -+ else { -+ Warning("DrawText", "cannot find a font %s", font_name); -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freemono"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ } -+ -+ FcConfigSubstitute (NULL, pat, FcMatchPattern); -+ FcDefaultSubstitute (pat); -+ match = FcFontMatch (NULL, pat, &result); -+ FcPatternGetString (match, FC_FILE, 0, (FcChar8**)&ttfnt); -+ FcPatternGetInteger (match, FC_INDEX, 0, &ttindex); +@@ -2620,11 +2622,88 @@ void TASImage::DrawText(Int_t x, Int_t y, const char *text, Int_t size, + // This is for backward compatibility... + if (fn.Last('/') == 0) fn = fn(1, fn.Length() - 1); - const char *ttpath = gEnv->GetValue("Root.TTFontPath", - TROOT::GetTTFFontDir()); - char *tmpstr = gSystem->Which(ttpath, fn, kReadPermission); - fn = tmpstr; - delete [] tmpstr; -+ fn = ttfnt; ++ const char *basename = gSystem->BaseName(fn); + -+ FcPatternDestroy (match); -+ FcPatternDestroy (pat); ++ int ttindex = 0; ++ ++ FcPattern *pat = nullptr, *match; ++ FcResult result; ++ ++ if (strcmp(basename, "timesi.ttf") == 0 || ++ strcmp(basename, "FreeSerifItalic.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "freeserif:italic"); ++ } ++ else if (strcmp(basename, "timesbd.ttf") == 0 || ++ strcmp(basename, "FreeSerifBold.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "freeserif:bold"); ++ } ++ else if (strcmp(basename, "timesbi.ttf") == 0 || ++ strcmp(basename, "FreeSerifBoldItalic.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "freeserif:bold:italic"); ++ } ++ else if (strcmp(basename, "arial.ttf") == 0 || ++ strcmp(basename, "FreeSans.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "freesans"); ++ } ++ else if (strcmp(basename, "ariali.ttf") == 0 || ++ strcmp(basename, "FreeSansOblique.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "freesans:italic"); ++ } ++ else if (strcmp(basename, "arialbd.ttf") == 0 || ++ strcmp(basename, "FreeSansBold.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "freesans:bold"); ++ } ++ else if (strcmp(basename, "arialbi.ttf") == 0 || ++ strcmp(basename, "FreeSansBoldOblique.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "freesans:bold:italic"); ++ } ++ else if (strcmp(basename, "cour.ttf") == 0 || ++ strcmp(basename, "FreeMono.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "freemono"); ++ } ++ else if (strcmp(basename, "couri.ttf") == 0 || ++ strcmp(basename, "FreeMonoOblique.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "freemono:italic"); ++ } ++ else if (strcmp(basename, "courbd.ttf") == 0 || ++ strcmp(basename, "FreeMonoBold.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "freemono:bold"); ++ } ++ else if (strcmp(basename, "courbi.ttf") == 0 || ++ strcmp(basename, "FreeMonoBoldOblique.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "freemono:bold:italic"); ++ } ++ else if (strcmp(basename, "symbol.ttf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "standardsymbolsps"); ++ } ++ else if (strcmp(basename, "times.ttf") == 0 || ++ strcmp(basename, "FreeSerif.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "freeserif"); ++ } ++ else if (strcmp(basename, "wingding.ttf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "dingbats"); ++ } ++ else if (strcmp(basename, "BlackChancery.ttf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "urwchanceryl"); ++ } ++ else if (gSystem->AccessPathName(fn, kReadPermission) != 0) { ++ // Font name is not a file - usae as pattern ++ pat = FcNameParse ((const FcChar8*) fn.Data()); ++ } ++ ++ if (pat) { ++ FcConfigSubstitute (nullptr, pat, FcMatchPattern); ++ FcDefaultSubstitute (pat); ++ match = FcFontMatch (nullptr, pat, &result); ++ if (match) { ++ char *ttfnt; ++ FcPatternGetString (match, FC_FILE, 0, (FcChar8**) &ttfnt); ++ fn = ttfnt; ++ FcPatternGetInteger (match, FC_INDEX, 0, &ttindex); ++ FcPatternDestroy (match); ++ } ++ FcPatternDestroy (pat); ++ } if (fn.EndsWith(".pfa") || fn.EndsWith(".PFA") || fn.EndsWith(".pfb") || fn.EndsWith(".PFB") || fn.EndsWith(".ttf") || fn.EndsWith(".TTF") || fn.EndsWith(".otf") || fn.EndsWith(".OTF")) { ttfont = kTRUE; -@@ -2626,14 +2734,11 @@ +@@ -2648,7 +2727,7 @@ void TASImage::DrawText(Int_t x, Int_t y, const char *text, Int_t size, return; } @@ -189,20 +177,12 @@ diff -ur root-6.24.02.orig/graf2d/asimage/src/TASImage.cxx root-6.24.02/graf2d/a + ASFont *font = get_asfont(gFontManager, fn.Data(), ttindex, size, ASF_GuessWho); if (!font) { -- font = get_asfont(gFontManager, "fixed", 0, size, ASF_GuessWho); -- if (!font) { -- Warning("DrawText", "cannot find a font %s", font_name); -- return; -- } -+ Warning("DrawText", "cannot find a font %s", font_name); -+ return; - } - - get_text_size(text, font, (ASText3DType)type, &width, &height); -diff -ur root-6.24.02.orig/graf2d/graf/CMakeLists.txt root-6.24.02/graf2d/graf/CMakeLists.txt ---- root-6.24.02.orig/graf2d/graf/CMakeLists.txt 2021-06-28 11:17:14.000000000 +0200 -+++ root-6.24.02/graf2d/graf/CMakeLists.txt 2021-08-11 10:49:08.586579256 +0200 -@@ -91,6 +91,7 @@ + font = get_asfont(gFontManager, "fixed", 0, size, ASF_GuessWho); +diff --git a/graf2d/graf/CMakeLists.txt b/graf2d/graf/CMakeLists.txt +index d7d1b77c21a..c4ebb994a4a 100644 +--- a/graf2d/graf/CMakeLists.txt ++++ b/graf2d/graf/CMakeLists.txt +@@ -91,6 +91,7 @@ ROOT_STANDARD_LIBRARY_PACKAGE(Graf ${FREETYPE_LIBRARIES} ZLIB::ZLIB mathtext @@ -210,24 +190,27 @@ diff -ur root-6.24.02.orig/graf2d/graf/CMakeLists.txt root-6.24.02/graf2d/graf/C DEPENDENCIES Hist Matrix -diff -ur root-6.24.02.orig/graf2d/graf/inc/TTF.h root-6.24.02/graf2d/graf/inc/TTF.h ---- root-6.24.02.orig/graf2d/graf/inc/TTF.h 2021-06-28 11:17:14.000000000 +0200 -+++ root-6.24.02/graf2d/graf/inc/TTF.h 2021-08-11 10:49:08.586579256 +0200 -@@ -76,9 +76,8 @@ +diff --git a/graf2d/graf/inc/TTF.h b/graf2d/graf/inc/TTF.h +index 864ce06b4f0..050796d1ded 100644 +--- a/graf2d/graf/inc/TTF.h ++++ b/graf2d/graf/inc/TTF.h +@@ -76,9 +76,10 @@ protected: static FT_BBox fgCBox; ///< string control box static FT_CharMap fgCharMap[kTTMaxFonts]; ///< font character map static Int_t fgCurFontIdx; ///< current font index - static Int_t fgSymbItaFontIdx; ///< Symbol italic font index static Int_t fgFontCount; ///< number of fonts loaded -- static char *fgFontName[kTTMaxFonts]; ///< font name -+ static Int_t fgFontID[kTTMaxFonts]; ///< font ID + static char *fgFontName[kTTMaxFonts]; ///< font name ++ static Int_t fgFontIdx[kTTMaxFonts]; ///< font index in font file ++ static Int_t fgFontIta[kTTMaxFonts]; ///< font slanted using transform static FT_Face fgFace[kTTMaxFonts]; ///< font face static TTF::TTGlyph fgGlyphs[kMaxGlyphs]; ///< glyphs static Bool_t fgHinting; ///< use hinting (true by default) -diff -ur root-6.24.02.orig/graf2d/graf/src/TTF.cxx root-6.24.02/graf2d/graf/src/TTF.cxx ---- root-6.24.02.orig/graf2d/graf/src/TTF.cxx 2021-06-28 11:17:14.000000000 +0200 -+++ root-6.24.02/graf2d/graf/src/TTF.cxx 2021-08-11 10:49:08.587579259 +0200 -@@ -25,6 +25,8 @@ +diff --git a/graf2d/graf/src/TTF.cxx b/graf2d/graf/src/TTF.cxx +index 758bb98c192..c90d0ac70a9 100644 +--- a/graf2d/graf/src/TTF.cxx ++++ b/graf2d/graf/src/TTF.cxx +@@ -25,6 +25,8 @@ Interface to the freetype 2 library. #include "TMath.h" #include "TError.h" @@ -236,201 +219,184 @@ diff -ur root-6.24.02.orig/graf2d/graf/src/TTF.cxx root-6.24.02/graf2d/graf/src/ // to scale fonts to the same size as the old TT version const Float_t kScale = 0.93376068; -@@ -38,10 +40,9 @@ +@@ -38,10 +40,11 @@ Int_t TTF::fgTBlankW = 0; Int_t TTF::fgWidth = 0; Int_t TTF::fgAscent = 0; Int_t TTF::fgCurFontIdx = -1; -Int_t TTF::fgSymbItaFontIdx = -1; Int_t TTF::fgFontCount = 0; Int_t TTF::fgNumGlyphs = 0; --char *TTF::fgFontName[kTTMaxFonts]; -+Int_t TTF::fgFontID[kTTMaxFonts]; + char *TTF::fgFontName[kTTMaxFonts]; ++Int_t TTF::fgFontIdx[kTTMaxFonts]; ++Int_t TTF::fgFontIta[kTTMaxFonts]; FT_Matrix *TTF::fgRotMatrix = nullptr; FT_Library TTF::fgLibrary; FT_BBox TTF::fgCBox; -@@ -72,6 +73,11 @@ +@@ -71,6 +74,11 @@ void TTF::Init() return; } + // Add root's font directory + const char *ttpath = gEnv->GetValue("Root.TTFontPath", + TROOT::GetTTFFontDir()); -+ FcConfigAppFontAddDir (NULL, (const FcChar8*)ttpath); ++ FcConfigAppFontAddDir (nullptr, (const FcChar8*)ttpath); + // load default font (arialbd) SetTextFont(62); } -@@ -84,7 +90,6 @@ - if (!fgInit) return; - - for (int i = 0; i < fgFontCount; i++) { -- delete [] fgFontName[i]; - FT_Done_Face(fgFace[i]); - } - if (fgRotMatrix) delete fgRotMatrix; -@@ -109,12 +114,19 @@ +@@ -108,12 +116,15 @@ Short_t TTF::CharToUnicode(UInt_t code) charmap = fgFace[fgCurFontIdx]->charmaps[i]; platform = charmap->platform_id; encoding = charmap->encoding_id; - if ((platform == 3 && encoding == 1) || + if ((platform == 3 && encoding == 1 && -+ (fgFontID[fgCurFontIdx] != 12 && -+ fgFontID[fgCurFontIdx] != 14 && -+ fgFontID[fgCurFontIdx] != 15)) || ++ (fgFontIta[fgCurFontIdx] & 2) == 0) || (platform == 0 && encoding == 0) || + (platform == 7 && encoding == 2 && -+ (fgFontID[fgCurFontIdx] == 12 || -+ fgFontID[fgCurFontIdx] == 14 || -+ fgFontID[fgCurFontIdx] == 15)) || ++ (fgFontIta[fgCurFontIdx] & 2) != 0) || ++ (platform == 0 && encoding == 3 && ++ (fgFontIta[fgCurFontIdx] & 2) != 0) || (platform == 1 && encoding == 0 && - !strcmp(fgFontName[fgCurFontIdx], "wingding.ttf")) || - (platform == 1 && encoding == 0 && - !strcmp(fgFontName[fgCurFontIdx], "symbol.ttf"))) -+ (fgFontID[fgCurFontIdx] == 12 || -+ fgFontID[fgCurFontIdx] == 14 || -+ fgFontID[fgCurFontIdx] == 15))) ++ (fgFontIta[fgCurFontIdx] & 2) != 0)) { fgCharMap[fgCurFontIdx] = charmap; if (FT_Set_Charmap(fgFace[fgCurFontIdx], fgCharMap[fgCurFontIdx])) -@@ -381,27 +393,147 @@ - - if (!fontname || !fontname[0]) { - Warning("TTF::SetTextFont", -- "no font name specified, using default font %s", fgFontName[0]); -+ "no font name specified, using default font"); - fgCurFontIdx = 0; - return 0; +@@ -392,21 +403,145 @@ Int_t TTF::SetTextFont(const char *fontname, Int_t italic) } const char *basename = gSystem->BaseName(fontname); ++ char *ttfont = nullptr; ++ int ttindex = 0; ++ ++ FcPattern *pat = nullptr, *match; ++ FcResult result; ++ + if (strcmp(basename, "timesi.ttf") == 0 || + strcmp(basename, "FreeSerifItalic.otf") == 0) { -+ SetTextFont(12); ++ pat = FcNameParse ((const FcChar8*) "freeserif:italic"); + } + else if (strcmp(basename, "timesbd.ttf") == 0 || + strcmp(basename, "FreeSerifBold.otf") == 0) { -+ SetTextFont(22); ++ pat = FcNameParse ((const FcChar8*) "freeserif:bold"); + } + else if (strcmp(basename, "timesbi.ttf") == 0 || + strcmp(basename, "FreeSerifBoldItalic.otf") == 0) { -+ SetTextFont(32); ++ pat = FcNameParse ((const FcChar8*) "freeserif:bold:italic"); + } + else if (strcmp(basename, "arial.ttf") == 0 || + strcmp(basename, "FreeSans.otf") == 0) { -+ SetTextFont(42); ++ pat = FcNameParse ((const FcChar8*) "freesans"); + } + else if (strcmp(basename, "ariali.ttf") == 0 || + strcmp(basename, "FreeSansOblique.otf") == 0) { -+ SetTextFont(52); ++ pat = FcNameParse ((const FcChar8*) "freesans:italic"); + } + else if (strcmp(basename, "arialbd.ttf") == 0 || + strcmp(basename, "FreeSansBold.otf") == 0) { -+ SetTextFont(62); ++ pat = FcNameParse ((const FcChar8*) "freesans:bold"); + } + else if (strcmp(basename, "arialbi.ttf") == 0 || + strcmp(basename, "FreeSansBoldOblique.otf") == 0) { -+ SetTextFont(72); ++ pat = FcNameParse ((const FcChar8*) "freesans:bold:italic"); + } + else if (strcmp(basename, "cour.ttf") == 0 || + strcmp(basename, "FreeMono.otf") == 0) { -+ SetTextFont(82); ++ pat = FcNameParse ((const FcChar8*) "freemono"); + } + else if (strcmp(basename, "couri.ttf") == 0 || + strcmp(basename, "FreeMonoOblique.otf") == 0) { -+ SetTextFont(92); ++ pat = FcNameParse ((const FcChar8*) "freemono:italic"); + } + else if (strcmp(basename, "courbd.ttf") == 0 || + strcmp(basename, "FreeMonoBold.otf") == 0) { -+ SetTextFont(102); ++ pat = FcNameParse ((const FcChar8*) "freemono:bold"); + } + else if (strcmp(basename, "courbi.ttf") == 0 || + strcmp(basename, "FreeMonoBoldOblique.otf") == 0) { -+ SetTextFont(112); ++ pat = FcNameParse ((const FcChar8*) "freemono:bold:italic"); + } + else if (strcmp(basename, "symbol.ttf") == 0) { -+ if (italic) -+ SetTextFont(152); -+ else -+ SetTextFont(122); ++ pat = FcNameParse ((const FcChar8*) "standardsymbolsps"); ++ italic &= 2; + } + else if (strcmp(basename, "times.ttf") == 0 || + strcmp(basename, "FreeSerif.otf") == 0) { -+ SetTextFont(132); ++ pat = FcNameParse ((const FcChar8*) "freeserif"); + } + else if (strcmp(basename, "wingding.ttf") == 0) { -+ SetTextFont(142); ++ pat = FcNameParse ((const FcChar8*) "dingbats"); ++ italic &= 2; + } + else if (strcmp(basename, "STIXGeneral.otf") == 0) { -+ SetTextFont(162); ++ pat = FcNameParse ((const FcChar8*) "stixgeneral"); + } + else if (strcmp(basename, "STIXGeneralItalic.otf") == 0) { -+ SetTextFont(172); ++ pat = FcNameParse ((const FcChar8*) "stixgeneral:italic"); + } + else if (strcmp(basename, "STIXGeneralBol.otf") == 0) { -+ SetTextFont(182); ++ pat = FcNameParse ((const FcChar8*) "stixgeneral:bold"); + } + else if (strcmp(basename, "STIXGeneralBolIta.otf") == 0) { -+ SetTextFont(192); ++ pat = FcNameParse ((const FcChar8*) "stixgeneral:bold:italic"); + } + else if (strcmp(basename, "STIXSiz1Sym.otf") == 0) { -+ SetTextFont(202); ++ pat = FcNameParse ((const FcChar8*) "stixsize1"); + } + else if (strcmp(basename, "STIXSiz1SymBol.otf") == 0) { -+ SetTextFont(212); ++ pat = FcNameParse ((const FcChar8*) "stixsize1:bold"); + } + else if (strcmp(basename, "STIXSiz2Sym.otf") == 0) { -+ SetTextFont(222); ++ pat = FcNameParse ((const FcChar8*) "stixsize2"); + } + else if (strcmp(basename, "STIXSiz2SymBol.otf") == 0) { -+ SetTextFont(232); ++ pat = FcNameParse ((const FcChar8*) "stixsize2:bold"); + } + else if (strcmp(basename, "STIXSiz3Sym.otf") == 0) { -+ SetTextFont(242); ++ pat = FcNameParse ((const FcChar8*) "stixsize3"); + } + else if (strcmp(basename, "STIXSiz3SymBol.otf") == 0) { -+ SetTextFont(252); ++ pat = FcNameParse ((const FcChar8*) "stixsize3:bold"); + } + else if (strcmp(basename, "STIXSiz4Sym.otf") == 0) { -+ SetTextFont(262); ++ pat = FcNameParse ((const FcChar8*) "stixsize4"); + } + else if (strcmp(basename, "STIXSiz4SymBol.otf") == 0) { -+ SetTextFont(272); ++ pat = FcNameParse ((const FcChar8*) "stixsize4:bold"); + } + else if (strcmp(basename, "STIXSiz5Sym.otf") == 0) { -+ SetTextFont(282); ++ pat = FcNameParse ((const FcChar8*) "stixsize5"); + } + else if (strcmp(basename, "DroidSansFallback.ttf") == 0) { -+ SetTextFont(292); ++ pat = FcNameParse ((const FcChar8*) "droidsansfallback:charset=4e00 0410"); + } -+ else { -+ Error("TTF::SetTextFont", "font %s not known to ROOT", basename); -+ if (fgFontCount) { -+ Warning("TTF::SetTextFont", "using default font"); -+ fgCurFontIdx = 0; // use font 0 (default font, set in ctor) -+ return 0; -+ } else { -+ return 1; ++ else if (strcmp(basename, "BlackChancery.ttf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "urwchanceryl"); ++ } ++ else if (gSystem->AccessPathName(fontname, kReadPermission) != 0) { ++ // Font name is not a file - usae as pattern ++ pat = FcNameParse ((const FcChar8*) fontname); ++ } ++ ++ if (pat) { ++ FcConfigSubstitute (nullptr, pat, FcMatchPattern); ++ FcDefaultSubstitute (pat); ++ match = FcFontMatch (nullptr, pat, &result); ++ if (match) { ++ const char *ttfnt; ++ FcPatternGetString (match, FC_FILE, 0, (FcChar8**) &ttfnt); ++ ttfont = StrDup(ttfnt); ++ FcPatternGetInteger (match, FC_INDEX, 0, &ttindex); ++ FcPatternDestroy (match); + } ++ FcPatternDestroy (pat); + } + -+ return 0; -+} ++ if (!ttfont) ttfont = StrDup(fontname); + -+//______________________________________________________________________________ -+void TTF::SetTextFont(Font_t fontnumber) -+{ -+ int fontid = fontnumber / 10; -+ if (fontid < 0 || fontid > 31) fontid = 0; -+ -+ Int_t italic = 0; -+ if (fontid==15) italic = 1; -+ -+ if (!fgInit) Init(); -+ -+ if (fontid == 0) { -+ fgCurFontIdx = 0; // use font 0 (default font, set in ctor) -+ return; -+ } ++ basename = gSystem->BaseName(ttfont); + // check if font is in cache int i; @@ -447,32 +413,30 @@ diff -ur root-6.24.02.orig/graf2d/graf/src/TTF.cxx root-6.24.02/graf2d/graf/src/ - return 0; - } - } -+ if (fgFontID[i] == fontid) { ++ if (!strcmp(fgFontName[i], basename) && ++ (fgFontIdx[i] == ttindex) && ++ (fgFontIta[i] == italic)) { + fgCurFontIdx = i; -+ return; ++ delete [] ttfont; ++ return 0; } } -@@ -409,151 +541,215 @@ - if (fgFontCount >= kTTMaxFonts) { - Error("TTF::SetTextFont", "too many fonts opened (increase kTTMaxFont = %d)", +@@ -416,28 +551,13 @@ Int_t TTF::SetTextFont(const char *fontname, Int_t italic) kTTMaxFonts); -- Warning("TTF::SetTextFont", "using default font %s", fgFontName[0]); -+ Warning("TTF::SetTextFont", "using default font"); + Warning("TTF::SetTextFont", "using default font %s", fgFontName[0]); fgCurFontIdx = 0; // use font 0 (default font, set in ctor) -- return 0; -+ return; ++ delete [] ttfont; + return 0; } - // try to load font (font must be in Root.TTFontPath resource) - const char *ttpath = gEnv->GetValue("Root.TTFontPath", - TROOT::GetTTFFontDir()); - char *ttfont = gSystem->Which(ttpath, fontname, kReadPermission); -+ char *ttfont = NULL; -+ int ttindex = 0; - +- - if (!ttfont) { -- Error("TTF::SetTextFont", "font file %s not found in path", fontname); +- Error("TTF::SetTextFont", "font file %s not found in path %s", fontname, ttpath); - if (fgFontCount) { - Warning("TTF::SetTextFont", "using default font %s", fgFontName[0]); - fgCurFontIdx = 0; // use font 0 (default font, set in ctor) @@ -480,245 +444,50 @@ diff -ur root-6.24.02.orig/graf2d/graf/src/TTF.cxx root-6.24.02/graf2d/graf/src/ - } else { - return 1; - } -+ FcPattern *pat, *match; -+ FcCharSet *set = NULL; -+ FcResult result; -+ -+ pat = FcPatternCreate (); -+ -+ switch (fontid) { -+ case 1: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freeserif"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ITALIC); -+ break; -+ case 2: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freeserif"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_BOLD); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 3: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freeserif"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_BOLD); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ITALIC); -+ break; -+ case 4: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freesans"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 5: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freesans"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ITALIC); -+ break; -+ case 6: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freesans"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_BOLD); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 7: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freesans"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_BOLD); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ITALIC); -+ break; -+ case 8: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freemono"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 9: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freemono"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ITALIC); -+ break; -+ case 10: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freemono"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_BOLD); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 11: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freemono"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_BOLD); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ITALIC); -+ break; -+ case 12: -+ case 15: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"symbol"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 13: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freeserif"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 14: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"dingbats"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 16: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"stixgeneral"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 17: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"stixgeneral"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ITALIC); -+ break; -+ case 18: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"stixgeneral"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_BOLD); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 19: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"stixgeneral"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_BOLD); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ITALIC); -+ break; -+ case 20: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"stixsize1"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 21: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"stixsize1"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_BOLD); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 22: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"stixsize2"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 23: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"stixsize2"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_BOLD); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 24: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"stixsize3"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 25: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"stixsize3"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_BOLD); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 26: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"stixsize4"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 27: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"stixsize4"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_BOLD); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 28: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"stixsize5"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 29: -+ case 30: -+ case 31: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"droidsansfallback"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ set = FcCharSetCreate (); -+ FcCharSetAddChar (set, 0x0410); // Cyrillic -+ FcCharSetAddChar (set, 0x4e00); // CJK -+ FcPatternAddCharSet (pat, FC_CHARSET, set); -+ break; -+ default: -+ Error("TTF::SetTextFont", "font %i not known to ROOT", fontid); -+ FcPatternDestroy (pat); -+ Warning("TTF::SetTextFont", "using default font"); -+ fgCurFontIdx = 0; // use font 0 (default font, set in ctor) -+ return; -+ break; - } - -+ FcConfigSubstitute (NULL, pat, FcMatchPattern); -+ FcDefaultSubstitute (pat); -+ match = FcFontMatch (NULL, pat, &result); -+ char *ttfnt; -+ FcPatternGetString (match, FC_FILE, 0, (FcChar8**)&ttfnt); -+ ttfont = StrDup (ttfnt); -+ FcPatternGetInteger (match, FC_INDEX, 0, &ttindex); -+ FcPatternDestroy (match); -+ FcPatternDestroy (pat); -+ if (set) FcCharSetDestroy (set); -+ - FT_Face tface = 0; +- } +- + FT_Face tface = (FT_Face) 0; - if (FT_New_Face(fgLibrary, ttfont, 0, &tface)) { + if (FT_New_Face(fgLibrary, ttfont, ttindex, &tface)) { Error("TTF::SetTextFont", "error loading font %s", ttfont); delete [] ttfont; if (tface) FT_Done_Face(tface); -- if (fgFontCount) { -- Warning("TTF::SetTextFont", "using default font %s", fgFontName[0]); -- fgCurFontIdx = 0; -- return 0; -- } else { -- return 1; -- } -+ Warning("TTF::SetTextFont", "using default font"); -+ fgCurFontIdx = 0; -+ return; +@@ -450,24 +570,25 @@ Int_t TTF::SetTextFont(const char *fontname, Int_t italic) + } } - delete [] ttfont; - -- fgFontName[fgFontCount] = StrDup(basename); -+ fgFontID[fgFontCount] = fontid; +- delete [] ttfont; +- + fgFontName[fgFontCount] = StrDup(basename); ++ fgFontIdx[fgFontCount] = ttindex; ++ fgFontIta[fgFontCount] = italic; fgCurFontIdx = fgFontCount; fgFace[fgCurFontIdx] = tface; - fgCharMap[fgCurFontIdx] = 0; + fgCharMap[fgCurFontIdx] = (FT_CharMap) 0; fgFontCount++; - if (italic) { +- if (italic) { - fgSymbItaFontIdx = fgCurFontIdx; ++ if ((italic & 1) != 0) { FT_Matrix slantMat; slantMat.xx = (1 << 16); slantMat.xy = ((1 << 16) >> 2); slantMat.yx = 0; slantMat.yy = (1 << 16); - FT_Set_Transform( fgFace[fgSymbItaFontIdx], &slantMat, NULL ); -- } -- -- return 0; --} -- --//////////////////////////////////////////////////////////////////////////////// --/// Set specified font. --/// List of the currently supported fonts (screen and PostScript) --/// --/// | Font ID | X11 | TTF | --/// |---------|---------------------------|------------------| --/// | 1 | times-medium-i-normal | timesi.ttf | --/// | 2 | times-bold-r-normal | timesbd.ttf | --/// | 3 | times-bold-i-normal | timesbi.ttf | --/// | 4 | helvetica-medium-r-normal | arial.ttf | --/// | 5 | helvetica-medium-o-normal | ariali.ttf | --/// | 6 | helvetica-bold-r-normal | arialbd.ttf | --/// | 7 | helvetica-bold-o-normal | arialbi.ttf | --/// | 8 | courier-medium-r-normal | cour.ttf | --/// | 9 | courier-medium-o-normal | couri.ttf | --/// | 10 | courier-bold-r-normal | courbd.ttf | --/// | 11 | courier-bold-o-normal | courbi.ttf | --/// | 12 | symbol-medium-r-normal | symbol.ttf | --/// | 13 | times-medium-r-normal | times.ttf | --/// | 14 | | wingding.ttf | --/// | 15 | symbol oblique is emulated from symbol.ttf | | -- --void TTF::SetTextFont(Font_t fontnumber) --{ ++ FT_Set_Transform( fgFace[fgCurFontIdx], &slantMat, nullptr ); + } + ++ delete [] ttfont; ++ + return 0; + } + +@@ -494,70 +615,50 @@ Int_t TTF::SetTextFont(const char *fontname, Int_t italic) + + void TTF::SetTextFont(Font_t fontnumber) + { - // Added by cholm for use of DFSG - fonts - based on Kevins fix. - // Table of Microsoft and (for non-MSFT operating systems) backup - // FreeFont TTF fonts. @@ -727,10 +496,10 @@ diff -ur root-6.24.02.orig/graf2d/graf/src/TTF.cxx root-6.24.02/graf2d/graf/src/ - { "Root.TTFont.1", "FreeSerifItalic.otf" }, - { "Root.TTFont.2", "FreeSerifBold.otf" }, - { "Root.TTFont.3", "FreeSerifBoldItalic.otf" }, -- { "Root.TTFont.4", "FreeSans.otf" }, -- { "Root.TTFont.5", "FreeSansOblique.otf" }, -- { "Root.TTFont.6", "FreeSansBold.otf" }, -- { "Root.TTFont.7", "FreeSansBoldOblique.otf" }, +- { "Root.TTFont.4", "texgyreheros-regular.otf" }, +- { "Root.TTFont.5", "texgyreheros-italic.otf" }, +- { "Root.TTFont.6", "texgyreheros-bold.otf" }, +- { "Root.TTFont.7", "texgyreheros-bolditalic.otf" }, - { "Root.TTFont.8", "FreeMono.otf" }, - { "Root.TTFont.9", "FreeMonoOblique.otf" }, - { "Root.TTFont.10", "FreeMonoBold.otf" }, @@ -755,14 +524,47 @@ diff -ur root-6.24.02.orig/graf2d/graf/src/TTF.cxx root-6.24.02/graf2d/graf/src/ - { "Root.TTFont.ME", "DroidSansFallback.ttf" }, - { "Root.TTFont.CJKMing", "DroidSansFallback.ttf" }, - { "Root.TTFont.CJKGothic", "DroidSansFallback.ttf" } -- }; -- ++ static const char *fonttable[] = { ++ "freesans:bold", ++ "freeserif:italic", ++ "freeserif:bold", ++ "freeserif:bold:italic", ++ "freesans", ++ "freesans:italic", ++ "freesans:bold", ++ "freesans:bold:italic", ++ "freemono", ++ "freemono:italic", ++ "freemono:bold", ++ "freemono:bold:italic", ++ "standardsymbolsps", ++ "freeserif", ++ "dingbats", ++ "standardsymbolsps", ++ "stixgeneral", ++ "stixgeneral:italic", ++ "stixgeneral:bold", ++ "stixgeneral:bold:italic", ++ "stixsize1", ++ "stixsize1:bold", ++ "stixsize2", ++ "stixsize2:bold", ++ "stixsize3", ++ "stixsize3:bold", ++ "stixsize4", ++ "stixsize4:bold", ++ "stixsize5", ++ "droidsansfallback:charset=4e00 0410", ++ "droidsansfallback:charset=4e00 0410", ++ "droidsansfallback:charset=4e00 0410" + }; + - static int fontset = -1; - int thisset = fontset; - -- int fontid = fontnumber / 10; -- if (fontid < 0 || fontid > 31) fontid = 0; -- + int fontid = fontnumber / 10; + if (fontid < 0 || fontid > 31) fontid = 0; + - if (thisset == -1) { - // try to load font (font must be in Root.TTFontPath resource) - // to see which fontset we have available @@ -776,21 +578,26 @@ diff -ur root-6.24.02.orig/graf2d/graf/src/TTF.cxx root-6.24.02/graf2d/graf/src/ - // try backup free font - thisset = 1; - } -+ FT_Set_Transform( fgFace[fgCurFontIdx], &slantMat, NULL ); - } -- Int_t italic = 0; +- } + Int_t italic = 0; - if (fontid==15) italic = 1; - int ret = SetTextFont(gEnv->GetValue(fonttable[fontid][thisset], fonttable[fontid][1]), italic); - // Do not define font set is we're loading the symbol.ttf - it's - // the same in both cases. - if (ret == 0 && fontid != 12) fontset = thisset; ++ if (fontid==12) italic = 2; ++ if (fontid==14) italic = 2; ++ if (fontid==15) italic = 3; ++ ++ SetTextFont(fonttable[fontid], italic); } //////////////////////////////////////////////////////////////////////////////// -diff -ur root-6.24.02.orig/graf2d/postscript/CMakeLists.txt root-6.24.02/graf2d/postscript/CMakeLists.txt ---- root-6.24.02.orig/graf2d/postscript/CMakeLists.txt 2021-06-28 11:17:14.000000000 +0200 -+++ root-6.24.02/graf2d/postscript/CMakeLists.txt 2021-08-11 10:49:08.587579259 +0200 -@@ -27,6 +27,7 @@ +diff --git a/graf2d/postscript/CMakeLists.txt b/graf2d/postscript/CMakeLists.txt +index eb091bbb396..a05023a3f41 100644 +--- a/graf2d/postscript/CMakeLists.txt ++++ b/graf2d/postscript/CMakeLists.txt +@@ -27,6 +27,7 @@ ROOT_STANDARD_LIBRARY_PACKAGE(Postscript LIBRARIES ZLIB::ZLIB mathtext @@ -798,10 +605,11 @@ diff -ur root-6.24.02.orig/graf2d/postscript/CMakeLists.txt root-6.24.02/graf2d/ DEPENDENCIES Graf ) -diff -ur root-6.24.02.orig/graf2d/postscript/src/TPostScript.cxx root-6.24.02/graf2d/postscript/src/TPostScript.cxx ---- root-6.24.02.orig/graf2d/postscript/src/TPostScript.cxx 2021-06-28 11:17:14.000000000 +0200 -+++ root-6.24.02/graf2d/postscript/src/TPostScript.cxx 2021-08-11 10:49:08.588579261 +0200 -@@ -234,6 +234,7 @@ +diff --git a/graf2d/postscript/src/TPostScript.cxx b/graf2d/postscript/src/TPostScript.cxx +index df9e3ae16ea..1e353e1ca53 100644 +--- a/graf2d/postscript/src/TPostScript.cxx ++++ b/graf2d/postscript/src/TPostScript.cxx +@@ -234,6 +234,7 @@ To change the color model use `gStyle->SetColorModelPS(c)`. #include #include #include @@ -809,7 +617,7 @@ diff -ur root-6.24.02.orig/graf2d/postscript/src/TPostScript.cxx root-6.24.02/gr #include "strlcpy.h" #include "snprintf.h" -@@ -1585,56 +1586,179 @@ +@@ -1584,56 +1585,60 @@ Bool_t TPostScript::FontEmbedType42(const char *filename) void TPostScript::FontEmbed(void) { @@ -846,8 +654,41 @@ diff -ur root-6.24.02.orig/graf2d/postscript/src/TPostScript.cxx root-6.24.02/gr - { "Root.TTFont.ME", "DroidSansFallback.ttf" }, - { "Root.TTFont.CJKMing", "DroidSansFallback.ttf" }, - { "Root.TTFont.CJKCothic", "DroidSansFallback.ttf" } -- }; -- ++ static const char *fonttable[] = { ++ "freesans:bold", ++ "freeserif:italic", ++ "freeserif:bold", ++ "freeserif:bold:italic", ++ "freesans", ++ "freesans:italic", ++ "freesans:bold", ++ "freesans:bold:italic", ++ "freemono", ++ "freemono:italic", ++ "freemono:bold", ++ "freemono:bold:italic", ++ "standardsymbolsps", ++ "freeserif", ++ "dingbats", ++ "standardsymbolsps", ++ "stixgeneral", ++ "stixgeneral:italic", ++ "stixgeneral:bold", ++ "stixgeneral:bold:italic", ++ "stixsize1", ++ "stixsize1:bold", ++ "stixsize2", ++ "stixsize2:bold", ++ "stixsize3", ++ "stixsize3:bold", ++ "stixsize4", ++ "stixsize4:bold", ++ "stixsize5", ++ "droidsansfallback:charset=4e00 0410", ++ "droidsansfallback:charset=4e00 0410", ++ "droidsansfallback:charset=4e00 0410" + }; + PrintStr("%%IncludeResource: ProcSet (FontSetInit)@"); - // try to load font (font must be in Root.TTFontPath resource) @@ -859,182 +700,28 @@ diff -ur root-6.24.02.orig/graf2d/postscript/src/TPostScript.cxx root-6.24.02/gr - const char *filename = gEnv->GetValue( - fonttable[fontid][0], fonttable[fontid][1]); - char *ttfont = gSystem->Which(ttpath, filename, kReadPermission); -+ -+ char *ttfont = NULL; ++ char *ttfont = nullptr; + + FcPattern *pat, *match; -+ FcCharSet *set = NULL; + FcResult result; + -+ pat = FcPatternCreate (); ++ pat = FcNameParse ((const FcChar8*) fonttable[fontid]); + -+ switch (fontid) { -+ case 1: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freeserif"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ITALIC); -+ break; -+ case 2: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freeserif"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_BOLD); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 3: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freeserif"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_BOLD); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ITALIC); -+ break; -+ case 4: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freesans"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 5: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freesans"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ITALIC); -+ break; -+ case 6: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freesans"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_BOLD); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 7: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freesans"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_BOLD); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ITALIC); -+ break; -+ case 8: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freemono"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 9: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freemono"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ITALIC); -+ break; -+ case 10: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freemono"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_BOLD); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 11: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freemono"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_BOLD); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ITALIC); -+ break; -+ case 12: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"symbol"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 13: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freeserif"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 14: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"dingbats"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 16: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"stixgeneral"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 17: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"stixgeneral"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ITALIC); -+ break; -+ case 18: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"stixgeneral"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_BOLD); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 19: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"stixgeneral"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_BOLD); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ITALIC); -+ break; -+ case 20: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"stixsize1"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 21: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"stixsize1"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_BOLD); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 22: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"stixsize2"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 23: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"stixsize2"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_BOLD); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 24: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"stixsize3"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 25: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"stixsize3"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_BOLD); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 26: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"stixsize4"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 27: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"stixsize4"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_BOLD); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 28: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"stixsize5"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 29: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"droidsansfallback"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ set = FcCharSetCreate (); -+ FcCharSetAddChar (set, 0x0410); // Cyrillic -+ FcCharSetAddChar (set, 0x4e00); // CJK -+ FcPatternAddCharSet (pat, FC_CHARSET, set); -+ break; -+ } -+ -+ FcConfigSubstitute (NULL, pat, FcMatchPattern); ++ FcConfigSubstitute (nullptr, pat, FcMatchPattern); + FcDefaultSubstitute (pat); -+ match = FcFontMatch (NULL, pat, &result); -+ char *ttfnt; -+ FcPatternGetString (match, FC_FILE, 0, (FcChar8**)&ttfnt); -+ ttfont = StrDup(ttfnt); -+ FcPatternDestroy (match); -+ FcPatternDestroy (pat); -+ if (set) FcCharSetDestroy (set); ++ match = FcFontMatch (nullptr, pat, &result); ++ FcPatternGetString (match, FC_FILE, 0, (FcChar8**) &ttfont); + if (!ttfont) { - Error("TPostScript::FontEmbed", - "font %d (filename `%s') not found in path", - fontid, filename); -+ Error("TPostScript::FontEmbed", "font %d not found in path", ++ Error("TPostScript::FontEmbed", "font %d not found", + fontid); } else { if (FontEmbedType2(ttfont)) { // nothing -@@ -1643,9 +1767,8 @@ +@@ -1642,12 +1647,13 @@ void TPostScript::FontEmbed(void) } else if(FontEmbedType42(ttfont)) { // nothing } else { @@ -1044,9 +731,15 @@ diff -ur root-6.24.02.orig/graf2d/postscript/src/TPostScript.cxx root-6.24.02/gr + Error("TPostScript::FontEmbed", "failed to embed font %d)", + fontid); } - delete [] ttfont; +- delete [] ttfont; } -@@ -2837,10 +2960,10 @@ ++ ++ FcPatternDestroy (match); ++ FcPatternDestroy (pat); + } + } + PrintStr("%%IncludeResource: font Times-Roman@"); +@@ -2836,10 +2842,10 @@ void TPostScript::Text(Double_t xx, Double_t yy, const wchar_t *chars) { "Root.PSFont.9", "/FreeMonoOblique" }, { "Root.PSFont.10", "/FreeMonoBold" }, { "Root.PSFont.11", "/FreeMonoBoldOblique" }, @@ -1060,10 +753,11 @@ diff -ur root-6.24.02.orig/graf2d/postscript/src/TPostScript.cxx root-6.24.02/gr { "Root.PSFont.STIXGen", "/STIXGeneral" }, { "Root.PSFont.STIXGenIt", "/STIXGeneral-Italic" }, { "Root.PSFont.STIXGenBd", "/STIXGeneral-Bold" }, -diff -ur root-6.24.02.orig/graf3d/gl/CMakeLists.txt root-6.24.02/graf3d/gl/CMakeLists.txt ---- root-6.24.02.orig/graf3d/gl/CMakeLists.txt 2021-06-28 11:17:14.000000000 +0200 -+++ root-6.24.02/graf3d/gl/CMakeLists.txt 2021-08-11 10:49:08.589579264 +0200 -@@ -208,6 +208,7 @@ +diff --git a/graf3d/gl/CMakeLists.txt b/graf3d/gl/CMakeLists.txt +index e759473ca0f..c453397fc52 100644 +--- a/graf3d/gl/CMakeLists.txt ++++ b/graf3d/gl/CMakeLists.txt +@@ -211,6 +211,7 @@ ROOT_STANDARD_LIBRARY_PACKAGE(RGL ${GL2PS_LIBRARIES} ${X11_LIBRARIES} RGlew @@ -1071,9 +765,10 @@ diff -ur root-6.24.02.orig/graf3d/gl/CMakeLists.txt root-6.24.02/graf3d/gl/CMake DEPENDENCIES Hist Gui -diff -ur root-6.24.02.orig/graf3d/gl/src/TGLFontManager.cxx root-6.24.02/graf3d/gl/src/TGLFontManager.cxx ---- root-6.24.02.orig/graf3d/gl/src/TGLFontManager.cxx 2021-06-28 11:17:14.000000000 +0200 -+++ root-6.24.02/graf3d/gl/src/TGLFontManager.cxx 2021-08-11 10:49:08.589579264 +0200 +diff --git a/graf3d/gl/src/TGLFontManager.cxx b/graf3d/gl/src/TGLFontManager.cxx +index 58ea1188d59..647642de615 100644 +--- a/graf3d/gl/src/TGLFontManager.cxx ++++ b/graf3d/gl/src/TGLFontManager.cxx @@ -36,6 +36,7 @@ # include "FTGLBitmapFont.h" #endif @@ -1082,16 +777,7 @@ diff -ur root-6.24.02.orig/graf3d/gl/src/TGLFontManager.cxx root-6.24.02/graf3d/ /** \class TGLFont \ingroup opengl -@@ -419,7 +420,7 @@ - ClassImp(TGLFontManager); - - TObjArray TGLFontManager::fgFontFileArray; --Int_t TGLFontManager::fgExtendedFontStart; -+Int_t TGLFontManager::fgExtendedFontStart = 0; - TGLFontManager::FontSizeVec_t TGLFontManager::fgFontSizeArray; - Bool_t TGLFontManager::fgStaticInitDone = kFALSE; - -@@ -450,17 +451,175 @@ +@@ -448,16 +449,120 @@ void TGLFontManager::RegisterFont(Int_t sizeIn, Int_t fileID, TGLFont::EMode mod FontMap_i it = fFontMap.find(TGLFont(size, fileID, mode)); if (it == fFontMap.end()) { @@ -1104,234 +790,127 @@ diff -ur root-6.24.02.orig/graf3d/gl/src/TGLFontManager.cxx root-6.24.02/graf3d/ - ((TObjString*)fgFontFileArray[fileID])->String()); - file = fp; - delete [] fp; -+ char *file = NULL; -+ int ttindex = 0; ++ TString file; + -+ FcPattern *pat, *match; -+ FcCharSet *set = NULL; ++ TString fontname = fileID < fgExtendedFontStart ? ++ ((TObjString*)fgFontFileArray[fileID])->String() + ".ttf" : ++ ((TObjString*)fgFontFileArray[fileID])->String(); ++ ++ FcPattern *pat = nullptr, *match; + FcResult result; + -+ pat = FcPatternCreate (); -+ -+ switch (fileID) { -+ case 0: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freeserif"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ITALIC); -+ break; -+ case 1: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freeserif"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_BOLD); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 2: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freeserif"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_BOLD); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ITALIC); -+ break; -+ case 3: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freesans"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 4: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freesans"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ITALIC); -+ break; -+ case 5: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freesans"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_BOLD); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 6: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freesans"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_BOLD); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ITALIC); -+ break; -+ case 7: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freemono"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 8: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freemono"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ITALIC); -+ break; -+ case 9: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freemono"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_BOLD); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 10: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freemono"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_BOLD); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ITALIC); -+ break; -+ case 11: -+ case 14: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"symbol"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 12: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freeserif"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 13: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"dingbats"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 15: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"stixgeneral"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 16: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"stixgeneral"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ITALIC); -+ break; -+ case 17: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"stixgeneral"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_BOLD); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 18: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"stixgeneral"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_BOLD); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ITALIC); -+ break; -+ case 19: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"stixsize1"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 20: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"stixsize1"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_BOLD); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 21: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"stixsize2"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 22: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"stixsize2"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_BOLD); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 23: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"stixsize3"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 24: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"stixsize3"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_BOLD); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 25: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"stixsize4"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 26: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"stixsize4"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_BOLD); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 27: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"stixsize5"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 28: -+ case 29: -+ case 30: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"droidsansfallback"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ set = FcCharSetCreate (); -+ FcCharSetAddChar (set, 0x0410); // Cyrillic -+ FcCharSetAddChar (set, 0x4e00); // CJK -+ FcPatternAddCharSet (pat, FC_CHARSET, set); ++ if (strcmp(fontname, "timesi.ttf") == 0 || ++ strcmp(fontname, "FreeSerifItalic.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "freeserif:italic"); ++ } ++ else if (strcmp(fontname, "timesbd.ttf") == 0 || ++ strcmp(fontname, "FreeSerifBold.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "freeserif:bold"); ++ } ++ else if (strcmp(fontname, "timesbi.ttf") == 0 || ++ strcmp(fontname, "FreeSerifBoldItalic.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "freeserif:bold:italic"); ++ } ++ else if (strcmp(fontname, "arial.ttf") == 0 || ++ strcmp(fontname, "FreeSans.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "freesans"); ++ } ++ else if (strcmp(fontname, "ariali.ttf") == 0 || ++ strcmp(fontname, "FreeSansOblique.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "freesans:italic"); ++ } ++ else if (strcmp(fontname, "arialbd.ttf") == 0 || ++ strcmp(fontname, "FreeSansBold.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "freesans:bold"); ++ } ++ else if (strcmp(fontname, "arialbi.ttf") == 0 || ++ strcmp(fontname, "FreeSansBoldOblique.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "freesans:bold:italic"); ++ } ++ else if (strcmp(fontname, "cour.ttf") == 0 || ++ strcmp(fontname, "FreeMono.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "freemono"); ++ } ++ else if (strcmp(fontname, "couri.ttf") == 0 || ++ strcmp(fontname, "FreeMonoOblique.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "freemono:italic"); ++ } ++ else if (strcmp(fontname, "courbd.ttf") == 0 || ++ strcmp(fontname, "FreeMonoBold.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "freemono:bold"); ++ } ++ else if (strcmp(fontname, "courbi.ttf") == 0 || ++ strcmp(fontname, "FreeMonoBoldOblique.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "freemono:bold:italic"); ++ } ++ else if (strcmp(fontname, "symbol.ttf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "standardsymbolsps"); ++ } ++ else if (strcmp(fontname, "times.ttf") == 0 || ++ strcmp(fontname, "FreeSerif.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "freeserif"); } - -+ FcConfigSubstitute (NULL, pat, FcMatchPattern); ++ else if (strcmp(fontname, "wingding.ttf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "dingbats"); ++ } ++ else if (strcmp(fontname, "STIXGeneral.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "stixgeneral"); ++ } ++ else if (strcmp(fontname, "STIXGeneralItalic.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "stixgeneral:italic"); ++ } ++ else if (strcmp(fontname, "STIXGeneralBol.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "stixgeneral:bold"); ++ } ++ else if (strcmp(fontname, "STIXGeneralBolIta.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "stixgeneral:bold:italic"); ++ } ++ else if (strcmp(fontname, "STIXSiz1Sym.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "stixsize1"); ++ } ++ else if (strcmp(fontname, "STIXSiz1SymBol.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "stixsize1:bold"); ++ } ++ else if (strcmp(fontname, "STIXSiz2Sym.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "stixsize2"); ++ } ++ else if (strcmp(fontname, "STIXSiz2SymBol.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "stixsize2:bold"); ++ } ++ else if (strcmp(fontname, "STIXSiz3Sym.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "stixsize3"); ++ } ++ else if (strcmp(fontname, "STIXSiz3SymBol.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "stixsize3:bold"); ++ } ++ else if (strcmp(fontname, "STIXSiz4Sym.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "stixsize4"); ++ } ++ else if (strcmp(fontname, "STIXSiz4SymBol.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "stixsize4:bold"); ++ } ++ else if (strcmp(fontname, "STIXSiz5Sym.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "stixsize5"); ++ } ++ else if (strcmp(fontname, "DroidSansFallback.ttf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "droidsansfallback:charset=4e00 0410"); ++ } ++ ++ FcConfigSubstitute (nullptr, pat, FcMatchPattern); + FcDefaultSubstitute (pat); -+ match = FcFontMatch (NULL, pat, &result); ++ match = FcFontMatch (nullptr, pat, &result); + char *ttfnt; -+ FcPatternGetString (match, FC_FILE, 0, (FcChar8**)&ttfnt); -+ file = StrDup (ttfnt); -+ FcPatternGetInteger (match, FC_INDEX, 0, &ttindex); ++ FcPatternGetString (match, FC_FILE, 0, (FcChar8**) &ttfnt); ++ file = ttfnt; + FcPatternDestroy (match); + FcPatternDestroy (pat); -+ if (set) FcCharSetDestroy (set); -+ + FTFont* ftfont = 0; switch (mode) - { -@@ -484,10 +643,14 @@ - ftfont = new FTGLTextureFont(file); - break; - default: -+ delete [] file; - Error("TGLFontManager::RegisterFont", "invalid FTGL type"); - return; - break; - } -+ -+ delete [] file; -+ - ftfont->FaceSize(size); - const TGLFont &mf = fFontMap.insert(std::make_pair(TGLFont(size, fileID, mode, ftfont, 0), 1)).first->first; - out.CopyAttributes(mf); -@@ -570,8 +733,6 @@ - { - if (fgStaticInitDone == kFALSE) InitStatics(); - -- assert(fgExtendedFontStart > 0 && "GetExtendedFontStartIndex, invalid index"); -- - return fgExtendedFontStart; - } - -@@ -641,28 +802,6 @@ - fgFontFileArray.Add(new TObjString("wingding")); // 140 - fgFontFileArray.Add(new TObjString("symbol")); // 150 - -- fgExtendedFontStart = fgFontFileArray.GetEntries(); -- //"Extended" fonts for gl-pad. -- //fgPadFontStart + ... -- fgFontFileArray.Add(new TObjString("FreeSerifItalic.otf")); // 10 (160) -- fgFontFileArray.Add(new TObjString("FreeSerifBold.otf")); // 20 (170) -- fgFontFileArray.Add(new TObjString("FreeSerifBoldItalic.otf")); // 30 -- -- fgFontFileArray.Add(new TObjString("FreeSans.otf")); // 40 -- fgFontFileArray.Add(new TObjString("FreeSansOblique.otf")); // 50 -- fgFontFileArray.Add(new TObjString("FreeSansBold.otf")); // 60 -- fgFontFileArray.Add(new TObjString("FreeSansBoldOblique.otf")); // 70 -- -- fgFontFileArray.Add(new TObjString("FreeMono.otf")); // 80 -- fgFontFileArray.Add(new TObjString("FreeMonoOblique.otf")); // 90 -- fgFontFileArray.Add(new TObjString("FreeMonoBold.otf")); // 100 -- fgFontFileArray.Add(new TObjString("FreeMonoBoldOblique.otf")); // 110 -- -- fgFontFileArray.Add(new TObjString("symbol.ttf")); // 120 -- fgFontFileArray.Add(new TObjString("FreeSerif.otf")); // 130 -- fgFontFileArray.Add(new TObjString("wingding.ttf")); // 140 -- fgFontFileArray.Add(new TObjString("symbol.ttf")); // 150 -- - fgFontFileArray.Add(new TObjString("STIXGeneral.otf")); // 200 - fgFontFileArray.Add(new TObjString("STIXGeneralItalic.otf")); // 210 - fgFontFileArray.Add(new TObjString("STIXGeneralBol.otf")); // 220 -diff -ur root-6.24.02.orig/graf3d/gl/src/TGLText.cxx root-6.24.02/graf3d/gl/src/TGLText.cxx ---- root-6.24.02.orig/graf3d/gl/src/TGLText.cxx 2021-06-28 11:17:14.000000000 +0200 -+++ root-6.24.02/graf3d/gl/src/TGLText.cxx 2021-08-11 10:49:08.590579267 +0200 +diff --git a/graf3d/gl/src/TGLText.cxx b/graf3d/gl/src/TGLText.cxx +index 2ed3ee0917a..03feb0ee0a4 100644 +--- a/graf3d/gl/src/TGLText.cxx ++++ b/graf3d/gl/src/TGLText.cxx @@ -32,6 +32,8 @@ # include "FTGLBitmapFont.h" #endif @@ -1341,7 +920,7 @@ diff -ur root-6.24.02.orig/graf3d/gl/src/TGLText.cxx root-6.24.02/graf3d/gl/src/ #define FTGL_BITMAP 0 #define FTGL_PIXMAP 1 #define FTGL_OUTLINE 2 -@@ -176,27 +178,92 @@ +@@ -175,27 +177,35 @@ void TGLText::SetGLTextFont(Font_t fontnumber) { int fontid = fontnumber / 10; @@ -1366,96 +945,39 @@ diff -ur root-6.24.02.orig/graf3d/gl/src/TGLText.cxx root-6.24.02/graf3d/gl/src/ - const char *ttpath = gEnv->GetValue("Root.TTFontPath", - TROOT::GetTTFFontDir()); - char *ttfont = gSystem->Which(ttpath, fontname, kReadPermission); ++ static const char *fonttable[] = { ++ "freesans:bold", ++ "freeserif:italic", ++ "freeserif:bold", ++ "freeserif:bold:italic", ++ "freesans", ++ "freesans:italic", ++ "freesans:bold", ++ "freesans:bold:italic", ++ "freemono", ++ "freemono:italic", ++ "freemono:bold", ++ "freemono:bold:italic", ++ "standardsymbolsps", ++ "freeserif", ++ "dingbats", ++ }; ++ ++ char *ttfont; ++ + FcPattern *pat, *match; + FcResult result; -+ char *ttfont; -+ int ttindex; + -+ pat = FcPatternCreate (); ++ pat = FcNameParse ((const FcChar8*) fonttable[fontid]); + -+ switch (fontid) { -+ case 1: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freeserif"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ITALIC); -+ break; -+ case 2: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freeserif"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_BOLD); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 3: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freeserif"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_BOLD); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ITALIC); -+ break; -+ case 4: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freesans"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 5: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freesans"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ITALIC); -+ break; -+ case 0: -+ case 6: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freesans"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_BOLD); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 7: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freesans"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_BOLD); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ITALIC); -+ break; -+ case 8: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freemono"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 9: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freemono"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ITALIC); -+ break; -+ case 10: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freemono"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_BOLD); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 11: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freemono"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_BOLD); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ITALIC); -+ break; -+ case 12: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"symbol"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 13: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freeserif"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 14: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"dingbats"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ } -+ -+ FcConfigSubstitute (NULL, pat, FcMatchPattern); ++ FcConfigSubstitute (nullptr, pat, FcMatchPattern); + FcDefaultSubstitute (pat); -+ match = FcFontMatch (NULL, pat, &result); -+ FcPatternGetString (match, FC_FILE, 0, (FcChar8**)&ttfont); -+ FcPatternGetInteger (match, FC_INDEX, 0, &ttindex); ++ match = FcFontMatch (nullptr, pat, &result); ++ FcPatternGetString (match, FC_FILE, 0, (FcChar8**) &ttfont); if (fGLTextFont) delete fGLTextFont; -@@ -204,7 +271,9 @@ +@@ -203,7 +213,9 @@ void TGLText::SetGLTextFont(Font_t fontnumber) fGLTextFont = new FTGLPolygonFont(ttfont); @@ -1466,28 +988,6 @@ diff -ur root-6.24.02.orig/graf3d/gl/src/TGLText.cxx root-6.24.02/graf3d/gl/src/ Error("SetGLTextFont","Cannot set FTGL::FaceSize"); - delete [] ttfont; } -diff -ur root-6.24.02.orig/gui/gui/src/TGApplication.cxx root-6.24.02/gui/gui/src/TGApplication.cxx ---- root-6.24.02.orig/gui/gui/src/TGApplication.cxx 2021-06-28 11:17:14.000000000 +0200 -+++ root-6.24.02/gui/gui/src/TGApplication.cxx 2021-08-11 10:49:08.590579267 +0200 -@@ -80,20 +80,12 @@ - gROOT->SetBatch(kFALSE); - - if (strcmp(appClassName, "proofserv")) { -- const char *ttpath = gEnv->GetValue("Root.TTFontPath", -- TROOT::GetTTFFontDir()); -- char *ttfont = gSystem->Which(ttpath, "arialbd.ttf", kReadPermission); -- // Added by cholm for use of DFSG - fonts - based on fix by Kevin -- if (!ttfont) -- ttfont = gSystem->Which(ttpath, "FreeSansBold.ttf", kReadPermission); -- if (ttfont && gEnv->GetValue("Root.UseTTFonts", 1)) { -+ if (gEnv->GetValue("Root.UseTTFonts", 1)) { - TPluginHandler *h; - if ((h = gROOT->GetPluginManager()->FindHandler("TVirtualX", "x11ttf"))) - if (h->LoadPlugin() == -1) - Info("TGApplication", "no TTF support"); - } -- -- delete [] ttfont; - } - - // Create the canvas colors early so they are allocated before +-- +2.52.0 + diff --git a/root-gcc-16-libstdc-links-to-libatomic.patch b/root-gcc-16-libstdc-links-to-libatomic.patch new file mode 100644 index 0000000..776fff3 --- /dev/null +++ b/root-gcc-16-libstdc-links-to-libatomic.patch @@ -0,0 +1,32 @@ +From 7b1632f5602a1bb6e6278d66c25640349c852ab1 Mon Sep 17 00:00:00 2001 +From: Mattias Ellert +Date: Fri, 9 Jan 2026 00:32:27 +0100 +Subject: [PATCH] Starting with gcc 16, libstdc++ links to libatomic. Add to + whitelist. + +$ ldd /lib64/libstdc++.so.6 + linux-vdso.so.1 (0x00007f3cb4c13000) + libm.so.6 => /lib64/libm.so.6 (0x00007f3cb4afc000) + libatomic.so.1 => /lib64/libatomic.so.1 (0x00007f3cb4af1000) + libc.so.6 => /lib64/libc.so.6 (0x00007f3cb460d000) + libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f3cb4ac5000) + /lib64/ld-linux-x86-64.so.2 (0x00007f3cb4c15000) +--- + bindings/pyroot/pythonizations/test/import_load_libs.py | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/bindings/pyroot/pythonizations/test/import_load_libs.py b/bindings/pyroot/pythonizations/test/import_load_libs.py +index 63feeca89ba..18906ff921e 100644 +--- a/bindings/pyroot/pythonizations/test/import_load_libs.py ++++ b/bindings/pyroot/pythonizations/test/import_load_libs.py +@@ -77,6 +77,7 @@ class ImportLoadLibs(unittest.TestCase): + "ld.*", + "libffi", + "libgcc_s", ++ "libatomic", + # AddressSanitizer runtime and ROOT configuration + "libclang_rt.asan-.*", + "libROOTSanitizerConfig", +-- +2.52.0 + diff --git a/root-get-rid-of-lsb_release.patch b/root-get-rid-of-lsb_release.patch deleted file mode 100644 index 8dca2cc..0000000 --- a/root-get-rid-of-lsb_release.patch +++ /dev/null @@ -1,245 +0,0 @@ -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-ignore-prefix.patch b/root-ignore-prefix.patch deleted file mode 100644 index 5b9918a..0000000 --- a/root-ignore-prefix.patch +++ /dev/null @@ -1,36 +0,0 @@ -From 1aa9231becda09a89ec576e4a17ca4d9b6e2f310 Mon Sep 17 00:00:00 2001 -From: Mattias Ellert -Date: Tue, 15 Mar 2022 14:55:37 +0100 -Subject: [PATCH] Link to the blas library found by cmake, not hardcoded - "blas". Set ROOTIGNOREPREFIX=1 when running built binaries during build. Make - sure PCH is created before running emitters. - ---- - tmva/sofie/test/CMakeLists.txt | 14 ++++++++------ - 1 file changed, 8 insertions(+), 6 deletions(-) - -diff --git a/tmva/sofie/test/CMakeLists.txt b/tmva/sofie/test/CMakeLists.txt -index e4f9d28748..a3a2c9ae16 100644 ---- a/tmva/sofie/test/CMakeLists.txt -+++ b/tmva/sofie/test/CMakeLists.txt -@@ -51,7 +51,7 @@ foreach(onnx_file ${ONNX_FILES}) - get_filename_component(fname ${onnx_file} NAME_WE) - get_filename_component(fdir ${onnx_file} DIRECTORY) - add_custom_command(TARGET SofieCompileModels_ONNX POST_BUILD -- COMMAND ./emitFromONNX ${onnx_file} ${CMAKE_CURRENT_BINARY_DIR}/${fname} -+ COMMAND ${CMAKE_COMMAND} -E env ROOTIGNOREPREFIX=1 ./emitFromONNX ${onnx_file} ${CMAKE_CURRENT_BINARY_DIR}/${fname} - USES_TERMINAL - ) - endforeach() -@@ -100,7 +101,7 @@ foreach(onnx_file ${ONNX_FILES}) - get_filename_component(fname ${onnx_file} NAME_WE) - get_filename_component(fdir ${onnx_file} DIRECTORY) - add_custom_command(TARGET SofieCompileModels_ROOT POST_BUILD -- COMMAND ./emitFromROOT ${onnx_file} ${CMAKE_CURRENT_BINARY_DIR}/${fname} -+ COMMAND ${CMAKE_COMMAND} -E env ROOTIGNOREPREFIX=1 ./emitFromROOT ${onnx_file} ${CMAKE_CURRENT_BINARY_DIR}/${fname} - USES_TERMINAL - ) - endforeach() --- -2.35.1 - diff --git a/root-jsmva-static.patch b/root-jsmva-static.patch deleted file mode 100644 index 2550f4d..0000000 --- a/root-jsmva-static.patch +++ /dev/null @@ -1,36 +0,0 @@ -diff -ur root-6.24.02.orig/bindings/jsmva/python/JsMVA/JPyInterface.py root-6.24.02/bindings/jsmva/python/JsMVA/JPyInterface.py ---- root-6.24.02.orig/bindings/jsmva/python/JsMVA/JPyInterface.py 2021-06-28 11:17:14.000000000 +0200 -+++ root-6.24.02/bindings/jsmva/python/JsMVA/JPyInterface.py 2021-08-11 09:06:21.894746090 +0200 -@@ -188,7 +188,7 @@ - ## Class for creating the output scripts and inserting them to cell output - class JsDraw: - ## Base repository -- __jsMVARepo = "https://root.cern.ch/js/jsmva/latest" -+ __jsMVARepo = "/static/JsMVA" - - ## String containing the link to JavaScript files - __jsMVASourceDir = __jsMVARepo + "/js" -diff -ur root-6.24.02.orig/bindings/pyroot_legacy/JsMVA/JPyInterface.py root-6.24.02/bindings/pyroot_legacy/JsMVA/JPyInterface.py ---- root-6.24.02.orig/bindings/pyroot_legacy/JsMVA/JPyInterface.py 2021-06-28 11:17:14.000000000 +0200 -+++ root-6.24.02/bindings/pyroot_legacy/JsMVA/JPyInterface.py 2021-08-11 09:06:21.925746168 +0200 -@@ -188,7 +188,7 @@ - ## Class for creating the output scripts and inserting them to cell output - class JsDraw: - ## Base repository -- __jsMVARepo = "https://root.cern.ch/js/jsmva/latest" -+ __jsMVARepo = "/static/JsMVA" - - ## String containing the link to JavaScript files - __jsMVASourceDir = __jsMVARepo + "/js" -diff -ur root-6.24.02.orig/etc/notebook/JsMVA/js/JsMVA.js root-6.24.02/etc/notebook/JsMVA/js/JsMVA.js ---- root-6.24.02.orig/etc/notebook/JsMVA/js/JsMVA.js 2021-06-28 11:17:14.000000000 +0200 -+++ root-6.24.02/etc/notebook/JsMVA/js/JsMVA.js 2021-08-11 09:10:45.638410266 +0200 -@@ -16,7 +16,7 @@ - - (function(factory){ - -- var JSROOT_source_dir = "https://root.cern/js/5.9.1/scripts/"; -+ var JSROOT_source_dir = "/static/scripts/"; - - var url = ""; - if (requirejs.s.contexts.hasOwnProperty("_")) { diff --git a/root-longlong.patch b/root-longlong.patch deleted file mode 100644 index 3c43542..0000000 --- a/root-longlong.patch +++ /dev/null @@ -1,42 +0,0 @@ -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-dyld-based-library-search-behavior-default.patch b/root-make-dyld-based-library-search-behavior-default.patch deleted file mode 100644 index 9b88576..0000000 --- a/root-make-dyld-based-library-search-behavior-default.patch +++ /dev/null @@ -1,147 +0,0 @@ -From 6ae602bba7d33c900a117c9de0187ab5a28e14b8 Mon Sep 17 00:00:00 2001 -From: Vassil Vassilev -Date: Mon, 21 Mar 2022 22:16:54 +0000 -Subject: [PATCH] Make the dyld-based library search behavior default for - non-modules. - -The dyld-based system was developed in the context on C++ modules but it turned -into a modules-agnostic feature. Instead of having to maintain more code, we -should rely on it even for non-modules build of ROOT. ---- - core/metacling/src/TCling.cxx | 109 +++------------------------------- - 1 file changed, 8 insertions(+), 101 deletions(-) - -diff --git a/core/metacling/src/TCling.cxx b/core/metacling/src/TCling.cxx -index dec399cf2b..3eae1c8570 100644 ---- a/core/metacling/src/TCling.cxx -+++ b/core/metacling/src/TCling.cxx -@@ -6501,14 +6501,18 @@ bool TCling::LibraryLoadingFailed(const std::string& errmessage, const std::stri - return false; - } - --static void* LazyFunctionCreatorAutoloadForModule(const std::string &mangled_name, -- const cling::DynamicLibraryManager &DLM) { -+//////////////////////////////////////////////////////////////////////////////// -+/// Autoload a library based on a missing symbol. -+ -+void* TCling::LazyFunctionCreatorAutoload(const std::string& mangled_name) { -+ -+ const cling::DynamicLibraryManager &DLM = *GetInterpreterImpl()->getDynamicLibraryManager(); - R__LOCKGUARD(gInterpreterMutex); - - auto LibLoader = [](const std::string& LibName) -> bool { - if (gSystem->Load(LibName.c_str(), "", false) < 0) { -- Error("TCling__LazyFunctionCreatorAutoloadForModule", -- "Failed to load library %s", LibName.c_str()); -+ ::Error("TCling__LazyFunctionCreatorAutoloadForModule", -+ "Failed to load library %s", LibName.c_str()); - return false; - } - return true; //success. -@@ -6536,103 +6540,6 @@ static void* LazyFunctionCreatorAutoloadForModule(const std::string &mangled_nam - return nullptr; - - return llvm::sys::DynamicLibrary::SearchForAddressOfSymbol(mangled_name); -- --} -- --//////////////////////////////////////////////////////////////////////////////// --/// Autoload a library based on a missing symbol. -- --void* TCling::LazyFunctionCreatorAutoload(const std::string& mangled_name) { -- if (fCxxModulesEnabled) -- return LazyFunctionCreatorAutoloadForModule(mangled_name, -- *GetInterpreterImpl()->getDynamicLibraryManager()); -- -- // First see whether the symbol is in the library that we are currently -- // loading. It will have access to the symbols of its dependent libraries, -- // thus checking "back()" is sufficient. -- if (!fRegisterModuleDyLibs.empty()) { -- if (void* addr = dlsym(fRegisterModuleDyLibs.back(), -- mangled_name.c_str())) { -- return addr; -- } -- } -- -- int err = 0; -- char* demangled_name_c = TClassEdit::DemangleName(mangled_name.c_str(), err); -- if (err) { -- return 0; -- } -- -- std::string name(demangled_name_c); -- free(demangled_name_c); -- -- //fprintf(stderr, "demangled name: '%s'\n", demangled_name); -- // -- // Separate out the class or namespace part of the -- // function name. -- // -- -- std::string::size_type pos = name.find("__thiscall "); -- if (pos != std::string::npos) { -- name.erase(0, pos + sizeof("__thiscall ")-1); -- } -- pos = name.find("__cdecl "); -- if (pos != std::string::npos) { -- name.erase(0, pos + sizeof("__cdecl ")-1); -- } -- if (!strncmp(name.c_str(), "typeinfo for ", sizeof("typeinfo for ")-1)) { -- name.erase(0, sizeof("typeinfo for ")-1); -- } else if (!strncmp(name.c_str(), "vtable for ", sizeof("vtable for ")-1)) { -- name.erase(0, sizeof("vtable for ")-1); -- } else if (!strncmp(name.c_str(), "operator", sizeof("operator")-1) -- && !isalnum(name[sizeof("operator")])) { -- // operator...(A, B) - let's try with A! -- name.erase(0, sizeof("operator")-1); -- pos = name.rfind('('); -- if (pos != std::string::npos) { -- name.erase(0, pos + 1); -- pos = name.find(","); -- if (pos != std::string::npos) { -- // remove next arg up to end, leaving only the first argument type. -- name.erase(pos); -- } -- pos = name.rfind(" const"); -- if (pos != std::string::npos) { -- name.erase(pos, strlen(" const")); -- } -- while (!name.empty() && strchr("&*", name.back())) -- name.erase(name.length() - 1); -- } -- } else { -- TClassEdit::FunctionSplitInfo fsi; -- TClassEdit::SplitFunction(name, fsi); -- name = fsi.fScopeName; -- } -- //fprintf(stderr, "name: '%s'\n", name.c_str()); -- // Now we have the class or namespace name, so do the lookup. -- TString libs = GetClassSharedLibs(name.c_str()); -- if (libs.IsNull()) { -- // Not found in the map, all done. -- return 0; -- } -- //fprintf(stderr, "library: %s\n", iter->second.c_str()); -- // Now we have the name of the libraries to load, so load them. -- -- TString lib; -- Ssiz_t posLib = 0; -- while (libs.Tokenize(lib, posLib)) { -- if (gSystem->Load(lib, "", kFALSE /*system*/) < 0) { -- // The library load failed, all done. -- //fprintf(stderr, "load failed: %s\n", errmsg.c_str()); -- return 0; -- } -- } -- -- //fprintf(stderr, "load succeeded.\n"); -- // Get the address of the function being called. -- void* addr = llvm::sys::DynamicLibrary::SearchForAddressOfSymbol(mangled_name.c_str()); -- //fprintf(stderr, "addr: %016lx\n", reinterpret_cast(addr)); -- return addr; - } - - //////////////////////////////////////////////////////////////////////////////// --- -2.35.1 - diff --git a/root-memory-usage.patch b/root-memory-usage.patch deleted file mode 100644 index 713d565..0000000 --- a/root-memory-usage.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 5618a02bd7ca4107f545e07a19b8a0762f31e45a Mon Sep 17 00:00:00 2001 -From: Mattias Ellert -Date: Mon, 16 Aug 2021 19:45:00 +0200 -Subject: [PATCH] Reduce memory usage for all builds - not only debug builds - ---- - core/metacling/src/CMakeLists.txt | 7 ++----- - 1 file changed, 2 insertions(+), 5 deletions(-) - -diff --git a/core/metacling/src/CMakeLists.txt b/core/metacling/src/CMakeLists.txt -index 8cbbe4ba08..f205b24602 100644 ---- a/core/metacling/src/CMakeLists.txt -+++ b/core/metacling/src/CMakeLists.txt -@@ -107,11 +107,8 @@ ROOT_LINKER_LIBRARY(Cling - $ - LIBRARIES ${CLING_LIBRARIES} ${LINK_LIBS} ${CLING_PLUGIN_LINK_LIBS}) - --string(TOUPPER "${LLVM_BUILD_TYPE}" THE_BUILD_TYPE) --if("${THE_BUILD_TYPE}" STREQUAL DEBUG OR "${THE_BUILD_TYPE}" STREQUAL RELWITHDEBINFO) -- # When these two link at the same time, they can exhaust the RAM on many machines, since they both link against llvm. -- add_dependencies(Cling rootcling_stage1) --endif() -+# When these two link at the same time, they can exhaust the RAM on many machines, since they both link against llvm. -+add_dependencies(Cling rootcling_stage1) - - if(MSVC) - set_target_properties(Cling PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS TRUE) --- -2.35.1 - diff --git a/root-namespace-pymva.patch b/root-namespace-pymva.patch deleted file mode 100644 index cd2fa57..0000000 --- a/root-namespace-pymva.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 0a969f5376af248e76cbcee45c9bdb6463e18c05 Mon Sep 17 00:00:00 2001 -From: Mattias Ellert -Date: Thu, 24 Mar 2022 21:20:07 +0100 -Subject: [PATCH 3/3] Add namespaces to LinkDef - -Fixes error: - -IncrementalExecutor::executeFunction: symbol '_ZN4TMVA12Experimental5SOFIE7PyTorch5ParseENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS9_ImSaImEESaISB_EE' unresolved while linking function '_GLOBAL__sub_I_cling_module_8'! -You are probably missing the definition of TMVA::Experimental::SOFIE::PyTorch::Parse(std::__cxx11::basic_string, std::allocator >, std::vector >, std::allocator > > >) -Maybe you need to load the corresponding shared library? -Symbol found in '/builddir/build/BUILD/root-6.26.00/redhat-linux-build/lib/libPyMVA.so.6.26.00'; did you mean to load it with '.L /builddir/build/BUILD/root-6.26.00/redhat-linux-build/lib/libPyMVA.so.6.26.00'? ---- - tmva/pymva/inc/LinkDef.h | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/tmva/pymva/inc/LinkDef.h b/tmva/pymva/inc/LinkDef.h -index 92da99a4f7..83145077dd 100644 ---- a/tmva/pymva/inc/LinkDef.h -+++ b/tmva/pymva/inc/LinkDef.h -@@ -15,6 +15,8 @@ - #pragma link C++ class TMVA::MethodPyGTB+; - #pragma link C++ class TMVA::MethodPyKeras+; - #pragma link C++ class TMVA::MethodPyTorch+; -+#pragma link C++ namespace TMVA::Experimental::SOFIE::PyKeras; - #pragma link C++ function TMVA::Experimental::SOFIE::PyKeras::Parse+; -+#pragma link C++ namespace TMVA::Experimental::SOFIE::PyTorch; - #pragma link C++ function TMVA::Experimental::SOFIE::PyTorch::Parse+; - #endif --- -2.35.1 - diff --git a/root-namespace-roofit.patch b/root-namespace-roofit.patch deleted file mode 100644 index c8aa92e..0000000 --- a/root-namespace-roofit.patch +++ /dev/null @@ -1,43 +0,0 @@ -From 4a4df0190ad24c0a3636994c2c23cb6c22e04589 Mon Sep 17 00:00:00 2001 -From: Mattias Ellert -Date: Thu, 24 Mar 2022 15:41:33 +0100 -Subject: [PATCH 2/3] Remove namespace RooFit from libRooFitCore's LinkDef - -The namespace is listed in the LinkDef's for both libRooFit and libRooFitCore. - -ROOT only autoloads one of the libraries, for some reason usually -libRooFitCore. After this only symbols in the namespace from that -library are present. By removing the namespace from liRooFitCore's -LinkDef, only libRooFit can be chosen when autoloading. Since -libRooFit depends on libRooFitCore, both libraries are loaded, and the -symbols from the namespace in both libraries are available. - -Fixes error: - -IncrementalExecutor::executeFunction: symbol '_ZN6RooFit12bindFunctionEPKcPFddER10RooAbsReal' unresolved while linking function '_GLOBAL__sub_I_cling_module_217'! -You are probably missing the definition of RooFit::bindFunction(char const*, double (*)(double), RooAbsReal&) -Maybe you need to load the corresponding shared library? -Symbol found in '/builddir/build/BUILD/root-6.26.00/redhat-linux-build/lib/libRooFit.so.6.26.00'; did you mean to load it with '.L /builddir/build/BUILD/root-6.26.00/redhat-linux-build/lib/libRooFit.so.6.26.00'? ---- - roofit/roofitcore/inc/LinkDef.h | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) - -diff --git a/roofit/roofitcore/inc/LinkDef.h b/roofit/roofitcore/inc/LinkDef.h -index d421fd95cd..72c66db33b 100644 ---- a/roofit/roofitcore/inc/LinkDef.h -+++ b/roofit/roofitcore/inc/LinkDef.h -@@ -105,7 +105,10 @@ - - - // Old LinkDef2.h --#pragma link C++ namespace RooFit ; -+ -+// "namespace RooFit" is in roofit/roofit/inc/Linkdef1.h -+// should not be in the dictionary for two different libraries -+// #pragma link C++ namespace RooFit ; - #pragma link C++ namespace RooFitShortHand ; - #pragma link C++ class RooDouble+ ; - #pragma link C++ class RooEffGenContext+ ; --- -2.35.1 - diff --git a/root-namespace-sofie.patch b/root-namespace-sofie.patch deleted file mode 100644 index a011634..0000000 --- a/root-namespace-sofie.patch +++ /dev/null @@ -1,30 +0,0 @@ -From c66ae9d9c035090584f465a41ce2e438e502be81 Mon Sep 17 00:00:00 2001 -From: Mattias Ellert -Date: Thu, 24 Mar 2022 15:23:59 +0100 -Subject: [PATCH 1/3] Add namespace TMVA::Experimental::SOFIE to LinkDef - -Fixes error: - -IncrementalExecutor::executeFunction: symbol '_ZN4TMVA12Experimental5SOFIE19ConvertTypeToStringB5cxx11ENS1_11ETensorTypeE' unresolved while linking function '_GLOBAL__sub_I_cling_module_8'! -You are probably missing the definition of TMVA::Experimental::SOFIE::ConvertTypeToString[abi:cxx11](TMVA::Experimental::SOFIE::ETensorType) -Maybe you need to load the corresponding shared library? -Symbol found in '/builddir/build/BUILD/root-6.26.00/redhat-linux-build/lib/libROOTTMVASofie.so.6.26.00'; did you mean to load it with '.L /builddir/build/BUILD/root-6.26.00/redhat-linux-build/lib/libROOTTMVASofie.so.6.26.00'? ---- - tmva/sofie/inc/LinkDef.h | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/tmva/sofie/inc/LinkDef.h b/tmva/sofie/inc/LinkDef.h -index 715cf35560..3282ff22c1 100644 ---- a/tmva/sofie/inc/LinkDef.h -+++ b/tmva/sofie/inc/LinkDef.h -@@ -7,6 +7,7 @@ - - #pragma link C++ nestedclass; - -+#pragma link C++ namespace TMVA::Experimental::SOFIE; - #pragma link C++ class TMVA::Experimental::SOFIE::RModel-; - #pragma link C++ class TMVA::Experimental::SOFIE::ROperator+; - #pragma link C++ struct TMVA::Experimental::SOFIE::InitializedTensor+; --- -2.35.1 - diff --git a/root-no-export-python-modules.patch b/root-no-export-python-modules.patch index aa7604d..d3fa4bc 100644 --- a/root-no-export-python-modules.patch +++ b/root-no-export-python-modules.patch @@ -1,30 +1,53 @@ -diff -ur root-6.24.02.orig/bindings/jupyroot/CMakeLists.txt root-6.24.02/bindings/jupyroot/CMakeLists.txt ---- root-6.24.02.orig/bindings/jupyroot/CMakeLists.txt 2021-06-28 11:17:14.000000000 +0200 -+++ root-6.24.02/bindings/jupyroot/CMakeLists.txt 2021-08-11 10:53:03.272202496 +0200 -@@ -70,8 +70,7 @@ - endforeach() +From b4e57c8ccd59d69fe61fa5f6470b3a99ba52aeeb Mon Sep 17 00:00:00 2001 +From: Mattias Ellert +Date: Thu, 4 Dec 2025 23:13:28 +0100 +Subject: [PATCH] Dont export Python modules + +--- + bindings/pyroot/cppyy/CPyCppyy/CMakeLists.txt | 3 +-- + bindings/pyroot/pythonizations/CMakeLists.txt | 8 +------- + 2 files changed, 2 insertions(+), 9 deletions(-) + +diff --git a/bindings/pyroot/cppyy/CPyCppyy/CMakeLists.txt b/bindings/pyroot/cppyy/CPyCppyy/CMakeLists.txt +index bb48c032974..c34069855b2 100644 +--- a/bindings/pyroot/cppyy/CPyCppyy/CMakeLists.txt ++++ b/bindings/pyroot/cppyy/CPyCppyy/CMakeLists.txt +@@ -119,8 +119,7 @@ install(TARGETS CPyCppyy EXPORT ${CMAKE_PROJECT_NAME}Exports + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries) - # Install library -- install(TARGETS ${libname} EXPORT ${CMAKE_PROJECT_NAME}Exports -- RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT libraries -+ install(TARGETS ${libname} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT libraries - LIBRARY DESTINATION ${CMAKE_INSTALL_PYTHONDIR} COMPONENT libraries - ARCHIVE DESTINATION ${CMAKE_INSTALL_PYTHONDIR} COMPONENT libraries) +-install(TARGETS cppyy EXPORT ${CMAKE_PROJECT_NAME}Exports +- RUNTIME DESTINATION ${CMAKE_INSTALL_PYTHONDIR}/cppyy COMPONENT libraries # Windows ++install(TARGETS cppyy RUNTIME DESTINATION ${CMAKE_INSTALL_PYTHONDIR}/cppyy COMPONENT libraries # Windows + LIBRARY DESTINATION ${CMAKE_INSTALL_PYTHONDIR}/cppyy COMPONENT libraries + ARCHIVE DESTINATION ${CMAKE_INSTALL_PYTHONDIR}/cppyy COMPONENT libraries) -diff -ur root-6.24.02.orig/bindings/pyroot/pythonizations/CMakeLists.txt root-6.24.02/bindings/pyroot/pythonizations/CMakeLists.txt ---- root-6.24.02.orig/bindings/pyroot/pythonizations/CMakeLists.txt 2021-06-28 11:17:14.000000000 +0200 -+++ root-6.24.02/bindings/pyroot/pythonizations/CMakeLists.txt 2021-08-11 10:53:03.272202496 +0200 -@@ -137,11 +137,10 @@ - # Create meta-target PyROOT2 and PyROOT3 (INTERFACE library) - # Export of targets are not supported for custom targets(add_custom_targets()) - add_library(PyROOT${python_major_version_string} INTERFACE) -- target_link_libraries(PyROOT${python_major_version_string} INTERFACE cppyy_backend${python_under_version_string} cppyy${python_under_version_string} ROOTPythonizations${python_under_version_string}) -+ target_link_libraries(PyROOT${python_major_version_string} INTERFACE cppyy_backend${python_under_version_string} cppyy${python_under_version_string}) +diff --git a/bindings/pyroot/pythonizations/CMakeLists.txt b/bindings/pyroot/pythonizations/CMakeLists.txt +index 1230f18ca47..2df4b733320 100644 +--- a/bindings/pyroot/pythonizations/CMakeLists.txt ++++ b/bindings/pyroot/pythonizations/CMakeLists.txt +@@ -202,11 +202,6 @@ foreach(py_source ${py_sources}) + COMMENT "Compiling PyROOT source ${py_source} for Python ${Python3_VERSION}") + endforeach() - # Install library -- install(TARGETS ${libname} EXPORT ${CMAKE_PROJECT_NAME}Exports -- RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT libraries -+ install(TARGETS ${libname} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT libraries - LIBRARY DESTINATION ${CMAKE_INSTALL_PYTHONDIR} COMPONENT libraries - ARCHIVE DESTINATION ${CMAKE_INSTALL_PYTHONDIR} COMPONENT libraries) +-# Create meta-target PyROOT3 (INTERFACE library) +-# Export of targets are not supported for custom targets(add_custom_targets()) +-add_library(PyROOT INTERFACE) +-target_link_libraries(PyROOT INTERFACE cppyy_backend cppyy ROOTPythonizations) +- + # Define library output directories for build and install trees + set(pymoduledir_build "${localruntimedir}/ROOT") + set(pymoduledir_install "${CMAKE_INSTALL_PYTHONDIR}/ROOT") +@@ -231,8 +226,7 @@ if(NOT MSVC) + endif() + # Install library +-install(TARGETS ${libname} EXPORT ${CMAKE_PROJECT_NAME}Exports +- RUNTIME DESTINATION ${pymoduledir_install} COMPONENT libraries ++install(TARGETS ${libname} RUNTIME DESTINATION ${pymoduledir_install} COMPONENT libraries + LIBRARY DESTINATION ${pymoduledir_install} COMPONENT libraries + ARCHIVE DESTINATION ${pymoduledir_install} COMPONENT libraries) + +-- +2.52.0 + diff --git a/root-ntuplewait.patch b/root-ntuplewait.patch deleted file mode 100644 index b464b69..0000000 --- a/root-ntuplewait.patch +++ /dev/null @@ -1,39 +0,0 @@ -From ad043f8e3304aab4f0ee3ad9e0cf8480c4bbadf0 Mon Sep 17 00:00:00 2001 -From: Mattias Ellert -Date: Thu, 24 Mar 2022 16:10:22 +0100 -Subject: [PATCH] Always call WaitForInFlightClusters before checking cluster - IDs - ---- - tree/ntuple/v7/test/ntuple_cluster.cxx | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/tree/ntuple/v7/test/ntuple_cluster.cxx b/tree/ntuple/v7/test/ntuple_cluster.cxx -index afc2fc32e9..0c299d97de 100644 ---- a/tree/ntuple/v7/test/ntuple_cluster.cxx -+++ b/tree/ntuple/v7/test/ntuple_cluster.cxx -@@ -213,6 +213,7 @@ TEST(ClusterPool, GetClusterBasics) - RPageSourceMock p1; - RClusterPool c1(p1, 1); - c1.GetCluster(3, {0}); -+ c1.WaitForInFlightClusters(); - ASSERT_EQ(2U, p1.fReqsClusterIds.size()); - EXPECT_EQ(3U, p1.fReqsClusterIds[0]); - EXPECT_EQ(4U, p1.fReqsClusterIds[1]); -@@ -267,11 +268,13 @@ TEST(ClusterPool, GetClusterIncrementally) - RPageSourceMock p1; - RClusterPool c1(p1, 1); - c1.GetCluster(3, {0}); -+ c1.WaitForInFlightClusters(); - ASSERT_EQ(2U, p1.fReqsClusterIds.size()); - EXPECT_EQ(3U, p1.fReqsClusterIds[0]); - EXPECT_EQ(RCluster::ColumnSet_t({0}), p1.fReqsColumns[0]); - - c1.GetCluster(3, {1}); -+ c1.WaitForInFlightClusters(); - ASSERT_EQ(4U, p1.fReqsClusterIds.size()); - EXPECT_EQ(3U, p1.fReqsClusterIds[2]); - EXPECT_EQ(RCluster::ColumnSet_t({1}), p1.fReqsColumns[2]); --- -2.35.1 - diff --git a/root-old-gtest-compat.patch b/root-old-gtest-compat.patch deleted file mode 100644 index 7bce796..0000000 --- a/root-old-gtest-compat.patch +++ /dev/null @@ -1,477 +0,0 @@ -From 99e9ad9ea54369296537ceb012ccdcb333b5f513 Mon Sep 17 00:00:00 2001 -From: Mattias Ellert -Date: Sat, 26 Mar 2022 10:55:38 +0100 -Subject: [PATCH 2/2] Backward compatibility with older googletest versions in - EPEL - ---- - hist/hist/test/test_THBinIterator.cxx | 5 +++++ - math/mathcore/test/stress/testGenVector.cxx | 10 ++++++++++ - math/mathcore/test/stress/testSMatrix.cxx | 10 ++++++++++ - math/mathcore/test/stress/testVector.cxx | 10 ++++++++++ - math/mathcore/test/stress/testVector34.cxx | 10 ++++++++++ - math/mathcore/test/testGradient.cxx | 4 ++++ - math/mathcore/test/testGradientFitting.cxx | 10 ++++++++++ - math/mathmore/test/testStress.cxx | 10 ++++++++++ - roofit/histfactory/test/testHistFactory.cxx | 4 ++++ - roofit/multiprocess/test/test_Job.cxx | 5 +++++ - roofit/roofitZMQ/test/test_ZMQ.cpp | 4 ++++ - roofit/roofitcore/test/TestStatistics/RooRealL.cpp | 4 ++++ - .../test/TestStatistics/testLikelihoodGradientJob.cpp | 5 +++++ - roofit/roofitcore/test/testProxiesAndCategories.cxx | 3 +++ - roofit/roofitcore/test/testRooDataHist.cxx | 4 ++++ - roofit/roofitcore/test/testRooGradMinimizerFcn.cxx | 5 +++++ - tree/dataframe/test/dataframe_definepersample.cxx | 4 ++++ - tree/dataframe/test/dataframe_merge_results.cxx | 2 +- - tree/dataframe/test/dataframe_regression.cxx | 4 ++++ - tree/dataframe/test/dataframe_samplecallback.cxx | 4 ++++ - tree/dataframe/test/dataframe_simple.cxx | 5 +++++ - tree/dataframe/test/dataframe_vary.cxx | 4 ++++ - tree/tree/test/TOffsetGeneration.cxx | 4 ++++ - 23 files changed, 129 insertions(+), 1 deletion(-) - -diff --git a/hist/hist/test/test_THBinIterator.cxx b/hist/hist/test/test_THBinIterator.cxx -index e30585b8cb..04f1e1487b 100644 ---- a/hist/hist/test/test_THBinIterator.cxx -+++ b/hist/hist/test/test_THBinIterator.cxx -@@ -1,5 +1,10 @@ - #include "gtest/gtest.h" - -+#ifndef INSTANTIATE_TEST_SUITE_P -+#define SetUpTestSuite SetUpTestCase -+#define TearDownTestSuite TearDownTestCase -+#endif -+ - // test iterating histogram bins and using the new THistRange and - // THBinIterator classes - -diff --git a/math/mathcore/test/stress/testGenVector.cxx b/math/mathcore/test/stress/testGenVector.cxx -index 93c0bb6aec..b3259158da 100644 ---- a/math/mathcore/test/stress/testGenVector.cxx -+++ b/math/mathcore/test/stress/testGenVector.cxx -@@ -4,6 +4,16 @@ - - #include "gtest/gtest.h" - -+#ifndef TYPED_TEST_SUITE_P -+#define TYPED_TEST_SUITE_P TYPED_TEST_CASE_P -+#endif -+#ifndef REGISTER_TYPED_TEST_SUITE_P -+#define REGISTER_TYPED_TEST_SUITE_P REGISTER_TYPED_TEST_CASE_P -+#endif -+#ifndef INSTANTIATE_TYPED_TEST_SUITE_P -+#define INSTANTIATE_TYPED_TEST_SUITE_P INSTANTIATE_TYPED_TEST_CASE_P -+#endif -+ - #include "StatFunction.h" - #include "TestHelper.h" - #include "VectorTest.h" -diff --git a/math/mathcore/test/stress/testSMatrix.cxx b/math/mathcore/test/stress/testSMatrix.cxx -index a4d7fc4cd5..a35d88b7c2 100644 ---- a/math/mathcore/test/stress/testSMatrix.cxx -+++ b/math/mathcore/test/stress/testSMatrix.cxx -@@ -7,6 +7,16 @@ - #include "TestHelper.h" - #include "gtest/gtest.h" - -+#ifndef TYPED_TEST_SUITE_P -+#define TYPED_TEST_SUITE_P TYPED_TEST_CASE_P -+#endif -+#ifndef REGISTER_TYPED_TEST_SUITE_P -+#define REGISTER_TYPED_TEST_SUITE_P REGISTER_TYPED_TEST_CASE_P -+#endif -+#ifndef INSTANTIATE_TYPED_TEST_SUITE_P -+#define INSTANTIATE_TYPED_TEST_SUITE_P INSTANTIATE_TYPED_TEST_CASE_P -+#endif -+ - #include "VectorTest.h" - #include "TROOT.h" - #include "TSystem.h" -diff --git a/math/mathcore/test/stress/testVector.cxx b/math/mathcore/test/stress/testVector.cxx -index 72e933f0d5..938e27d83c 100644 ---- a/math/mathcore/test/stress/testVector.cxx -+++ b/math/mathcore/test/stress/testVector.cxx -@@ -4,6 +4,16 @@ - - #include "gtest/gtest.h" - -+#ifndef TYPED_TEST_SUITE_P -+#define TYPED_TEST_SUITE_P TYPED_TEST_CASE_P -+#endif -+#ifndef REGISTER_TYPED_TEST_SUITE_P -+#define REGISTER_TYPED_TEST_SUITE_P REGISTER_TYPED_TEST_CASE_P -+#endif -+#ifndef INSTANTIATE_TYPED_TEST_SUITE_P -+#define INSTANTIATE_TYPED_TEST_SUITE_P INSTANTIATE_TYPED_TEST_CASE_P -+#endif -+ - #include "StatFunction.h" - #include "TestHelper.h" - #include "VectorTest.h" -diff --git a/math/mathcore/test/stress/testVector34.cxx b/math/mathcore/test/stress/testVector34.cxx -index 4b31184559..80d6dd6314 100644 ---- a/math/mathcore/test/stress/testVector34.cxx -+++ b/math/mathcore/test/stress/testVector34.cxx -@@ -4,6 +4,16 @@ - - #include "gtest/gtest.h" - -+#ifndef TYPED_TEST_SUITE_P -+#define TYPED_TEST_SUITE_P TYPED_TEST_CASE_P -+#endif -+#ifndef REGISTER_TYPED_TEST_SUITE_P -+#define REGISTER_TYPED_TEST_SUITE_P REGISTER_TYPED_TEST_CASE_P -+#endif -+#ifndef INSTANTIATE_TYPED_TEST_SUITE_P -+#define INSTANTIATE_TYPED_TEST_SUITE_P INSTANTIATE_TYPED_TEST_CASE_P -+#endif -+ - #include "StatFunction.h" - #include "VectorTest.h" - -diff --git a/math/mathcore/test/testGradient.cxx b/math/mathcore/test/testGradient.cxx -index 49a5391b7b..271e89e43c 100644 ---- a/math/mathcore/test/testGradient.cxx -+++ b/math/mathcore/test/testGradient.cxx -@@ -22,6 +22,10 @@ - - #include "gtest/gtest.h" - -+#ifndef TYPED_TEST_SUITE -+#define TYPED_TEST_SUITE TYPED_TEST_CASE -+#endif -+ - #include - #include - #include -diff --git a/math/mathcore/test/testGradientFitting.cxx b/math/mathcore/test/testGradientFitting.cxx -index f85f826d9f..1818d1c22f 100644 ---- a/math/mathcore/test/testGradientFitting.cxx -+++ b/math/mathcore/test/testGradientFitting.cxx -@@ -13,6 +13,16 @@ - - #include "gtest/gtest.h" - -+#ifndef TYPED_TEST_SUITE_P -+#define TYPED_TEST_SUITE_P TYPED_TEST_CASE_P -+#endif -+#ifndef REGISTER_TYPED_TEST_SUITE_P -+#define REGISTER_TYPED_TEST_SUITE_P REGISTER_TYPED_TEST_CASE_P -+#endif -+#ifndef INSTANTIATE_TYPED_TEST_SUITE_P -+#define INSTANTIATE_TYPED_TEST_SUITE_P INSTANTIATE_TYPED_TEST_CASE_P -+#endif -+ - #include - #include - -diff --git a/math/mathmore/test/testStress.cxx b/math/mathmore/test/testStress.cxx -index 47bcdd250f..5cf20e69a1 100644 ---- a/math/mathmore/test/testStress.cxx -+++ b/math/mathmore/test/testStress.cxx -@@ -26,6 +26,16 @@ - - #include "gtest/gtest.h" - -+#ifndef TYPED_TEST_SUITE_P -+#define TYPED_TEST_SUITE_P TYPED_TEST_CASE_P -+#endif -+#ifndef REGISTER_TYPED_TEST_SUITE_P -+#define REGISTER_TYPED_TEST_SUITE_P REGISTER_TYPED_TEST_CASE_P -+#endif -+#ifndef INSTANTIATE_TYPED_TEST_SUITE_P -+#define INSTANTIATE_TYPED_TEST_SUITE_P INSTANTIATE_TYPED_TEST_CASE_P -+#endif -+ - using ::testing::TestWithParam; - using ::testing::Values; - -diff --git a/roofit/histfactory/test/testHistFactory.cxx b/roofit/histfactory/test/testHistFactory.cxx -index 71d7b632d2..9063e51070 100644 ---- a/roofit/histfactory/test/testHistFactory.cxx -+++ b/roofit/histfactory/test/testHistFactory.cxx -@@ -22,6 +22,10 @@ - #include "TCanvas.h" - #include "gtest/gtest.h" - -+#ifndef INSTANTIATE_TEST_SUITE_P -+#define INSTANTIATE_TEST_SUITE_P INSTANTIATE_TEST_CASE_P -+#endif -+ - #include - - using namespace RooStats; -diff --git a/roofit/multiprocess/test/test_Job.cxx b/roofit/multiprocess/test/test_Job.cxx -index 22e66fc73c..61cc11771d 100644 ---- a/roofit/multiprocess/test/test_Job.cxx -+++ b/roofit/multiprocess/test/test_Job.cxx -@@ -24,6 +24,11 @@ - #include "RooFit/MultiProcess/Queue.h" // ... JobManager::queue() - - #include "gtest/gtest.h" -+ -+#ifndef INSTANTIATE_TEST_SUITE_P -+#define INSTANTIATE_TEST_SUITE_P INSTANTIATE_TEST_CASE_P -+#endif -+ - #include "utils.h" - - class xSquaredPlusBVectorSerial { -diff --git a/roofit/roofitZMQ/test/test_ZMQ.cpp b/roofit/roofitZMQ/test/test_ZMQ.cpp -index 6dcceaff08..73e75be147 100644 ---- a/roofit/roofitZMQ/test/test_ZMQ.cpp -+++ b/roofit/roofitZMQ/test/test_ZMQ.cpp -@@ -16,6 +16,10 @@ - - #include "gtest/gtest.h" - -+#ifndef INSTANTIATE_TEST_SUITE_P -+#define INSTANTIATE_TEST_SUITE_P INSTANTIATE_TEST_CASE_P -+#endif -+ - #include // fork, usleep - - #include -diff --git a/roofit/roofitcore/test/TestStatistics/RooRealL.cpp b/roofit/roofitcore/test/TestStatistics/RooRealL.cpp -index f8421613ac..3ae6285a12 100644 ---- a/roofit/roofitcore/test/TestStatistics/RooRealL.cpp -+++ b/roofit/roofitcore/test/TestStatistics/RooRealL.cpp -@@ -34,6 +34,10 @@ - - #include "gtest/gtest.h" - -+#ifndef INSTANTIATE_TEST_SUITE_P -+#define INSTANTIATE_TEST_SUITE_P INSTANTIATE_TEST_CASE_P -+#endif -+ - class RooRealL - : public ::testing::TestWithParam> { - }; -diff --git a/roofit/roofitcore/test/TestStatistics/testLikelihoodGradientJob.cpp b/roofit/roofitcore/test/TestStatistics/testLikelihoodGradientJob.cpp -index f4adf63eec..05164277f0 100644 ---- a/roofit/roofitcore/test/TestStatistics/testLikelihoodGradientJob.cpp -+++ b/roofit/roofitcore/test/TestStatistics/testLikelihoodGradientJob.cpp -@@ -33,6 +33,11 @@ - #include // runtime_error - - #include "gtest/gtest.h" -+ -+#ifndef INSTANTIATE_TEST_SUITE_P -+#define INSTANTIATE_TEST_SUITE_P INSTANTIATE_TEST_CASE_P -+#endif -+ - #include "../test_lib.h" // generate_1D_gaussian_pdf_nll - - using RooFit::TestStatistics::LikelihoodWrapper; -diff --git a/roofit/roofitcore/test/testProxiesAndCategories.cxx b/roofit/roofitcore/test/testProxiesAndCategories.cxx -index bed3c399bb..550e0c5ac9 100644 ---- a/roofit/roofitcore/test/testProxiesAndCategories.cxx -+++ b/roofit/roofitcore/test/testProxiesAndCategories.cxx -@@ -16,6 +16,9 @@ - - #include "gtest/gtest.h" - -+#ifndef INSTANTIATE_TEST_SUITE_P -+#define INSTANTIATE_TEST_SUITE_P INSTANTIATE_TEST_CASE_P -+#endif - - TEST(RooCategory, CategoryDefineMultiState) { - RooCategory myCat("myCat", "A category", { {"0Lep", 0}, {"1Lep", 1}, {"2Lep", 2}, {"3Lep", 3} }); -diff --git a/roofit/roofitcore/test/testRooDataHist.cxx b/roofit/roofitcore/test/testRooDataHist.cxx -index 90782e0749..f6b5e087ae 100644 ---- a/roofit/roofitcore/test/testRooDataHist.cxx -+++ b/roofit/roofitcore/test/testRooDataHist.cxx -@@ -18,6 +18,10 @@ - - #include "gtest/gtest.h" - -+#ifndef INSTANTIATE_TEST_SUITE_P -+#define INSTANTIATE_TEST_SUITE_P INSTANTIATE_TEST_CASE_P -+#endif -+ - #include - #include - -diff --git a/roofit/roofitcore/test/testRooGradMinimizerFcn.cxx b/roofit/roofitcore/test/testRooGradMinimizerFcn.cxx -index c1978ae47e..877ab1525f 100644 ---- a/roofit/roofitcore/test/testRooGradMinimizerFcn.cxx -+++ b/roofit/roofitcore/test/testRooGradMinimizerFcn.cxx -@@ -22,6 +22,11 @@ - #include // remove redundant workspace files - - #include "gtest/gtest.h" -+ -+#ifndef INSTANTIATE_TEST_SUITE_P -+#define INSTANTIATE_TEST_SUITE_P INSTANTIATE_TEST_CASE_P -+#endif -+ - #include "test_lib.h" - - #include -diff --git a/tree/dataframe/test/dataframe_definepersample.cxx b/tree/dataframe/test/dataframe_definepersample.cxx -index 772b8baa70..37da9f3f95 100644 ---- a/tree/dataframe/test/dataframe_definepersample.cxx -+++ b/tree/dataframe/test/dataframe_definepersample.cxx -@@ -6,6 +6,10 @@ - - #include - -+#ifndef INSTANTIATE_TEST_SUITE_P -+#define INSTANTIATE_TEST_SUITE_P INSTANTIATE_TEST_CASE_P -+#endif -+ - #include - #include - #include // std::thread::hardware_concurrency -diff --git a/tree/dataframe/test/dataframe_merge_results.cxx b/tree/dataframe/test/dataframe_merge_results.cxx -index 9354b75a39..ea439ea006 100644 ---- a/tree/dataframe/test/dataframe_merge_results.cxx -+++ b/tree/dataframe/test/dataframe_merge_results.cxx -@@ -340,7 +340,7 @@ TEST(RDataFrameMergeResults, Merge5Hists) - EXPECT_FALSE(mh3); - EXPECT_FALSE(mh4); - EXPECT_FALSE(mh5); -- EXPECT_TRUE(mergedptr); -+ EXPECT_TRUE(!!mergedptr); - - const auto &mh = mergedptr->GetValue(); - -diff --git a/tree/dataframe/test/dataframe_regression.cxx b/tree/dataframe/test/dataframe_regression.cxx -index 9801067cf4..8a991f40c5 100644 ---- a/tree/dataframe/test/dataframe_regression.cxx -+++ b/tree/dataframe/test/dataframe_regression.cxx -@@ -9,6 +9,10 @@ - - #include "gtest/gtest.h" - -+#ifndef INSTANTIATE_TEST_SUITE_P -+#define INSTANTIATE_TEST_SUITE_P INSTANTIATE_TEST_CASE_P -+#endif -+ - // Fixture for all tests in this file. If parameter is true, run with implicit MT, else run sequentially - class RDFRegressionTests : public ::testing::TestWithParam { - protected: -diff --git a/tree/dataframe/test/dataframe_samplecallback.cxx b/tree/dataframe/test/dataframe_samplecallback.cxx -index 188d58dd31..7734586eb3 100644 ---- a/tree/dataframe/test/dataframe_samplecallback.cxx -+++ b/tree/dataframe/test/dataframe_samplecallback.cxx -@@ -11,6 +11,10 @@ - - #include - -+#ifndef INSTANTIATE_TEST_SUITE_P -+#define INSTANTIATE_TEST_SUITE_P INSTANTIATE_TEST_CASE_P -+#endif -+ - #include // std::min - #include - #include -diff --git a/tree/dataframe/test/dataframe_simple.cxx b/tree/dataframe/test/dataframe_simple.cxx -index 6006f99017..b507edc13f 100644 ---- a/tree/dataframe/test/dataframe_simple.cxx -+++ b/tree/dataframe/test/dataframe_simple.cxx -@@ -1,5 +1,10 @@ - /****** Run RDataFrame tests both with and without IMT enabled *******/ - #include -+ -+#ifndef INSTANTIATE_TEST_SUITE_P -+#define INSTANTIATE_TEST_SUITE_P INSTANTIATE_TEST_CASE_P -+#endif -+ - #include - #include - #include -diff --git a/tree/dataframe/test/dataframe_vary.cxx b/tree/dataframe/test/dataframe_vary.cxx -index 2284b21f53..5a26c43cdc 100644 ---- a/tree/dataframe/test/dataframe_vary.cxx -+++ b/tree/dataframe/test/dataframe_vary.cxx -@@ -7,6 +7,10 @@ - - #include - -+#ifndef INSTANTIATE_TEST_SUITE_P -+#define INSTANTIATE_TEST_SUITE_P INSTANTIATE_TEST_CASE_P -+#endif -+ - using ROOT::RDF::Experimental::VariationsFor; - - class RDFVary : public ::testing::TestWithParam { -diff --git a/tree/tree/test/TOffsetGeneration.cxx b/tree/tree/test/TOffsetGeneration.cxx -index 7b6b7647aa..77f125ca60 100644 ---- a/tree/tree/test/TOffsetGeneration.cxx -+++ b/tree/tree/test/TOffsetGeneration.cxx -@@ -9,6 +9,10 @@ - #include "ROOTUnitTestSupport.h" - #include "gtest/gtest.h" - -+#ifndef INSTANTIATE_TEST_SUITE_P -+#define SetUpTestSuite SetUpTestCase -+#endif -+ - #include "ElementStruct.h" - - class TOffsetGeneration : public ::testing::Test { --- -2.35.1 - -From 33e5da8c1f678382ab2fd65d000d388bb0dbf3ab Mon Sep 17 00:00:00 2001 -From: Mattias Ellert -Date: Sun, 17 Apr 2022 22:17:56 +0200 -Subject: [PATCH] Backward compatibility with older googletest versions in EPEL - ---- - math/vecops/test/vecops_rvec.cxx | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/math/vecops/test/vecops_rvec.cxx b/math/vecops/test/vecops_rvec.cxx -index 7b513a858b..bea39636ce 100644 ---- a/math/vecops/test/vecops_rvec.cxx -+++ b/math/vecops/test/vecops_rvec.cxx -@@ -13,6 +13,10 @@ - #include - #include - -+#ifndef INSTANTIATE_TEST_SUITE_P -+#define INSTANTIATE_TEST_SUITE_P INSTANTIATE_TEST_CASE_P -+#endif -+ - using namespace ROOT; - using namespace ROOT::VecOps; - using namespace ROOT::Detail::VecOps; // for `IsSmall` and `IsAdopting` --- -2.35.1 - -From cae450e0210fe584ef30d155a4217cfe2f5aa358 Mon Sep 17 00:00:00 2001 -From: Mattias Ellert -Date: Sat, 30 Jul 2022 17:05:31 +0200 -Subject: [PATCH] Backward compatibility with older googletest versions in EPEL - ---- - tree/dataframe/test/dataframe_datasetspec.cxx | 6 ++++++ - 1 file changed, 6 insertions(+) - -diff --git a/tree/dataframe/test/dataframe_datasetspec.cxx b/tree/dataframe/test/dataframe_datasetspec.cxx -index b422dcf28b..14329102af 100644 ---- a/tree/dataframe/test/dataframe_datasetspec.cxx -+++ b/tree/dataframe/test/dataframe_datasetspec.cxx -@@ -1,4 +1,9 @@ - #include -+ -+#ifndef INSTANTIATE_TEST_SUITE_P -+#define INSTANTIATE_TEST_SUITE_P INSTANTIATE_TEST_CASE_P -+#endif -+ - #include - #include - #include -@@ -36,6 +41,7 @@ protected: - - ~RDatasetSpecTest() {} - -+public: - static void SetUpTestCase() - { - auto dfWriter0 = RDataFrame(5).Define("z", [](ULong64_t e) { return e + 100; }, {"rdfentry_"}); --- -2.37.1 - diff --git a/root-older-python.patch b/root-older-python.patch deleted file mode 100644 index fa6a05a..0000000 --- a/root-older-python.patch +++ /dev/null @@ -1,46 +0,0 @@ -From 61116151cce8fe5b397555a65f7b55001b8e416b Mon Sep 17 00:00:00 2001 -From: Mattias Ellert -Date: Fri, 23 Apr 2021 21:39:17 +0200 -Subject: [PATCH] Compat with no f-strings - ---- - tutorials/tmva/PyTorch_Generate_CNN_Model.py | 12 ++++++------ - 1 file changed, 6 insertions(+), 6 deletions(-) - -diff --git a/tutorials/tmva/PyTorch_Generate_CNN_Model.py b/tutorials/tmva/PyTorch_Generate_CNN_Model.py -index 7024112f03..5a314f86dd 100644 ---- a/tutorials/tmva/PyTorch_Generate_CNN_Model.py -+++ b/tutorials/tmva/PyTorch_Generate_CNN_Model.py -@@ -56,7 +56,7 @@ def fit(model, train_loader, val_loader, num_epochs, batch_size, optimizer, crit - # print train statistics - running_train_loss += train_loss.item() - if i % 4 == 3: # print every 4 mini-batches -- print(f"[{epoch+1}, {i+1}] train loss: {running_train_loss / 4 :.3f}") -+ print("[{}, {}] train loss: {:.3f}".format(epoch+1, i+1, running_train_loss / 4)) - running_train_loss = 0.0 - - if schedule: -@@ -75,15 +75,15 @@ def fit(model, train_loader, val_loader, num_epochs, batch_size, optimizer, crit - - curr_val = running_val_loss / len(val_loader) - if save_best: -- if best_val==None: -- best_val = curr_val -- best_val = save_best(model, curr_val, best_val) -+ if best_val is None: -+ best_val = curr_val -+ best_val = save_best(model, curr_val, best_val) - - # print val statistics per epoch -- print(f"[{epoch+1}] val loss: {curr_val :.3f}") -+ print("[{}] val loss: {:.3f}".format(epoch+1, curr_val)) - running_val_loss = 0.0 - -- print(f"Finished Training on {epoch+1} Epochs!") -+ print("Finished Training on {} Epochs!".format(epoch+1)) - - return model - --- -2.30.2 - diff --git a/root-rcolor-static-init.patch b/root-rcolor-static-init.patch deleted file mode 100644 index 18e4299..0000000 --- a/root-rcolor-static-init.patch +++ /dev/null @@ -1,42 +0,0 @@ -From c4df90861879f45b281c2a8e55212b711cfdbfa0 Mon Sep 17 00:00:00 2001 -From: Mattias Ellert -Date: Tue, 29 Mar 2022 15:30:20 +0200 -Subject: [PATCH] Avoid crashes due to static initialization order - -Most commonly seen on ppc64le. Backtrace: - -=========================================================== -The lines below might hint at the cause of the crash. -You may get help by asking at the ROOT forum https://root.cern/forum -Only if you are really convinced it is a bug in ROOT then please submit a -report at https://root.cern/bugs Please post the ENTIRE stack trace -from above as an attachment in addition to anything else -that might help us fixing this issue. -=========================================================== - #11 ROOT::Experimental::RColor::toHex[abi:cxx11](unsigned char) (v=) at /usr/include/c++/11/ext/new_allocator.h:82 - #12 0x00007fff90c220ec in ROOT::Experimental::RColor::SetRGB (this=0x7fffeadf5d10, r=, g=, b=) at /usr/include/c++/11/ext/new_allocator.h:89 ---- - graf2d/gpadv7/src/RColor.cxx | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/graf2d/gpadv7/src/RColor.cxx b/graf2d/gpadv7/src/RColor.cxx -index de325f1ea3..6878360073 100644 ---- a/graf2d/gpadv7/src/RColor.cxx -+++ b/graf2d/gpadv7/src/RColor.cxx -@@ -232,10 +232,10 @@ std::vector RColor::AsRGBA() const - - std::string RColor::toHex(uint8_t v) - { -- static const char *digits = "0123456789ABCDEF"; -+ auto digits = [](auto d) { return d < 10 ? '0' + d : 'A' - 10 + d; }; - std::string res(2,'0'); -- res[0] = digits[v >> 4]; -- res[1] = digits[v & 0xf]; -+ res[0] = digits(v >> 4); -+ res[1] = digits(v & 0xf); - return res; - } - --- -2.35.1 - diff --git a/root-roofit-tutorial.patch b/root-roofit-tutorial.patch deleted file mode 100644 index 9d73e11..0000000 --- a/root-roofit-tutorial.patch +++ /dev/null @@ -1,74 +0,0 @@ -From 914e46f1c591f8b9b34115863ff31e42e19bfb97 Mon Sep 17 00:00:00 2001 -From: Mattias Ellert -Date: Mon, 28 Mar 2022 09:32:24 +0200 -Subject: [PATCH] Use calls from Python directly - -The rf105_funcbinding.py tutorial used to trigger errors due to unknown -symbols. In particular the custum new and delete operators used in RooFit -were not autoloaded when needed. - -In the tutorial there was a workaround implemented to call ProcessLine -instead of making calls directly form Python, to make the autoloading -from the C++ side of ROOT instead. This did not quite fix the problem, -and the tutorial still randomly failed due to missing symbols. - -After changing the algorthm used for autoloading in commit -6ae602bba7d33c900a117c9de0187ab5a28e14b8 these problems were solved. - -After this fix using the direct calls from Python also works, so this -PR suggests updating the tutorial to do that. ---- - tutorials/roofit/rf105_funcbinding.py | 30 ++++++--------------------- - 1 file changed, 6 insertions(+), 24 deletions(-) - -diff --git a/tutorials/roofit/rf105_funcbinding.py b/tutorials/roofit/rf105_funcbinding.py -index 72d9cf62fc..b9de2a095a 100644 ---- a/tutorials/roofit/rf105_funcbinding.py -+++ b/tutorials/roofit/rf105_funcbinding.py -@@ -17,15 +17,8 @@ import ROOT - # --------------------------------------------------- - - # Bind one-dimensional ROOT.TMath.Erf function as ROOT.RooAbsReal function --# Directly trying this in python doesn't work: --# x = ROOT.RooRealVar("x", "x", -3, 3) --# erf = ROOT.RooFit.bindFunction("erf", ROOT.TMath.Erf, x) --# Need to go through C interface --ROOT.gInterpreter.ProcessLine( -- 'auto x = RooRealVar("x", "x", -3, 3); auto myerf = RooFit::bindFunction("erf", TMath::Erf, x)' --) --x = ROOT.x --erf = ROOT.myerf -+x = ROOT.RooRealVar("x", "x", -3, 3) -+erf = ROOT.RooFit.bindFunction("erf", ROOT.TMath.Erf, x) - - # Print erf definition - erf.Print() -@@ -38,21 +31,10 @@ erf.plotOn(frame1) - # ----------------------------------------------------------------------- - - # Bind pdf ROOT.Math.Beta with three variables as ROOT.RooAbsPdf function --# As above, this does not work directly in python --# x2 = ROOT.RooRealVar("x2", "x2", 0, 0.999) --# a = ROOT.RooRealVar("a", "a", 5, 0, 10) --# b = ROOT.RooRealVar("b", "b", 2, 0, 10) --# beta = ROOT.RooFit.bindPdf("beta", ROOT.Math.beta_pdf, x2, a, b) --ROOT.gInterpreter.ProcessLine( -- 'auto x2 = RooRealVar("x2", "x2", 0, 0.999);\ -- auto a = RooRealVar("a", "a", 5, 0, 10);\ -- auto b = RooRealVar("b", "b", 5, 0, 10);\ -- auto beta = RooFit::bindPdf("beta", ROOT::Math::beta_pdf, x2, a, b)' --) --x2 = ROOT.x2 --a = ROOT.a --b = ROOT.b --beta = ROOT.beta -+x2 = ROOT.RooRealVar("x2", "x2", 0, 0.999) -+a = ROOT.RooRealVar("a", "a", 5, 0, 10) -+b = ROOT.RooRealVar("b", "b", 2, 0, 10) -+beta = ROOT.RooFit.bindPdf("beta", ROOT.Math.beta_pdf, x2, a, b) - - # Perf beta definition - beta.Print() --- -2.35.1 - diff --git a/root-symbol-rewrite.patch b/root-symbol-rewrite.patch deleted file mode 100644 index c91bbe6..0000000 --- a/root-symbol-rewrite.patch +++ /dev/null @@ -1,31 +0,0 @@ -From f99eedeb72644671cd584f48e4c136d47f6b0020 Mon Sep 17 00:00:00 2001 -From: Fangrui Song -Date: Thu, 12 Dec 2019 16:18:57 -0800 -Subject: [PATCH] [MC][PowerPC] Fix a crash when redefining a symbol after .set - -Fix PR44284. This is probably not valid assembly but we should not crash. - -Reviewed By: luporl, #powerpc, steven.zhang - -Differential Revision: https://reviews.llvm.org/D71443 ---- - interpreter/llvm/src/lib/Target/PowerPC/MCTargetDesc/PPCMCTargetDesc.cpp | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/interpreter/llvm/src/lib/Target/PowerPC/MCTargetDesc/PPCMCTargetDesc.cpp b/interpreter/llvm/src/lib/Target/PowerPC/MCTargetDesc/PPCMCTargetDesc.cpp -index 00df9e41fdae..5e91bdb2f8de 100644 ---- a/interpreter/llvm/src/lib/Target/PowerPC/MCTargetDesc/PPCMCTargetDesc.cpp -+++ b/interpreter/llvm/src/lib/Target/PowerPC/MCTargetDesc/PPCMCTargetDesc.cpp -@@ -201,7 +201,8 @@ public: - - void finish() override { - for (auto *Sym : UpdateOther) -- copyLocalEntry(Sym, Sym->getVariableValue()); -+ if (Sym->isVariable()) -+ copyLocalEntry(Sym, Sym->getVariableValue()); - } - - private: --- -2.33.1 - diff --git a/root-test-timeout.patch b/root-test-timeout.patch deleted file mode 100644 index 1943318..0000000 --- a/root-test-timeout.patch +++ /dev/null @@ -1,110 +0,0 @@ -From 4d09235937ea29913cbf9a9b5bcd002b52557c0e Mon Sep 17 00:00:00 2001 -From: Mattias Ellert -Date: Sun, 3 Jul 2022 08:18:57 +0200 -Subject: [PATCH] Increase test timeout - ---- - cmake/modules/RootMacros.cmake | 14 +++++++------- - tmva/tmva/test/DNN/CMakeLists.txt | 2 +- - tree/tree/test/CMakeLists.txt | 2 +- - tutorials/CMakeLists.txt | 4 ++-- - 4 files changed, 11 insertions(+), 11 deletions(-) - -diff --git a/cmake/modules/RootMacros.cmake b/cmake/modules/RootMacros.cmake -index cc61f4bbad..3e4559fc19 100644 ---- a/cmake/modules/RootMacros.cmake -+++ b/cmake/modules/RootMacros.cmake -@@ -1779,6 +1779,7 @@ endfunction() - #---------------------------------------------------------------------------- - # function ROOT_ADD_GTEST( source1 source2... - # [WILLFAIL] Negate output of test -+# [TIMEOUT seconds] - # [COPY_TO_BUILDDIR file1 file2] Copy listed files when ctest invokes the test. - # [LIBRARIES lib1 lib2...] -- Libraries to link against - # [LABELS label1 label2...] -- Labels to annotate the test -@@ -1790,7 +1791,7 @@ endfunction() - function(ROOT_ADD_GTEST test_suite) - cmake_parse_arguments(ARG - "WILLFAIL" -- "REPEATS;FAILREGEX" -+ "TIMEOUT;REPEATS;FAILREGEX" - "COPY_TO_BUILDDIR;LIBRARIES;LABELS;INCLUDE_DIRS" ${ARGN}) - - ROOT_GET_SOURCES(source_files . ${ARG_UNPARSED_ARGUMENTS}) -@@ -1821,9 +1822,7 @@ function(ROOT_ADD_GTEST test_suite) - if(ARG_WILLFAIL) - set(willfail WILLFAIL) - endif() -- if(ARG_LABELS) -- set(labels "LABELS ${ARG_LABELS}") -- endif() -+ - if(ARG_REPEATS) - set(extra_command --gtest_repeat=${ARG_REPEATS} --gtest_break_on_failure) - endif() -@@ -1833,10 +1832,11 @@ function(ROOT_ADD_GTEST test_suite) - gtest${mangled_name} - COMMAND ${test_suite} ${extra_command} - WORKING_DIR ${CMAKE_CURRENT_BINARY_DIR} -- COPY_TO_BUILDDIR ${ARG_COPY_TO_BUILDDIR} -+ COPY_TO_BUILDDIR "${ARG_COPY_TO_BUILDDIR}" - ${willfail} -- ${labels} -- FAILREGEX ${ARG_FAILREGEX} -+ TIMEOUT "${ARG_TIMEOUT}" -+ LABELS "${ARG_LABELS}" -+ FAILREGEX "${ARG_FAILREGEX}" - ) - endfunction() - -diff --git a/tmva/tmva/test/DNN/CMakeLists.txt b/tmva/tmva/test/DNN/CMakeLists.txt -index a9233682f6..653540e9e3 100644 ---- a/tmva/tmva/test/DNN/CMakeLists.txt -+++ b/tmva/tmva/test/DNN/CMakeLists.txt -@@ -144,7 +144,7 @@ ROOT_ADD_TEST(TMVA-DNN-MethodDL-SGD-Optimization-Cpu COMMAND testMethodDLSGDOpti - - # DNN - MethodDL Adam Optimization CPU - ROOT_EXECUTABLE(testMethodDLAdamOptimizationCpu TestMethodDLAdamOptimizationCpu.cxx LIBRARIES ${Libraries}) --ROOT_ADD_TEST(TMVA-DNN-MethodDL-Adam-Optimization-Cpu COMMAND testMethodDLAdamOptimizationCpu) -+ROOT_ADD_TEST(TMVA-DNN-MethodDL-Adam-Optimization-Cpu COMMAND testMethodDLAdamOptimizationCpu TIMEOUT 1800) - - # DNN - MethodDL Adagrad Optimization CPU - ROOT_EXECUTABLE(testMethodDLAdagradOptimizationCpu TestMethodDLAdagradOptimizationCpu.cxx LIBRARIES ${Libraries}) -diff --git a/tree/tree/test/CMakeLists.txt b/tree/tree/test/CMakeLists.txt -index dbe664f8a0..6284e3c4c5 100644 ---- a/tree/tree/test/CMakeLists.txt -+++ b/tree/tree/test/CMakeLists.txt -@@ -20,7 +20,7 @@ ROOT_ADD_GTEST(testBulkApi BulkApi.cxx LIBRARIES RIO Tree TreePlayer) - target_include_directories(testTOffsetGeneration PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) - ROOT_STANDARD_LIBRARY_PACKAGE(SillyStruct NO_INSTALL_HEADERS HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/SillyStruct.h SOURCES SillyStruct.cxx LINKDEF SillyStructLinkDef.h DEPENDENCIES RIO) - ROOT_ADD_GTEST(testBulkApi BulkApi.cxx LIBRARIES RIO Tree TreePlayer) --ROOT_ADD_GTEST(testBulkApiMultiple BulkApiMultiple.cxx LIBRARIES RIO Tree TreePlayer) -+ROOT_ADD_GTEST(testBulkApiMultiple BulkApiMultiple.cxx LIBRARIES RIO Tree TreePlayer TIMEOUT 2400) - ROOT_ADD_GTEST(testBulkApiVarLength BulkApiVarLength.cxx LIBRARIES RIO Tree TreePlayer) - ROOT_ADD_GTEST(testBulkApiSillyStruct BulkApiSillyStruct.cxx LIBRARIES RIO Tree TreePlayer SillyStruct) - ROOT_ADD_GTEST(testTBasket TBasket.cxx LIBRARIES RIO Tree) -diff --git a/tutorials/CMakeLists.txt b/tutorials/CMakeLists.txt -index 6ae9be5869..982432fe15 100644 ---- a/tutorials/CMakeLists.txt -+++ b/tutorials/CMakeLists.txt -@@ -532,7 +532,7 @@ foreach(t ${tutorials}) - - # These tests on ARM64 need much more than 20 minutes - increase the timeout - if(ROOT_ARCHITECTURE MATCHES arm64 OR ROOT_ARCHITECTURE MATCHES ppc64) -- set(thisTestTimeout 2400) # 40m -+ set(thisTestTimeout 3000) # 50m - else() - set(thisTestTimeout 1200) # 20m - endif() -@@ -566,7 +566,7 @@ foreach(t ${mpi_tutorials}) - - # These tests on ARM64 need much more than 20 minutes - increase the timeout - if(ROOT_ARCHITECTURE MATCHES arm64 OR ROOT_ARCHITECTURE MATCHES ppc64) -- set(thisTestTimeout 2400) # 40m -+ set(thisTestTimeout 3000) # 50m - else() - set(thisTestTimeout 1200) # 20m - endif() --- -2.38.1 - diff --git a/root-testfiles.sh b/root-testfiles.sh index db4d721..c2451e9 100755 --- a/root-testfiles.sh +++ b/root-testfiles.sh @@ -72,14 +72,7 @@ wget -N ${SITE}/tesla.root wget -N ${SITE}/wa91_ref_3.root wget -N ${SITE}/wa91.root -wget -N ${SITE}/AtlasGraphs.root wget -N ${SITE}/europe.root -wget -N ${SITE}/Higgs_data.root -wget -N ${SITE}/linearIO.root -wget -N ${SITE}/stressHistogram.5.18.00.root -wget -N ${SITE}/tmva_class_example.root -wget -N ${SITE}/tmva_multiclass_example.root -wget -N ${SITE}/tmva_reg_example.root wget -N ${SITE}/usa.root for f in *.root ; do ln -s $f $f.ROOT.cachefile ; done diff --git a/root-threadsh1-avoid-heap-use-after-free.patch b/root-threadsh1-avoid-heap-use-after-free.patch deleted file mode 100644 index 6111f2b..0000000 --- a/root-threadsh1-avoid-heap-use-after-free.patch +++ /dev/null @@ -1,48 +0,0 @@ -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 deleted file mode 100644 index 7506abc..0000000 --- a/root-tmva-threads.patch +++ /dev/null @@ -1,79 +0,0 @@ -From 589ac491519446191b7d480a476ab831dc09b5f9 Mon Sep 17 00:00:00 2001 -From: Mattias Ellert -Date: Wed, 30 Mar 2022 15:51:07 +0200 -Subject: [PATCH] Limit the number of threads in TMVA CNN/DNN test to save - memory - -Processing /builddir/build/BUILD/root-6.26.00/tutorials/tmva/TMVA_CNN_Classification.C... -Running with nthreads = 224 - -[ ... ] - -OpenBLAS warning: precompiled NUM_THREADS exceeded, adding auxiliary array for thread metadata. -OpenBLAS warning: precompiled NUM_THREADS exceeded, adding auxiliary array for thread metadata. -OpenBLAS warning: precompiled NUM_THREADS exceeded, adding auxiliary array for thread metadata. -OpenBLAS warning: precompiled NUM_THREADS exceeded, adding auxiliary array for thread metadata. -OpenBLAS warning: precompiled NUM_THREADS exceeded, adding auxiliary array for thread metadata. -OpenBLAS warning: precompiled NUM_THREADS exceeded, adding auxiliary array for thread metadata. -OpenBLAS warning: precompiled NUM_THREADS exceeded, adding auxiliary array for thread metadata. -OpenBLAS warning: precompiled NUM_THREADS exceeded, adding auxiliary array for thread metadata. -OpenBLAS warning: precompiled NUM_THREADS exceeded, adding auxiliary array for thread metadata. -OpenBLAS warning: precompiled NUM_THREADS exceeded, adding auxiliary array for thread metadata. -OpenBLAS warning: precompiled NUM_THREADS exceeded, adding auxiliary array for thread metadata. - *** Break *** segmentation violation - *** Break *** segmentation violation - *** Break *** segmentation violation - *** Break *** segmentation violation - *** Break *** segmentation violation - *** Break *** segmentation violation ---- - tutorials/tmva/TMVA_CNN_Classification.C | 6 ++++-- - tutorials/tmva/TMVA_RNN_Classification.C | 6 ++++-- - 2 files changed, 8 insertions(+), 4 deletions(-) - -diff --git a/tutorials/tmva/TMVA_CNN_Classification.C b/tutorials/tmva/TMVA_CNN_Classification.C -index 3e590c5958..b748fcee6c 100644 ---- a/tutorials/tmva/TMVA_CNN_Classification.C -+++ b/tutorials/tmva/TMVA_CNN_Classification.C -@@ -125,14 +125,16 @@ void TMVA_CNN_Classification(std::vector opt = {1, 1, 1, 1, 1}) - - bool writeOutputFile = true; - -- int num_threads = 0; // use default threads -+ int num_threads = 32; - - TMVA::Tools::Instance(); - - // do enable MT running - if (num_threads >= 0) { - ROOT::EnableImplicitMT(num_threads); -- if (num_threads > 0) gSystem->Setenv("OMP_NUM_THREADS", TString::Format("%d",num_threads)); -+ if (ROOT::GetThreadPoolSize() > 0) -+ gSystem->Setenv("OMP_NUM_THREADS", -+ TString::Format("%u", ROOT::GetThreadPoolSize())); - } - else - gSystem->Setenv("OMP_NUM_THREADS", "1"); -diff --git a/tutorials/tmva/TMVA_RNN_Classification.C b/tutorials/tmva/TMVA_RNN_Classification.C -index 5be80824f9..f902025875 100644 ---- a/tutorials/tmva/TMVA_RNN_Classification.C -+++ b/tutorials/tmva/TMVA_RNN_Classification.C -@@ -190,11 +190,13 @@ void TMVA_RNN_Classification(int use_type = 1) - useKeras = false; - #endif - -- int num_threads = 0; // use by default all threads -+ int num_threads = 32; - // do enable MT running - if (num_threads >= 0) { - ROOT::EnableImplicitMT(num_threads); -- if (num_threads > 0) gSystem->Setenv("OMP_NUM_THREADS", TString::Format("%d",num_threads)); -+ if (ROOT::GetThreadPoolSize() > 0) -+ gSystem->Setenv("OMP_NUM_THREADS", -+ TString::Format("%u", ROOT::GetThreadPoolSize())); - } - else - gSystem->Setenv("OMP_NUM_THREADS", "1"); --- -2.35.1 - diff --git a/root-unbundle-gtest.patch b/root-unbundle-gtest.patch deleted file mode 100644 index 1bdf869..0000000 --- a/root-unbundle-gtest.patch +++ /dev/null @@ -1,202 +0,0 @@ -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) - - set_property(TEST ${test} APPEND PROPERTY ENVIRONMENT ROOT_HIST=0) - -- #- Handle TIMOUT and DEPENDS arguments -+ #- Handle TIMEOUT and DEPENDS arguments - if(ARG_TIMEOUT) - set_property(TEST ${test} PROPERTY TIMEOUT ${ARG_TIMEOUT}) - endif() -diff --git a/cmake/modules/SearchInstalledSoftware.cmake b/cmake/modules/SearchInstalledSoftware.cmake -index fe40898d12..b6a3cc4c76 100644 ---- a/cmake/modules/SearchInstalledSoftware.cmake -+++ b/cmake/modules/SearchInstalledSoftware.cmake -@@ -1860,15 +1860,6 @@ if (mpi) - endif() - endif() - --if(testing AND NO_CONNECTION) -- if(fail-on-missing) -- message(FATAL_ERROR "No internet connection. Please check your connection, or either disable the 'testing' option or the 'fail-on-missing' to automatically disable options requiring internet access") -- else() -- message(STATUS "No internet connection, disabling 'testing' option") -- set(testing OFF CACHE BOOL "Disabled because there is no internet connection" FORCE) -- endif() --endif() -- - #---Check for ZeroMQ when building RooFit::MultiProcess-------------------------------------------- - - if (roofit_multiprocess) -@@ -1942,8 +1933,41 @@ if (roofit_multiprocess) - target_compile_definitions(cppzmq INTERFACE ZMQ_NO_EXPORT) - endif (roofit_multiprocess) - --#---Download googletest-------------------------------------------------------------- -+#---Check for googletest--------------------------------------------------------------- - if (testing) -+ if (NOT builtin_gtest) -+ if(fail-on-missing) -+ find_package(GTest REQUIRED) -+ else() -+ find_package(GTest) -+ if(NOT GTEST_FOUND) -+ if(NO_CONNECTION) -+ if(fail-on-missing) -+ message(FATAL_ERROR "No internet connection and GTest was not found. Please check your connection, or either disable the 'testing' option or the 'fail-on-missing' to automatically disable options requiring internet access") -+ else() -+ message(STATUS "GTest not found, and no internet connection. Disabing the 'testing' option.") -+ set(testing OFF CACHE BOOL "Disabled because testing requested and GTest not found (${builtin_gtest_description}) and there is no internet connection" FORCE) -+ endif() -+ else() -+ message(STATUS "GTest not found, switching ON 'builtin_gtest' option.") -+ set(builtin_gtest ON CACHE BOOL "Enabled because testing requested and GTest not found (${builtin_gtest_description})" FORCE) -+ endif() -+ endif() -+ endif() -+ else() -+ if(NO_CONNECTION) -+ if(fail-on-missing) -+ message(FATAL_ERROR "No internet connection. Please check your connection, or either disable the 'testing' option or the 'builtin_gtest' option or the 'fail-on-missing' option to automatically disable options requiring internet access") -+ else() -+ message(STATUS "No internet connection, disabling the 'testing' and 'builtin_gtest' options") -+ set(testing OFF CACHE BOOL "Disabled because there is no internet connection" FORCE) -+ set(builtin_gtest OFF CACHE BOOL "Disabled because there is no internet connection" FORCE) -+ endif() -+ endif() -+ endif() -+endif() -+ -+if (builtin_gtest) - # FIXME: Remove our version of gtest in roottest. We can reuse this one. - # Add googletest - # http://stackoverflow.com/questions/9689183/cmake-googletest --- -2.35.1 - diff --git a/root-uring-warn.patch b/root-uring-warn.patch deleted file mode 100644 index 05cfd56..0000000 --- a/root-uring-warn.patch +++ /dev/null @@ -1,43 +0,0 @@ -From 580fcf8fe95c45e337d222a7fd2338fdef2f52c5 Mon Sep 17 00:00:00 2001 -From: Mattias Ellert -Date: Thu, 24 Mar 2022 16:18:57 +0100 -Subject: [PATCH 1/2] Ignore warnings about uring failing during test - ---- - tree/ntuple/v7/test/ntuple_extended.cxx | 13 +++++++++++++ - 1 file changed, 13 insertions(+) - -diff --git a/tree/ntuple/v7/test/ntuple_extended.cxx b/tree/ntuple/v7/test/ntuple_extended.cxx -index 8e3998996c..98d65ef319 100644 ---- a/tree/ntuple/v7/test/ntuple_extended.cxx -+++ b/tree/ntuple/v7/test/ntuple_extended.cxx -@@ -4,6 +4,8 @@ - - #include "TROOT.h" - -+#include "ROOTUnitTestSupport.h" -+ - TEST(RNTuple, RealWorld1) - { - ROOT::EnableImplicitMT(); -@@ -111,6 +113,17 @@ TEST(RNTuple, RandomAccess) - #if !defined(_MSC_VER) || defined(R__ENABLE_BROKEN_WIN_TESTS) - TEST(RNTuple, LargeFile) - { -+ ROOTUnitTestSupport::CheckDiagsRAII raii; -+ raii.optionalDiag(kWarning, "RIoUring", -+ "io_uring is unexpectedly not available because:", false); -+ raii.optionalDiag(kWarning, "RRawFileUnix", -+ "io_uring setup failed, falling back to blocking I/O in ReadV", true); -+ -+ raii.optionalDiag(kWarning, "ROOT.NTuple", -+ "The RNTuple file format will change. Do not store real data with this version of RNTuple!", true); -+ raii.optionalDiag(kWarning, "ROOT.NTuple", -+ "Pre-release format version: ", false); -+ - ROOT::EnableImplicitMT(); - FileRaii fileGuard("test_large_file.root"); - --- -2.35.1 - diff --git a/root-use-unique-filenames-in-fillrandom-tutorials.patch b/root-use-unique-filenames-in-fillrandom-tutorials.patch deleted file mode 100644 index 724eb79..0000000 --- a/root-use-unique-filenames-in-fillrandom-tutorials.patch +++ /dev/null @@ -1,25 +0,0 @@ -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-vecops-Adaptive-size-of-long-RVec-instances-in-RVec-.patch b/root-vecops-Adaptive-size-of-long-RVec-instances-in-RVec-.patch new file mode 100644 index 0000000..369ce3e --- /dev/null +++ b/root-vecops-Adaptive-size-of-long-RVec-instances-in-RVec-.patch @@ -0,0 +1,135 @@ +From 44c501ac9fdb9049783d9738a9603eec572f52f0 Mon Sep 17 00:00:00 2001 +From: Jonas Rembser +Date: Wed, 26 Nov 2025 18:11:25 +0100 +Subject: [PATCH] [vecops] Adaptive size of long RVec instances in RVec test + +For the tests to make sense, some vectors need to be longer than the +maximum small vector size. This maximum size is compiler and +architecture dependent. For `RVec` on ARM64 with gcc 14, the +small vector capacity turns out to be 60, which is larger than the +current test vector size of 18. + +Therefore, the test is refactored to adapt the large vector size +automatically, according to the maximum small vector size. +--- + math/vecops/test/vecops_rvec.cxx | 81 +++++++++++++++++++++++++------- + 1 file changed, 63 insertions(+), 18 deletions(-) + +diff --git a/math/vecops/test/vecops_rvec.cxx b/math/vecops/test/vecops_rvec.cxx +index 432c673a553..8cbe36ee6d8 100644 +--- a/math/vecops/test/vecops_rvec.cxx ++++ b/math/vecops/test/vecops_rvec.cxx +@@ -1672,15 +1672,35 @@ TEST_P(VecOpsSwap, BothSmallVectors) + + TEST_P(VecOpsSwap, BothRegularVectors) + { +- RVec fixed_vreg1{1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3}; +- RVec fixed_vreg2{4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6}; +- RVec fixed_vreg3{7, 8, 9, 7, 8, 9, 7, 8, 9, 7, 8, 9, 7, 8, 9, 7, 8, 9, 7}; ++ constexpr std::size_t smallVecSize = ROOT::Internal::VecOps::RVecInlineStorageSize::value; ++ ++ // The number of elemens in the large RVecs will be the smallest multiple of ++ // three that larger than smallVecSize. ++ constexpr int nCycle = 3; ++ constexpr std::size_t nElems = ((smallVecSize / nCycle) + 1) * nCycle; ++ ++ RVec fixed_vreg1(nElems); ++ RVec fixed_vreg2(nElems); ++ RVec fixed_vreg3(nElems + 1); + RVec fixed_vmocksmall{0, 7}; + +- RVec vreg1{1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3}; +- RVec vreg2{4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6}; +- RVec vreg3{7, 8, 9, 7, 8, 9, 7, 8, 9, 7, 8, 9, 7, 8, 9, 7, 8, 9, 7}; +- RVec vmocksmall{0, 7, 8, 9, 7, 8, 9, 7, 8, 9, 7, 8, 7, 8, 9, 7, 8, 9}; ++ RVec vreg1(nElems); ++ RVec vreg2(nElems); ++ RVec vreg3(nElems + 1); ++ RVec vmocksmall(nElems + 1); ++ ++ for (std::size_t i = 0; i < nElems; ++i) { ++ vreg1[i] = (i % nCycle) + 1; ++ vreg2[i] = vreg1[i] + nCycle; ++ vreg3[i] = vreg2[i] + nCycle; ++ fixed_vreg1[i] = vreg1[i]; ++ fixed_vreg2[i] = vreg2[i]; ++ fixed_vreg3[i] = vreg3[i]; ++ vmocksmall[i + 1] = vreg3[i]; ++ } ++ fixed_vreg3[nElems] = fixed_vreg3[0]; ++ vreg3[nElems] = vreg3[0]; ++ + vmocksmall.erase(vmocksmall.begin() + 2, vmocksmall.end()); + // vmocksmall is a regular vector of size 2 + +@@ -1798,11 +1818,22 @@ TEST_P(VecOpsSwap, BothAdoptingVectors) + // in cases where ROOT::VecOps::swap produces 1 regular and 1 adopting vector + TEST_P(VecOpsSwap, SmallRegularVectors) + { ++ constexpr std::size_t smallVecSize = ROOT::Internal::VecOps::RVecInlineStorageSize::value; ++ ++ // The number of elemens in the large RVecs will be the smallest multiple of ++ // three that larger than smallVecSize. ++ constexpr int nCycle = 3; ++ constexpr std::size_t nElems1 = ((smallVecSize / nCycle) + 1) * nCycle; ++ constexpr std::size_t nElems2 = nElems1 + nCycle; // some vectors should be larger than others ++ + RVec fixed_vsmall{1, 2, 3}; + RVec fixed_vreg1{4, 5, 6}; + RVec fixed_vreg2{7, 8}; + RVec fixed_vreg3{9, 10, 11, 12, 13, 14}; +- RVec fixed_vreg4{15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30}; ++ RVec fixed_vreg4(nElems1); ++ for (std::size_t i = 0; i < nElems1; ++i) { ++ fixed_vreg4[i] = i + 15; ++ } + + // need multiple hard copies since after swap of a small and a regular, + // there is no fixed policy whether 2 regular vectors are produced or 1 small and 1 regular +@@ -1815,19 +1846,33 @@ TEST_P(VecOpsSwap, SmallRegularVectors) + RVec vsmall7{1, 2, 3}; + RVec vsmall8{1, 2, 3}; + +- RVec vreg1{4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6}; +- vreg1.erase(vreg1.begin() + 3, vreg1.end()); // regular vector of size 3 +- RVec vreg10{4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6}; ++ RVec vreg1; ++ RVec vreg10; ++ RVec vreg2{7, 8}; ++ RVec vreg20{7, 8}; ++ RVec vreg3{9, 10, 11, 12, 13, 14}; ++ RVec vreg30{9, 10, 11, 12, 13, 14}; ++ RVec vreg4(nElems1); ++ ++ for (std::size_t i = 0; i < nElems2; ++i) { ++ double val = (i % nCycle) + 4; ++ vreg1.push_back(val); ++ vreg10.push_back(vreg1.back()); ++ vreg2.push_back(val); ++ vreg20.push_back(vreg2.back()); ++ vreg3.push_back(val); ++ vreg30.push_back(vreg3.back()); ++ } ++ for (std::size_t i = 0; i < nElems1; ++i) { ++ vreg4[i] = i + 15; ++ } ++ ++ vreg1.erase(vreg1.begin() + 3, vreg1.end()); // regular vector of size 3 + vreg10.erase(vreg10.begin() + 3, vreg10.end()); // regular vector of size 3 +- RVec vreg2{7, 8, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6}; +- vreg2.erase(vreg2.begin() + 2, vreg2.end()); // regular vector of size 2 +- RVec vreg20{7, 8, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6}; ++ vreg2.erase(vreg2.begin() + 2, vreg2.end()); // regular vector of size 2 + vreg20.erase(vreg20.begin() + 2, vreg20.end()); // regular vector of size 2 +- RVec vreg3{9, 10, 11, 12, 13, 14, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6}; +- vreg3.erase(vreg3.begin() + 6, vreg3.end()); // regular vector of size 6 +- RVec vreg30{9, 10, 11, 12, 13, 14, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6}; ++ vreg3.erase(vreg3.begin() + 6, vreg3.end()); // regular vector of size 6 + vreg30.erase(vreg30.begin() + 6, vreg30.end()); // regular vector of size 6 +- RVec vreg4{15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30}; + // vreg4 is a regular vector that cannot "fit" to small vector + + // verify that initially vectors are not small +-- +2.52.0 + diff --git a/root.spec b/root.spec index bead5ca..4cd9565 100644 --- a/root.spec +++ b/root.spec @@ -1,74 +1,48 @@ -%undefine __cmake_in_source_build -%undefine __cmake3_in_source_build - # Disable package note flags, since root saves the compiler/linker flags # used during the build %undefine _package_note_flags -%if %{?fedora}%{!?fedora:0} >= 31 || %{?rhel}%{!?rhel:0} >= 8 -# Don't build python2-root for Fedora >= 31 -%global buildpy2 0 -%else -%global buildpy2 1 -%endif - -%if %{buildpy2} -%global python2_version_uscore %(tr . _ <<< "%{python2_version}") -%endif -%global python3_version_uscore %(tr . _ <<< "%{python3_version}") - -%if %{?fedora}%{!?fedora:0} >= 34 || %{?rhel}%{!?rhel:0} >= 9 -# Building the experimental ROOT 7 classes requires c++-17. -# This is the default for gcc 11 and later. %global root7 1 -%else -%global root7 0 -%endif - -%if %{?fedora}%{!?fedora:0} >= 33 || %{?rhel}%{!?rhel:0} >= 7 -%global xrootd5 1 -%else -%global xrootd5 0 -%endif - -%global webgui 1 - -%global gfal2 1 - -%if %{?fedora}%{!?fedora:0} || %{?rhel}%{!?rhel:0} >= 8 -# The SOFIE parser requires protobuf 3.0 +%global dataframe 1 +%global roofit 1 %global tmvasofieparser 1 +%global distrdf %{dataframe} + +%global bundlejson 0 + +%if %{?fedora}%{!?fedora:0} || %{?rhel}%{!?rhel:0} >= 10 +%ifarch %{ix86} %{arm} +%global pandas 0 %else -%global tmvasofieparser 0 +%global pandas 1 +%endif +%else +%global pandas 0 %endif -%if %{?fedora}%{!?fedora:0} || %{?rhel}%{!?rhel:0} >= 9 -# DistRDF requires Python 3.7+ -%global distrdf 1 +%if "%{?dist}" == ".el10_0" +# R not available in EPEL 10.0 +%global rrr 0 %else -%global distrdf 0 +%global rrr 1 %endif -%if %{?fedora}%{!?fedora:0} >= 28 || %{?rhel}%{!?rhel:0} >= 8 -# Multi-threading support requires TBB version >= 2018 -%global tbb 1 +%if %{?fedora}%{!?fedora:0} >= 40 || %{?rhel}%{!?rhel:0} >= 10 +%global roofitmp 1 %else -%global tbb 0 +%global roofitmp 0 %endif -# Do not create .orig files when patching source -%global _default_patch_flags --no-backup-if-mismatch - # Do not generate autoprovides for Python modules -%global __provides_exclude_from ^(%{?python2_sitearch:%{python2_sitearch}|}%{python3_sitearch})/lib.*\\.so$ +%global __provides_exclude_from ^%{python3_sitearch}/.*/lib.*\\.so$ Name: root -Version: 6.26.10 +Version: 6.38.00 %global libversion %(cut -d. -f 1-2 <<< %{version}) -Release: 1%{?dist} +Release: 6%{?dist} Summary: Numerical data analysis framework -License: LGPLv2+ +License: LGPL-2.1-or-later URL: https://root.cern/ # The upstream source is modified to exclude proprietary fonts # See Source8 for how to create Source0 @@ -88,111 +62,59 @@ Source6: application-x-root.png Source7: JupyROOT-on-EPEL # Script to generate Source0 Source8: %{name}-get-src.sh +# Clad is a source-transformation automatic differentiation (AD) +# library for C++, implemented as a plugin for the Clang compiler +Source9: https://github.com/vgvassilev/clad/archive/v2.2/clad-2.2.tar.gz # 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 -# Compatibility with older gtest -# https://github.com/root-project/root/pull/10301 -Patch2: %{name}-unbundle-gtest.patch -Patch3: %{name}-old-gtest-compat.patch -# Reduce memory usage of build -# Do not link rootcling_stage1 and libCling in parallel -Patch4: %{name}-memory-usage.patch # Reduce memory usage during linking on ARM and x86 by generating # smaller debuginfo for the llvm libraries # Fedora builders run out of memory with the default setting -Patch5: %{name}-memory-arm-x86.patch +Patch1: %{name}-memory-arm-x86.patch # Don't install minicern static library -Patch6: %{name}-dont-install-minicern.patch +Patch2: %{name}-dont-install-minicern.patch # Do not export Python modules in CMake config -Patch7: %{name}-no-export-python-modules.patch +Patch3: %{name}-no-export-python-modules.patch # Run some test on 32 bit that upstream has disabled -Patch8: %{name}-32bit-tests.patch -# Use local static script and style files for JsMVA -Patch9: %{name}-jsmva-static.patch -# Fix python bytecode compilation on EPEL 7 -# Compatibility with older python versions (no f-strings) -Patch10: %{name}-older-python.patch -# Backported fix from LLVM upstream -Patch11: %{name}-symbol-rewrite.patch -# Backport gcc 12 fix from LLVM -# https://github.com/root-project/root/pull/9586 -Patch12: %{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 -Patch13: %{name}-fix-test-failure-on-ppc64le-and-aarch64-with-gcc-12.patch -# Adjust some test timeouts -# https://github.com/root-project/root/pull/10886 -Patch14: %{name}-test-timeout.patch -# Fixes for tmva-sofie test compilation -# https://github.com/root-project/root/pull/10117 -Patch15: %{name}-ignore-prefix.patch -# Use different filenames in io/loopdir tests -# https://github.com/root-project/root/pull/11725 -Patch16: %{name}-different-filename.patch -# Fix test when long is 32 bits -# https://github.com/root-project/root/pull/10302 -Patch17: %{name}-longlong.patch -# Ignore warnings (uring and RooNaNPacker) -# https://github.com/root-project/root/pull/10303 -Patch18: %{name}-uring-warn.patch -Patch19: %{name}-endian-warn.patch -# Always call WaitForInFlightClusters before checking cluster IDs -# https://github.com/root-project/root/pull/10304 -Patch20: %{name}-ntuplewait.patch -# NENTRIES is not always a multiple of the expected size -# https://github.com/root-project/root/pull/10305 -Patch21: %{name}-dataframe-callback.patch -# Add/remove namespaces from Linkdef -# https://github.com/root-project/root/pull/10306 -Patch22: %{name}-namespace-sofie.patch -Patch23: %{name}-namespace-roofit.patch -Patch24: %{name}-namespace-pymva.patch -# Use calls from Python directly in tutorial -# https://github.com/root-project/root/pull/10307 -Patch25: %{name}-roofit-tutorial.patch -# Byte swap values read from the protobuf raw data stream on -# big endian architectures -# https://github.com/root-project/root/pull/10308 -Patch26: %{name}-big-endian-byte-swap.patch -# Avoid crashes due to static initialization order -# https://github.com/root-project/root/pull/10309 -Patch27: %{name}-rcolor-static-init.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}-make-dyld-based-library-search-behavior-default.patch -Patch33: %{name}-get-rid-of-lsb_release.patch -Patch34: %{name}-threadsh1-avoid-heap-use-after-free.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 -# Avoid race condition between C++ an Python version of test -# https://github.com/root-project/root/pull/11643 -Patch37: %{name}-avoid-race-condition-tutorial-roofit-rf512.patch +Patch4: %{name}-32bit-tests.patch +# Adjust test/stressGraphics.ref +# https://github.com/root-project/root/pull/30667 +Patch5: %{name}-Adjust-test-stressGraphics.ref.patch +# Revert test change that breaks the test +Patch6: %{name}-Revert-test-Fetch-the-geometries-from-EOS-and-not-fr.patch +# Preserve memory during parallel build +# https://github.com/root-project/root/pull/18991 +Patch7: %{name}-Save-memory-Do-not-link-to-LLVM-libraries-in-parallel.patch +# Add missing includes of TMath.h +# https://github.com/root-project/root/pull/20601 +Patch8: %{name}-Geom-Add-missing-includes-of-TMath.h.patch +# Fix numpy vs dataframe type mismatch om ix86 +# https://github.com/root-project/root/pull/20668 +Patch9: %{name}-Fix-a-numpy-test-for-32-bit-archs.patch +# Backport a test fix from upstream +Patch10: %{name}-VecOps-Remove-outdated-IsSmall-helper-function-in-te.patch +Patch11: %{name}-vecops-Adaptive-size-of-long-RVec-instances-in-RVec-.patch +# Backport fixes to python module +Patch12: %{name}-cppyy-Remove-now-irrelevant-load_cpp_backend-call.patch +Patch13: %{name}-cppyy-Remove-code-related-to-finding-CPyCppyy-API-he.patch +# Don't install the python modules twice +# https://github.com/root-project/root/pull/20753 +Patch14: %{name}-PyROOT-Don-t-install-the-python-modules-twice.patch +# Fix test for stricter syntax in numpy 2.4.0 (backport) +# https://github.com/root-project/root/pull/20775 +Patch15: %{name}-Python-Fix-TF1-Pythonization-test-for-NumPy-2.4.0.patch +# Starting with gcc 16, libstdc++ links to libatomic +# https://github.com/root-project/root/pull/20826 +Patch16: %{name}-gcc-16-libstdc-links-to-libatomic.patch +# Test fails with gcc 16 (which uses c++20 as default) +# https://github.com/root-project/root/issues/20831 +# https://github.com/root-project/root/pull/20841 +Patch17: %{name}-RF-Use-TRandom3-in-test-RooFuncWrapper.patch -%if %{?rhel}%{!?rhel:0} == 7 -BuildRequires: devtoolset-8-toolchain -BuildRequires: cmake3 >= 3.9 -%else BuildRequires: gcc-c++ BuildRequires: gcc-gfortran BuildRequires: make -BuildRequires: cmake >= 3.9 -%endif +BuildRequires: cmake >= 3.20 BuildRequires: libX11-devel BuildRequires: libXpm-devel BuildRequires: libXft-devel @@ -203,98 +125,71 @@ BuildRequires: fcgi-devel BuildRequires: ftgl-devel BuildRequires: gl2ps-devel BuildRequires: glew-devel -BuildRequires: pcre-devel +BuildRequires: pcre2-devel BuildRequires: zlib-devel BuildRequires: xz-devel BuildRequires: lz4-devel BuildRequires: xxhash-devel BuildRequires: libzstd-devel -# Require a version of libAfterImage that is properly linked to -# its dependencies -BuildRequires: libAfterImage-devel >= 1.20-21 +BuildRequires: libtiff-devel +BuildRequires: libpng-devel +BuildRequires: giflib-devel +BuildRequires: libjpeg-devel BuildRequires: ncurses-devel BuildRequires: libxml2-devel BuildRequires: fftw-devel BuildRequires: gsl-devel BuildRequires: unuran-devel -%if %{?fedora}%{!?fedora:0} >= 28 || %{?rhel}%{!?rhel:0} >= 8 -BuildRequires: mariadb-connector-c-devel -%else -BuildRequires: mysql-devel -%endif BuildRequires: sqlite-devel -BuildRequires: unixODBC-devel BuildRequires: libGL-devel BuildRequires: libGLU-devel -%if %{?fedora}%{!?fedora:0} >= 27 || %{?rhel}%{!?rhel:0} >= 8 -BuildRequires: libpq-devel -%else -BuildRequires: postgresql-devel -%endif -%if %{buildpy2} -BuildRequires: python2-devel -BuildRequires: python2-setuptools -BuildRequires: python2-numpy -%endif -BuildRequires: python%{python3_pkgversion}-devel +BuildRequires: libxcrypt-devel +BuildRequires: python%{python3_pkgversion}-devel >= 3.7 BuildRequires: python%{python3_pkgversion}-setuptools BuildRequires: python%{python3_pkgversion}-numpy -%if %{webgui} -%ifarch %{qt5_qtwebengine_arches} -BuildRequires: qt5-qtbase-devel -BuildRequires: qt5-qtwebengine-devel -%endif +%ifarch %{qt6_qtwebengine_arches} +BuildRequires: qt6-qtbase-devel +BuildRequires: qt6-qtwebengine-devel %endif 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.6.4 -%if %{gfal2} -BuildRequires: gfal2-devel -%endif +# Davix version >= 0.6.4, but not between 0.6.8 and 0.7.0 +BuildRequires: davix-devel >= 0.7.1 +%if %{rrr} BuildRequires: R-Rcpp-devel BuildRequires: R-RInside-devel -BuildRequires: readline-devel -%if %{tbb} -BuildRequires: tbb-devel >= 2018 %endif +BuildRequires: readline-devel +BuildRequires: tbb-devel >= 2020 BuildRequires: libuuid-devel -BuildRequires: emacs -BuildRequires: emacs-el BuildRequires: graphviz-devel BuildRequires: expat-devel BuildRequires: pythia8-devel >= 8.1.80 -%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) -BuildRequires: cmake-data >= 3.18.3-1 -%else -BuildRequires: openblas-devel +%if ! %{bundlejson} +BuildRequires: json-devel >= 3.9 %endif -BuildRequires: json-devel -%if %{?fedora}%{!?fedora:0} BuildRequires: liburing-devel -%endif %if %{tmvasofieparser} BuildRequires: protobuf-devel >= 3.0 %endif -%if %{?fedora}%{!?fedora:0} || %{?rhel}%{!?rhel:0} == 8 -BuildRequires: python%{python3_pkgversion}-pandas +%ifnarch %{ix86} %{arm} +BuildRequires: libarrow-devel %endif -%if %{?fedora}%{!?fedora:0} -BuildRequires: python3-rcssmin -BuildRequires: uglify-js -%else -BuildRequires: yuicompressor +%if %{roofit} +%if %{roofitmp} +# Required for roofit-multiprocess +# Requires new zeromq with zmq_ppoll +BuildRequires: zeromq-devel >= 4.3.5 +BuildRequires: cppzmq-devel +%endif +%endif +%if %{pandas} +BuildRequires: python%{python3_pkgversion}-pandas %endif BuildRequires: perl-generators BuildRequires: gtest-devel @@ -309,16 +204,17 @@ 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} Requires: %{name}-multiproc%{?_isa} = %{version}-%{release} Requires: %{name}-net%{?_isa} = %{version}-%{release} Requires: %{name}-tree%{?_isa} = %{version}-%{release} +Requires: %{name}-tree-ntuple%{?_isa} = %{version}-%{release} +Requires: %{name}-tree-player%{?_isa} = %{version}-%{release} Requires: hicolor-icon-theme -Requires: emacs-filesystem >= %{_emacs_version} -Provides: emacs-%{name} = %{version}-%{release} -Provides: emacs-%{name}-el = %{version}-%{release} Obsoletes: emacs-%{name} < 5.34.28 Obsoletes: emacs-%{name}-el < 5.34.28 @@ -332,9 +228,7 @@ the bulk of the data. Included are histogramming methods in an arbitrary number of dimensions, curve fitting, function evaluation, minimization, graphics and visualization classes to allow the easy setup of an analysis system that can query and process the data -interactively or in batch mode, as well as a general parallel -processing framework, PROOF, that can considerably speed up an -analysis. +interactively or in batch mode. Thanks to the built-in C++ interpreter cling, the command, the scripting and the programming language are all C++. The interpreter @@ -358,14 +252,17 @@ Requires: %{name}-core = %{version}-%{release} %description icons This package contains icons used by the ROOT GUI. -%package fonts +%package font-files Summary: ROOT font collection BuildArch: noarch # STIX version 0.9 only -License: OFL +License: OFL-1.1 Requires: %{name}-core = %{version}-%{release} +# Package renamed +Provides: %{name}-fonts = %{version}-%{release} +Obsoletes: %{name}-fonts < 6.36.00-2 -%description fonts +%description font-files 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. @@ -379,8 +276,8 @@ This package contains the tutorial scripts and test suite for ROOT. %package core Summary: ROOT core libraries -License: LGPLv2+ and BSD -Requires: %{name}-fonts = %{version}-%{release} +License: LGPL-2.1-or-later AND LGPL-2.0-or-later AND ISC AND MIT AND NCSA +Requires: %{name}-font-files = %{version}-%{release} Requires: %{name}-icons = %{version}-%{release} # Dynamic dependencies Requires: %{name}-cling%{?_isa} = %{version}-%{release} @@ -401,11 +298,19 @@ Requires: %{name}-multiproc%{?_isa} = %{version}-%{release} Requires: %{name}-net%{?_isa} = %{version}-%{release} Requires: %{name}-physics%{?_isa} = %{version}-%{release} Requires: %{name}-tree%{?_isa} = %{version}-%{release} +%if %{dataframe} Requires: %{name}-tree-dataframe%{?_isa} = %{version}-%{release} +%endif +Requires: %{name}-tree-ntuple%{?_isa} = %{version}-%{release} +Requires: %{name}-tree-ntuple-utils%{?_isa} = %{version}-%{release} Requires: %{name}-tree-player%{?_isa} = %{version}-%{release} Requires: %{name}-vecops%{?_isa} = %{version}-%{release} # To resolve dependency in installed ROOTConfig.cmake -Requires: json-devel +%if %{bundlejson} +Provides: bundled(json-devel) = 3.10.5 +%else +Requires: json-devel >= 3.9 +%endif # Fonts Requires: xorg-x11-fonts-ISO8859-1-75dpi Requires: font(freesans) @@ -418,6 +323,7 @@ Requires: font(droidsansfallback) Obsoletes: %{name}-ruby < 6.00.00 Obsoletes: %{name}-vdt < 6.10.00 Obsoletes: %{name}-proof-pq2 < 6.16.00 +Obsoletes: %{name}-proofd < 6.16.00 Obsoletes: %{name}-rootd < 6.16.00 Obsoletes: %{name}-geocad < 6.18.00 Obsoletes: %{name}-graf-qt < 6.18.00 @@ -430,40 +336,22 @@ Obsoletes: %{name}-net-globus < 6.18.00 Obsoletes: %{name}-net-ldap < 6.18.00 Obsoletes: %{name}-net-krb5 < 6.18.00 Obsoletes: %{name}-table < 6.18.00 -%if ! %{buildpy2} -Obsoletes: python2-%{name} < %{version}-%{release} -Obsoletes: python2-jupyroot < %{version}-%{release} -Obsoletes: python2-jsmva < %{version}-%{release} -Obsoletes: %{name}-rootaas < 6.08.00 -%endif -%if %{?rhel}%{!?rhel:0} == 7 -Obsoletes: python%{?python3_other_pkgversion}-%{name} < 6.22.00 -Obsoletes: python%{?python3_other_pkgversion}-jupyroot < 6.22.00 -Obsoletes: python%{?python3_other_pkgversion}-jsmva < 6.22.00 -%endif +Obsoletes: %{name}-xproof < 6.22.08-2 Obsoletes: %{name}-memstat < 6.26.00 Obsoletes: %{name}-montecarlo-vmc < 6.26.00 Obsoletes: %{name}-doc < 6.26.00 -%if %{?rhel}%{!?rhel:0} == 8 -# Obsolete the ROOT 7 packages in EPEL 8 -# Minimum C++ version changed from 14 to 17 -Obsoletes: %{name}-graf-gpadv7 < 6.26.00 -Obsoletes: %{name}-graf-primitives < 6.26.00 -Obsoletes: %{name}-graf3d-eve7 < 6.26.00 -Obsoletes: %{name}-gui-browsable < 6.26.00 -Obsoletes: %{name}-gui-browserv7 < 6.26.00 -Obsoletes: %{name}-gui-canvaspainter < 6.26.00 -Obsoletes: %{name}-gui-fitpanelv7 < 6.26.00 -Obsoletes: %{name}-histv7 < 6.26.00 -Obsoletes: %{name}-hist-draw < 6.26.00 -Obsoletes: %{name}-tree-ntuple < 6.26.00 -%endif -%if %{buildpy2} -Obsoletes: python2-distrdf < 6.26.00 -%endif -%if ! %{distrdf} -Obsoletes: python%{python3_pkgversion}-distrdf < 6.26.00 -%endif +Obsoletes: %{name}-io-gfal < 6.30.00 +Obsoletes: %{name}-roofit-common < 6.30.00 +Obsoletes: %{name}-gui-qt5webdisplay < 6.36.00 +Obsoletes: %{name}-hist-draw < 6.36.00 +Obsoletes: %{name}-html < 6.36.00 +Obsoletes: %{name}-proof < 6.38.00 +Obsoletes: %{name}-proof-bench < 6.38.00 +Obsoletes: %{name}-proof-player < 6.38.00 +Obsoletes: %{name}-proof-sessionviewer < 6.38.00 +Obsoletes: %{name}-sql-mysql < 6.38.00 +Obsoletes: %{name}-sql-odbc < 6.38.00 +Obsoletes: %{name}-sql-pgsql < 6.38.00 %description core This package contains the core libraries used by ROOT: libCore, libNew, @@ -480,7 +368,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 LGPL-2.1-only) AND (Apache-2.0 WITH LLVM-exception OR NCSA) AND BSD-2-Clause AND BSD-3-Clause AND MIT Requires: %{name}-core%{?_isa} = %{version}-%{release} Requires: %{name}-io%{?_isa} = %{version}-%{release} # Root's cling interpreter uses a particular git commit of @@ -490,11 +378,7 @@ Requires: %{name}-io%{?_isa} = %{version}-%{release} # visible outside of the libCling module. Provides: bundled(clang-libs) Provides: bundled(llvm-libs) -%if %{?rhel}%{!?rhel:0} == 7 -Requires: devtoolset-8-toolchain -%else Requires: gcc-c++ -%endif Requires: redhat-rpm-config Obsoletes: %{name}-cint7 < 5.26.00c Obsoletes: %{name}-cint < 6.00.00 @@ -505,6 +389,13 @@ Obsoletes: %{name}-reflex < 6.00.00 Cling is an interactive C++ interpreter, built on top of Clang and LLVM compiler infrastructure. +%package testsupport +Summary: Unit test support library for ROOT +Requires: %{name}-core%{?_isa} = %{version}-%{release} + +%description testsupport +This package contains the unit test support library for ROOT. + %package tpython Summary: ROOT's TPython interface Requires: %{name}-core%{?_isa} = %{version}-%{release} @@ -516,54 +407,9 @@ Obsoletes: python%{python3_pkgversion}-%{name} < 6.22.00 This package contains ROOT's TPython interface. It makes it possible to call Python from ROOT. -%if %{buildpy2} -%package -n python2-%{name} -Summary: Python extension for ROOT -%{?python_provide:%python_provide python2-%{name}} -Provides: %{name}-python = %{version}-%{release} -Obsoletes: %{name}-python < 6.08.00 -Requires: %{name}-core%{?_isa} = %{version}-%{release} -Requires: %{name}-io%{?_isa} = %{version}-%{release} -Requires: %{name}-tree%{?_isa} = %{version}-%{release} - -%description -n python2-%{name} -This package contains the Python extension for ROOT. It makes it -possible to use ROOT classes in Python. - -%package -n python2-jupyroot -Summary: ROOT Jupyter kernel -%{?python_provide:%python_provide python2-jupyroot} -Requires: python2-%{name}%{?_isa} = %{version}-%{release} -Requires: python2-jsmva = %{version}-%{release} -Requires: %{name}-core%{?_isa} = %{version}-%{release} -Requires: %{name}-notebook = %{version}-%{release} -%if %{?fedora}%{!?fedora:0} >= 26 -# python-metakernel for python2 not available in -# Fedora <= 25 or RHEL/EPEL - some functionality missing -Requires: python2-ipython -Requires: python2-metakernel -%endif -%if %{?fedora}%{!?fedora:0} >= 28 -Requires: python-jupyter-filesystem -%endif -Obsoletes: %{name}-rootaas < 6.08.00 - -%description -n python2-jupyroot -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} -Requires: %{name}-tmva = %{version}-%{release} - -%description -n python2-jsmva -TMVA interface used by JupyROOT. -%endif - %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} @@ -571,6 +417,7 @@ Requires: %{name}-io%{?_isa} = %{version}-%{release} Requires: %{name}-tree%{?_isa} = %{version}-%{release} # Package split (tpython from Python bindings) Obsoletes: python%{python3_pkgversion}-%{name} < 6.22.00 +Obsoletes: python%{python3_pkgversion}-jsmva < 6.32.00 %description -n python%{python3_pkgversion}-%{name} This package contains the Python extension for ROOT. It makes it @@ -578,38 +425,33 @@ 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} -Requires: python%{python3_pkgversion}-%{name}%{?_isa} = %{version}-%{release} -Requires: python%{python3_pkgversion}-jsmva = %{version}-%{release} -Requires: %{name}-core%{?_isa} = %{version}-%{release} -Requires: %{name}-notebook = %{version}-%{release} -%if %{?fedora}%{!?fedora:0} >= 26 -# python-metakernel for python3 not available in -# Fedora <= 25 or RHEL/EPEL - some functionality missing +BuildArch: noarch +%py_provides python%{python3_pkgversion}-jupyroot +Requires: python%{python3_pkgversion}-%{name} = %{version}-%{release} +Requires: %{name}-core = %{version}-%{release} +# notebook package was merged with JupyROOT package +Provides: %{name}-notebook = %{version}-%{release} +Obsoletes: %{name}-notebook < 6.32.00 +Requires: js-jsroot >= 7.10 +%if %{?fedora}%{!?fedora:0} || ( %{?rhel}%{!?rhel:0} >= 10 && "%{?dist}" != ".el10_0" ) +# jupyter-notebook not available in RHEL/EPEL +# some functionality missing +Requires: jupyter-notebook +# python-metakernel not available in RHEL/EPEL +# some functionality missing Requires: python%{python3_pkgversion}-ipython Requires: python%{python3_pkgversion}-metakernel -%endif -%if %{?fedora}%{!?fedora:0} >= 28 Requires: python-jupyter-filesystem %endif %description -n python%{python3_pkgversion}-jupyroot 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} -Requires: %{name}-tmva = %{version}-%{release} - -%description -n python%{python3_pkgversion}-jsmva -TMVA interface used by JupyROOT. - %if %{distrdf} %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} @@ -618,6 +460,7 @@ A layer on top of RDataFrame to enable distributed computations. It is a port of the previously known PyRDF python package. %endif +%if %{rrr} %package r Summary: R interface for ROOT Requires: %{name}-core%{?_isa} = %{version}-%{release} @@ -644,6 +487,7 @@ Requires: %{name}-r%{?_isa} = %{version}-%{release} %description r-tools This package contains a minimizer module for ROOT that uses the ROOT R interface. +%endif %package genetic Summary: Genetic algorithms for ROOT @@ -657,17 +501,53 @@ This package contains a genetic minimizer module for ROOT. %package geom Summary: Geometry library for ROOT Requires: %{name}-core%{?_isa} = %{version}-%{release} +Requires: %{name}-io%{?_isa} = %{version}-%{release} +Requires: %{name}-mathcore%{?_isa} = %{version}-%{release} +# Package split (geom-builder and geom-painter from geom) +Obsoletes: %{name}-geom < 6.28.00 + +%description geom +This package contains a library for defining geometries in ROOT. + +%package geom-builder +Summary: Geometry builder library for ROOT +Requires: %{name}-core%{?_isa} = %{version}-%{release} +Requires: %{name}-geom%{?_isa} = %{version}-%{release} Requires: %{name}-graf-gpad%{?_isa} = %{version}-%{release} -Requires: %{name}-graf3d%{?_isa} = %{version}-%{release} Requires: %{name}-gui%{?_isa} = %{version}-%{release} Requires: %{name}-gui-ged%{?_isa} = %{version}-%{release} +# Package split (geom-builder and geom-painter from geom) +Obsoletes: %{name}-geom < 6.28.00 + +%description geom-builder +This package contains a library for building geometries in ROOT. + +%package geom-checker +Summary: Geometry checker library for ROOT +Requires: %{name}-core%{?_isa} = %{version}-%{release} +Requires: %{name}-geom%{?_isa} = %{version}-%{release} +Requires: %{name}-graf-gpad%{?_isa} = %{version}-%{release} +Requires: %{name}-graf3d%{?_isa} = %{version}-%{release} Requires: %{name}-hist%{?_isa} = %{version}-%{release} Requires: %{name}-io%{?_isa} = %{version}-%{release} Requires: %{name}-mathcore%{?_isa} = %{version}-%{release} Requires: %{name}-tree%{?_isa} = %{version}-%{release} -%description geom -This package contains a library for defining geometries in ROOT. +%description geom-checker +This package contains a library for checking geometries in ROOT. + +%package geom-painter +Summary: Geometry painter library for ROOT +Requires: %{name}-core%{?_isa} = %{version}-%{release} +Requires: %{name}-geom%{?_isa} = %{version}-%{release} +Requires: %{name}-graf-gpad%{?_isa} = %{version}-%{release} +Requires: %{name}-graf3d%{?_isa} = %{version}-%{release} +Requires: %{name}-hist%{?_isa} = %{version}-%{release} +# Package split (geom-builder and geom-painter from geom) +Obsoletes: %{name}-geom < 6.28.00 + +%description geom-painter +This package contains a library for drawing geometries in ROOT. %package gdml Summary: GDML import/export for ROOT geometries @@ -693,13 +573,12 @@ This package contains the 2-dimensional graphics library for ROOT. Summary: AfterImage graphics renderer for ROOT Requires: %{name}-core%{?_isa} = %{version}-%{release} Requires: %{name}-graf%{?_isa} = %{version}-%{release} +Requires: %{name}-graf-gpad%{?_isa} = %{version}-%{release} +Requires: %{name}-graf-postscript%{?_isa} = %{version}-%{release} Requires: %{name}-gui%{?_isa} = %{version}-%{release} Requires: %{name}-hist%{?_isa} = %{version}-%{release} Requires: %{name}-io%{?_isa} = %{version}-%{release} Requires: %{name}-mathcore%{?_isa} = %{version}-%{release} -# Require a version of libAfterImage that is properly linked to -# its dependencies -Requires: libAfterImage >= 1.20-21 %description graf-asimage This package contains the AfterImage renderer for ROOT, which allows @@ -723,6 +602,7 @@ Summary: Canvas and pad library for ROOT Requires: %{name}-core%{?_isa} = %{version}-%{release} Requires: %{name}-graf%{?_isa} = %{version}-%{release} Requires: %{name}-hist%{?_isa} = %{version}-%{release} +Requires: %{name}-io%{?_isa} = %{version}-%{release} Requires: %{name}-mathcore%{?_isa} = %{version}-%{release} # Dynamic dependency Requires: %{name}-graf-postscript%{?_isa} = %{version}-%{release} @@ -801,6 +681,7 @@ This package contains a library for defining event displays in ROOT. Summary: GL renderer for ROOT Requires: %{name}-core%{?_isa} = %{version}-%{release} Requires: %{name}-graf%{?_isa} = %{version}-%{release} +Requires: %{name}-graf-asimage%{?_isa} = %{version}-%{release} Requires: %{name}-graf-gpad%{?_isa} = %{version}-%{release} Requires: %{name}-graf3d%{?_isa} = %{version}-%{release} Requires: %{name}-graf3d-csg%{?_isa} = %{version}-%{release} @@ -847,6 +728,8 @@ Requires: %{name}-graf%{?_isa} = %{version}-%{release} Requires: %{name}-graf-gpad%{?_isa} = %{version}-%{release} Requires: %{name}-io%{?_isa} = %{version}-%{release} Requires: %{name}-mathcore%{?_isa} = %{version}-%{release} +Requires: %{name}-tree-ntuple%{?_isa} = %{version}-%{release} +Requires: %{name}-tree-ntuple-browse%{?_isa} = %{version}-%{release} # Dynamic dependencies Requires: %{name}-graf-x11%{?_isa} = %{version}-%{release} Requires: %{name}-gui-ged%{?_isa} = %{version}-%{release} @@ -928,6 +811,14 @@ Recorded events are: All the recorded events from one session are stored in one TFile and can be replayed again anytime. +%package gui-treemap +Summary: GUI element for tree maps in ROOT +Requires: %{name}-core%{?_isa} = %{version}-%{release} +Requires: %{name}-graf%{?_isa} = %{version}-%{release} + +%description gui-treemap +This package contains a library to show tree maps in the ROOT GUI. + %package hbook Summary: Hbook library for ROOT Requires: %{name}-core%{?_isa} = %{version}-%{release} @@ -980,37 +871,10 @@ Requires: %{name}-hist%{?_isa} = %{version}-%{release} %description spectrum-painter This package contains a painter of spectra for ROOT. -%package hist-factory -Summary: RooFit PDFs from ROOT histograms -Requires: %{name}-core%{?_isa} = %{version}-%{release} -Requires: %{name}-graf%{?_isa} = %{version}-%{release} -Requires: %{name}-graf-gpad%{?_isa} = %{version}-%{release} -Requires: %{name}-hist%{?_isa} = %{version}-%{release} -Requires: %{name}-io%{?_isa} = %{version}-%{release} -Requires: %{name}-io-xmlparser%{?_isa} = %{version}-%{release} -Requires: %{name}-matrix%{?_isa} = %{version}-%{release} -Requires: %{name}-roofit%{?_isa} = %{version}-%{release} -Requires: %{name}-roofit-batchcompute%{?_isa} = %{version}-%{release} -Requires: %{name}-roofit-core%{?_isa} = %{version}-%{release} -Requires: %{name}-roostats%{?_isa} = %{version}-%{release} -Requires: %{name}-tree%{?_isa} = %{version}-%{release} - -%description hist-factory -Create RooFit probability density functions from ROOT histograms. - -%package html -Summary: HTML documentation generator for ROOT -Requires: %{name}-core%{?_isa} = %{version}-%{release} -Requires: %{name}-graf%{?_isa} = %{version}-%{release} -Requires: graphviz - -%description html -This package contains classes to automatically extract documentation -from marked up sources. - %package io Summary: Input/output of ROOT objects Requires: %{name}-core%{?_isa} = %{version}-%{release} +Requires: liburing-devel %description io This package provides I/O routines for ROOT objects. @@ -1023,16 +887,6 @@ Requires: %{name}-io%{?_isa} = %{version}-%{release} %description io-dcache This package contains the dCache extension for ROOT. -%if %{gfal2} -%package io-gfal -Summary: Grid File Access Library input/output library for ROOT -Requires: %{name}-core%{?_isa} = %{version}-%{release} -Requires: %{name}-io%{?_isa} = %{version}-%{release} - -%description io-gfal -This package contains the Grid File Access Library extension for ROOT. -%endif - %package io-sql Summary: SQL input/output library for ROOT Requires: %{name}-core%{?_isa} = %{version}-%{release} @@ -1078,7 +932,7 @@ easier to use for the average user. %package fftw Summary: FFTW library for ROOT -License: GPLv2+ +License: GPL-2.0-or-later Requires: %{name}-core%{?_isa} = %{version}-%{release} %description fftw @@ -1108,14 +962,14 @@ Summary: Core mathematics library for ROOT Requires: %{name}-core%{?_isa} = %{version}-%{release} # Dynamic dependencies Requires: %{name}-mathmore%{?_isa} = %{version}-%{release} -Requires: %{name}-minuit%{?_isa} = %{version}-%{release} +Requires: %{name}-minuit2%{?_isa} = %{version}-%{release} %description mathcore This package contains the MathCore library for ROOT. %package mathmore Summary: GSL interface library for ROOT -License: GPLv2+ +License: GPL-2.0-or-later Requires: %{name}-core%{?_isa} = %{version}-%{release} Requires: %{name}-mathcore%{?_isa} = %{version}-%{release} @@ -1234,7 +1088,7 @@ discriminating variables. %package unuran Summary: Random number generator library -License: GPLv2+ +License: GPL-2.0-or-later Requires: %{name}-core%{?_isa} = %{version}-%{release} Requires: %{name}-hist%{?_isa} = %{version}-%{release} Requires: %{name}-mathcore%{?_isa} = %{version}-%{release} @@ -1281,7 +1135,7 @@ Requires: %{name}-montecarlo-eg%{?_isa} = %{version}-%{release} %description montecarlo-pythia8 This package contains the Pythia version 8 plug-in for ROOT. This -package provide the ROOT user with transparent interface to the Pythia +package provides the ROOT user with transparent interface to the Pythia (version 8) event generators for hadronic interactions. If the term "hadronic" does not ring any bells, this package is not for you. @@ -1294,16 +1148,16 @@ Requires: %{name}-io%{?_isa} = %{version}-%{release} This package contains the ROOT networking library. %package net-rpdutils -Summary: Authentication utilities used by xproofd +Summary: Authentication utilities used by rootd Requires: %{name}-core%{?_isa} = %{version}-%{release} +Requires: %{name}-net%{?_isa} = %{version}-%{release} %description net-rpdutils -This package contains authentication utilities used by xproofd. +This package contains authentication utilities used by rootd. %package net-auth Summary: Authentication extension for ROOT Requires: %{name}-core%{?_isa} = %{version}-%{release} -Requires: %{name}-io%{?_isa} = %{version}-%{release} Requires: %{name}-net%{?_isa} = %{version}-%{release} %description net-auth @@ -1321,9 +1175,11 @@ access to http based storage such as webdav and S3. %package net-http Summary: HTTP server extension for ROOT +# The system civetweb is not compiled with websocket support +Provides: bundled(civetweb) Requires: %{name}-core%{?_isa} = %{version}-%{release} Requires: %{name}-io%{?_isa} = %{version}-%{release} -Requires: js-jsroot >= 6 +Requires: js-jsroot >= 7.10 # Library split (net-httpsniff from net-http) Obsoletes: %{name}-net-http < 6.14.00 @@ -1355,94 +1211,12 @@ 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. - -%package proof -Summary: PROOF extension for ROOT -Requires: %{name}-core%{?_isa} = %{version}-%{release} -Requires: %{name}-io%{?_isa} = %{version}-%{release} -Requires: %{name}-mathcore%{?_isa} = %{version}-%{release} -Requires: %{name}-net%{?_isa} = %{version}-%{release} -Requires: %{name}-tree%{?_isa} = %{version}-%{release} -Obsoletes: %{name}-clarens < 5.34.01 -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 - -%description proof -This package contains the proof extension for ROOT. This provides a -client to use in a PROOF environment. - -%package proof-bench -Summary: PROOF benchmarking -Requires: %{name}-core%{?_isa} = %{version}-%{release} -Requires: %{name}-graf%{?_isa} = %{version}-%{release} -Requires: %{name}-graf-gpad%{?_isa} = %{version}-%{release} -Requires: %{name}-hist%{?_isa} = %{version}-%{release} -Requires: %{name}-io%{?_isa} = %{version}-%{release} -Requires: %{name}-proof%{?_isa} = %{version}-%{release} -Requires: %{name}-proof-player%{?_isa} = %{version}-%{release} -Requires: %{name}-tree%{?_isa} = %{version}-%{release} - -%description proof-bench -This package contains the steering class for PROOF benchmarks. - -%package proof-player -Summary: PROOF player extension for ROOT -Requires: %{name}-core%{?_isa} = %{version}-%{release} -Requires: %{name}-graf-gpad%{?_isa} = %{version}-%{release} -Requires: %{name}-graf3d%{?_isa} = %{version}-%{release} -Requires: %{name}-hist%{?_isa} = %{version}-%{release} -Requires: %{name}-io%{?_isa} = %{version}-%{release} -Requires: %{name}-net%{?_isa} = %{version}-%{release} -Requires: %{name}-proof%{?_isa} = %{version}-%{release} -Requires: %{name}-tree%{?_isa} = %{version}-%{release} -Requires: %{name}-tree-player%{?_isa} = %{version}-%{release} -# Package split (proof-player from proof) -Obsoletes: %{name}-proof < 6.14.00 - -%description proof-player -This package contains the proof player extension for ROOT. - -%package proof-sessionviewer -Summary: GUI to browse an interactive PROOF session -Requires: %{name}-core%{?_isa} = %{version}-%{release} -Requires: %{name}-graf%{?_isa} = %{version}-%{release} -Requires: %{name}-graf-gpad%{?_isa} = %{version}-%{release} -Requires: %{name}-gui%{?_isa} = %{version}-%{release} -Requires: %{name}-hist%{?_isa} = %{version}-%{release} -Requires: %{name}-mathcore%{?_isa} = %{version}-%{release} -Requires: %{name}-proof%{?_isa} = %{version}-%{release} -Requires: %{name}-tree%{?_isa} = %{version}-%{release} - -%description proof-sessionviewer -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 +the xrootd server. Only the new (NetXNG) version is provided. +%if %{roofit} %package roofit Summary: ROOT extension for modeling expected distributions - toolkit -License: BSD +License: BSD-2-Clause Requires: %{name}-core%{?_isa} = %{version}-%{release} Requires: %{name}-hist%{?_isa} = %{version}-%{release} Requires: %{name}-io%{?_isa} = %{version}-%{release} @@ -1469,29 +1243,9 @@ suitable for adoption in different disciplines as well. This package contains the RooFit toolkit classes. -%package roofit-common -Summary: ROOT extension for modeling expected distributions - common -License: BSD -Requires: %{name}-core%{?_isa} = %{version}-%{release} - -%description roofit-common -The RooFit packages provide a toolkit for modeling the expected -distribution of events in a physics analysis. Models can be used to -perform likelihood fits, produce plots, and generate "toy Monte -Carlo" samples for various studies. The RooFit tools are integrated -with the object-oriented and interactive ROOT graphical environment. - -RooFit has been developed for the BaBar collaboration, a high energy -physics experiment at the Stanford Linear Accelerator Center, and is -primarily targeted to the high-energy physicists using the ROOT -analysis environment, but the general nature of the package make it -suitable for adoption in different disciplines as well. - -This package contains the RooFit common classes. - %package roofit-core Summary: ROOT extension for modeling expected distributions - core -License: BSD +License: BSD-2-Clause Requires: %{name}-core%{?_isa} = %{version}-%{release} Requires: %{name}-foam%{?_isa} = %{version}-%{release} Requires: %{name}-graf%{?_isa} = %{version}-%{release} @@ -1499,13 +1253,17 @@ Requires: %{name}-hist%{?_isa} = %{version}-%{release} Requires: %{name}-io%{?_isa} = %{version}-%{release} Requires: %{name}-mathcore%{?_isa} = %{version}-%{release} Requires: %{name}-matrix%{?_isa} = %{version}-%{release} -Requires: %{name}-minuit%{?_isa} = %{version}-%{release} Requires: %{name}-minuit2%{?_isa} = %{version}-%{release} Requires: %{name}-roofit-batchcompute%{?_isa} = %{version}-%{release} -Requires: %{name}-roofit-common%{?_isa} = %{version}-%{release} +%if %{roofitmp} +Requires: %{name}-roofit-multiprocess%{?_isa} = %{version}-%{release} +Requires: %{name}-roofit-zmq%{?_isa} = %{version}-%{release} +%endif Requires: %{name}-tree%{?_isa} = %{version}-%{release} # Package split / Library split (from roofit) Obsoletes: %{name}-roofit < 6.20.00 +# Dataframe helpers are now part of core +Obsoletes: %{name}-roofit-dataframe-helpers < 6.34.00 %description roofit-core The RooFit packages provide a toolkit for modeling the expected @@ -1524,11 +1282,10 @@ This package contains the core RooFit classes. %package roofit-more Summary: ROOT extension for modeling expected distributions - more -License: BSD +License: BSD-2-Clause Requires: %{name}-core%{?_isa} = %{version}-%{release} Requires: %{name}-mathcore%{?_isa} = %{version}-%{release} Requires: %{name}-mathmore%{?_isa} = %{version}-%{release} -Requires: %{name}-roofit-batchcompute%{?_isa} = %{version}-%{release} Requires: %{name}-roofit-core%{?_isa} = %{version}-%{release} # Package split / Library split (from roofit) Obsoletes: %{name}-roofit < 6.20.00 @@ -1550,10 +1307,8 @@ This package contains RooFit classes that use the mathmore library. %package roofit-batchcompute Summary: Optimized computation functions for PDFs +License: BSD-2-Clause Requires: %{name}-core%{?_isa} = %{version}-%{release} -Requires: %{name}-io%{?_isa} = %{version}-%{release} -Requires: %{name}-multiproc%{?_isa} = %{version}-%{release} -Requires: %{name}-net%{?_isa} = %{version}-%{release} %description roofit-batchcompute While fitting, a significant amount of time and processing power is @@ -1568,12 +1323,31 @@ multiple times for different vector instuction set architectures and the optimal code is executed during runtime, as a result of an automatic hardware detection mechanism that this library contains. -%package roofit-dataframe-helpers -Summary: RooFit DaraFrame helpers -License: BSD +%package roofit-hs3 +Summary: RooFit HS3 +License: BSD-2-Clause +Requires: %{name}-core%{?_isa} = %{version}-%{release} +Requires: %{name}-hist%{?_isa} = %{version}-%{release} +Requires: %{name}-hist-factory%{?_isa} = %{version}-%{release} +Requires: %{name}-matrix%{?_isa} = %{version}-%{release} +Requires: %{name}-roofit%{?_isa} = %{version}-%{release} +Requires: %{name}-roofit-core%{?_isa} = %{version}-%{release} +Requires: %{name}-roofit-jsoninterface%{?_isa} = %{version}-%{release} + +%description roofit-hs3 +When using RooFit, statistical models can be conveniently handled and +stored as a RooWorkspace. However, for the sake of interoperability +with other statistical frameworks, and also ease of manipulation, it +may be useful to store statistical models in text form. This library +sets out to achieve exactly that, exporting to and importing from JSON +and YML. + +%package roofit-jsoninterface +Summary: JSON interface to RooFit +License: BSD-2-Clause Requires: %{name}-core%{?_isa} = %{version}-%{release} -%description roofit-dataframe-helpers +%description roofit-jsoninterface The RooFit packages provide a toolkit for modeling the expected distribution of events in a physics analysis. Models can be used to perform likelihood fits, produce plots, and generate "toy Monte @@ -1586,28 +1360,43 @@ primarily targeted to the high-energy physicists using the ROOT analysis environment, but the general nature of the package make it suitable for adoption in different disciplines as well. -This package contains DaraFrame helper classes for RooFit +This package contains the JSON interface to RooFit. -%package roofit-hs3 -Summary: RooFit HS3 -License: BSD +%package roofit-codegen +Summary: Code generation support for RooFit +License: BSD-2-Clause Requires: %{name}-core%{?_isa} = %{version}-%{release} Requires: %{name}-hist-factory%{?_isa} = %{version}-%{release} Requires: %{name}-roofit%{?_isa} = %{version}-%{release} Requires: %{name}-roofit-core%{?_isa} = %{version}-%{release} -Requires: %{name}-roostats%{?_isa} = %{version}-%{release} -%description roofit-hs3 -When using RooFit, statistical models can be conveniently handled and -stored as a RooWorkspace. However, for the sake of interoperability -with other statistical frameworks, and also ease of manipulation, it -may be useful to store statistical models in text form. This library -sets out to achieve exactly that, exporting to and importing from JSON -and YML. +%description roofit-codegen +This package contains a library providing classes that implement +code generation support for RooFit. + +%if %{roofitmp} +%package roofit-multiprocess +Summary: Multi-process support for RooFit +License: BSD-2-Clause +Requires: %{name}-core%{?_isa} = %{version}-%{release} +Requires: %{name}-hist%{?_isa} = %{version}-%{release} +Requires: %{name}-roofit-zmq%{?_isa} = %{version}-%{release} + +%description roofit-multiprocess +This package contains a library providing classes that implement +mult-process support for RooFit. + +%package roofit-zmq +Summary: ZeroMQ interface library for RooFit +License: BSD-2-Clause + +%description roofit-zmq +This package contains a helper library used by RooFit::MultiProcess to +interface to the ZeroMQ library. +%endif %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} @@ -1626,26 +1415,54 @@ Obsoletes: %{name}-roofit < 6.20.00 RooStats is a package containing statistical tools built on top of RooFit. -%package sql-mysql -Summary: MySQL client plugin for ROOT +%package hist-factory +Summary: RooFit PDFs from ROOT histograms Requires: %{name}-core%{?_isa} = %{version}-%{release} -Requires: %{name}-net%{?_isa} = %{version}-%{release} +Requires: %{name}-hist%{?_isa} = %{version}-%{release} +Requires: %{name}-io%{?_isa} = %{version}-%{release} +Requires: %{name}-io-xmlparser%{?_isa} = %{version}-%{release} +Requires: %{name}-roofit%{?_isa} = %{version}-%{release} +Requires: %{name}-roofit-core%{?_isa} = %{version}-%{release} +Requires: %{name}-roostats%{?_isa} = %{version}-%{release} -%description sql-mysql -This package contains the MySQL plugin for ROOT. This plugin -provides a thin client (interface) to MySQL servers. Using this -client, one can obtain information from a MySQL database into the -ROOT environment. +%description hist-factory +Create RooFit probability density functions from ROOT histograms. -%package sql-odbc -Summary: ODBC plugin for ROOT +%package xroofit +Summary: Extra tools for RooFit projects +License: BSD-2-Clause Requires: %{name}-core%{?_isa} = %{version}-%{release} -Requires: %{name}-net%{?_isa} = %{version}-%{release} +Requires: %{name}-graf%{?_isa} = %{version}-%{release} +Requires: %{name}-graf-gpad%{?_isa} = %{version}-%{release} +Requires: %{name}-gui%{?_isa} = %{version}-%{release} +Requires: %{name}-gui-fitpanel%{?_isa} = %{version}-%{release} +Requires: %{name}-gui-ged%{?_isa} = %{version}-%{release} +Requires: %{name}-hist%{?_isa} = %{version}-%{release} +Requires: %{name}-hist-factory%{?_isa} = %{version}-%{release} +Requires: %{name}-io%{?_isa} = %{version}-%{release} +Requires: %{name}-mathcore%{?_isa} = %{version}-%{release} +Requires: %{name}-matrix%{?_isa} = %{version}-%{release} +Requires: %{name}-roofit%{?_isa} = %{version}-%{release} +Requires: %{name}-roofit-core%{?_isa} = %{version}-%{release} +Requires: %{name}-roofit-hs3%{?_isa} = %{version}-%{release} +Requires: %{name}-roostats%{?_isa} = %{version}-%{release} +Requires: %{name}-tree%{?_isa} = %{version}-%{release} -%description sql-odbc -This package contains the ODBC (Open DataBase Connectivity) plugin -for ROOT, that allows transparent access to any kind of database that -supports the ODBC protocol. +%description xroofit +The RooFit packages provide a toolkit for modeling the expected +distribution of events in a physics analysis. Models can be used to +perform likelihood fits, produce plots, and generate "toy Monte +Carlo" samples for various studies. The RooFit tools are integrated +with the object-oriented and interactive ROOT graphical environment. + +RooFit has been developed for the BaBar collaboration, a high energy +physics experiment at the Stanford Linear Accelerator Center, and is +primarily targeted to the high-energy physicists using the ROOT +analysis environment, but the general nature of the package make it +suitable for adoption in different disciplines as well. + +This package contains extra tools for RooFit projects. +%endif %package sql-sqlite Summary: Sqlite client plugin for ROOT @@ -1658,20 +1475,9 @@ provides a thin client (interface) to sqlite servers. Using this client, one can obtain information from a sqlite database into the ROOT environment. -%package sql-pgsql -Summary: PostgreSQL client plugin for ROOT -Requires: %{name}-core%{?_isa} = %{version}-%{release} -Requires: %{name}-net%{?_isa} = %{version}-%{release} - -%description sql-pgsql -This package contains the PostGreSQL plugin for ROOT. This plugin -provides a thin client (interface) to PostGreSQL servers. Using this -client, one can obtain information from a PostGreSQL database into the -ROOT environment. - %package tmva Summary: Toolkit for multivariate data analysis -License: BSD +License: BSD-3-Clause Requires: %{name}-core%{?_isa} = %{version}-%{release} Requires: %{name}-graf%{?_isa} = %{version}-%{release} Requires: %{name}-graf-gpad%{?_isa} = %{version}-%{release} @@ -1686,6 +1492,8 @@ Requires: %{name}-multiproc%{?_isa} = %{version}-%{release} Requires: %{name}-net%{?_isa} = %{version}-%{release} Requires: %{name}-tree%{?_isa} = %{version}-%{release} Requires: %{name}-tree-player%{?_isa} = %{version}-%{release} +# Library split (tmva-utils from tmva) +Obsoletes: %{name}-tmva < 6.28.08 %description tmva The Toolkit for Multivariate Analysis (TMVA) provides a @@ -1707,20 +1515,35 @@ evaluation). In addition all these methods can be tested in parallel, and hence their performance on a particular data set may easily be compared. +%if %{dataframe} +%package tmva-utils +Summary: Toolkit for multivariate data analysis (dataframe utilities) +License: BSD-3-Clause +Requires: %{name}-core%{?_isa} = %{version}-%{release} +Requires: %{name}-io%{?_isa} = %{version}-%{release} +# Library split (tmva-utils from tmva) +Obsoletes: %{name}-tmva < 6.28.08 + +%description tmva-utils +TMVA utilities using dataframe. +%endif + %package tmva-python Summary: Toolkit for multivariate data analysis (Python) -License: BSD +License: BSD-3-Clause Requires: %{name}-core%{?_isa} = %{version}-%{release} Requires: %{name}-tmva%{?_isa} = %{version}-%{release} Requires: %{name}-tmva-sofie%{?_isa} = %{version}-%{release} +Requires: %{name}-tree%{?_isa} = %{version}-%{release} Requires: python%{python3_pkgversion}-numpy %description tmva-python Python integration with TMVA. +%if %{rrr} %package tmva-r Summary: Toolkit for multivariate data analysis (R) -License: BSD +License: BSD-3-Clause Requires: %{name}-core%{?_isa} = %{version}-%{release} Requires: %{name}-matrix%{?_isa} = %{version}-%{release} Requires: %{name}-r%{?_isa} = %{version}-%{release} @@ -1728,10 +1551,13 @@ Requires: %{name}-tmva%{?_isa} = %{version}-%{release} %description tmva-r R integration with TMVA. +%endif %package tmva-sofie Summary: ROOT/TMVA SOFIE (System for Optimized Fast Inference code Emit) +License: BSD-3-Clause Requires: %{name}-core%{?_isa} = %{version}-%{release} +Requires: %{name}-io%{?_isa} = %{version}-%{release} %description tmva-sofie ROOT/TMVA SOFIE (System for Optimized Fast Inference code Emit) @@ -1743,6 +1569,7 @@ produces C++ header files that can be included and utilized in a %if %{tmvasofieparser} %package tmva-sofie-parser Summary: ROOT/TMVA SOFIE Parsers +License: BSD-3-Clause AND MIT Requires: %{name}-core%{?_isa} = %{version}-%{release} Requires: %{name}-tmva-sofie%{?_isa} = %{version}-%{release} @@ -1752,7 +1579,7 @@ Parsers for ROOT/TMVA SOFIE %package tmva-gui Summary: Toolkit for multivariate data analysis GUI -License: BSD +License: BSD-3-Clause Requires: %{name}-core%{?_isa} = %{version}-%{release} Requires: %{name}-graf%{?_isa} = %{version}-%{release} Requires: %{name}-graf-gpad%{?_isa} = %{version}-%{release} @@ -1762,6 +1589,7 @@ Requires: %{name}-io%{?_isa} = %{version}-%{release} Requires: %{name}-io-xml%{?_isa} = %{version}-%{release} Requires: %{name}-matrix%{?_isa} = %{version}-%{release} Requires: %{name}-tmva%{?_isa} = %{version}-%{release} +Requires: %{name}-tree%{?_isa} = %{version}-%{release} Requires: %{name}-tree-viewer%{?_isa} = %{version}-%{release} %description tmva-gui @@ -1776,6 +1604,7 @@ Requires: %{name}-net%{?_isa} = %{version}-%{release} %description tree This package contains the Tree library for ROOT. +%if %{dataframe} %package tree-dataframe Summary: A high level interface to ROOT trees Requires: %{name}-core%{?_isa} = %{version}-%{release} @@ -1783,9 +1612,7 @@ Requires: %{name}-hist%{?_isa} = %{version}-%{release} Requires: %{name}-io%{?_isa} = %{version}-%{release} Requires: %{name}-mathcore%{?_isa} = %{version}-%{release} Requires: %{name}-tree%{?_isa} = %{version}-%{release} -%if %{root7} Requires: %{name}-tree-ntuple%{?_isa} = %{version}-%{release} -%endif Requires: %{name}-tree-player%{?_isa} = %{version}-%{release} Requires: %{name}-vecops%{?_isa} = %{version}-%{release} # Library split (tree-dataframe and vecops from tree-player) @@ -1793,6 +1620,7 @@ Obsoletes: %{name}-tree-player < 6.14.00 %description tree-dataframe This package contains a high level interface to ROOT trees. +%endif %package tree-player Summary: Library to loop over a ROOT tree @@ -1828,6 +1656,17 @@ Requires: %{name}-tree-player%{?_isa} = %{version}-%{release} %description tree-viewer This package contains a plugin for browsing a ROOT tree in ROOT. +%package tree-webviewer +Summary: ROOT tree web viewer library for ROOT +Requires: %{name}-core%{?_isa} = %{version}-%{release} +Requires: %{name}-gui-webdisplay%{?_isa} = %{version}-%{release} +Requires: %{name}-hist%{?_isa} = %{version}-%{release} +Requires: %{name}-io%{?_isa} = %{version}-%{release} +Requires: %{name}-tree%{?_isa} = %{version}-%{release} + +%description tree-webviewer +This package contains a plugin for browsing a ROOT tree in a web GUI. + %package unfold Summary: Distribution unfolding Requires: %{name}-core%{?_isa} = %{version}-%{release} @@ -1847,39 +1686,26 @@ Requires: python%{python3_pkgversion}-%{name} = %{version}-%{release} The ROOT command line utilities is a set of scripts for common tasks written in python. -%package notebook -Summary: Static files for the Jupyter ROOT Notebook -BuildArch: noarch -Requires: %{name}-core = %{version}-%{release} -Requires: js-jsroot >= 6 -%if %{?fedora}%{!?fedora:0} >= 26 -# jupyter-notebook not available in -# Fedora <= 25 or RHEL/EPEL - some functionality missing -Requires: jupyter-notebook -%endif - -%description notebook -Javascript and style files for the Jupyter ROOT Notebook. - -%if %{webgui} %package gui-webdisplay -Summary: Web display (ROOT 7) +Summary: Web display for ROOT Requires: %{name}-core%{?_isa} = %{version}-%{release} +Requires: %{name}-io%{?_isa} = %{version}-%{release} Requires: %{name}-mathcore%{?_isa} = %{version}-%{release} +Requires: %{name}-net%{?_isa} = %{version}-%{release} Requires: %{name}-net-http%{?_isa} = %{version}-%{release} %description gui-webdisplay -This package contains a web display extension for ROOT 7. +This package contains a web display extension for ROOT. -%ifarch %{qt5_qtwebengine_arches} -%package gui-qt5webdisplay -Summary: Qt5 Web display (ROOT 7) +%ifarch %{qt6_qtwebengine_arches} +%package gui-qt6webdisplay +Summary: Qt6 Web display Requires: %{name}-core%{?_isa} = %{version}-%{release} Requires: %{name}-gui-webdisplay%{?_isa} = %{version}-%{release} Requires: %{name}-net-http%{?_isa} = %{version}-%{release} -%description gui-qt5webdisplay -This package contains a Qt5 web display extension for ROOT 7. +%description gui-qt6webdisplay +This package contains a Qt6 web display extension for ROOT. %endif %package gui-webgui6 @@ -1887,14 +1713,92 @@ Summary: Web based GUI for ROOT Requires: %{name}-core%{?_isa} = %{version}-%{release} Requires: %{name}-graf%{?_isa} = %{version}-%{release} Requires: %{name}-graf-gpad%{?_isa} = %{version}-%{release} -Requires: %{name}-gui%{?_isa} = %{version}-%{release} Requires: %{name}-gui-webdisplay%{?_isa} = %{version}-%{release} Requires: %{name}-hist%{?_isa} = %{version}-%{release} Requires: %{name}-io%{?_isa} = %{version}-%{release} +Requires: %{name}-net-http%{?_isa} = %{version}-%{release} %description gui-webgui6 This package provides a Web based GUI for ROOT. -%endif + +%package gui-browsable +Summary: ROOT GUI browsable providers +Requires: %{name}-core%{?_isa} = %{version}-%{release} +Requires: %{name}-geom%{?_isa} = %{version}-%{release} +Requires: %{name}-gui-treemap%{?_isa} = %{version}-%{release} +Requires: %{name}-hist%{?_isa} = %{version}-%{release} +Requires: %{name}-io%{?_isa} = %{version}-%{release} +Requires: %{name}-tree%{?_isa} = %{version}-%{release} +Requires: %{name}-tree-ntuple%{?_isa} = %{version}-%{release} +Requires: %{name}-tree-ntuple-browse%{?_isa} = %{version}-%{release} +# Package split (gui-browsable-v7 from gui-browsable) +Obsoletes: %{name}-gui-browsable < 6.32.06 + +%description gui-browsable +This package contains ROOT GUI browsable providers. + +%package gui-browserv7 +Summary: ROOT file browser and browser widgets +Requires: %{name}-core%{?_isa} = %{version}-%{release} +Requires: %{name}-geom%{?_isa} = %{version}-%{release} +Requires: %{name}-geom-webviewer%{?_isa} = %{version}-%{release} +Requires: %{name}-graf-gpad%{?_isa} = %{version}-%{release} +Requires: %{name}-gui-browsable%{?_isa} = %{version}-%{release} +Requires: %{name}-gui-webdisplay%{?_isa} = %{version}-%{release} +Requires: %{name}-gui-webgui6%{?_isa} = %{version}-%{release} +Requires: %{name}-io%{?_isa} = %{version}-%{release} +Requires: %{name}-tree%{?_isa} = %{version}-%{release} +Requires: %{name}-tree-webviewer%{?_isa} = %{version}-%{release} +# Package split (gui-browserv7-v7 from gui-browserv7) +Obsoletes: %{name}-gui-browserv7 < 6.32.06 + +%description gui-browserv7 +This package contains the ROOT file browser (RBrowser) and browser widgets. + +%package geom-webviewer +Summary: Geometry web viewer library for ROOT +Requires: %{name}-core%{?_isa} = %{version}-%{release} +Requires: %{name}-geom%{?_isa} = %{version}-%{release} +Requires: %{name}-geom-painter%{?_isa} = %{version}-%{release} +Requires: %{name}-graf3d-csg%{?_isa} = %{version}-%{release} +Requires: %{name}-gui-webdisplay%{?_isa} = %{version}-%{release} +Requires: %{name}-io%{?_isa} = %{version}-%{release} + +%description geom-webviewer +This package contains a library for viewing geometries in a web GUI. + +%package tree-ntuple +Summary: The new ROOT n-tuple class +Requires: %{name}-core%{?_isa} = %{version}-%{release} +Requires: %{name}-io%{?_isa} = %{version}-%{release} + +%description tree-ntuple +This package contains the new ROOT n-tuple class (RNTuple). + +%package tree-ntuple-browse +Summary: N-Tuple browsing library for ROOT +Requires: %{name}-core%{?_isa} = %{version}-%{release} +Requires: %{name}-graf%{?_isa} = %{version}-%{release} +Requires: %{name}-graf-gpad%{?_isa} = %{version}-%{release} +Requires: %{name}-gui-treemap%{?_isa} = %{version}-%{release} +Requires: %{name}-hist%{?_isa} = %{version}-%{release} +Requires: %{name}-io%{?_isa} = %{version}-%{release} +Requires: %{name}-tree-ntuple%{?_isa} = %{version}-%{release} +Requires: %{name}-tree-ntuple-utils%{?_isa} = %{version}-%{release} + +%description tree-ntuple-browse +This package contains a library for browsing n-tuples. + +%package tree-ntuple-utils +Summary: Ntuple utility library +Requires: %{name}-core%{?_isa} = %{version}-%{release} +Requires: %{name}-hist%{?_isa} = %{version}-%{release} +Requires: %{name}-io%{?_isa} = %{version}-%{release} +Requires: %{name}-tree%{?_isa} = %{version}-%{release} +Requires: %{name}-tree-ntuple%{?_isa} = %{version}-%{release} + +%description tree-ntuple-utils +This package contains utility functions for ntuples. %if %{root7} %package graf-gpadv7 @@ -1916,9 +1820,10 @@ This package contains graphics primitives for ROOT 7 Summary: Event display library for ROOT (ROOT 7) Requires: %{name}-core%{?_isa} = %{version}-%{release} Requires: %{name}-geom%{?_isa} = %{version}-%{release} +Requires: %{name}-geom-webviewer%{?_isa} = %{version}-%{release} Requires: %{name}-graf%{?_isa} = %{version}-%{release} +Requires: %{name}-graf3d%{?_isa} = %{version}-%{release} Requires: %{name}-graf3d-csg%{?_isa} = %{version}-%{release} -Requires: %{name}-gui-browserv7%{?_isa} = %{version}-%{release} Requires: %{name}-gui-webdisplay%{?_isa} = %{version}-%{release} Requires: %{name}-hist%{?_isa} = %{version}-%{release} Requires: %{name}-io%{?_isa} = %{version}-%{release} @@ -1932,33 +1837,33 @@ Requires: %{name}-tree-player%{?_isa} = %{version}-%{release} %description graf3d-eve7 This package contains a library for defining event displays in ROOT 7. -%package gui-browsable -Summary: GUI browsable (ROOT 7) +%package gui-browsable-v7 +Summary: Additional ROOT GUI browsable providers (ROOT 7) Requires: %{name}-core%{?_isa} = %{version}-%{release} Requires: %{name}-graf-gpadv7%{?_isa} = %{version}-%{release} +Requires: %{name}-gui-browsable%{?_isa} = %{version}-%{release} +Requires: %{name}-gui-treemap%{?_isa} = %{version}-%{release} Requires: %{name}-hist%{?_isa} = %{version}-%{release} -Requires: %{name}-hist-draw%{?_isa} = %{version}-%{release} -Requires: %{name}-io%{?_isa} = %{version}-%{release} Requires: %{name}-tree%{?_isa} = %{version}-%{release} Requires: %{name}-tree-ntuple%{?_isa} = %{version}-%{release} +Requires: %{name}-tree-ntuple-browse%{?_isa} = %{version}-%{release} +# Package split (gui-browsable-v7 from gui-browsable) +Obsoletes: %{name}-gui-browsable < 6.32.06 -%description gui-browsable -This package contains GUI browsable components for ROOT 7. +%description gui-browsable-v7 +This package contains additional ROOT GUI browsable providers for ROOT 7. -%package gui-browserv7 -Summary: Browser (ROOT 7) +%package gui-browserv7-v7 +Summary: Additional ROOT browser widgets (ROOT 7) Requires: %{name}-core%{?_isa} = %{version}-%{release} -Requires: %{name}-geom%{?_isa} = %{version}-%{release} -Requires: %{name}-graf-gpad%{?_isa} = %{version}-%{release} Requires: %{name}-graf-gpadv7%{?_isa} = %{version}-%{release} -Requires: %{name}-graf3d-eve7%{?_isa} = %{version}-%{release} Requires: %{name}-gui-browsable%{?_isa} = %{version}-%{release} -Requires: %{name}-gui-webdisplay%{?_isa} = %{version}-%{release} -Requires: %{name}-gui-webgui6%{?_isa} = %{version}-%{release} -Requires: %{name}-io%{?_isa} = %{version}-%{release} +Requires: %{name}-gui-browserv7%{?_isa} = %{version}-%{release} +# Package split (gui-browserv7-v7 from gui-browserv7) +Obsoletes: %{name}-gui-browserv7 < 6.32.06 -%description gui-browserv7 -This package contains a file browser for ROOT 7. +%description gui-browserv7-v7 +This package contains additional ROOT browser widgets for ROOT 7. %package gui-canvaspainter Summary: Canvas painter (ROOT 7) @@ -1974,6 +1879,7 @@ This package contains a canvas painter extension for ROOT 7 Summary: GUI element for fits in ROOT (ROOT 7) Requires: %{name}-core%{?_isa} = %{version}-%{release} Requires: %{name}-graf-gpad%{?_isa} = %{version}-%{release} +Requires: %{name}-graf-gpadv7%{?_isa} = %{version}-%{release} Requires: %{name}-gui-webdisplay%{?_isa} = %{version}-%{release} Requires: %{name}-hist%{?_isa} = %{version}-%{release} Requires: %{name}-io%{?_isa} = %{version}-%{release} @@ -1984,167 +1890,89 @@ This package contains a library to show a pop-up dialog when fitting various kinds of data. %package histv7 -Summary: Histogram library for ROOT (ROOT 7) +Summary: Histogram library for ROOT 7 Requires: %{name}-core%{?_isa} = %{version}-%{release} %description histv7 This package contains a library for histogramming in ROOT 7. - -%package hist-draw -Summary: Histogram drawing (ROOT 7) -Requires: %{name}-core%{?_isa} = %{version}-%{release} -Requires: %{name}-graf-gpadv7%{?_isa} = %{version}-%{release} - -%description hist-draw -This package contains an histogram drawing extension for ROOT 7. - -%package tree-ntuple -Summary: Ntuple (ROOT 7) -Requires: %{name}-core%{?_isa} = %{version}-%{release} -Requires: %{name}-io%{?_isa} = %{version}-%{release} -Requires: %{name}-vecops%{?_isa} = %{version}-%{release} - -%description tree-ntuple -This package contains an ntuple extension for ROOT 7. %endif %prep -%setup -q -a 1 +%setup -q -a 1 -a 9 -%patch0 -p1 -%patch1 -p1 -%patch2 -p1 -%patch3 -p1 -%patch4 -p1 -%patch5 -p1 -%patch6 -p1 -%patch7 -p1 -%patch8 -p1 -%patch9 -p1 -%patch10 -p1 -%patch11 -p1 -%patch12 -p1 -%patch13 -p1 -%patch14 -p1 -%patch15 -p1 -%patch16 -p1 -%patch17 -p1 -%patch18 -p1 -%patch19 -p1 -%patch20 -p1 -%patch21 -p1 -%patch22 -p1 -%patch23 -p1 -%patch24 -p1 -%patch25 -p1 -%patch26 -p1 -%patch27 -p1 -%patch28 -p1 -%patch29 -p1 -%patch30 -p1 -%patch31 -p1 -%patch32 -p1 -%patch33 -p1 -%patch34 -p1 -%patch35 -p1 -%patch36 -p1 -%patch37 -p1 +%patch -P0 -p1 +%patch -P1 -p1 +%patch -P2 -p1 +%patch -P3 -p1 +%patch -P4 -p1 +%patch -P5 -p1 +%patch -P6 -p1 +%patch -P7 -p1 +%patch -P8 -p1 +%patch -P9 -p1 +%patch -P10 -p1 +%patch -P11 -p1 +%patch -P12 -p1 +%patch -P13 -p1 +%patch -P14 -p1 +%patch -P15 -p1 +%patch -P16 -p1 +%patch -P17 -p1 # Remove bundled sources in order to be sure they are not used # * afterimage -rm -rf graf2d/asimage/src/libAfterImage +rm -rf graf2d/asimage/src/libAfterImage/{libjpeg,libpng,libungif,zlib} +sed '/zlib\/zlib.h/d' -i graf2d/asimage/src/libAfterImage/.depend # * ftgl rm -rf graf3d/ftgl/src graf3d/ftgl/inc # * freetype rm -rf graf2d/freetype/src -# * davix, glew, lz4, nlohmann, openssl, pcre, tbb, xxhash, zlib, zstd -rm -rf builtins/davix +# * glew, lz4, nlohmann, pcre, xxhash, zlib, zstd rm -rf builtins/glew rm -rf builtins/lz4 +%if ! %{bundlejson} rm -rf builtins/nlohmann -rm -rf builtins/openssl +%endif rm -rf builtins/pcre -rm -rf builtins/tbb -rm -rf builtins/xrootd rm -rf builtins/xxhash -rm -rf builtins/zeromq rm -rf builtins/zlib rm -rf builtins/zstd # * lzma -rm -rf core/lzma/src/*.tar.gz +rm core/lzma/src/*.tar.gz # * gl2ps rm graf3d/gl/src/gl2ps.cxx graf3d/gl/src/gl2ps/gl2ps.h # * unuran -rm -rf math/unuran/src/*.tar.gz -# * xrootd-private-devel headers -rm -rf proof/xrdinc/* +rm math/unuran/src/*.tar.gz # * x11 extension headers rm -rf graf2d/x11/inc/X11 -# * mathjax -rm -rf documentation/doxygen/mathjax.tar.gz # * jsroot rm -rf js/[^f]* js/files/draw.htm js/files/online.htm -# Remove unsupported man page macros -sed -e '/^\.UR/d' -e '/^\.UE/d' -i man/man1/* - -# Remove pre-minified script and style files -rm etc/notebook/JsMVA/js/*.min.js -rm etc/notebook/JsMVA/css/*.min.css - -%if %{?rhel}%{!?rhel:0} == 7 || %{?rhel}%{!?rhel:0} == 8 -# Allow older json on EPEL 7/8 -sed 's!nlohmann_json 3.9!nlohmann_json 3.6!' \ - -i cmake/modules/SearchInstalledSoftware.cmake -%endif - -%if %{?rhel}%{!?rhel:0} == 7 -# On EPEL 7 disable test that fails to compile -# Brace initialization list is ambiguous with old compiler -sed 's!.*dataframe_datasetspec!### &!' -i tree/dataframe/test/CMakeLists.txt -%endif +# Additional documentation +install -p -m 644 %{SOURCE7} bindings/jupyroot %build -%if %{?rhel}%{!?rhel:0} == 7 -. /opt/rh/devtoolset-8/enable -%endif - +%if %{?rhel}%{!?rhel:0} == 10 # This package triggers a fault in LLVM when LTO is enabled. Until LLVM # is analyzed and fixed, disable LTO %define _lto_cflags %{nil} +%endif unset QTDIR unset QTLIB 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) -LDFLAGS="-Wl,--as-needed %{?__global_ldflags}" - -%cmake3 \ +%cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DCMAKE_INSTALL_PREFIX:PATH=%{_prefix} \ -DCMAKE_INSTALL_LIBDIR:PATH=%{_libdir}/%{name} \ + -DCMAKE_INSTALL_PYTHONDIR:PATH=%{python3_sitearch} \ -DCMAKE_INSTALL_SYSCONFDIR:PATH=%{_datadir}/%{name} \ -DCMAKE_INSTALL_DOCDIR:PATH=%{_pkgdocdir} \ - -DCMAKE_INSTALL_ELISPDIR:PATH=%{_emacs_sitelispdir}/%{name} \ + -DCMAKE_SKIP_INSTALL_RPATH:BOOL=ON \ + -DPython3_EXECUTABLE:PATH=%{__python3} \ -Dgnuinstall:BOOL=ON \ - -Dbuiltin_afterimage:BOOL=OFF \ -Dbuiltin_cfitsio:BOOL=OFF \ + -Dbuiltin_civetweb:BOOL=ON \ -Dbuiltin_clang:BOOL=ON \ -Dbuiltin_cling:BOOL=ON \ -Dbuiltin_cppzmq:BOOL=OFF \ @@ -2152,17 +1980,24 @@ LDFLAGS="-Wl,--as-needed %{?__global_ldflags}" -Dbuiltin_fftw3:BOOL=OFF \ -Dbuiltin_freetype:BOOL=OFF \ -Dbuiltin_ftgl:BOOL=OFF \ + -Dbuiltin_gif:BOOL=OFF \ -Dbuiltin_gl2ps:BOOL=OFF \ -Dbuiltin_glew:BOOL=OFF \ -Dbuiltin_gsl:BOOL=OFF \ -Dbuiltin_gtest:BOOL=OFF \ + -Dbuiltin_jpeg:BOOL=OFF \ -Dbuiltin_llvm:BOOL=ON \ -Dbuiltin_lz4:BOOL=OFF \ -Dbuiltin_lzma:BOOL=OFF \ +%if %{bundlejson} + -Dbuiltin_nlohmannjson:BOOL=ON \ +%else -Dbuiltin_nlohmannjson:BOOL=OFF \ +%endif -Dbuiltin_openssl:BOOL=OFF \ -Dbuiltin_openui5:BOOL=ON \ -Dbuiltin_pcre:BOOL=OFF \ + -Dbuiltin_png:BOOL=OFF \ -Dbuiltin_tbb:BOOL=OFF \ -Dbuiltin_unuran:BOOL=OFF \ -Dbuiltin_vc:BOOL=OFF \ @@ -2173,74 +2008,79 @@ LDFLAGS="-Wl,--as-needed %{?__global_ldflags}" -Dbuiltin_zeromq:BOOL=OFF \ -Dbuiltin_zlib:BOOL=OFF \ -Dbuiltin_zstd:BOOL=OFF \ - -Dalien:BOOL=OFF \ +%ifnarch %{ix86} %{arm} + -Darrow:BOOL=ON \ +%else -Darrow:BOOL=OFF \ +%endif -Dasimage:BOOL=ON \ + -Dasimage_tiff:BOOL=ON \ -Dccache:BOOL=OFF \ -Ddistcc:BOOL=OFF \ -Dcefweb:BOOL=OFF \ - -Dclad:BOOL=OFF \ + -Dcheck_connection:BOOL=OFF \ + -Dclad:BOOL=ON \ + -DCLAD_SOURCE_DIR:PATH=${PWD}/clad-2.2 \ -Dcocoa:BOOL=OFF \ -Dcuda:BOOL=OFF \ - -Dcxxmodules:BOOL=OFF \ -Ddaos:BOOL=OFF \ +%if %{dataframe} -Ddataframe:BOOL=ON \ +%else + -Ddataframe:BOOL=OFF \ +%endif -Ddavix:BOOL=ON \ -Ddcache:BOOL=ON \ -Ddev:BOOL=OFF \ - -Dexceptions:BOOL=ON \ + -Dexperimental_adaptivecpp=OFF \ + -Dexperimental_genvectorx=OFF \ -Dfcgi:BOOL=ON \ -Dfftw3:BOOL=ON \ -DFIREFOX_EXECUTABLE:PATH=/usr/bin/firefox \ -Dfitsio:BOOL=ON \ -Dfortran:BOOL=ON \ -Dgdml:BOOL=ON \ -%if %{gfal2} - -Dgfal:BOOL=ON \ -%else - -Dgfal:BOOL=OFF \ -%endif - -Dgsl_shared:BOOL=ON \ + -Dgeom:BOOL=ON \ + -Dgeombuilder:BOOL=ON \ -Dgviz:BOOL=ON \ -Dhttp:BOOL=ON \ -%if %{tbb} -Dimt:BOOL=ON \ -%else - -Dimt:BOOL=OFF \ -%endif - -Djemalloc:BOOL=OFF \ -Dlibcxx:BOOL=OFF \ -Dmathmore:BOOL=ON \ -Dmemory_termination:BOOL=OFF \ - -Dminuit2:BOOL=ON \ - -Dmlp:BOOL=ON \ - -Dmonalisa:BOOL=OFF \ + -Dminuit2_mpi:BOOL=OFF \ + -Dminuit2_omp:BOOL=ON \ -Dmpi:BOOL=OFF \ - -Dmysql:BOOL=ON \ - -Dodbc:BOOL=ON \ -Dopengl:BOOL=ON \ - -Doracle:BOOL=OFF \ - -Dpgsql:BOOL=ON \ - -Dpythia6:BOOL=OFF \ - -Dpythia8:BOOL=ON \ -Dpyroot:BOOL=ON \ - -Dpyroot_legacy:BOOL=OFF \ -%ifarch %{qt5_qtwebengine_arches} - -Dqt5web:BOOL=ON \ + -Dpythia8:BOOL=ON \ +%ifarch %{qt6_qtwebengine_arches} + -Dqt6web:BOOL=ON \ %else - -Dqt5web:BOOL=OFF \ -%endif -Dqt6web:BOOL=OFF \ +%endif +%if %{rrr} -Dr:BOOL=ON \ +%else + -Dr:BOOL=OFF \ +%endif +%if %{roofit} -Droofit:BOOL=ON \ +%if %{roofitmp} + -Droofit_multiprocess:BOOL=ON \ +%else -Droofit_multiprocess:BOOL=OFF \ +%endif +%else + -Droofit:BOOL=OFF \ + -Droofit_multiprocess:BOOL=OFF \ +%endif -Droofit_hs3_ryml:BOOL=OFF \ %if %{root7} -Droot7:BOOL=ON \ %else -Droot7:BOOL=OFF \ %endif - -Drpath:BOOL=OFF \ -Druby:BOOL=OFF \ -Druntime_cxxmodules:BOOL=OFF \ -Dshadowpw:BOOL=ON \ @@ -2249,46 +2089,37 @@ LDFLAGS="-Wl,--as-needed %{?__global_ldflags}" -Dspectrum:BOOL=ON \ -Dsqlite:BOOL=ON \ -Dssl:BOOL=ON \ - -Dtcmalloc:BOOL=OFF \ + -Dthisroot_scripts:BOOL=OFF \ -Dtmva:BOOL=ON \ -%if %{tbb} -Dtmva-cpu:BOOL=ON \ -%else - -Dtmva-cpu:BOOL=OFF \ -%endif + -Dtmva-cudnn:BOOL=OFF \ -Dtmva-gpu:BOOL=OFF \ -Dtmva-pymva:BOOL=ON \ +%if %{rrr} -Dtmva-rmva:BOOL=ON \ +%else + -Dtmva-rmva:BOOL=OFF \ +%endif %if %{tmvasofieparser} -Dtmva-sofie:BOOL=ON \ %else -Dtmva-sofie:BOOL=OFF \ %endif + -Dtpython:BOOL=ON \ + -Dunfold:BOOL=ON \ -Dunuran:BOOL=ON \ -%if %{?fedora}%{!?fedora:0} -During:BOOL=ON \ -%else - -During:BOOL=OFF \ -%endif -Dvc:BOOL=OFF \ -Dvdt:BOOL=OFF \ -Dveccore:BOOL=OFF \ -Dvecgeom:BOOL=OFF \ -%if %{webgui} -Dwebgui:BOOL=ON \ -%else - -Dwebgui:BOOL=OFF \ -%endif -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 \ + -Dtestsupport:BOOL=ON \ -Dtest_distrdf_pyspark:BOOL=OFF \ -Dtest_distrdf_dask:BOOL=OFF \ -Dclingtest:BOOL=OFF \ @@ -2296,14 +2127,13 @@ LDFLAGS="-Wl,--as-needed %{?__global_ldflags}" -Droottest:BOOL=OFF \ -Drootbench:BOOL=OFF \ -Dasan:BOOL=OFF -%cmake3_build +%cmake_build %install -%cmake3_install +%cmake_install -# Do emacs byte compilation -emacs -batch -no-site-file -f batch-byte-compile \ - %{buildroot}%{_emacs_sitelispdir}/%{name}/*.el +# Let rpm redo the python byte compilation +find %{buildroot}%{python3_sitearch} -depth -type d -name __pycache__ -exec rm -r {} ';' # Install desktop entry and icon mkdir -p %{buildroot}%{_datadir}/applications @@ -2318,151 +2148,67 @@ install -p -m 644 %{SOURCE5} %{buildroot}%{_datadir}/mime/packages install -p -m 644 %{SOURCE6} \ %{buildroot}%{_datadir}/icons/hicolor/48x48/mimetypes -# Additional documentation -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}%{python3_sitearch}/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 -# These are installed (in libdir) by "make install" if CMAKE_BUILD_TYPE -# matches Debug or RelWithDebInfo mkdir -p %{buildroot}%{_datadir}/gdb/auto-load%{_libdir}/%{name} -install -p -m 644 build/gdbPrinters/libCore.so-gdb.py \ - %{buildroot}%{_datadir}/gdb/auto-load%{_libdir}/%{name}/libCore.so.%{version}-gdb.py -install -p -m 644 build/gdbPrinters/libRooFitCore.so-gdb.py \ - %{buildroot}%{_datadir}/gdb/auto-load%{_libdir}/%{name}/libRooFitCore.so.%{version}-gdb.py +mv %{buildroot}%{_libdir}/%{name}/*-gdb.py \ + %{buildroot}%{_datadir}/gdb/auto-load%{_libdir}/%{name} -# 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} \ - %{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} \ - %{buildroot}%{python2_sitearch}/libcppyy_backend%{python2_version_uscore}.so - -cp -pr %{buildroot}%{_libdir}/%{name}/ROOT %{buildroot}%{python2_sitearch} -mv %{buildroot}%{_libdir}/%{name}/libROOTPythonizations%{python2_version_uscore}.so.%{version} \ - %{buildroot}%{python2_sitearch}/libROOTPythonizations%{python2_version_uscore}.so -rm %{buildroot}%{_libdir}/%{name}/libROOTPythonizations%{python2_version_uscore}.so.%{libversion} -rm %{buildroot}%{_libdir}/%{name}/libROOTPythonizations%{python2_version_uscore}.so - -cp -pr %{buildroot}%{_libdir}/%{name}/JupyROOT %{buildroot}%{python2_sitearch} -mv %{buildroot}%{_libdir}/%{name}/libJupyROOT%{python2_version_uscore}.so.%{version} \ - %{buildroot}%{python2_sitearch}/libJupyROOT%{python2_version_uscore}.so -rm %{buildroot}%{_libdir}/%{name}/libJupyROOT%{python2_version_uscore}.so.%{libversion} -rm %{buildroot}%{_libdir}/%{name}/libJupyROOT%{python2_version_uscore}.so - -mkdir -p %{buildroot}%{python2_sitelib} -cp -pr %{buildroot}%{_libdir}/%{name}/JsMVA %{buildroot}%{python2_sitelib} - -# Create .egg-info files so that rpm auto-generates provides -echo 'Name: ROOT' > \ - %{buildroot}%{python2_sitearch}/ROOT-%{version}.egg-info -echo 'Version: %{version}' >> \ - %{buildroot}%{python2_sitearch}/ROOT-%{version}.egg-info -echo 'Name: JupyROOT' > \ - %{buildroot}%{python2_sitearch}/JupyROOT-%{version}.egg-info -echo 'Version: %{version}' >> \ - %{buildroot}%{python2_sitearch}/JupyROOT-%{version}.egg-info -echo 'Name: JsMVA' > \ - %{buildroot}%{python2_sitelib}/JsMVA-%{version}.egg-info -echo 'Version: %{version}' >> \ - %{buildroot}%{python2_sitelib}/JsMVA-%{version}.egg-info - -%endif - -# Move the python modules to sitearch/sitelib -mkdir -p %{buildroot}%{python3_sitearch} - -mv %{buildroot}%{_libdir}/%{name}/cppyy %{buildroot}%{python3_sitearch} -ln -s ../../root/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} \ - %{buildroot}%{python3_sitearch}/libcppyy_backend%{python3_version_uscore}.so - -mv %{buildroot}%{_libdir}/%{name}/ROOT %{buildroot}%{python3_sitearch} -mv %{buildroot}%{_libdir}/%{name}/libROOTPythonizations%{python3_version_uscore}.so.%{version} \ - %{buildroot}%{python3_sitearch}/libROOTPythonizations%{python3_version_uscore}%{python3_ext_suffix} -rm %{buildroot}%{_libdir}/%{name}/libROOTPythonizations%{python3_version_uscore}.so.%{libversion} -rm %{buildroot}%{_libdir}/%{name}/libROOTPythonizations%{python3_version_uscore}.so - -mv %{buildroot}%{_libdir}/%{name}/JupyROOT %{buildroot}%{python3_sitearch} -mv %{buildroot}%{_libdir}/%{name}/libJupyROOT%{python3_version_uscore}.so.%{version} \ - %{buildroot}%{python3_sitearch}/libJupyROOT%{python3_version_uscore}%{python3_ext_suffix} -rm %{buildroot}%{_libdir}/%{name}/libJupyROOT%{python3_version_uscore}.so.%{libversion} -rm %{buildroot}%{_libdir}/%{name}/libJupyROOT%{python3_version_uscore}.so +# Fix python extension suffix +mv %{buildroot}%{python3_sitearch}/ROOT/libROOTPythonizations.so \ + %{buildroot}%{python3_sitearch}/ROOT/libROOTPythonizations%{python3_ext_suffix} +mv %{buildroot}%{python3_sitearch}/cppyy/libcppyy.so \ + %{buildroot}%{python3_sitearch}/cppyy/libcppyy%{python3_ext_suffix} +# Move noarch python modules to sitelib +if [ "%{python3_sitelib}" != "%{python3_sitearch}" ] ; then mkdir -p %{buildroot}%{python3_sitelib} -mv %{buildroot}%{_libdir}/%{name}/JsMVA %{buildroot}%{python3_sitelib} +mv %{buildroot}%{python3_sitearch}/JupyROOT %{buildroot}%{python3_sitelib} %if %{distrdf} -mv %{buildroot}%{_libdir}/%{name}/DistRDF %{buildroot}%{python3_sitelib} +mv %{buildroot}%{python3_sitearch}/DistRDF %{buildroot}%{python3_sitelib} %endif +fi -# Create .egg-info files so that rpm auto-generates provides +# Create .dist-info files so that rpm auto-generates provides +mkdir %{buildroot}%{python3_sitearch}/ROOT-%{version}.dist-info echo 'Name: ROOT' > \ - %{buildroot}%{python3_sitearch}/ROOT-%{version}.egg-info + %{buildroot}%{python3_sitearch}/ROOT-%{version}.dist-info/METADATA echo 'Version: %{version}' >> \ - %{buildroot}%{python3_sitearch}/ROOT-%{version}.egg-info + %{buildroot}%{python3_sitearch}/ROOT-%{version}.dist-info/METADATA +mkdir %{buildroot}%{python3_sitelib}/JupyROOT-%{version}.dist-info echo 'Name: JupyROOT' > \ - %{buildroot}%{python3_sitearch}/JupyROOT-%{version}.egg-info + %{buildroot}%{python3_sitelib}/JupyROOT-%{version}.dist-info/METADATA echo 'Version: %{version}' >> \ - %{buildroot}%{python3_sitearch}/JupyROOT-%{version}.egg-info -echo 'Name: JsMVA' > \ - %{buildroot}%{python3_sitelib}/JsMVA-%{version}.egg-info -echo 'Version: %{version}' >> \ - %{buildroot}%{python3_sitelib}/JsMVA-%{version}.egg-info + %{buildroot}%{python3_sitelib}/JupyROOT-%{version}.dist-info/METADATA %if %{distrdf} +mkdir %{buildroot}%{python3_sitelib}/DistRDF-%{version}.dist-info echo 'Name: DistRDF' > \ - %{buildroot}%{python3_sitelib}/DistRDF-%{version}.egg-info + %{buildroot}%{python3_sitelib}/DistRDF-%{version}.dist-info/METADATA echo 'Version: %{version}' >> \ - %{buildroot}%{python3_sitelib}/DistRDF-%{version}.egg-info + %{buildroot}%{python3_sitelib}/DistRDF-%{version}.dist-info/METADATA %endif # Put jupyter stuff in the right places mkdir -p %{buildroot}%{_datadir}/jupyter/kernels -%if %{buildpy2} -cp -pr %{buildroot}%{_datadir}/%{name}/notebook/kernels/root \ - %{buildroot}%{_datadir}/jupyter/kernels/python2-jupyroot -sed -e 's/ROOT C++/& (Python 2)/' \ - -e 's!python[0-9]*\.[0-9]*!%{__python2}!' \ - -i %{buildroot}%{_datadir}/jupyter/kernels/python2-jupyroot/kernel.json -sed -e '/^\#!/d' \ - -i %{buildroot}%{python2_sitearch}/JupyROOT/kernel/rootkernel.py -%endif - cp -pr %{buildroot}%{_datadir}/%{name}/notebook/kernels/root \ %{buildroot}%{_datadir}/jupyter/kernels/python%{python3_pkgversion}-jupyroot sed -e 's/ROOT C++/& (Python 3)/' \ -e 's!python[0-9]*\.[0-9]*!%{__python3}!' \ -i %{buildroot}%{_datadir}/jupyter/kernels/python%{python3_pkgversion}-jupyroot/kernel.json sed -e '/^\#!/d' \ - -i %{buildroot}%{python3_sitearch}/JupyROOT/kernel/rootkernel.py + -i %{buildroot}%{python3_sitelib}/JupyROOT/kernel/rootkernel.py rm -rf %{buildroot}%{_datadir}/%{name}/notebook/custom rm -rf %{buildroot}%{_datadir}/%{name}/notebook/html rm -rf %{buildroot}%{_datadir}/%{name}/notebook/kernels rm %{buildroot}%{_datadir}/%{name}/notebook/jupyter_notebook_config.py +rmdir %{buildroot}%{_datadir}/%{name}/notebook # Replace the rootnb.exe wrapper with a simpler one cat > %{buildroot}%{_bindir}/rootnb.exe << EOF @@ -2479,8 +2225,10 @@ jupyter notebook "\$@" EOF # Avoid /usr/bin/env shebangs (and adapt cli to cmdLineUtils location) -sed -e 's!/usr/bin/env bash!/bin/bash!' -i %{buildroot}%{_bindir}/root-config -sed -e 's!/usr/bin/env /usr/bin/python.*!%{__python3}!' \ +sed -e 's!/usr/bin/env bash!/bin/bash!' \ + -i %{buildroot}%{_bindir}/root-config \ + %{buildroot}%{_bindir}/rootssh +sed -e 's!/usr/bin/env python3!%{__python3}!' \ -e '/import sys/d' \ -e '/import cmdLineUtils/iimport sys' \ -e '/import cmdLineUtils/isys.path.insert(0, "%{_datadir}/%{name}/cli")' \ @@ -2493,76 +2241,40 @@ sed -e 's!/usr/bin/env /usr/bin/python.*!%{__python3}!' \ %{buildroot}%{_bindir}/rootprint \ %{buildroot}%{_bindir}/rootrm \ %{buildroot}%{_bindir}/rootslimtree -sed -e 's!/usr/bin/env /usr/bin/python.*!%{__python3}!' \ +sed -e 's!/usr/bin/env python3!%{__python3}!' \ -i %{buildroot}%{_bindir}/rootdrawtree sed -e 's!/usr/bin/env python!%{__python3}!' \ - -i %{buildroot}%{_datadir}/%{name}/dictpch/makepch.py \ - %{buildroot}%{_pkgdocdir}/tutorials/histfactory/example.py \ - %{buildroot}%{_pkgdocdir}/tutorials/histfactory/makeQuickModel.py \ - %{buildroot}%{_pkgdocdir}/tutorials/tmva/keras/ApplicationClassificationKeras.py \ - %{buildroot}%{_pkgdocdir}/tutorials/tmva/keras/ApplicationRegressionKeras.py \ - %{buildroot}%{_pkgdocdir}/tutorials/tmva/keras/ClassificationKeras.py \ - %{buildroot}%{_pkgdocdir}/tutorials/tmva/keras/GenerateModel.py \ - %{buildroot}%{_pkgdocdir}/tutorials/tmva/keras/MulticlassKeras.py \ - %{buildroot}%{_pkgdocdir}/tutorials/tmva/keras/RegressionKeras.py + -i %{buildroot}%{_datadir}/%{name}/dictpch/makepch.py +sed -e 's!/usr/bin/python!%{__python3}!' \ + -i %{buildroot}%{_datadir}/%{name}/pdg_table_update.py # Remove some junk -rm %{buildroot}%{_datadir}/%{name}/proof/*.sample -rm -rf %{buildroot}%{_datadir}/%{name}/proof/utils rm %{buildroot}%{_datadir}/%{name}/root.desktop -rm %{buildroot}%{_bindir}/setxrd* -rm %{buildroot}%{_bindir}/thisroot* rm %{buildroot}%{_pkgdocdir}/INSTALL -rm %{buildroot}%{_pkgdocdir}/README.ALIEN rm %{buildroot}%{_pkgdocdir}/README.CXXMODULES.md -rm %{buildroot}%{_pkgdocdir}/README.MONALISA +rm -rf %{buildroot}%{_datadir}/%{name}/html # Only used on Windows rm %{buildroot}%{_datadir}/%{name}/macros/fileopen.C # Remove plugin definitions for non-built and obsolete plugins pushd %{buildroot}%{_datadir}/%{name}/plugins -%if ! %{root7} -rm TBrowserImp/P030_RWebBrowserImp.C +%if ! %{rrr} +rm ROOT@@Math@@Minimizer/P090_RMinimizer.C %endif -rm TDataSetManager/P020_TDataSetManagerAliEn.C -%if ! %{gfal2} -rm TFile/P050_TGFALFile.C -%endif -rm TFile/P070_TAlienFile.C rm TGLManager/P020_TGWin32GLManager.C rm TGLManager/P030_TGOSXGLManager.C -rm TGrid/P010_TAlien.C -%if ! %{webgui} -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 -%if ! %{root7} -rm TVirtualGeoPainter/P020_REveGeoPainter.C -%endif rm TVirtualGLImp/P020_TGWin32GL.C -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 symlinks to system version -for x in img libs scripts style files/draw.htm files/online.htm ; do - ln -s /usr/share/javascript/jsroot/$x %{buildroot}%{_datadir}/%{name}/js/$x +for x in build img mathjax modules scripts files/draw.htm files/online.htm ; do + ln -nrs %{buildroot}%{_jsdir}/jsroot/$x \ + %{buildroot}%{_datadir}/%{name}/js/$x done # Create ldconfig configuration @@ -2572,70 +2284,44 @@ echo %{_libdir}/%{name} > \ # Make ROOTConfig-targets.cmake not error on missing files to work better with # subpackages -%if %{?fedora}%{!?fedora:0} || %{?rhel}%{!?rhel:0} >= 8 -%global pkgmgr dnf -%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 \\"dnf 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 -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 - # Create includelist files ... -for f in `find %{_vpath_builddir} -name cmake_install.cmake -a '!' -path '*/llvm/*'` ; do +for f in `find %{_vpath_builddir} -name cmake_install.cmake -a '!' -path '*/llvm-project/*'` ; do l=`sed 's!%{_vpath_builddir}/\(.*\)/cmake_install.cmake!includelist-\1!' <<< $f` l=`tr / - <<< $l` tmpdir=`mktemp -d` -%if %{?rhel}%{!?rhel:0} == 7 - DESTDIR=$tmpdir cmake3 -DCMAKE_INSTALL_COMPONENT=headers -P $f > /dev/null -%else DESTDIR=$tmpdir cmake -DCMAKE_INSTALL_COMPONENT=headers -P $f > /dev/null -%endif ( cd $tmpdir ; find . -type f) | sort | sed 's!^\.!!' > $l rm -rf $tmpdir done # ... and merge some of them 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 -%endif + +# Do python byte compilation (for non-standard paths) +%py_byte_compile %{__python3} %{buildroot}%{_datadir}/%{name}/cli +%py_byte_compile %{__python3} %{buildroot}%{_datadir}/gdb/auto-load%{_libdir}/%{name} %check -%if %{?rhel}%{!?rhel:0} == 7 -. /opt/rh/devtoolset-8/enable -%endif - pushd %{_vpath_builddir} pushd test ln -s ../../files files popd pushd runtutorials 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 +ln -s ../../files/tutorials/df014_CsvDataSource_MuRun2010B.csv CsvDataSource_MuRun2010B.csv +ln -s ../../files/usa.root usa.root popd -pushd tmva/tmva/test/DNN -ln -s ../../../../../files files -popd -pushd tmva/tmva/test/envelope -ln -s ../../../../../files files popd # Exclude some tests that can not be run @@ -2643,343 +2329,317 @@ popd # - test-stressIOPlugins-* # requires network access (by design since they test the remote file IO) # -# - tutorial-dataframe-df101_h1Analysis -# - tutorial-tree-run_h1analysis -# - tutorial-multicore-imt001_parBranchProcessing -# - tutorial-multicore-mp103_processSelector -# - tutorial-multicore-mp104_processH1 -# - tutorial-multicore-mp105_processEntryList +# - tutorial-analysis-dataframe-df101_h1Analysis +# - tutorial-analysis-tree-run_h1analysis +# - tutorial-legacy-multicore-mp104_processH1 # requires network access: http://root.cern.ch/files/h1/ # -# - tutorial-multicore-imt101_parTreeProcessing +# - tutorial-io-tree-imt_parTreeProcessing # requires input data: http://root.cern.ch/files/tp_process_imt.root (707 MB) # -# - tutorial-dataframe-df###_SQlite* +# - tutorial-analysis-dataframe-df###_SQlite* # reads sqlite data over network: # http://root.cern.ch/files/root_download_stats.sqlite # -# - tutorial-dataframe-df033_Describe-py -# - tutorial-dataframe-df102_NanoAODDimuonAnalysis(-py)? +# - tutorial-analysis-dataframe-df033_Describe-py +# - tutorial-analysis-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)? +# - gtest-tree-treeplayer-treeprocessormt-remotefiles +# - tutorial-analysis-dataframe-df103_NanoAODHiggsAnalysis(-py)? # reads input data over network: # root://eospublic.cern.ch//eos/root-eos/cms_opendata_2012_nanoaod/ # -# - tutorial-dataframe-df104_HiggsToTwoPhotons-py -# - tutorial-dataframe-df105_WBosonAnalysis-py -# - tutorial-dataframe-df106_HiggsToFourLeptons-py -# - tutorial-dataframe-df107_SingleTopAnalysis-py -# - tutorial-rcanvas-df104-py -# - tutorial-rcanvas-df105-py +# - tutorial-analysis-dataframe-df104_HiggsToTwoPhotons-py +# - tutorial-analysis-dataframe-df105_WBosonAnalysis-py +# - tutorial-analysis-dataframe-df106_HiggsToFourLeptons(-py) +# - tutorial-analysis-dataframe-df107_SingleTopAnalysis-py +# - tutorial-visualisation-rcanvas-df104-py +# - tutorial-visualisation-rcanvas-df105-py # reads input data over network: # root://eospublic.cern.ch//eos/opendata/atlas/OutreachDatasets/2020-01-22/ # -# - tutorial-v7-global_temperatures.cxx -# reads input data over network -# http://root.cern.ch/files/tutorials/GlobalLandTemperaturesByCity.csv -# -# - tutorial-v7-ntuple-ntpl003_lhcbOpenData -# reads input data over network -# http://root.cern.ch/files/LHCb/lhcb_B2HHH_MagnetUp.root (425 MB) -# -# - tutorial-v7-ntuple-ntpl004_dimuon +# - tutorial-io-ntuple-ntpl004_dimuon # reads input data over network # http://root.cern.ch/files/NanoAOD_DoubleMuon_CMS2011OpenData.root (1.5 GB) # -# - gtest-net-davix-test-RRawFileDavix +# - tutorial-io-ntuple-ntpl008_import +# reads input data over network +# http://root.cern.ch/files/HiggsTauTauReduced/GluGluToHToTauTau.root (20 MB) +# +# - tutorial-io-ntuple-ntpl011_global_temperatures +# reads input data over network +# http://root.cern.ch/files/tutorials/GlobalLandTemperaturesByCity.csv +# +# - gtest-net-davix-RRawFileDavix # reads input file over network # http://root.cern.ch/files/davix.test # -# - gtest-net-netxng-test-RRawFileNetXNG +# - gtest-net-netxng-RRawFileNetXNG +# reads input file over network # root://eospublic.cern.ch/eos/root-eos/xrootd.test # -# - gtest-tmva-tmva-test-rreader -# - gtest-tmva-tmva-test-rstandardscaler -# - tutorial-tmva-tmva003_RReader -# - tutorial-tmva-tmva004_RStandardScaler -# reads input data over network -# http://root.cern.ch/files/tmva_class_example.root +# - gtest-net-netxng-TNetXNGFileTest +# - tutorial-analysis-parallel-mp_processSelector +# reads input file over network +# root://eospublic.cern.ch/eos/root-eos/h1/dstarmb.root # -# - tutorial-tmva-tmva103_Application +# - tutorial-machine_learning-tmva100_DataPreparation-py # reads input data over network -# http://root.cern/files/tmva101.root -# -# - pyunittests-pyroot-dependency-versions -# - pyunittests-pyroot-numbadeclare -# - test-import-numba -# - tutorial-pyroot-pyroot004_NumbaDeclare-py -# these tests require the numba python module which is not available +# root://eospublic.cern.ch/eos/root-eos/cms_opendata_2012_nanoaod/SMHiggsToZZTo4L.root # # - test-webgui-ping # error: Cannot display window in native +# +# - test-stressgraphics-firefox-skip3d: +# requires firefox... +# +# - test-stressgraphics-svg +# Font metric differences +# +# - tutorial-visualisation-webcanv-fonts_ttf.cxx: +# Requires web graphics excluded="\ test-stressIOPlugins|\ -tutorial-dataframe-df101_h1Analysis|\ -tutorial-tree-run_h1analysis|\ -tutorial-multicore-imt001_parBranchProcessing|\ -tutorial-multicore-mp103_processSelector|\ -tutorial-multicore-mp104_processH1|\ -tutorial-multicore-mp105_processEntryList|\ -tutorial-multicore-imt101_parTreeProcessing|\ -tutorial-dataframe-df..._SQlite|\ -tutorial-dataframe-df033_Describe-py|\ -tutorial-dataframe-df102_NanoAODDimuonAnalysis|\ -gtest-tree-treeplayer-test-treeprocessormt-remotefiles|\ -tutorial-dataframe-df103_NanoAODHiggsAnalysis|\ -tutorial-dataframe-df104_HiggsToTwoPhotons-py|\ -tutorial-dataframe-df105_WBosonAnalysis-py|\ -tutorial-dataframe-df106_HiggsToFourLeptons-py|\ -tutorial-dataframe-df107_SingleTopAnalysis-py|\ -tutorial-rcanvas-df104-py|\ -tutorial-rcanvas-df105-py|\ -tutorial-v7-global_temperatures.cxx|\ -tutorial-v7-ntuple-ntpl003_lhcbOpenData|\ -tutorial-v7-ntuple-ntpl004_dimuon|\ -gtest-net-davix-test-RRawFileDavix|\ -gtest-net-netxng-test-RRawFileNetXNG|\ -gtest-tmva-tmva-test-rreader|\ -gtest-tmva-tmva-test-rstandardscaler|\ -tutorial-tmva-tmva003_RReader|\ -tutorial-tmva-tmva004_RStandardScaler|\ -tutorial-tmva-tmva103_Application|\ -pyunittests-pyroot-dependency-versions|\ -pyunittests-pyroot-numbadeclare|\ -test-import-numba|\ -tutorial-pyroot-pyroot004_NumbaDeclare-py|\ -test-webgui-ping" +tutorial-analysis-dataframe-df101_h1Analysis|\ +tutorial-analysis-tree-run_h1analysis|\ +tutorial-legacy-multicore-mp104_processH1|\ +tutorial-io-tree-imt_parTreeProcessing|\ +tutorial-analysis-dataframe-df..._SQlite|\ +tutorial-analysis-dataframe-df033_Describe-py|\ +tutorial-analysis-dataframe-df102_NanoAODDimuonAnalysis|\ +gtest-tree-treeplayer-treeprocessormt-remotefiles|\ +tutorial-analysis-dataframe-df103_NanoAODHiggsAnalysis|\ +tutorial-analysis-dataframe-df104_HiggsToTwoPhotons-py|\ +tutorial-analysis-dataframe-df105_WBosonAnalysis-py|\ +tutorial-analysis-dataframe-df106_HiggsToFourLeptons|\ +tutorial-analysis-dataframe-df107_SingleTopAnalysis-py|\ +tutorial-visualisation-rcanvas-df104-py|\ +tutorial-visualisation-rcanvas-df105-py|\ +tutorial-io-ntuple-ntpl004_dimuon|\ +tutorial-io-ntuple-ntpl008_import|\ +tutorial-io-ntuple-ntpl011_global_temperatures|\ +gtest-net-davix-RRawFileDavix|\ +gtest-net-netxng-RRawFileNetXNG|\ +gtest-net-netxng-TNetXNGFileTest|\ +tutorial-analysis-parallel-mp_processSelector|\ +tutorial-machine_learning-tmva100_DataPreparation-py|\ +test-webgui-ping|\ +test-stressgraphics-firefox-skip3d|\ +test-stressgraphics-svg|\ +tutorial-visualisation-webcanv-fonts_ttf.cxx" -%if ! ( %{?fedora}%{!?fedora:0} || %{?rhel}%{!?rhel:0} == 8 ) -# - test-import-pandas -# - tutorial-dataframe-df026_AsNumpyArrays-py -# - tutorial-roofit-rf409_NumPyPandasToRooFit-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|\ -tutorial-roofit-rf409_NumPyPandasToRooFit-py" -%endif - -%if %{?rhel}%{!?rhel:0} == 7 -# - pyunittests-pyroot-roofit-roodataset-numpy -# AttributeError: module 'numpy' has no attribute 'isin' -excluded="${excluded}|\ -pyunittests-pyroot-roofit-roodataset-numpy" -%endif - -%ifarch %{ix86} %{arm} -%if %{?fedora}%{!?fedora:0} <= 35 -# Tests failing on 32 bit architectures (dataframe) -# - gtest-roofit-RDataFrameHelpers-test-testActionHelpers -# - gtest-tree-dataframe-test-dataframe-* -# - gtest-tree-dataframe-test-datasource-* -excluded="${excluded}|\ -gtest-roofit-RDataFrameHelpers-test-testActionHelpers|\ -gtest-tree-dataframe-test-dataframe|\ -gtest-tree-dataframe-test-datasource" -%endif -%endif - -%ifarch %{arm} -# 32 bit arm specific failures +%ifarch %{ix86} +# - gtest-hist-hist-TFormulaGradientTests +# out of memory # -# - gtest-tree-tree-test-testBulkApi -# - gtest-tree-tree-test-testBulkApiSillyStruct -# - gtest-tree-dataframe-test-dataframe-snapshot -# - gtest-tree-dataframe-test-dataframe-vary -# - pyunittests-dataframe-merge-results -# - pyunittests-distrdf-unit-test-headnode +# - pyunittests-bindings-pyroot-pythonizations-pyroot-array-numpy-views +# ValueError: buffer is smaller than requested size +# +# - tmva-sofie-test-TestCustomModelsFromONNX +# Expected equality of these values: +# output.size() +# Which is: 1000 +# sizeof(Slice_Neg::output) / sizeof(float) +# Which is: 900 excluded="${excluded}|\ -gtest-tree-tree-test-testBulkApi\$\$|\ -gtest-tree-tree-test-testBulkApiSillyStruct|\ -gtest-tree-dataframe-test-dataframe-snapshot|\ -gtest-tree-dataframe-test-dataframe-vary|\ -pyunittests-dataframe-merge-results|\ -pyunittests-distrdf-unit-test-headnode" -%endif - -%ifarch %{power64} aarch64 -# This test fails on ppc64le and aarch64 (but not on x86_64) -# The interpreted version works though, only compiled version fails -# - test-stresshistofit -excluded="${excluded}|test-stresshistofit\$\$" +gtest-hist-hist-TFormulaGradientTests|\ +pyunittests-bindings-pyroot-pythonizations-pyroot-array-numpy-views|\ +tmva-sofie-test-TestCustomModelsFromONNX\$\$" %endif %ifarch %{power64} -# PPC64LE specific failures -# -# - test-stresshistofit-interpreted -# - test-stresshistogram-interpreted -# - test-stressmathcore-interpreted -# - test-stressroostats-interpreted -# -# Always timeout (hang?) -# - pyunittests-pyroot-pyz-rdataframe-makenumpy -# - tutorial-dataframe-df032_MakeNumpyDataFrame-py +%if %{?fedora}%{!?fedora:0} >= 42 +# - gtest-tree-ntuple-ntuple-emulated +# - gtest-tree-ntuple-ntuple-evolution-shape +# waitpid() failed excluded="${excluded}|\ -test-stresshistofit-interpreted|\ -test-stresshistogram-interpreted|\ -test-stressmathcore-interpreted|\ -test-stressroostats-interpreted|\ -pyunittests-pyroot-pyz-rdataframe-makenumpy|\ -tutorial-dataframe-df032_MakeNumpyDataFrame-py" - -%if %{?fedora}%{!?fedora:0} == 34 || %{?fedora}%{!?fedora:0} == 35 || %{?rhel}%{!?rhel:0} == 9 -# tmva/tmva/test/branchlessForest.cxx:215: Failure -# Expected equality of these values: -# predictions[1] -# Which is: -1 -# -1.0 + 2.0 -# Which is: 1 -# - gtest-tmva-tmva-test-branchlessForest -# -# Error in : bins must be in increasing order -# Error in : X must be in increasing order -# - tutorial-math-kdTreeBinning -# -# Segmentation violation - malloc(): unaligned tcache chunk detected -# - tutorial-unfold-testUnfold7c -# -# TFormula double free in Python -# - tutorial-hist-fillrandom-py -# - tutorial-pyroot-fillrandom-py -# - tutorial-pyroot-fit1-py (uses output of tutorial-pyroot-fillrandom-py) -# - tutorial-pyroot-formula1-py -excluded="${excluded}|\ -gtest-tmva-tmva-test-branchlessForest|\ -tutorial-math-kdTreeBinning|\ -tutorial-unfold-testUnfold7c|\ -tutorial-hist-fillrandom-py|\ -tutorial-pyroot-fillrandom-py|\ -tutorial-pyroot-fit1-py|\ -tutorial-pyroot-formula1-py" -%endif - -%if %{?rhel}%{!?rhel:0} == 7 || %{?rhel}%{!?rhel:0} == 8 -# crash - free(): corrupted unsorted chunks -# - gtest-roofit-RDataFrameHelpers-test-testActionHelpers -# - gtest-tmva-tmva-test-rtensor-utils -# - gtest-tree-dataframe-test-dataframe-* -# - gtest-tree-dataframe-test-datasource-* -# - tutorial-dataframe-df004_cutFlowReport -excluded="${excluded}|\ -gtest-roofit-RDataFrameHelpers-test-testActionHelpers|\ -gtest-tmva-tmva-test-rtensor-utils|\ -gtest-tree-dataframe-test-dataframe|\ -gtest-tree-dataframe-test-datasource|\ -tutorial-dataframe-df004_cutFlowReport" -%endif - -%if %{?rhel}%{!?rhel:0} == 8 -# Fails on ppc64le since RHEL 8.5 update -# Exception: Found not whitelisted libraries after importing ROOT: -# - libpthread-2.28 -# - libm-2.28 -# - libc-2.28 -# - librt-2.28 -# - pyunittests-pyroot-import-load-libs -# -# crash - double free or corruption (out) -# - tutorial-multicore-mt201_parallelHistoFill -# -# segmentation violation -# - tutorial-multicore-mt304_fillHistos -excluded="${excluded}|\ -pyunittests-pyroot-import-load-libs|\ -tutorial-multicore-mt201_parallelHistoFill|\ -tutorial-multicore-mt304_fillHistos" +gtest-tree-ntuple-ntuple-emulated|\ +gtest-tree-ntuple-ntuple-evolution-shape" %endif %endif %ifarch s390x -# s390x specific failures +# - gtest-roofit-roofitcore-testNaNPacker +# - gtest-roofit-roofitcore-testLikelihoodGradientJob +# Uses "Packed NaN" feature, not implemented for big endian. +excluded="${excluded}|\ +gtest-roofit-roofitcore-testNaNPacker|\ +gtest-roofit-roofitcore-testLikelihoodGradientJob" + +# - gtest-core-dictgen-dictgen-base +# - gtest-tree-dataframe-dataframe-concurrency +# - gtest-tree-dataframe-dataframe-snapshot-ntuple +# - gtest-tree-dataframe-dataframe-unified-constructor +# - gtest-tree-dataframe-dataframe-vary +# - gtest-tree-dataframe-datasource-ntuple +# - gtest-tree-ntuple-ntuple-basics +# - gtest-tree-ntuple-ntuple-bulk +# - gtest-tree-ntuple-ntuple-cast +# - gtest-tree-ntuple-ntuple-compat +# - gtest-tree-ntuple-ntuple-evolution-type +# - gtest-tree-ntuple-ntuple-extended +# - gtest-tree-ntuple-ntuple-join-table +# - gtest-tree-ntuple-ntuple-largefile2 +# - gtest-tree-ntuple-ntuple-merger +# - gtest-tree-ntuple-ntuple-metrics +# - gtest-tree-ntuple-ntuple-model +# - gtest-tree-ntuple-ntuple-modelext +# - gtest-tree-ntuple-ntuple-multi-column +# - gtest-tree-ntuple-ntuple-packing +# - gtest-tree-ntuple-ntuple-parallel-writer +# - gtest-tree-ntuple-ntuple-processor +# - gtest-tree-ntuple-ntuple-processor-chain +# - gtest-tree-ntuple-ntuple-processor-join +# - gtest-tree-ntuple-ntuple-project +# - gtest-tree-ntuple-ntuple-show +# - gtest-tree-ntuple-ntuple-storage +# - gtest-tree-ntuple-ntuple-storage-daos +# - gtest-tree-ntuple-ntuple-types +# - gtest-tree-ntuple-ntuple-view +# - gtest-tree-ntuple-rfield-class +# - gtest-tree-ntuple-rfield-streamer +# - gtest-tree-ntuple-rfield-variant +# - gtest-tree-ntuple-rfield-vector +# - gtest-tree-ntupleutil-ntuple-importer +# - gtest-tree-ntupleutil-ntuple-inspector +# - gtest-tree-tree-testTTreeRegressions +# https://github.com/root-project/root/issues/12426 # -# - gtest-roofit-roofitcore-test-testNaNPacker -# - gtest-roofit-roofitcore-test-testRooProdPdf -# - gtest-tree-dataframe-test-datasource-ntuple -# - gtest-tree-ntuple-v7-test-ntuple-basics -# - gtest-tree-ntuple-v7-test-ntuple-extended -# - gtest-tree-ntuple-v7-test-ntuple-merger -# - gtest-tree-ntuple-v7-test-ntuple-minifile -# - gtest-tree-ntuple-v7-test-ntuple-serialize -# - pyunittests-pyroot-pyz-rtensor -# - pyunittests-pyroot-pyz-stl-vector -# - test-stresshistofit(-interpreted) -# - test-stresshistogram(-interpreted) -# - tutorial-dataframe-df006_ranges-py +# - pyunittests-bindings-distrdf-backend-distrdf-unit-backend-graph-caching +# - pyunittests-bindings-pyroot-pythonizations-pyroot-pyz-rtensor +# - pyunittests-bindings-pyroot-pythonizations-pyroot-pyz-stl-vector +# - pyunittests-io-io-rfile-py +# - tmva-sofie-test-TestCustomModelsFromONNX +# - tutorial-analysis-dataframe-df006_ranges-py +# - tutorial-hist-hist007_TH1_liveupdate-py # - tutorial-math-exampleFunction-py -# - tutorial-roofit-rf612_recoverFromInvalidParameters +# - tutorial-math-fit-combinedFit-py +# - tutorial-math-fit-NumericalMinimization-py +# - tutorial-visualisation-rcanvas-rbox-py +# https://github.com/root-project/root/issues/12429 +# +# - test-stresshistofit +# - test-stresshistofit-interpreted +# - test-stresshistogram +# - test-stresshistogram-interpreted excluded="${excluded}|\ -gtest-roofit-roofitcore-test-testNaNPacker|\ -gtest-roofit-roofitcore-test-testRooProdPdf|\ -gtest-tree-dataframe-test-datasource-ntuple|\ -gtest-tree-ntuple-v7-test-ntuple-basics|\ -gtest-tree-ntuple-v7-test-ntuple-extended|\ -gtest-tree-ntuple-v7-test-ntuple-merger|\ -gtest-tree-ntuple-v7-test-ntuple-minifile|\ -gtest-tree-ntuple-v7-test-ntuple-serialize|\ -pyunittests-pyroot-pyz-rtensor|\ -pyunittests-pyroot-pyz-stl-vector|\ -test-stresshistofit|\ -test-stresshistogram|\ -tutorial-dataframe-df006_ranges-py|\ +gtest-core-dictgen-dictgen-base|\ +gtest-tree-dataframe-dataframe-concurrency|\ +gtest-tree-dataframe-dataframe-snapshot-ntuple|\ +gtest-tree-dataframe-dataframe-unified-constructor|\ +gtest-tree-dataframe-dataframe-vary|\ +gtest-tree-dataframe-datasource-ntuple|\ +gtest-tree-ntuple-ntuple-basics|\ +gtest-tree-ntuple-ntuple-bulk|\ +gtest-tree-ntuple-ntuple-cast|\ +gtest-tree-ntuple-ntuple-compat|\ +gtest-tree-ntuple-ntuple-evolution-type|\ +gtest-tree-ntuple-ntuple-extended|\ +gtest-tree-ntuple-ntuple-join-table|\ +gtest-tree-ntuple-ntuple-largefile2|\ +gtest-tree-ntuple-ntuple-merger|\ +gtest-tree-ntuple-ntuple-metrics|\ +gtest-tree-ntuple-ntuple-model\$\$|\ +gtest-tree-ntuple-ntuple-modelext|\ +gtest-tree-ntuple-ntuple-multi-column|\ +gtest-tree-ntuple-ntuple-packing|\ +gtest-tree-ntuple-ntuple-parallel-writer|\ +gtest-tree-ntuple-ntuple-processor\$\$|\ +gtest-tree-ntuple-ntuple-processor-chain|\ +gtest-tree-ntuple-ntuple-processor-join|\ +gtest-tree-ntuple-ntuple-project|\ +gtest-tree-ntuple-ntuple-show|\ +gtest-tree-ntuple-ntuple-storage\$\$|\ +gtest-tree-ntuple-ntuple-storage-daos|\ +gtest-tree-ntuple-ntuple-types|\ +gtest-tree-ntuple-ntuple-view|\ +gtest-tree-ntuple-rfield-class|\ +gtest-tree-ntuple-rfield-streamer|\ +gtest-tree-ntuple-rfield-variant|\ +gtest-tree-ntuple-rfield-vector|\ +gtest-tree-ntupleutil-ntuple-importer|\ +gtest-tree-ntupleutil-ntuple-inspector|\ +gtest-tree-tree-testTTreeRegressions|\ +pyunittests-bindings-distrdf-backend-distrdf-unit-backend-graph-caching|\ +pyunittests-bindings-pyroot-pythonizations-pyroot-pyz-rtensor|\ +pyunittests-bindings-pyroot-pythonizations-pyroot-pyz-stl-vector|\ +pyunittests-io-io-rfile-py|\ +tmva-sofie-test-TestCustomModelsFromONNX|\ +tutorial-analysis-dataframe-df006_ranges-py|\ +tutorial-hist-hist007_TH1_liveupdate-py|\ tutorial-math-exampleFunction-py|\ -tutorial-roofit-rf612_recoverFromInvalidParameters" +tutorial-math-fit-combinedFit-py|\ +tutorial-math-fit-NumericalMinimization-py|\ +tutorial-visualisation-rcanvas-rbox-py|\ +test-stresshistofit\$\$|\ +test-stresshistofit-interpreted|\ +test-stresshistogram\$\$|\ +test-stresshistogram-interpreted" -%if %{?rhel}%{!?rhel:0} == 8 -# Issues with file sizes on EPEL 8 s390x -# - gtest-tree-tree-test-testTBranch +# The zlib-ng library is compiled with hardware acceleration support on s390x +# in Fedora 43 and later. +# This means that some tests that compare the size of compressed data fail. # - test-stress -# - test-stressgraphics(-interpreted) +# - gtest-tree-readspeed-readspeed-general +# - gtest-tree-tree-testTBranch +%if %{?fedora}%{!?fedora:0} >= 43 excluded="${excluded}|\ -gtest-tree-tree-test-testTBranch|\ test-stress\$\$|\ -test-stressgraphics" +gtest-tree-readspeed-readspeed-general|\ +gtest-tree-tree-testTBranch" +%endif %endif -%if %{?fedora}%{!?fedora:0} >= 38 -# - pyunittests-pyroot-pyz-rdataframe-asnumpy -# - pyunittests-pyroot-pyz-rdataframe-makenumpy -# - tutorial-dataframe-df024_Display(-py) -# - tutorial-dataframe-df026_AsNumpyArrays-py -# - tutorial-dataframe-df032_MakeNumpyDataFrame-py -# - tutorial-tmva-tmva002_RDataFrameAsTensor +# Fails with gcc 14 on aarch64, ppc64le and s390x (on EPEL 10 also x86_64) +# https://github.com/root-project/root/issues/14446 +# - gtest-math-matrix-testMatrixTSparse +%if %{?fedora}%{!?fedora:0} >= 40 +%ifarch aarch64 %{power64} s390x excluded="${excluded}|\ -pyunittests-pyroot-pyz-rdataframe-asnumpy|\ -pyunittests-pyroot-pyz-rdataframe-makenumpy|\ -tutorial-dataframe-df024_Display|\ -tutorial-dataframe-df026_AsNumpyArrays-py|\ -tutorial-dataframe-df032_MakeNumpyDataFrame-py|\ -tutorial-tmva-tmva002_RDataFrameAsTensor" +gtest-math-matrix-testMatrixTSparse" %endif %endif +%if %{?rhel}%{!?rhel:0} >= 10 +excluded="${excluded}|\ +gtest-math-matrix-testMatrixTSparse" +%endif # Filter out parts of tests that require remote network access -GTEST_FILTER=-RCsvDS.Remote:RRawFile.Remote:RSqliteDS.Davix \ -make test ARGS="%{?_smp_mflags} --output-on-failure -E \"${excluded}\"" -popd - -%if %{?rhel}%{!?rhel:0} == 7 -%post -touch --no-create %{_datadir}/icons/hicolor >/dev/null 2>&1 || : -update-desktop-database >/dev/null 2>&1 || : -update-mime-database %{_datadir}/mime >/dev/null 2>&1 || : - -%postun -if [ $1 -eq 0 ] ; then - touch --no-create %{_datadir}/icons/hicolor >/dev/null 2>&1 - gtk-update-icon-cache %{_datadir}/icons/hicolor >/dev/null 2>&1 || : -fi -update-desktop-database >/dev/null 2>&1 || : -update-mime-database %{_datadir}/mime >/dev/null 2>&1 || : - -%posttrans -gtk-update-icon-cache %{_datadir}/icons/hicolor >/dev/null 2>&1 || : +# RNTuple.StdAtomic fails on ix86 (different alignment 64 bit (non)atomic) +# TH3D.FillThreadSafe and RDFHelpers.Histo3DThreadSafe fail on ix86 +# due to alignment issues with std::atomic_ref +# https://github.com/root-project/root/issues/20834 +# InterpreterTest.Evaluate fails on s390x +# TClingDataMemberInfo.Offset fails on s390x +# https://github.com/root-project/root/issues/14512 +# TTreeRegressions.PrintClustersRounding +# relies on specific versions of compression libraries +# https://github.com/root-project/root/issues/18995 +export GTEST_FILTER=-\ +%ifarch %{ix86} +RNTuple.StdAtomic:\ +TH3D.FillThreadSafe:\ +RDFHelpers.Histo3DThreadSafe:\ %endif +%ifarch s390x +InterpreterTest.Evaluate:\ +TClingDataMemberInfo.Offset:\ +TTreeReaderBasic.LorentzVector32:\ +%endif +RCsvDS.Remote:\ +RFile.RemoteRead:\ +RNTuple.OpenHTTP:\ +RRawFile.Remote:\ +RSqliteDS.Davix:\ +TChainParsing.DoubleSlash:\ +TChainParsing.RemoteGlob:\ +TFile.ReadWithoutGlobalRegistrationNet:\ +TFile.ReadWithoutGlobalRegistrationWeb:\ +TTreeRegressions.PrintClustersRounding +%ctest -- -E "${excluded}" %pretrans net-http -p path = "%{_datadir}/%{name}/js" @@ -2990,21 +2650,9 @@ 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 -fs /usr/share/javascript/jsroot/$x %{_datadir}/%{name}/js/$x +for x in build img mathjax modules scripts 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 - for alt in `grep python2.*/.*.so /var/lib/alternatives/libPyROOT.so` ; do - %{_sbindir}/update-alternatives --remove libPyROOT.so $alt - done -fi -%endif %pre -n python%{python3_pkgversion}-%{name} if [ -r /var/lib/alternatives/libPyROOT.so ] ; then @@ -3013,38 +2661,36 @@ if [ -r /var/lib/alternatives/libPyROOT.so ] ; then done fi -%post notebook +%post -n python%{python3_pkgversion}-jupyroot mkdir -p /etc/jupyter if [ -e /etc/jupyter/jupyter_notebook_config.py ] ; then - sed '/Extra static path for JupyROOT - start/','/Extra static path for JupyROOT - end/'d -i /etc/jupyter/jupyter_notebook_config.py + sed '/Extra static paths for JupyROOT - start/','/Extra static paths for JupyROOT - end/'d -i /etc/jupyter/jupyter_notebook_config.py 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('%{_datadir}/%{name}/notebook') -# Extra static path for JupyROOT - end - do not remove this line +# Extra static paths for JupyROOT - start - do not remove this line +c.NotebookApp.extra_static_paths.append('%{_jsdir}/jsroot') +# Extra static paths for JupyROOT - end - do not remove this line EOF if [ -e /etc/jupyter/jupyter_server_config.py ] ; then - sed '/Extra static path for JupyROOT - start/','/Extra static path for JupyROOT - end/'d -i /etc/jupyter/jupyter_server_config.py + sed '/Extra static paths for JupyROOT - start/','/Extra static paths for JupyROOT - end/'d -i /etc/jupyter/jupyter_server_config.py 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('%{_datadir}/%{name}/notebook') -# Extra static path for JupyROOT - end - do not remove this line +# Extra static paths for JupyROOT - start - do not remove this line +c.ServerApp.extra_static_paths.append('%{_jsdir}/jsroot') +# Extra static paths for JupyROOT - end - do not remove this line EOF -%postun notebook +%postun -n python%{python3_pkgversion}-jupyroot if [ $1 -eq 0 ] ; then if [ -e /etc/jupyter/jupyter_notebook_config.py ] ; then - sed '/Extra static path for JupyROOT - start/','/Extra static path for JupyROOT - end/'d -i /etc/jupyter/jupyter_notebook_config.py + sed '/Extra static paths for JupyROOT - start/','/Extra static paths for JupyROOT - end/'d -i /etc/jupyter/jupyter_notebook_config.py if [ ! -s /etc/jupyter/jupyter_notebook_config.py ] ; then rm /etc/jupyter/jupyter_notebook_config.py rmdir /etc/jupyter 2>/dev/null || : fi fi if [ -e /etc/jupyter/jupyter_server_config.py ] ; then - sed '/Extra static path for JupyROOT - start/','/Extra static path for JupyROOT - end/'d -i /etc/jupyter/jupyter_server_config.py + sed '/Extra static paths for JupyROOT - start/','/Extra static paths for JupyROOT - end/'d -i /etc/jupyter/jupyter_server_config.py if [ ! -s /etc/jupyter/jupyter_server_config.py ] ; then rm /etc/jupyter/jupyter_server_config.py rmdir /etc/jupyter 2>/dev/null || : @@ -3055,135 +2701,17 @@ fi %post core -p /sbin/ldconfig %postun core -p /sbin/ldconfig -%ldconfig_scriptlets multiproc -%ldconfig_scriptlets cling -%ldconfig_scriptlets tpython -%if %{buildpy2} -%ldconfig_scriptlets -n python2-%{name} -%endif -%ldconfig_scriptlets -n python%{python3_pkgversion}-%{name} -%ldconfig_scriptlets r -%ldconfig_scriptlets r-tools -%ldconfig_scriptlets genetic -%ldconfig_scriptlets geom -%ldconfig_scriptlets gdml -%ldconfig_scriptlets graf -%ldconfig_scriptlets graf-asimage -%ldconfig_scriptlets graf-fitsio -%ldconfig_scriptlets graf-gpad -%ldconfig_scriptlets graf-gviz -%ldconfig_scriptlets graf-postscript -%ldconfig_scriptlets graf-x11 -%ldconfig_scriptlets graf3d -%ldconfig_scriptlets graf3d-csg -%ldconfig_scriptlets graf3d-eve -%ldconfig_scriptlets graf3d-gl -%ldconfig_scriptlets graf3d-gviz3d -%ldconfig_scriptlets graf3d-x3d -%ldconfig_scriptlets gui -%ldconfig_scriptlets gui-html -%ldconfig_scriptlets gui-fitpanel -%ldconfig_scriptlets gui-ged -%ldconfig_scriptlets gui-builder -%ldconfig_scriptlets gui-recorder -%ldconfig_scriptlets hbook -%ldconfig_scriptlets hist -%ldconfig_scriptlets hist-painter -%ldconfig_scriptlets spectrum -%ldconfig_scriptlets spectrum-painter -%ldconfig_scriptlets hist-factory -%ldconfig_scriptlets html -%ldconfig_scriptlets io -%ldconfig_scriptlets io-dcache -%if %{gfal2} -%ldconfig_scriptlets io-gfal -%endif -%ldconfig_scriptlets io-sql -%ldconfig_scriptlets io-xml -%ldconfig_scriptlets io-xmlparser -%ldconfig_scriptlets foam -%ldconfig_scriptlets fftw -%ldconfig_scriptlets fumili -%ldconfig_scriptlets genvector -%ldconfig_scriptlets mathcore -%ldconfig_scriptlets mathmore -%ldconfig_scriptlets matrix -%ldconfig_scriptlets minuit -%ldconfig_scriptlets minuit2 -%ldconfig_scriptlets mlp -%ldconfig_scriptlets physics -%ldconfig_scriptlets quadp -%ldconfig_scriptlets smatrix -%ldconfig_scriptlets splot -%ldconfig_scriptlets unuran -%ldconfig_scriptlets vecops -%ldconfig_scriptlets montecarlo-eg -%ldconfig_scriptlets montecarlo-pythia8 -%ldconfig_scriptlets net -%ldconfig_scriptlets net-rpdutils -%ldconfig_scriptlets net-auth -%ldconfig_scriptlets net-davix -%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-common -%ldconfig_scriptlets roofit-core -%ldconfig_scriptlets roofit-more -%ldconfig_scriptlets roofit-batchcompute -%ldconfig_scriptlets roofit-dataframe-helpers -%ldconfig_scriptlets roofit-hs3 -%ldconfig_scriptlets roostats -%ldconfig_scriptlets sql-mysql -%ldconfig_scriptlets sql-odbc -%ldconfig_scriptlets sql-sqlite -%ldconfig_scriptlets sql-pgsql -%ldconfig_scriptlets tmva -%ldconfig_scriptlets tmva-python -%ldconfig_scriptlets tmva-r -%ldconfig_scriptlets tmva-sofie -%if %{tmvasofieparser} -%ldconfig_scriptlets tmva-sofie-parser -%endif -%ldconfig_scriptlets tmva-gui -%ldconfig_scriptlets tree -%ldconfig_scriptlets tree-dataframe -%ldconfig_scriptlets tree-player -%ldconfig_scriptlets tree-viewer -%ldconfig_scriptlets unfold -%if %{webgui} -%ldconfig_scriptlets gui-webdisplay -%ifarch %{qt5_qtwebengine_arches} -%ldconfig_scriptlets gui-qt5webdisplay -%endif -%ldconfig_scriptlets gui-webgui6 -%endif -%if %{root7} -%ldconfig_scriptlets graf-gpadv7 -%ldconfig_scriptlets graf-primitives -%ldconfig_scriptlets graf3d-eve7 -%ldconfig_scriptlets gui-browsable -%ldconfig_scriptlets gui-browserv7 -%ldconfig_scriptlets gui-canvaspainter -%ldconfig_scriptlets gui-fitpanelv7 -%ldconfig_scriptlets histv7 -%ldconfig_scriptlets hist-draw -%ldconfig_scriptlets tree-ntuple -%endif - %files %{_bindir}/hadd %{_bindir}/root %{_bindir}/root.exe +%{_bindir}/rootbrowse +%{_bindir}/rootls %{_bindir}/rootn.exe +%{_bindir}/rootreadspeed %{_bindir}/roots %{_bindir}/roots.exe +%{_bindir}/rootssh %{_mandir}/man1/hadd.1* %{_mandir}/man1/root.1* %{_mandir}/man1/root.exe.1* @@ -3193,14 +2721,11 @@ fi %{_datadir}/icons/hicolor/48x48/apps/root.png %{_datadir}/icons/hicolor/48x48/mimetypes/application-x-root.png %{_datadir}/mime/packages/root.xml -%dir %{_emacs_sitelispdir}/%{name} -%{_emacs_sitelispdir}/%{name}/*.elc -%{_emacs_sitelispdir}/%{name}/*.el %files icons %{_datadir}/%{name}/icons -%files fonts +%files font-files %{_datadir}/%{name}/fonts %files tutorial @@ -3220,10 +2745,8 @@ fi %{_libdir}/%{name}/lib*Dict.* %dir %{_datadir}/gdb/auto-load%{_libdir}/%{name} %{_datadir}/gdb/auto-load%{_libdir}/%{name}/libCore.* -%if %{?fedora}%{!?fedora:0} >= 28 || %{?rhel}%{!?rhel:0} >= 8 %dir %{_datadir}/gdb/auto-load%{_libdir}/%{name}/__pycache__ %{_datadir}/gdb/auto-load%{_libdir}/%{name}/__pycache__/libCore.* -%endif %dir %{_datadir}/%{name} %{_datadir}/%{name}/allDict.cxx.pch %{_datadir}/%{name}/class.rules @@ -3236,20 +2759,26 @@ fi %{_datadir}/%{name}/system.rootauthrc %{_datadir}/%{name}/system.rootdaemonrc %{_datadir}/%{name}/system.rootrc +%{_datadir}/%{name}/valgrind-root.supp %{_datadir}/%{name}/valgrind-root-python.supp %{_mandir}/man1/system.rootdaemonrc.1* %dir %{_datadir}/%{name}/cmake %{_datadir}/%{name}/cmake/*.cmake +%dir %{_datadir}/%{name}/cmake/modules +%{_datadir}/%{name}/cmake/modules/*.cmake %dir %{_datadir}/%{name}/macros %{_datadir}/%{name}/macros/Dialogs.C %dir %{_datadir}/%{name}/plugins %dir %{_datadir}/%{name}/plugins/* %dir %{_includedir}/%{name} +%if %{bundlejson} +%dir %{_includedir}/%{name}/nlohmann +%{_includedir}/%{name}/nlohmann/json.hpp +%endif %{_includedir}/%{name}/RConfigOptions.h %{_includedir}/%{name}/RConfigure.h -%{_includedir}/%{name}/RGitCommit.h +%{_includedir}/%{name}/ROOT.modulemap %{_includedir}/%{name}/compiledata.h -%{_includedir}/%{name}/module.modulemap %dir %{_includedir}/%{name}/Math %dir %{_includedir}/%{name}/ROOT %config(noreplace) %{_sysconfdir}/ld.so.conf.d/%{name}-%{_arch}.conf @@ -3260,6 +2789,7 @@ fi %{_pkgdocdir}/LICENSE %doc %{_pkgdocdir}/DEVELOPMENT.md %doc %{_pkgdocdir}/ReleaseNotes +%doc %{_pkgdocdir}/root_citation.bib %license LICENSE LGPL2_1.txt %files multiproc -f includelist-core-multiproc @@ -3276,68 +2806,38 @@ fi %doc interpreter/cling/CREDITS.txt %doc interpreter/cling/README.md %license interpreter/cling/LICENSE.TXT -%doc interpreter/llvm/src/llvm-CREDITS.TXT -%doc interpreter/llvm/src/llvm-README.txt -%license interpreter/llvm/src/llvm-LICENSE.TXT + +%files testsupport +%{_includedir}/%{name}/ROOT/TestSupport.hxx +%{_libdir}/%{name}/TestSupport +%doc core/testsupport/README.md %files tpython -f includelist-bindings-tpython %{_libdir}/%{name}/libROOTTPython.* %{_libdir}/%{name}/libROOTTPython_rdict.pcm -%if %{buildpy2} -%files -n python2-%{name} -f includelist-bindings-pyroot -%{python2_sitearch}/cppyy -%{python2_sitearch}/cppyy_backend -%{python2_sitearch}/ROOT -%{python2_sitearch}/ROOT-*.egg-info -%{python2_sitearch}/libcppyy%{python2_version_uscore}.so -%{python2_sitearch}/libcppyy_backend%{python2_version_uscore}.so -%{python2_sitearch}/libROOTPythonizations%{python2_version_uscore}.so -%{_libdir}/%{name}/libcppyy%{python2_version_uscore}.* -%{_libdir}/%{name}/libcppyy_backend%{python2_version_uscore}.* -%dir %{_includedir}/%{name}/CPyCppyy - -%files -n python2-jupyroot -%{python2_sitearch}/JupyROOT -%{python2_sitearch}/JupyROOT-*.egg-info -%{python2_sitearch}/libJupyROOT%{python2_version_uscore}.so -%{_datadir}/jupyter/kernels/python2-jupyroot -%doc bindings/jupyroot/README.md - -%files -n python2-jsmva -%{python2_sitelib}/JsMVA -%{python2_sitelib}/JsMVA-*.egg-info -%endif - %files -n python%{python3_pkgversion}-%{name} -f includelist-bindings-pyroot %{python3_sitearch}/cppyy -%{python3_sitearch}/cppyy_backend %{python3_sitearch}/ROOT -%{python3_sitearch}/ROOT-*.egg-info -%{python3_sitearch}/libcppyy%{python3_version_uscore}%{python3_ext_suffix} -%{python3_sitearch}/libcppyy_backend%{python3_version_uscore}.so -%{python3_sitearch}/libROOTPythonizations%{python3_version_uscore}%{python3_ext_suffix} -%{_libdir}/%{name}/libcppyy%{python3_version_uscore}.* -%{_libdir}/%{name}/libcppyy_backend%{python3_version_uscore}.* +%{python3_sitearch}/ROOT-*.dist-info +%{_libdir}/%{name}/libCPyCppyy.* %dir %{_includedir}/%{name}/CPyCppyy %files -n python%{python3_pkgversion}-jupyroot -%{python3_sitearch}/JupyROOT -%{python3_sitearch}/JupyROOT-*.egg-info -%{python3_sitearch}/libJupyROOT%{python3_version_uscore}%{python3_ext_suffix} +%{python3_sitelib}/JupyROOT +%{python3_sitelib}/JupyROOT-*.dist-info %{_datadir}/jupyter/kernels/python%{python3_pkgversion}-jupyroot +%{_bindir}/rootnb.exe %doc bindings/jupyroot/README.md - -%files -n python%{python3_pkgversion}-jsmva -%{python3_sitelib}/JsMVA -%{python3_sitelib}/JsMVA-*.egg-info +%doc bindings/jupyroot/JupyROOT-on-EPEL %if %{distrdf} %files -n python%{python3_pkgversion}-distrdf %{python3_sitelib}/DistRDF -%{python3_sitelib}/DistRDF-*.egg-info +%{python3_sitelib}/DistRDF-*.dist-info %endif +%if %{rrr} %files r -f includelist-bindings-r %{_libdir}/%{name}/libRInterface.* %{_libdir}/%{name}/libRInterface_rdict.pcm @@ -3347,22 +2847,27 @@ fi %{_libdir}/%{name}/libRtools.* %{_libdir}/%{name}/libRtools_rdict.pcm %{_datadir}/%{name}/plugins/ROOT@@Math@@Minimizer/P090_RMinimizer.C +%endif %files genetic -f includelist-math-genetic %{_libdir}/%{name}/libGenetic.* %{_libdir}/%{name}/libGenetic_rdict.pcm %{_datadir}/%{name}/plugins/ROOT@@Math@@Minimizer/P080_GeneticMinimizer.C -%files geom -f includelist-geom +%files geom -f includelist-geom-geom %{_libdir}/%{name}/libGeom.* %{_libdir}/%{name}/libGeom_rdict.pcm +%{_datadir}/%{name}/RadioNuclides.txt + +%files geom-builder -f includelist-geom-geombuilder %{_libdir}/%{name}/libGeomBuilder.* %{_libdir}/%{name}/libGeomBuilder_rdict.pcm +%{_datadir}/%{name}/plugins/TGeoManagerEditor/P010_TGeoManagerEditor.C + +%files geom-painter -f includelist-geom-geompainter %{_libdir}/%{name}/libGeomPainter.* %{_libdir}/%{name}/libGeomPainter_rdict.pcm -%{_datadir}/%{name}/plugins/TGeoManagerEditor/P010_TGeoManagerEditor.C %{_datadir}/%{name}/plugins/TVirtualGeoPainter/P010_TGeoPainter.C -%{_datadir}/%{name}/RadioNuclides.txt %files gdml -f includelist-geom-gdml %{_libdir}/%{name}/libGdml.* @@ -3477,6 +2982,10 @@ fi %{_libdir}/%{name}/libRecorder.* %{_libdir}/%{name}/libRecorder_rdict.pcm +%files gui-treemap -f includelist-gui-treemap +%{_libdir}/%{name}/libROOTTreeMap.* +%{_libdir}/%{name}/libROOTTreeMap_rdict.pcm + %files hbook -f includelist-hist-hbook %{_bindir}/g2root %{_bindir}/h2root @@ -3504,22 +3013,6 @@ fi %{_libdir}/%{name}/libSpectrumPainter.* %{_libdir}/%{name}/libSpectrumPainter_rdict.pcm -%files hist-factory -f includelist-roofit-histfactory -%{_bindir}/hist2workspace -%{_bindir}/prepareHistFactory -%{_mandir}/man1/hist2workspace.1* -%{_mandir}/man1/prepareHistFactory.1* -%{_libdir}/%{name}/libHistFactory.* -%{_libdir}/%{name}/libHistFactory_rdict.pcm -%{_datadir}/%{name}/HistFactorySchema.dtd -%dir %{_includedir}/%{name}/RooStats/HistFactory -%doc roofit/histfactory/doc/README - -%files html -f includelist-html -%{_libdir}/%{name}/libHtml.* -%{_libdir}/%{name}/libHtml_rdict.pcm -%{_datadir}/%{name}/html - %files io -f includelist-io-io %{_libdir}/%{name}/libRIO.* %{_datadir}/%{name}/plugins/TArchiveFile/P010_TZIPFile.C @@ -3531,17 +3024,9 @@ fi %{_datadir}/%{name}/plugins/TFile/P040_TDCacheFile.C %{_datadir}/%{name}/plugins/TSystem/P020_TDCacheSystem.C -%if %{gfal2} -%files io-gfal -f includelist-io-gfal -%{_libdir}/%{name}/libGFAL.* -%{_libdir}/%{name}/libGFAL_rdict.pcm -%{_datadir}/%{name}/plugins/TFile/P050_TGFALFile.C -%endif - %files io-sql -f includelist-io-sql %{_libdir}/%{name}/libSQLIO.* %{_libdir}/%{name}/libSQLIO_rdict.pcm -%{_datadir}/%{name}/plugins/TFile/P090_TSQLFile.C %files io-xml -f includelist-io-xml %{_libdir}/%{name}/libXMLIO.* @@ -3614,8 +3099,6 @@ fi %{_libdir}/%{name}/libMinuit2_rdict.pcm %dir %{_includedir}/%{name}/Minuit2 %{_datadir}/%{name}/plugins/ROOT@@Math@@Minimizer/P010_Minuit2Minimizer.C -%{_datadir}/%{name}/plugins/TVirtualFitter/P030_TFitterMinuit.C -%{_datadir}/%{name}/plugins/TVirtualFitter/P040_TFitterFumili.C %files mlp -f includelist-math-mlp %{_libdir}/%{name}/libMLP.* @@ -3652,6 +3135,7 @@ fi %{_libdir}/%{name}/libEG.* %{_libdir}/%{name}/libEG_rdict.pcm %{_datadir}/%{name}/pdg_table.txt +%{_datadir}/%{name}/pdg_table_update.py %doc %{_pkgdocdir}/cfortran.doc %files montecarlo-pythia8 -f includelist-montecarlo-pythia8 @@ -3693,12 +3177,14 @@ fi %dir %{_datadir}/%{name}/js %dir %{_datadir}/%{name}/js/files %{_datadir}/%{name}/js/files/canv_batch.htm +%{_datadir}/%{name}/js/files/geom_batch.htm %{_datadir}/%{name}/js/files/web.config %{_datadir}/%{name}/js/files/wslist.htm +%ghost %{_datadir}/%{name}/js/build %ghost %{_datadir}/%{name}/js/img -%ghost %{_datadir}/%{name}/js/libs +%ghost %{_datadir}/%{name}/js/mathjax +%ghost %{_datadir}/%{name}/js/modules %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 @@ -3707,11 +3193,7 @@ fi %{_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 @@ -3719,140 +3201,130 @@ fi %{_datadir}/%{name}/plugins/TSystem/P040_TXNetSystem.C %{_datadir}/%{name}/plugins/ROOT@@Internal@@RRawFile/P020_RRawFileNetXNG.C -%files proof -f includelist-proof-proof -%{_bindir}/proofserv -%{_bindir}/proofserv.exe -%{_bindir}/xpdtest -%{_mandir}/man1/proofserv.1* -%{_mandir}/man1/xpdtest.1* -%{_libdir}/%{name}/libProof.* -%{_libdir}/%{name}/libProof_rdict.pcm -%{_datadir}/%{name}/plugins/TChain/P010_TProofChain.C -%{_datadir}/%{name}/plugins/TDataSetManager/P010_TDataSetManagerFile.C -%{_datadir}/%{name}/plugins/TProof/P010_TProofCondor.C -%{_datadir}/%{name}/plugins/TProof/P020_TProofSuperMaster.C -%{_datadir}/%{name}/plugins/TProof/P030_TProofLite.C -%{_datadir}/%{name}/plugins/TProof/P040_TProof.C -%{_datadir}/%{name}/valgrind-root.supp - -%files proof-bench -f includelist-proof-proofbench -%{_libdir}/%{name}/libProofBench.* -%{_libdir}/%{name}/libProofBench_rdict.pcm -%{_datadir}/%{name}/proof - -%files proof-player -f includelist-proof-proofplayer -%{_libdir}/%{name}/libProofDraw.* -%{_libdir}/%{name}/libProofDraw_rdict.pcm -%{_libdir}/%{name}/libProofPlayer.* -%{_libdir}/%{name}/libProofPlayer_rdict.pcm -%{_datadir}/%{name}/plugins/TProofMonSender/P010_TProofMonSenderML.C -%{_datadir}/%{name}/plugins/TProofMonSender/P020_TProofMonSenderSQL.C -%{_datadir}/%{name}/plugins/TVirtualProofPlayer/P010_TProofPlayer.C -%{_datadir}/%{name}/plugins/TVirtualProofPlayer/P020_TProofPlayerRemote.C -%{_datadir}/%{name}/plugins/TVirtualProofPlayer/P030_TProofPlayerLocal.C -%{_datadir}/%{name}/plugins/TVirtualProofPlayer/P040_TProofPlayerSlave.C -%{_datadir}/%{name}/plugins/TVirtualProofPlayer/P050_TProofPlayerSuperMaster.C -%{_datadir}/%{name}/plugins/TVirtualProofPlayer/P060_TProofPlayerLite.C - -%files proof-sessionviewer -f includelist-gui-sessionviewer -%{_libdir}/%{name}/libSessionViewer.* -%{_libdir}/%{name}/libSessionViewer_rdict.pcm -%{_datadir}/%{name}/plugins/TProofProgressDialog/P010_TProofProgressDialog.C -%{_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 - +%if %{roofit} %files roofit -f includelist-roofit-roofit %{_libdir}/%{name}/libRooFit.* %{_libdir}/%{name}/libRooFit_rdict.pcm -%files roofit-common -%{_libdir}/%{name}/libRooFitCommon.* - %files roofit-core -f includelist-roofit-roofitcore %{_libdir}/%{name}/libRooFitCore.* %{_libdir}/%{name}/libRooFitCore_rdict.pcm +%dir %{_includedir}/%{name}/RooFit +%dir %{_includedir}/%{name}/RooFit/Detail +%dir %{_includedir}/%{name}/RooFit/TestStatistics +%dir %{_includedir}/%{name}/RooFitLegacy %{_datadir}/gdb/auto-load%{_libdir}/%{name}/libRooFitCore.* -%if %{?fedora}%{!?fedora:0} >= 28 || %{?rhel}%{!?rhel:0} >= 8 %{_datadir}/gdb/auto-load%{_libdir}/%{name}/__pycache__/libRooFitCore.* -%endif %files roofit-more -f includelist-roofit-roofitmore %{_libdir}/%{name}/libRooFitMore.* %{_libdir}/%{name}/libRooFitMore_rdict.pcm -%files roofit-batchcompute -f includelist-roofit-batchcompute +%files roofit-batchcompute %{_libdir}/%{name}/libRooBatchCompute.* %{_libdir}/%{name}/libRooBatchCompute_* -%doc roofit/batchcompute/README.md - -%files roofit-dataframe-helpers -f includelist-roofit-RDataFrameHelpers -%{_libdir}/%{name}/libRooFitRDataFrameHelpers.* -%{_libdir}/%{name}/libRooFitRDataFrameHelpers_rdict.pcm %files roofit-hs3 -f includelist-roofit-hs3 %{_libdir}/%{name}/libRooFitHS3.* %{_libdir}/%{name}/libRooFitHS3_rdict.pcm -%{_datadir}/%{name}/RooFitHS3_wsexportkeys.json -%{_datadir}/%{name}/RooFitHS3_wsfactoryexpressions.json -%doc roofit/hs3/README.md +%dir %{_includedir}/%{name}/RooFitHS3 + +%files roofit-jsoninterface -f includelist-roofit-jsoninterface +%{_libdir}/%{name}/libRooFitJSONInterface.* +%{_libdir}/%{name}/libRooFitJSONInterface_rdict.pcm +%dir %{_includedir}/%{name}/RooFit + +%files roofit-codegen -f includelist-roofit-codegen +%{_libdir}/%{name}/libRooFitCodegen.* +%{_libdir}/%{name}/libRooFitCodegen_rdict.pcm + +%if %{roofitmp} +%files roofit-multiprocess -f includelist-roofit-multiprocess +%{_libdir}/%{name}/libRooFitMultiProcess.* +%dir %{_includedir}/%{name}/RooFit +%dir %{_includedir}/%{name}/RooFit/MultiProcess + +%files roofit-zmq +%{_libdir}/%{name}/libRooFitZMQ.* +%endif %files roostats -f includelist-roofit-roostats %{_libdir}/%{name}/libRooStats.* %{_libdir}/%{name}/libRooStats_rdict.pcm %dir %{_includedir}/%{name}/RooStats -%files sql-mysql -f includelist-sql-mysql -%{_libdir}/%{name}/libRMySQL.* -%{_libdir}/%{name}/libRMySQL_rdict.pcm -%{_datadir}/%{name}/plugins/TSQLServer/P010_TMySQLServer.C +%files hist-factory -f includelist-roofit-histfactory +%{_bindir}/hist2workspace +%{_bindir}/prepareHistFactory +%{_mandir}/man1/hist2workspace.1* +%{_mandir}/man1/prepareHistFactory.1* +%{_libdir}/%{name}/libHistFactory.* +%{_libdir}/%{name}/libHistFactory_rdict.pcm +%{_datadir}/%{name}/HistFactorySchema.dtd +%dir %{_includedir}/%{name}/RooStats/HistFactory +%dir %{_includedir}/%{name}/RooStats/HistFactory/Detail +%doc roofit/histfactory/doc/README -%files sql-odbc -f includelist-sql-odbc -%{_libdir}/%{name}/libRODBC.* -%{_libdir}/%{name}/libRODBC_rdict.pcm -%{_datadir}/%{name}/plugins/TSQLServer/P050_TODBCServer.C +%files xroofit -f includelist-roofit-xroofit +%{_libdir}/%{name}/libRooFitXRooFit.* +%{_libdir}/%{name}/libRooFitXRooFit_rdict.pcm +%dir %{_includedir}/%{name}/RooFit/xRooFit +%endif %files sql-sqlite -f includelist-sql-sqlite %{_libdir}/%{name}/libRSQLite.* %{_libdir}/%{name}/libRSQLite_rdict.pcm %{_datadir}/%{name}/plugins/TSQLServer/P060_TSQLiteServer.C -%files sql-pgsql -f includelist-sql-pgsql -%{_libdir}/%{name}/libPgSQL.* -%{_libdir}/%{name}/libPgSQL_rdict.pcm -%{_datadir}/%{name}/plugins/TSQLServer/P020_TPgSQLServer.C - %files tmva -f includelist-tmva-tmva %{_libdir}/%{name}/libTMVA.* %{_libdir}/%{name}/libTMVA_rdict.pcm %dir %{_includedir}/%{name}/TMVA %dir %{_includedir}/%{name}/TMVA/DNN %dir %{_includedir}/%{name}/TMVA/DNN/Architectures -%if %{tbb} %dir %{_includedir}/%{name}/TMVA/DNN/Architectures/Cpu -%endif %dir %{_includedir}/%{name}/TMVA/DNN/Architectures/Reference +%dir %{_includedir}/%{name}/TMVA/DNN/CNN +%dir %{_includedir}/%{name}/TMVA/DNN/RNN %license tmva/doc/LICENSE +%exclude %{_includedir}/%{name}/TMVA/RBDT.hxx +%exclude %{_includedir}/%{name}/TMVA/RInferenceUtils.hxx +%exclude %{_includedir}/%{name}/TMVA/RReader.hxx +%exclude %{_includedir}/%{name}/TMVA/RSofieReader.hxx +%exclude %{_includedir}/%{name}/TMVA/RStandardScaler.hxx +%exclude %{_includedir}/%{name}/TMVA/RTensorUtils.hxx +%exclude %{_includedir}/%{name}/TMVA/BatchGenerator/RBatchGenerator.hxx +%exclude %{_includedir}/%{name}/TMVA/BatchGenerator/RBatchLoader.hxx +%exclude %{_includedir}/%{name}/TMVA/BatchGenerator/RChunkConstructor.hxx +%exclude %{_includedir}/%{name}/TMVA/BatchGenerator/RChunkLoader.hxx + +%if %{dataframe} +%files tmva-utils +%{_libdir}/%{name}/libTMVAUtils.* +%{_libdir}/%{name}/libTMVAUtils_rdict.pcm +%dir %{_includedir}/%{name}/TMVA +%{_includedir}/%{name}/TMVA/RBDT.hxx +%{_includedir}/%{name}/TMVA/RInferenceUtils.hxx +%{_includedir}/%{name}/TMVA/RReader.hxx +%{_includedir}/%{name}/TMVA/RSofieReader.hxx +%{_includedir}/%{name}/TMVA/RStandardScaler.hxx +%{_includedir}/%{name}/TMVA/RTensorUtils.hxx +%dir %{_includedir}/%{name}/TMVA/BatchGenerator +%{_includedir}/%{name}/TMVA/BatchGenerator/RBatchGenerator.hxx +%{_includedir}/%{name}/TMVA/BatchGenerator/RBatchLoader.hxx +%{_includedir}/%{name}/TMVA/BatchGenerator/RChunkConstructor.hxx +%{_includedir}/%{name}/TMVA/BatchGenerator/RChunkLoader.hxx +%endif %files tmva-python -f includelist-tmva-pymva %{_libdir}/%{name}/libPyMVA.* %{_libdir}/%{name}/libPyMVA_rdict.pcm +%if %{rrr} %files tmva-r -f includelist-tmva-rmva %{_libdir}/%{name}/libRMVA.* %{_libdir}/%{name}/libRMVA_rdict.pcm +%endif %files tmva-sofie -f includelist-tmva-sofie %{_libdir}/%{name}/libROOTTMVASofie.* @@ -3874,9 +3346,11 @@ fi %{_libdir}/%{name}/libTree_rdict.pcm %doc %{_pkgdocdir}/README.SELECTOR +%if %{dataframe} %files tree-dataframe -f includelist-tree-dataframe %{_libdir}/%{name}/libROOTDataFrame.* %{_libdir}/%{name}/libROOTDataFrame_rdict.pcm +%endif %files tree-player -f includelist-tree-treeplayer %{_libdir}/%{name}/libTreePlayer.* @@ -3889,16 +3363,19 @@ fi %{_libdir}/%{name}/libTreeViewer_rdict.pcm %{_datadir}/%{name}/plugins/TVirtualTreeViewer/P010_TTreeViewer.C +%files tree-webviewer -f includelist-tree-webviewer +%{_libdir}/%{name}/libROOTTreeViewer.* +%{_libdir}/%{name}/libROOTTreeViewer_rdict.pcm +%{_datadir}/%{name}/plugins/TVirtualTreeViewer/P020_RTreeViewer.C + %files unfold -f includelist-hist-unfold %{_libdir}/%{name}/libUnfold.* %{_libdir}/%{name}/libUnfold_rdict.pcm %files cli -%{_bindir}/rootbrowse %{_bindir}/rootcp %{_bindir}/rootdrawtree %{_bindir}/rooteventselector -%{_bindir}/rootls %{_bindir}/rootmkdir %{_bindir}/rootmv %{_bindir}/rootprint @@ -3906,27 +3383,64 @@ fi %{_bindir}/rootslimtree %{_datadir}/%{name}/cli -%files notebook -%{_bindir}/rootnb.exe -%{_datadir}/%{name}/notebook -%doc %{_pkgdocdir}/JupyROOT-on-EPEL - -%if %{webgui} %files gui-webdisplay -f includelist-gui-webdisplay %{_libdir}/%{name}/libROOTWebDisplay.* %{_libdir}/%{name}/libROOTWebDisplay_rdict.pcm +%{_datadir}/%{name}/runfirefox.sh %{_datadir}/%{name}/ui5 -%ifarch %{qt5_qtwebengine_arches} -%files gui-qt5webdisplay -%{_libdir}/%{name}/libROOTQt5WebDisplay.* +%ifarch %{qt6_qtwebengine_arches} +%files gui-qt6webdisplay +%{_libdir}/%{name}/libROOTQt6WebDisplay.* %endif %files gui-webgui6 -f includelist-gui-webgui6 %{_libdir}/%{name}/libWebGui6.* %{_libdir}/%{name}/libWebGui6_rdict.pcm -%{_datadir}/%{name}/plugins/TGuiFactory/P030_TWebGuiFactory.C -%endif +%{_datadir}/%{name}/plugins/TCanvasImp/P010_TWebCanvas.C +%{_datadir}/%{name}/plugins/TControlBarImp/P010_TWebControlBar.C + +%files gui-browsable -f includelist-gui-browsable +%{_libdir}/%{name}/libROOTBrowsable.* +%{_libdir}/%{name}/libROOTBrowsable_rdict.pcm +%{_libdir}/%{name}/libROOTBranchBrowseProvider.* +%{_libdir}/%{name}/libROOTGeoBrowseProvider.* +%{_libdir}/%{name}/libROOTLeafDraw6Provider.* +%{_libdir}/%{name}/libROOTNTupleBrowseProvider.* +%{_libdir}/%{name}/libROOTNTupleDraw6Provider.* +%{_libdir}/%{name}/libROOTObjectDraw6Provider.* + +%files gui-browserv7 -f includelist-gui-browserv7 +%{_libdir}/%{name}/libROOTBrowserv7.* +%{_libdir}/%{name}/libROOTBrowserv7_rdict.pcm +%{_libdir}/%{name}/libROOTBrowserGeomWidget.* +%{_libdir}/%{name}/libROOTBrowserTCanvasWidget.* +%{_libdir}/%{name}/libROOTBrowserTreeWidget.* +%{_libdir}/%{name}/libROOTBrowserWidgets.* +%{_datadir}/%{name}/plugins/TBrowserImp/P030_RWebBrowserImp.C + +%files geom-checker -f includelist-geom-geomchecker +%{_libdir}/%{name}/libGeomChecker.* +%{_libdir}/%{name}/libGeomChecker_rdict.pcm +%{_datadir}/%{name}/plugins/TVirtualGeoChecker/P010_TGeoChecker.C + +%files geom-webviewer -f includelist-geom-webviewer +%{_libdir}/%{name}/libROOTGeomViewer.* +%{_libdir}/%{name}/libROOTGeomViewer_rdict.pcm +%{_datadir}/%{name}/plugins/TVirtualGeoPainter/P020_RGeoPainter.C + +%files tree-ntuple -f includelist-tree-ntuple +%{_libdir}/%{name}/libROOTNTuple.* +%{_libdir}/%{name}/libROOTNTuple_rdict.pcm +%dir %{_includedir}/%{name}/ROOT/libdaos_mock + +%files tree-ntuple-browse -f includelist-tree-ntuplebrowse +%{_libdir}/%{name}/libROOTNTupleBrowse.* +%{_libdir}/%{name}/libROOTNTupleBrowse_rdict.pcm + +%files tree-ntuple-utils -f includelist-tree-ntupleutil +%{_libdir}/%{name}/libROOTNTupleUtil.* +%{_libdir}/%{name}/libROOTNTupleUtil_rdict.pcm %if %{root7} %files graf-gpadv7 -f includelist-graf2d-gpadv7 @@ -3940,29 +3454,14 @@ fi %files graf3d-eve7 -f includelist-graf3d-eve7 %{_libdir}/%{name}/libROOTEve.* %{_libdir}/%{name}/libROOTEve_rdict.pcm -%{_datadir}/%{name}/plugins/TVirtualGeoPainter/P020_REveGeoPainter.C -%files gui-browsable -f includelist-gui-browsable -%{_libdir}/%{name}/libROOTBrowsable.* -%{_libdir}/%{name}/libROOTBrowsable_rdict.pcm -%{_libdir}/%{name}/libROOTBranchBrowseProvider.* -%{_libdir}/%{name}/libROOTHistDrawProvider.* -%{_libdir}/%{name}/libROOTLeafDraw6Provider.* +%files gui-browsable-v7 %{_libdir}/%{name}/libROOTLeafDraw7Provider.* -%{_libdir}/%{name}/libROOTNTupleBrowseProvider.* -%{_libdir}/%{name}/libROOTNTupleDraw6Provider.* %{_libdir}/%{name}/libROOTNTupleDraw7Provider.* -%{_libdir}/%{name}/libROOTObjectDraw6Provider.* %{_libdir}/%{name}/libROOTObjectDraw7Provider.* -%files gui-browserv7 -f includelist-gui-browserv7 -%{_libdir}/%{name}/libROOTBrowserv7.* -%{_libdir}/%{name}/libROOTBrowserv7_rdict.pcm -%{_libdir}/%{name}/libROOTBrowserGeomWidget.* +%files gui-browserv7-v7 %{_libdir}/%{name}/libROOTBrowserRCanvasWidget.* -%{_libdir}/%{name}/libROOTBrowserTCanvasWidget.* -%{_libdir}/%{name}/libROOTBrowserWidgets.* -%{_datadir}/%{name}/plugins/TBrowserImp/P030_RWebBrowserImp.C %files gui-canvaspainter %{_libdir}/%{name}/libROOTCanvasPainter.* @@ -3974,17 +3473,341 @@ fi %files histv7 -f includelist-hist-histv7 %{_libdir}/%{name}/libROOTHist.* %{_libdir}/%{name}/libROOTHist_rdict.pcm - -%files hist-draw -f includelist-hist-histdrawv7 -%{_libdir}/%{name}/libROOTHistDraw.* -%{_libdir}/%{name}/libROOTHistDraw_rdict.pcm - -%files tree-ntuple -f includelist-tree-ntuple -%{_libdir}/%{name}/libROOTNTuple.* -%{_libdir}/%{name}/libROOTNTuple_rdict.pcm %endif %changelog +* Mon Jan 12 2026 Mattias Ellert - 6.38.00-6 +- Fixes for gcc 16 + +* Thu Dec 25 2025 Mattias Ellert - 6.38.00-5 +- Fix test for stricter syntax in numpy 2.4.0 (backport) + +* Fri Dec 19 2025 Mattias Ellert - 6.38.00-4 +- Exclude tests for Fedora 43+ on s390x that fail due to hardware + acceleration in the zlib-ng library. + +* Thu Dec 18 2025 Mattias Ellert - 6.38.00-3 +- Don't install the python modules twice +- Fix Requires and Provides in the python3-root rpm + +* Thu Dec 11 2025 Mattias Ellert - 6.38.00-2 +- Skip RPATH using -DCMAKE_SKIP_INSTALL_RPATH:BOOL=ON (replaces + previously used root specific -Drpath:BOOL=OFF no longer available) +- Backport fixes to python module +- Rebuild for pythia8 8.3.16 + +* Tue Dec 09 2025 Mattias Ellert - 6.38.00-1 +- Update to 6.38.00 +- Removed subpackages: root-proof, root-proof-bench, root-proof-player, + root-proof-sessionviewer, root-sql-mysql, root-sql-odbc, root-sql-pgsql +- New subpackages: root-geom-checker, root-gui-treemap, + root-tree-ntuple-browse, root-histv7 +- JsMVA python (sub)module dropped from python3-root package +- Compile minuit2 with Open MP support +- Dropped patches: 7 +- New patches: 4 + +* Wed Oct 29 2025 Stephen Gallagher - 6.36.04-4 +- Rebuild for libarrow 22 + +* Thu Oct 09 2025 Jaroslav Škarvada - 6.36.04-3 +- Rebuilt for new graphviz + +* Fri Sep 19 2025 Python Maint - 6.36.04-2 +- Rebuilt for Python 3.14.0rc3 bytecode + +* Mon Aug 25 2025 Mattias Ellert - 6.36.04-1 +- Update to 6.36.04 + +* Wed Aug 20 2025 Jerry James - 6.36.02-7 +- Rebuild for tbb 2022.2.0 + +* Tue Aug 19 2025 Mattias Ellert - 6.36.02-6 +- Support libarrow 21 + +* Mon Aug 18 2025 Orion Poplawski - 6.36.02-5 +- Rebuild for libarrow 21 + +* Fri Aug 15 2025 Python Maint - 6.36.02-4 +- Rebuilt for Python 3.14.0rc2 bytecode + +* Wed Aug 13 2025 Orion Poplawski - 6.36.02-3 +- Rebuild for libarrow 21 + +* Fri Jul 25 2025 Fedora Release Engineering - 6.36.02-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild + +* Sun Jul 13 2025 Mattias Ellert - 6.36.02-1 +- Update to 6.36.02 + +* Thu Jul 10 2025 Stephen Gallagher - 6.36.00-3 +- Rebuilt for libarrow 20 + +* Sat Jun 21 2025 Mattias Ellert - 6.36.00-2 +- Add root-tree-ntuple and root-tree-ntuple-utils dependensies to root-core + (listed in root-config --libs) +- Rename root-fonts package to root-font-files +- Add optional test dependency python3-pandas now available in EPEL 10 +- Add dependency jupyter-notebook to root-jupyroot for EPEL 10.1 and later +- Fix Python 3.14 refcount issues in tests + +* Sat Jun 07 2025 Mattias Ellert - 6.36.00-1 +- Update to 6.36.00 +- Enable the R interface for EPEL 10.1 +- Removed subpackages: root-gui-qt5webdisplay, -hist-draw, -histv7 and -html +- New subpackage: root-roofit-codegen + +* Tue Jun 03 2025 Python Maint - 6.34.08-5 +- Rebuilt for Python 3.14 + +* Fri Apr 18 2025 Iñaki Úcar - 6.34.08-4 +- R-maint-sig mass rebuild + +* Fri Apr 18 2025 Iñaki Úcar - 6.34.08-3 +- R-maint-sig mass rebuild + +* Fri Apr 18 2025 Iñaki Úcar - 6.34.08-2 +- R-maint-sig mass rebuild + +* Thu Apr 17 2025 Mattias Ellert - 6.34.08-1 +- Update to 6.34.08 + +* Fri Mar 28 2025 Mattias Ellert - 6.34.06-1 +- Update to 6.34.06 +- Drop patches accepted upstream or previously backported + +* Wed Feb 19 2025 Mattias Ellert - 6.34.04-2 +- Fix roofit/roostats test failures with gcc 15 + +* Fri Feb 14 2025 Mattias Ellert - 6.34.04-1 +- Update to 6.34.04 +- Drop patches accepted upstream or previously backported + +* Fri Feb 14 2025 Benjamin A. Beasley - 6.34.02-8 +- Rebuilt for libarrow 19 + +* Sun Feb 02 2025 Orion Poplawski - 6.34.02-7 +- Rebuild with gsl 2.8 + +* Sat Feb 01 2025 Björn Esser - 6.34.02-6 +- Add explicit BR: libxcrypt-devel + +* Fri Jan 31 2025 Mattias Ellert - 6.34.02-5 +- Apply patches to fix build with gcc 15 +- Enable roofit-multiprocess for EPEL 10 (dependencies available) +- Rebuild for pythia8 8.3.13 + +* Sat Jan 18 2025 Fedora Release Engineering - 6.34.02-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild + +* Wed Jan 15 2025 Mattias Ellert - 6.34.02-3 +- Don't add dependencies on root-roofit-multiprocess and root-roofit-zmq + to root-roofit-core for EPEL builds + +* Sun Jan 12 2025 Mattias Ellert - 6.34.02-2 +- Adjust stressGraphics.ref +- Build for EPEL 10 +- Disable the R interface for EPEL 10 (R not yet abailable) +- Enable uring support for EPEL 9 (supported in kernel since RHEL 9.3) + +* Wed Dec 25 2024 Mattias Ellert - 6.34.02-1 +- Update to 6.34.02 +- Build CLAD plugin +- Removed package: root-roofit-dataframe-helpers + +* Wed Nov 27 2024 Richard W.M. Jones - 6.32.08-2 +- Rebuild for libarrow 18 + +* Thu Nov 14 2024 Mattias Ellert - 6.32.08-1 +- Update to 6.32.08 + +* Mon Sep 23 2024 Mattias Ellert - 6.32.06-1 +- Update to 6.32.06 +- Split out ROOT 7 dependent parts of root-browsable to a separate package +- Split out ROOT 7 dependent parts of root-browserv7 to a separate package + +* Wed Aug 21 2024 Mattias Ellert - 6.32.04-2 +- Re-enable Qt5 Web display for Fedora 41+ (qt5-qtwebengine fixed) + +* Wed Aug 14 2024 Mattias Ellert - 6.32.04-1 +- Update to 6.32.04 +- Drop patches accepted upstream +- Disable Qt5 Web display for Fedora 41+ (broken qt5-qtwebengine package) + +* Sun Jul 21 2024 Mattias Ellert - 6.32.02-4 +- Update ROOT's R interface for Rcpp 1.0.13 + +* Fri Jul 19 2024 Fedora Release Engineering - 6.32.02-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild + +* Thu Jul 11 2024 Mattias Ellert - 6.32.02-2 +- Add openssl-devel-engine build requirement on Fedora 41+ +- Fixes for TUri class (PCRE2 compatibility) +- Fix test failure with tbb 2021.13.0 + +* Tue Jun 18 2024 Mattias Ellert - 6.32.02-1 +- Update to 6.32.02 +- Drop patches accepted upstream + +* Mon Jun 17 2024 Mattias Ellert - 6.32.00-5 +- Add dependency on liburing-devel to root-io +- Exclude failing tutorial-tmva-RBatchGenerator_filters_vectors-py test + on aarch64 (Fedora 40+) + +* Mon Jun 10 2024 Mattias Ellert - 6.32.00-4 +- Backport fix for failing test with Python 3.13 + +* Sun Jun 09 2024 Python Maint - 6.32.00-3 +- Rebuilt for Python 3.13 + +* Sat Jun 08 2024 Mattias Ellert - 6.32.00-2 +- Python 3.13 compatibility + +* Mon Jun 03 2024 Mattias Ellert - 6.32.00-1 +- Update to 6.32.00 +- Drop EPEL 8 build (now requires Python >= 3.7 and tbb >= 2020) +- Dropped patches: 12 +- New patches: 6 +- The JsMVA python module is now a submodule of the ROOT python module +- The notebook package was merged with the JupyROOT package + +* Wed May 15 2024 Mattias Ellert - 6.30.06-5 +- Rebuilt for libarrow.so.1601 +- Improved fontconfig support + +* Sun Apr 28 2024 Benjamin A. Beasley - 6.30.06-4 +- Do not test with Pandas on 32-bit architectures + +* Thu Apr 25 2024 Iñaki Úcar - 6.30.06-3 +- R-maint-sig mass rebuild + +* Tue Apr 23 2024 Mattias Ellert - 6.30.06-2 +- Rebuilt for libarrow.so.1600 + +* Fri Apr 05 2024 Mattias Ellert - 6.30.06-1 +- Update to 6.30.06 + +* Mon Mar 25 2024 Mattias Ellert - 6.30.04-2 +- Support StandardSymbolsPS.otf + +* Wed Jan 31 2024 Mattias Ellert - 6.30.04-1 +- Update to 6.30.04 +- Drop patch root-adjust-test-for-failures-on-aarch64-ppc64le-s390x.patch + (accepted upstrem) +- Exclude failing TClingDataMemberInfo.Offset test on s390x + +* Fri Jan 26 2024 Mattias Ellert - 6.30.02-9 +- Rebuilt for libarrow.so.1500 + +* Fri Jan 26 2024 Mattias Ellert - 6.30.02-8 +- Exclude failing gtest-math-matrix-test-testMatrixTSparse on Fedora 40 + (aarch64, ppc64le and s390x) + +* Mon Jan 22 2024 Fedora Release Engineering - 6.30.02-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Wed Jan 17 2024 Jonathan Wakely - 6.30.02-6 +- Rebuilt for TBB 2021.11 + +* Fri Jan 12 2024 Mattias Ellert - 6.30.02-5 +- Define PYTHON_EXECUTABLE when calling cmake (Fixes EPEL 8 build) + +* Thu Dec 21 2023 Mattias Ellert - 6.30.02-4 +- Adjust tests for zlib-ng + +* Mon Dec 18 2023 Mattias Ellert - 6.30.02-3 +- Use "standardsymbolsps" instead of "symbol" when searching for the + Symbols font in order to not find Noto Symbols instead + +* Fri Dec 15 2023 Mattias Ellert - 6.30.02-2 +- Exclude pyunittests-pyroot-numbadeclare test + +* Sat Dec 02 2023 Mattias Ellert - 6.30.02-1 +- Update to 6.30.02 + +* Sat Nov 25 2023 Mattias Ellert - 6.30.00-1 +- Update to 6.30.00 +- Removed subpackages: root-io-gfal and root-roofit-common +- Dropped patches: 6 +- New patches: 6 + +* Thu Nov 02 2023 Mattias Ellert - 6.28.08-3 +- Rebuilt for libarrow.so.1400 + +* Wed Nov 01 2023 Mattias Ellert - 6.28.08-2 +- Enable RooFit::MultiProcess on Fedora 40+ + +* Sat Oct 14 2023 Mattias Ellert - 6.28.08-1 +- Update to 6.28.08 +- New subpackage root-tmva-utils (split off from root-tmva) +- Port to pcre2 + +* Tue Sep 05 2023 Mattias Ellert - 6.28.06-1 +- Update to 6.28.06 +- Drop patches root-testRooAbsL-test-compares-two-doubles-and-fails.patch and + root-strlcpy.patch (fixed upstream) + +* Sun Aug 06 2023 Mattias Ellert - 6.28.04-5 +- Rebuilt for libarrow.so.1300 + +* Fri Jul 21 2023 Fedora Release Engineering - 6.28.04-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + +* Sun Jul 09 2023 Mattias Ellert - 6.28.04-3 +- Fix build on Fedora 39+ where glibc has strlcpy and strlcat +- Enable build of root-gui-qt6webdisplay sub-package if Qt6 is available + +* Mon Jun 26 2023 Orion Poplawski - 6.28.04-2 +- Rebuilt for Python 3.12 + +* Mon May 08 2023 Mattias Ellert - 6.28.04-1 +- Update to 6.28.04 +- Drop patch root-RF-Rewrite-RooProdPdf.TestGetPartIntList-unit-test.patch + (previously backported) +- Enable Apache Arrow support (64 bit architectures only) + +* Fri Apr 21 2023 Iñaki Úcar - 6.28.02-3 +- R-maint-sig mass rebuild + +* Thu Mar 23 2023 Mattias Ellert - 6.28.02-2 +- Disable uring in EPEL 9 (liburing is available, but uring not + supported by kernel) + +* Wed Mar 22 2023 Mattias Ellert - 6.28.02-1 +- Update to 6.28.02 +- Dropped patches: 13 +- New patches: 1 + +* Sat Mar 18 2023 Mattias Ellert - 6.28.00-1 +- Update to 6.28.00 +- ROOT now uses llvm/clang version 13 (updated from version 9) +- Clean up specfile by removing EPEL 7 conditionals +- Drop dataframe, roofit and tmva-sofieparser on EPEL 8 ppc64le due to + "pure virtual method called" errors +- Split the root-geom sub-package into three separate sub-packages: + root-geom, root-geom-builder and root-geom-painter +- Enable uring support in EPEL 9 (liburing now available) +- New sub-packages: root-geom-webviewer, root-roofit-jsoninterface, + root-testsupport, root-tree-ntuple-utils, root-tree-webviewer, root-xroofit +- Dropped patches: 31 +- New patches: 17 +- Updated patches: 4 + +* Mon Jan 30 2023 Miro Hrončok - 6.26.10-2 +- Rebuilt to change Python shebangs to /usr/bin/python3.6 on EPEL 8 + +* Mon Jan 30 2023 Mattias Ellert - 6.26.10-5 +- Adapt to numpy 1.24 + +* Fri Jan 20 2023 Mattias Ellert - 6.26.10-4 +- Add missing #include + +* Fri Jan 20 2023 Fedora Release Engineering - 6.26.10-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + +* Thu Dec 29 2022 Maxwell G - 6.26.10-2 +- Rebuild for cfitsio 4.2 + * Wed Nov 16 2022 Mattias Ellert - 6.26.10-1 - Update to 6.26.10 - Drop patches root-Fixes-for-garbage-collection-in-Python-3.11.patch diff --git a/sources b/sources index ef0a91f..98e90e5 100644 --- a/sources +++ b/sources @@ -1,2 +1,3 @@ -SHA512 (root-6.26.10.tar.xz) = 896727ce6da68871a52894a0a3c1b749fece9f08c8cefe62f5beac505710d579c41b84832a727a2ba39dab09e4456773c05b5b23a0fd859ace8062470653bbdb -SHA512 (root-testfiles.tar.xz) = 945aef1a0cf5af672d4ab84b0ac00b76118e93008ff72447658ee82d9e955a1540af3ff7126e701418872f1d91b92ee96d4985840a519036c42732023a13f00f +SHA512 (root-6.38.00.tar.xz) = 7c452b509e8171a0cbb7c102a3d4c07333fc8535f1b2c2ab0b9f7434604f098989a78bb71c41039dd41dbbd3438ea8703939826092f075d9d730b6b53c84ac55 +SHA512 (root-testfiles.tar.xz) = 4bb7f8ca00b1427ba49f6428e9cfe5908a2ffdd2ce4134d3bc169a0629198352b5500fe0cf92c121d148e5af41f7016c96038a77794a4d37d94e6ec0a9d75670 +SHA512 (clad-2.2.tar.gz) = 6f76d706a829901fc0fcdb38b5ddad6ea8ad9186ea48a4b6b585fc62974a2cda11b96a448c25daaba0586962d6428773e7ab751236c6afa72a91d12f30f2d05e