diff --git a/root-32bit-dataframe.patch b/root-32bit-dataframe.patch new file mode 100644 index 0000000..f9ff85f --- /dev/null +++ b/root-32bit-dataframe.patch @@ -0,0 +1,142 @@ +diff -ur root-6.24.02.orig/bindings/pyroot_legacy/ROOT.py root-6.24.02/bindings/pyroot_legacy/ROOT.py +--- root-6.24.02.orig/bindings/pyroot_legacy/ROOT.py 2021-06-28 11:17:14.000000000 +0200 ++++ root-6.24.02/bindings/pyroot_legacy/ROOT.py 2021-08-11 10:44:16.895804556 +0200 +@@ -438,9 +438,7 @@ + # This function is injected as method to the respective classes in Pythonize.cxx. + _root._RDataFrameAsNumpy = _RDataFrameAsNumpy + +-# This Pythonisation is there only for 64 bits builds +-if (sys.maxsize > 2**32): # https://docs.python.org/3/library/platform.html#cross-platform +- _root.CreateScopeProxy( "TTree" ).AsMatrix = _TTreeAsMatrix ++_root.CreateScopeProxy( "TTree" ).AsMatrix = _TTreeAsMatrix + + + ### RINT command emulation ------------------------------------------------------ +diff -ur root-6.24.02.orig/build/unix/makepchinput.py root-6.24.02/build/unix/makepchinput.py +--- root-6.24.02.orig/build/unix/makepchinput.py 2021-06-28 11:17:14.000000000 +0200 ++++ root-6.24.02/build/unix/makepchinput.py 2021-08-11 10:44:16.926804638 +0200 +@@ -252,9 +252,6 @@ + "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 -ur root-6.24.02.orig/tree/dataframe/test/dataframe_cache.cxx root-6.24.02/tree/dataframe/test/dataframe_cache.cxx +--- root-6.24.02.orig/tree/dataframe/test/dataframe_cache.cxx 2021-06-28 11:17:14.000000000 +0200 ++++ root-6.24.02/tree/dataframe/test/dataframe_cache.cxx 2021-08-11 10:44:16.927804641 +0200 +@@ -224,8 +224,6 @@ + + } + +-#ifdef R__B64 +- + TEST(Cache, Regex) + { + +@@ -335,8 +333,6 @@ + gSystem->Unlink(fileName); + } + +-#endif // R__B64 +- + // ROOT-10563 + TEST(Cache, Alias) + { +diff -ur root-6.24.02.orig/tree/dataframe/test/datasource_arrow.cxx root-6.24.02/tree/dataframe/test/datasource_arrow.cxx +--- root-6.24.02.orig/tree/dataframe/test/datasource_arrow.cxx 2021-06-28 11:17:14.000000000 +0200 ++++ root-6.24.02/tree/dataframe/test/datasource_arrow.cxx 2021-08-11 10:44:16.927804641 +0200 +@@ -177,8 +177,6 @@ + } + #endif + +-#ifdef R__B64 +- + TEST(RArrowDS, FromARDF) + { + std::unique_ptr tds(new RArrowDS(createTestTable(), {})); +@@ -250,5 +248,3 @@ + } + + #endif // R__USE_IMT +- +-#endif // R__B64 +diff -ur root-6.24.02.orig/tree/dataframe/test/datasource_csv.cxx root-6.24.02/tree/dataframe/test/datasource_csv.cxx +--- root-6.24.02.orig/tree/dataframe/test/datasource_csv.cxx 2021-06-28 11:17:14.000000000 +0200 ++++ root-6.24.02/tree/dataframe/test/datasource_csv.cxx 2021-08-11 10:44:16.927804641 +0200 +@@ -207,8 +207,6 @@ + } + #endif + +-#ifdef R__B64 +- + TEST(RCsvDS, FromARDF) + { + std::unique_ptr tds(new RCsvDS(fileName0)); +@@ -321,5 +319,3 @@ + } + + #endif // R__USE_IMT +- +-#endif // R__B64 +diff -ur root-6.24.02.orig/tree/dataframe/test/datasource_root.cxx root-6.24.02/tree/dataframe/test/datasource_root.cxx +--- root-6.24.02.orig/tree/dataframe/test/datasource_root.cxx 2021-06-28 11:17:14.000000000 +0200 ++++ root-6.24.02/tree/dataframe/test/datasource_root.cxx 2021-08-11 10:44:16.928804644 +0200 +@@ -117,8 +117,6 @@ + } + #endif + +-#ifdef R__B64 +- + TEST(TRootTDS, FromARDF) + { + std::unique_ptr tds(new RRootDS(treeName, fileGlob)); +@@ -190,5 +188,3 @@ + } + + #endif // R__USE_IMT +- +-#endif // R__B64 +diff -ur root-6.24.02.orig/tree/dataframe/test/datasource_trivial.cxx root-6.24.02/tree/dataframe/test/datasource_trivial.cxx +--- root-6.24.02.orig/tree/dataframe/test/datasource_trivial.cxx 2021-06-28 11:17:14.000000000 +0200 ++++ root-6.24.02/tree/dataframe/test/datasource_trivial.cxx 2021-08-11 10:44:16.928804644 +0200 +@@ -141,8 +141,6 @@ + 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 @@ + } + + #endif // R__USE_IMT +- +-#endif // R__B64 +diff -ur root-6.24.02.orig/tutorials/CMakeLists.txt root-6.24.02/tutorials/CMakeLists.txt +--- root-6.24.02.orig/tutorials/CMakeLists.txt 2021-06-28 11:17:14.000000000 +0200 ++++ root-6.24.02/tutorials/CMakeLists.txt 2021-08-11 10:44:16.974804766 +0200 +@@ -279,10 +279,6 @@ + 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() +- + #---These ones are disabled !!! ------------------------------------ + set(extra_veto + legacy/benchmarks.C +@@ -335,7 +331,6 @@ + ${classic_veto} + ${pythia_veto} + ${root7_veto} +- ${bits32_veto} + ${xrootd_veto} + ${mlp_veto} + ${spectrum_veto} diff --git a/root-32bit-tests.patch b/root-32bit-tests.patch index ae15a5d..ea926b4 100644 --- a/root-32bit-tests.patch +++ b/root-32bit-tests.patch @@ -1,7 +1,7 @@ -From 55446dcd6eabc1fff218f266c11f31697fe99f09 Mon Sep 17 00:00:00 2001 +From 70d941cd6ebbc3726e08ef7f52d0135453f0b840 Mon Sep 17 00:00:00 2001 From: Mattias Ellert Date: Fri, 13 Mar 2020 16:21:55 +0100 -Subject: [PATCH] Run tests on 32 bit +Subject: [PATCH 2/3] Run tests on 32 bit --- test/stressGeometry.cxx | 8 -------- @@ -9,7 +9,7 @@ Subject: [PATCH] Run tests on 32 bit 2 files changed, 3 insertions(+), 15 deletions(-) diff --git a/test/stressGeometry.cxx b/test/stressGeometry.cxx -index f8d78f4f54..617b9e1644 100644 +index 5e81f5f2ca..18e41a6f45 100644 --- a/test/stressGeometry.cxx +++ b/test/stressGeometry.cxx @@ -257,14 +257,6 @@ void stressGeometry(const char *exp="*", Bool_t generate_ref=kFALSE, Bool_t vecg @@ -28,26 +28,26 @@ index f8d78f4f54..617b9e1644 100644 TString fname; for (i=0; i -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 deleted file mode 100644 index 5e095f3..0000000 --- a/root-Fix-a-numpy-test-for-32-bit-archs.patch +++ /dev/null @@ -1,32 +0,0 @@ -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 deleted file mode 100644 index 966d8da..0000000 --- a/root-Geom-Add-missing-includes-of-TMath.h.patch +++ /dev/null @@ -1,63 +0,0 @@ -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 deleted file mode 100644 index 608765d..0000000 --- a/root-PyROOT-Don-t-install-the-python-modules-twice.patch +++ /dev/null @@ -1,70 +0,0 @@ -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-Python-Fix-TF1-Pythonization-test-for-NumPy-2.4.0.patch b/root-Python-Fix-TF1-Pythonization-test-for-NumPy-2.4.0.patch deleted file mode 100644 index 2bc2576..0000000 --- a/root-Python-Fix-TF1-Pythonization-test-for-NumPy-2.4.0.patch +++ /dev/null @@ -1,82 +0,0 @@ -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 deleted file mode 100644 index 34bdebc..0000000 --- a/root-RF-Use-TRandom3-in-test-RooFuncWrapper.patch +++ /dev/null @@ -1,50 +0,0 @@ -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 deleted file mode 100644 index a45ae41..0000000 --- a/root-Revert-test-Fetch-the-geometries-from-EOS-and-not-fr.patch +++ /dev/null @@ -1,60 +0,0 @@ -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 deleted file mode 100644 index 4d5587f..0000000 --- a/root-Save-memory-Do-not-link-to-LLVM-libraries-in-parallel.patch +++ /dev/null @@ -1,47 +0,0 @@ -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 deleted file mode 100644 index 58ba414..0000000 --- a/root-VecOps-Remove-outdated-IsSmall-helper-function-in-te.patch +++ /dev/null @@ -1,34 +0,0 @@ -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-add-RCutFlowReport-to-LinkDef-file.patch b/root-add-RCutFlowReport-to-LinkDef-file.patch new file mode 100644 index 0000000..9ec99a1 --- /dev/null +++ b/root-add-RCutFlowReport-to-LinkDef-file.patch @@ -0,0 +1,26 @@ +From 2e3fabbe5423f50ee98ce848d8e85ec7a2a2106d Mon Sep 17 00:00:00 2001 +From: Enrico Guiraud +Date: Thu, 15 Jul 2021 12:17:56 +0200 +Subject: [PATCH] [DF] Add RCutFlowReport to LinkDef + +This should fix some sporadic failures in cling's symbol resolution +in builds without runtime cxx modules. +--- + tree/dataframe/inc/LinkDef.h | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/tree/dataframe/inc/LinkDef.h b/tree/dataframe/inc/LinkDef.h +index 8103468082..684fc3b6f1 100644 +--- a/tree/dataframe/inc/LinkDef.h ++++ b/tree/dataframe/inc/LinkDef.h +@@ -58,6 +58,7 @@ + #pragma link C++ class ROOT::Detail::RDF::RMergeableValue+; + #pragma link C++ class ROOT::Detail::RDF::RMergeableValue+; + #pragma link C++ class TNotifyLink; ++#pragma link C++ class ROOT::RDF::RCutFlowReport; + + #endif + +-- +2.31.1 + diff --git a/root-add-RDisplay-to-LinkDef-file.patch b/root-add-RDisplay-to-LinkDef-file.patch new file mode 100644 index 0000000..e86880c --- /dev/null +++ b/root-add-RDisplay-to-LinkDef-file.patch @@ -0,0 +1,25 @@ +From d9e15857c189edcfa75af5c6244ff68fac74f06f Mon Sep 17 00:00:00 2001 +From: Enrico Guiraud +Date: Thu, 10 Jun 2021 10:00:32 +0200 +Subject: [PATCH] [DF] Add RDisplay to LinkDef + +To help cling autoloading. +--- + tree/dataframe/inc/LinkDef.h | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/tree/dataframe/inc/LinkDef.h b/tree/dataframe/inc/LinkDef.h +index 3879ac8d5d..8103468082 100644 +--- a/tree/dataframe/inc/LinkDef.h ++++ b/tree/dataframe/inc/LinkDef.h +@@ -20,6 +20,7 @@ + #pragma link C++ namespace ROOT::Internal::RDF::GraphDrawing; + #pragma link C++ namespace ROOT::Detail::RDF; + #pragma link C++ namespace ROOT::RDF; ++#pragma link C++ class ROOT::RDF::RDisplay-; + #pragma link C++ class ROOT::Internal::RDF::RActionBase-; + #pragma link C++ class ROOT::Internal::RDF::RJittedAction-; + #pragma link C++ class ROOT::Detail::RDF::RFilterBase-; +-- +2.31.1 + diff --git a/root-add-TTreeProcessorMP-to-LinkDef-file.patch b/root-add-TTreeProcessorMP-to-LinkDef-file.patch new file mode 100644 index 0000000..c8a0b1f --- /dev/null +++ b/root-add-TTreeProcessorMP-to-LinkDef-file.patch @@ -0,0 +1,36 @@ +From 56d52ccf2fad2736e49d3cfc4c9df22492e1dbfc Mon Sep 17 00:00:00 2001 +From: Mattias Ellert +Date: Tue, 8 Jun 2021 02:46:18 +0200 +Subject: [PATCH] Add TTreeProcessorMP to LinkDef + +This fixes test failure: + + 745/1157 Test #729: tutorial-multicore-mp102_readNtuplesFillHistosAndFit ................***Failed 1.55 sec +Processing /builddir/build/BUILD/root-6.25.01/tutorials/multicore/mp102_readNtuplesFillHistosAndFit.C... +IncrementalExecutor::executeFunction: symbol '_ZN4ROOT16TTreeProcessorMPC1Ej' unresolved while linking [cling interface function]! +You are probably missing the definition of ROOT::TTreeProcessorMP::TTreeProcessorMP(unsigned int) +Maybe you need to load the corresponding shared library? +IncrementalExecutor::executeFunction: symbol '_ZN4ROOT16TTreeProcessorMP11ReplyToIdleEP7TSocket' unresolved while linking [cling interface function]! +You are probably missing the definition of ROOT::TTreeProcessorMP::ReplyToIdle(TSocket*) +Maybe you need to load the corresponding shared library? +CMake Error at /builddir/build/BUILD/root-6.25.01/x86_64-redhat-linux-gnu/RootTestDriver.cmake:237 (message): + error code: 1 +--- + tree/treeplayer/inc/LinkDef.h | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/tree/treeplayer/inc/LinkDef.h b/tree/treeplayer/inc/LinkDef.h +index e7fdd7c9bf..d195536a40 100644 +--- a/tree/treeplayer/inc/LinkDef.h ++++ b/tree/treeplayer/inc/LinkDef.h +@@ -30,6 +30,7 @@ + #pragma link C++ class TSimpleAnalysis+; + #ifndef _MSC_VER + #pragma link C++ class TMPWorkerTree+; ++#pragma link C++ class ROOT::TTreeProcessorMP-; + #endif + #ifdef R__USE_IMT + #pragma link C++ class ROOT::TTreeProcessorMT-; +-- +2.31.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 deleted file mode 100644 index 882247f..0000000 --- a/root-cppyy-Remove-code-related-to-finding-CPyCppyy-API-he.patch +++ /dev/null @@ -1,109 +0,0 @@ -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 deleted file mode 100644 index a79c861..0000000 --- a/root-cppyy-Remove-now-irrelevant-load_cpp_backend-call.patch +++ /dev/null @@ -1,46 +0,0 @@ -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-doc-no-notebooks.patch b/root-doc-no-notebooks.patch new file mode 100644 index 0000000..f94d31f --- /dev/null +++ b/root-doc-no-notebooks.patch @@ -0,0 +1,21 @@ +diff -ur root-6.20.02.orig/documentation/doxygen/filter.cxx root-6.20.02/documentation/doxygen/filter.cxx +--- root-6.20.02.orig/documentation/doxygen/filter.cxx 2020-03-15 16:21:25.000000000 +0100 ++++ root-6.20.02/documentation/doxygen/filter.cxx 2020-03-15 20:05:59.047270429 +0100 +@@ -378,16 +378,7 @@ + + // notebook found + if (gLineString.find("\\notebook") != string::npos) { +- ExecuteCommand(StringFormat("%s converttonotebook.py %s %s/notebooks/", +- gPythonExec.c_str(), +- gFileName.c_str(), gOutDir.c_str())); +- if (gPython){ +- gLineString = "## "; +- } +- else{ +- gLineString = "/// "; +- } +- gLineString += StringFormat( "\\htmlonly \"View \"Open \\endhtmlonly \n", gMacroName.c_str() , gMacroName.c_str()); ++ gLineString = ""; + } + + // \macro_output found diff --git a/root-doxygen-crash-el7.patch b/root-doxygen-crash-el7.patch new file mode 100644 index 0000000..28fb075 --- /dev/null +++ b/root-doxygen-crash-el7.patch @@ -0,0 +1,44 @@ +diff -ur root-6.24.06.orig/tutorials/multicore/mp201_parallelHistoFill.C root-6.24.06/tutorials/multicore/mp201_parallelHistoFill.C +--- root-6.24.06.orig/tutorials/multicore/mp201_parallelHistoFill.C 2021-09-01 10:08:19.000000000 +0200 ++++ root-6.24.06/tutorials/multicore/mp201_parallelHistoFill.C 2021-11-05 18:09:46.916687882 +0100 +@@ -5,7 +5,6 @@ + /// This tutorial shows how a histogram can be filled in parallel + /// with a multiprocess approach. + /// +-/// \macro_image + /// \macro_code + /// + /// \date January 2016 +diff -ur root-6.24.06.orig/tutorials/multicore/mt201_parallelHistoFill.C root-6.24.06/tutorials/multicore/mt201_parallelHistoFill.C +--- root-6.24.06.orig/tutorials/multicore/mt201_parallelHistoFill.C 2021-09-01 10:08:19.000000000 +0200 ++++ root-6.24.06/tutorials/multicore/mt201_parallelHistoFill.C 2021-12-06 18:19:08.498933048 +0100 +@@ -10,7 +10,6 @@ + /// method. This method is not thread safe: in presence of ROOT histograms, the + /// system will not crash but the result is not uniquely defined. + /// +-/// \macro_image + /// \macro_code + /// + /// \date January 2016 +diff -ur root-6.24.06.orig/tutorials/multicore/mt304_fillHistos.C root-6.24.06/tutorials/multicore/mt304_fillHistos.C +--- root-6.24.06.orig/tutorials/multicore/mt304_fillHistos.C 2021-09-01 10:08:19.000000000 +0200 ++++ root-6.24.06/tutorials/multicore/mt304_fillHistos.C 2021-12-06 19:54:20.634373797 +0100 +@@ -5,7 +5,6 @@ + /// Illustrates use of power-of-two autobin algorithm + /// + /// \macro_code +-/// \macro_image + /// + /// \date November 2017 + /// \author Gerardo Ganis +diff -ur root-6.24.06.orig/tutorials/multicore/mtbb201_parallelHistoFill.C root-6.24.06/tutorials/multicore/mtbb201_parallelHistoFill.C +--- root-6.24.06.orig/tutorials/multicore/mtbb201_parallelHistoFill.C 2021-09-01 10:08:19.000000000 +0200 ++++ root-6.24.06/tutorials/multicore/mtbb201_parallelHistoFill.C 2021-12-06 19:54:22.174377227 +0100 +@@ -5,7 +5,6 @@ + /// This tutorial shows how a histogram can be filled in parallel + /// with a multiprocess approach. + /// +-/// \macro_image + /// \macro_code + /// + /// \date January 2016 diff --git a/root-doxygen-crash.patch b/root-doxygen-crash.patch new file mode 100644 index 0000000..d69d7e7 --- /dev/null +++ b/root-doxygen-crash.patch @@ -0,0 +1,275 @@ +diff -ur root-6.24.02.orig/tutorials/dataframe/df002_dataModel.C root-6.24.02/tutorials/dataframe/df002_dataModel.C +--- root-6.24.02.orig/tutorials/dataframe/df002_dataModel.C 2021-06-28 11:17:14.000000000 +0200 ++++ root-6.24.02/tutorials/dataframe/df002_dataModel.C 2021-08-11 03:55:11.021149115 +0200 +@@ -7,7 +7,6 @@ + /// complex than flat ntuples with RDataFrame + /// + /// \macro_code +-/// \macro_image + /// + /// \date December 2016 + /// \author Danilo Piparo (CERN) +diff -ur root-6.24.02.orig/tutorials/dataframe/df002_dataModel.py root-6.24.02/tutorials/dataframe/df002_dataModel.py +--- root-6.24.02.orig/tutorials/dataframe/df002_dataModel.py 2021-06-28 11:17:14.000000000 +0200 ++++ root-6.24.02/tutorials/dataframe/df002_dataModel.py 2021-08-11 03:55:11.084149272 +0200 +@@ -7,7 +7,6 @@ + ## complex than flat ntuples with RDataFrame + ## + ## \macro_code +-## \macro_image + ## + ## \date May 2017 + ## \author Danilo Piparo (CERN) +diff -ur root-6.24.02.orig/tutorials/dataframe/df003_profiles.C root-6.24.02/tutorials/dataframe/df003_profiles.C +--- root-6.24.02.orig/tutorials/dataframe/df003_profiles.C 2021-06-28 11:17:14.000000000 +0200 ++++ root-6.24.02/tutorials/dataframe/df003_profiles.C 2021-08-11 03:55:11.148149432 +0200 +@@ -7,7 +7,6 @@ + /// RDataFrame. See the documentation of TProfile and TProfile2D to better + /// understand the analogy of this code with the example one. + /// +-/// \macro_image + /// \macro_code + /// + /// \date February 2017 +diff -ur root-6.24.02.orig/tutorials/dataframe/df003_profiles.py root-6.24.02/tutorials/dataframe/df003_profiles.py +--- root-6.24.02.orig/tutorials/dataframe/df003_profiles.py 2021-06-28 11:17:14.000000000 +0200 ++++ root-6.24.02/tutorials/dataframe/df003_profiles.py 2021-08-11 03:55:11.211149590 +0200 +@@ -8,7 +8,6 @@ + ## understand the analogy of this code with the example one. + ## + ## \macro_code +-## \macro_image + ## + ## \date February 2017 + ## \author Danilo Piparo (CERN) +diff -ur root-6.24.02.orig/tutorials/dataframe/df005_fillAnyObject.C root-6.24.02/tutorials/dataframe/df005_fillAnyObject.C +--- root-6.24.02.orig/tutorials/dataframe/df005_fillAnyObject.C 2021-06-28 11:17:14.000000000 +0200 ++++ root-6.24.02/tutorials/dataframe/df005_fillAnyObject.C 2021-08-11 03:55:11.275149750 +0200 +@@ -7,7 +7,6 @@ + /// `Fill` method. + /// + /// \macro_code +-/// \macro_image + /// + /// \date March 2017 + /// \author Danilo Piparo (CERN) +diff -ur root-6.24.02.orig/tutorials/dataframe/df007_snapshot.C root-6.24.02/tutorials/dataframe/df007_snapshot.C +--- root-6.24.02.orig/tutorials/dataframe/df007_snapshot.C 2021-06-28 11:17:14.000000000 +0200 ++++ root-6.24.02/tutorials/dataframe/df007_snapshot.C 2021-08-11 03:55:11.338149907 +0200 +@@ -5,7 +5,6 @@ + /// + /// This tutorial shows how to write out datasets in ROOT format using the RDataFrame + /// +-/// \macro_image + /// \macro_code + /// + /// \date April 2017 +diff -ur root-6.24.02.orig/tutorials/dataframe/df007_snapshot.py root-6.24.02/tutorials/dataframe/df007_snapshot.py +--- root-6.24.02.orig/tutorials/dataframe/df007_snapshot.py 2021-06-28 11:17:14.000000000 +0200 ++++ root-6.24.02/tutorials/dataframe/df007_snapshot.py 2021-08-11 03:55:11.402150067 +0200 +@@ -5,7 +5,6 @@ + ## + ## This tutorial shows how to write out datasets in ROOT format using the RDataFrame + ## +-## \macro_image + ## \macro_code + ## + ## \date April 2017 +diff -ur root-6.24.02.orig/tutorials/dataframe/df014_CSVDataSource.C root-6.24.02/tutorials/dataframe/df014_CSVDataSource.C +--- root-6.24.02.orig/tutorials/dataframe/df014_CSVDataSource.C 2021-06-28 11:17:14.000000000 +0200 ++++ root-6.24.02/tutorials/dataframe/df014_CSVDataSource.C 2021-08-11 03:55:11.465150225 +0200 +@@ -14,7 +14,6 @@ + /// DOI: [10.7483/OPENDATA.CMS.CB8H.MFFA](http://opendata.cern.ch/record/700). + /// + /// \macro_code +-/// \macro_image + /// + /// \date October 2017 + /// \author Enric Tejedor (CERN) +diff -ur root-6.24.02.orig/tutorials/dataframe/df014_CSVDataSource.py root-6.24.02/tutorials/dataframe/df014_CSVDataSource.py +--- root-6.24.02.orig/tutorials/dataframe/df014_CSVDataSource.py 2021-06-28 11:17:14.000000000 +0200 ++++ root-6.24.02/tutorials/dataframe/df014_CSVDataSource.py 2021-08-11 03:55:11.529150385 +0200 +@@ -14,7 +14,6 @@ + ## DOI: [10.7483/OPENDATA.CMS.CB8H.MFFA](http://opendata.cern.ch/record/700). + ## + ## \macro_code +-## \macro_image + ## + ## \date October 2017 + ## \author Enric Tejedor (CERN) +diff -ur root-6.24.02.orig/tutorials/dataframe/df015_LazyDataSource.C root-6.24.02/tutorials/dataframe/df015_LazyDataSource.C +--- root-6.24.02.orig/tutorials/dataframe/df015_LazyDataSource.C 2021-06-28 11:17:14.000000000 +0200 ++++ root-6.24.02/tutorials/dataframe/df015_LazyDataSource.C 2021-08-11 03:55:11.593150545 +0200 +@@ -14,7 +14,6 @@ + /// From the ROOT website: https://root.cern.ch/files/tutorials/tdf014_CsvDataSource_MuRun2010B.csv + /// + /// \macro_code +-/// \macro_image + /// + /// \date February 2018 + /// \author Danilo Piparo (CERN) +diff -ur root-6.24.02.orig/tutorials/dataframe/df016_vecOps.C root-6.24.02/tutorials/dataframe/df016_vecOps.C +--- root-6.24.02.orig/tutorials/dataframe/df016_vecOps.C 2021-06-28 11:17:14.000000000 +0200 ++++ root-6.24.02/tutorials/dataframe/df016_vecOps.C 2021-08-11 03:55:11.656150702 +0200 +@@ -7,7 +7,6 @@ + /// stored in datasets, a situation very common in HEP data analysis. + /// + /// \macro_code +-/// \macro_image + /// + /// \date February 2018 + /// \author Danilo Piparo (CERN) +diff -ur root-6.24.02.orig/tutorials/dataframe/df016_vecOps.py root-6.24.02/tutorials/dataframe/df016_vecOps.py +--- root-6.24.02.orig/tutorials/dataframe/df016_vecOps.py 2021-06-28 11:17:14.000000000 +0200 ++++ root-6.24.02/tutorials/dataframe/df016_vecOps.py 2021-08-11 03:55:11.720150862 +0200 +@@ -6,7 +6,6 @@ + ## This tutorial shows the potential of the VecOps approach for treating collections + ## stored in datasets, a situation very common in HEP data analysis. + ## +-## \macro_image + ## \macro_code + ## + ## \date February 2018 +diff -ur root-6.24.02.orig/tutorials/dataframe/df017_vecOpsHEP.C root-6.24.02/tutorials/dataframe/df017_vecOpsHEP.C +--- root-6.24.02.orig/tutorials/dataframe/df017_vecOpsHEP.C 2021-06-28 11:17:14.000000000 +0200 ++++ root-6.24.02/tutorials/dataframe/df017_vecOpsHEP.C 2021-08-11 03:55:11.783151020 +0200 +@@ -11,7 +11,6 @@ + /// greater than 100. + /// + /// \macro_code +-/// \macro_image + /// + /// \date March 2018 + /// \authors Danilo Piparo (CERN), Andre Vieira Silva +diff -ur root-6.24.02.orig/tutorials/dataframe/df017_vecOpsHEP.py root-6.24.02/tutorials/dataframe/df017_vecOpsHEP.py +--- root-6.24.02.orig/tutorials/dataframe/df017_vecOpsHEP.py 2021-06-28 11:17:14.000000000 +0200 ++++ root-6.24.02/tutorials/dataframe/df017_vecOpsHEP.py 2021-08-11 03:55:11.846151177 +0200 +@@ -7,7 +7,6 @@ + ## model typically adopted in HEP for analysis. + ## + ## \macro_code +-## \macro_image + ## + ## \date March 2018 + ## \authors Danilo Piparo (CERN), Andre Vieira Silva +diff -ur root-6.24.02.orig/tutorials/dataframe/df019_Cache.C root-6.24.02/tutorials/dataframe/df019_Cache.C +--- root-6.24.02.orig/tutorials/dataframe/df019_Cache.C 2021-06-28 11:17:14.000000000 +0200 ++++ root-6.24.02/tutorials/dataframe/df019_Cache.C 2021-08-11 03:55:11.910151337 +0200 +@@ -18,7 +18,6 @@ + /// only when the event loop is triggered on it. + /// + /// \macro_code +-/// \macro_image + /// + /// \date June 2018 + /// \author Danilo Piparo (CERN) +diff -ur root-6.24.02.orig/tutorials/dataframe/df019_Cache.py root-6.24.02/tutorials/dataframe/df019_Cache.py +--- root-6.24.02.orig/tutorials/dataframe/df019_Cache.py 2021-06-28 11:17:14.000000000 +0200 ++++ root-6.24.02/tutorials/dataframe/df019_Cache.py 2021-08-11 03:55:11.973151495 +0200 +@@ -18,7 +18,6 @@ + ## only when the event loop is triggered on it. + ## + ## \macro_code +-## \macro_image + ## + ## \date June 2018 + ## \author Danilo Piparo (CERN) +diff -ur root-6.24.02.orig/tutorials/dataframe/df021_createTGraph.C root-6.24.02/tutorials/dataframe/df021_createTGraph.C +--- root-6.24.02.orig/tutorials/dataframe/df021_createTGraph.C 2021-06-28 11:17:14.000000000 +0200 ++++ root-6.24.02/tutorials/dataframe/df021_createTGraph.C 2021-08-11 03:55:12.037151655 +0200 +@@ -4,7 +4,6 @@ + /// Fill a TGraph using RDataFrame. + /// + /// \macro_code +-/// \macro_image + /// + /// \date July 2018 + /// \authors Enrico Guiraud, Danilo Piparo (CERN), Massimo Tumolo (Politecnico di Torino) +diff -ur root-6.24.02.orig/tutorials/dataframe/df021_createTGraph.py root-6.24.02/tutorials/dataframe/df021_createTGraph.py +--- root-6.24.02.orig/tutorials/dataframe/df021_createTGraph.py 2021-06-28 11:17:14.000000000 +0200 ++++ root-6.24.02/tutorials/dataframe/df021_createTGraph.py 2021-08-11 03:55:12.100151813 +0200 +@@ -4,7 +4,6 @@ + ## Fill a TGraph using RDataFrame. + ## + ## \macro_code +-## \macro_image + ## + ## \date July 2018 + ## \authors Enrico Guiraud, Danilo Piparo (CERN), Massimo Tumolo (Politecnico di Torino) +diff -ur root-6.24.02.orig/tutorials/tmva/tmva003_RReader.C root-6.24.02/tutorials/tmva/tmva003_RReader.C +--- root-6.24.02.orig/tutorials/tmva/tmva003_RReader.C 2021-06-28 11:17:14.000000000 +0200 ++++ root-6.24.02/tutorials/tmva/tmva003_RReader.C 2021-08-11 04:16:33.833359421 +0200 +@@ -5,7 +5,6 @@ + /// TMVA XML files. + /// + /// \macro_code +-/// \macro_output + /// + /// \date July 2019 + /// \author Stefan Wunsch +diff -ur root-6.24.02.orig/tutorials/tmva/tmva103_Application.C root-6.24.02/tutorials/tmva/tmva103_Application.C +--- root-6.24.02.orig/tutorials/tmva/tmva103_Application.C 2021-06-28 11:17:14.000000000 +0200 ++++ root-6.24.02/tutorials/tmva/tmva103_Application.C 2021-08-11 21:56:49.387390340 +0200 +@@ -6,7 +6,6 @@ + /// event-by-event inference, batch inference and pipelines with RDataFrame. + /// + /// \macro_code +-/// \macro_output + /// + /// \date December 2018 + /// \author Stefan Wunsch +diff -ur root-6.24.02.orig/tutorials/tmva/TMVA_CNN_Classification.C root-6.24.02/tutorials/tmva/TMVA_CNN_Classification.C +--- root-6.24.02.orig/tutorials/tmva/TMVA_CNN_Classification.C 2021-06-28 11:17:14.000000000 +0200 ++++ root-6.24.02/tutorials/tmva/TMVA_CNN_Classification.C 2021-08-10 15:21:03.306171069 +0200 +@@ -6,7 +6,6 @@ + /// This is an example of using a CNN in TMVA. We do classification using a toy image data set + /// that is generated when running the example macro + /// +-/// \macro_image + /// \macro_output + /// \macro_code + /// +diff -ur root-6.24.02.orig/tutorials/tmva/TMVA_Higgs_Classification.C root-6.24.02/tutorials/tmva/TMVA_Higgs_Classification.C +--- root-6.24.02.orig/tutorials/tmva/TMVA_Higgs_Classification.C 2021-06-28 11:17:14.000000000 +0200 ++++ root-6.24.02/tutorials/tmva/TMVA_Higgs_Classification.C 2021-08-10 15:21:33.974251559 +0200 +@@ -7,7 +7,6 @@ + /// used in this paper: Baldi, P., P. Sadowski, and D. Whiteson. “Searching for Exotic Particles in High-energy Physics + /// with Deep Learning.” Nature Communications 5 (July 2, 2014). + /// +-/// \macro_image + /// \macro_output + /// \macro_code + /// +diff -ur root-6.24.02.orig/tutorials/tmva/TMVA_RNN_Classification.C root-6.24.02/tutorials/tmva/TMVA_RNN_Classification.C +--- root-6.24.02.orig/tutorials/tmva/TMVA_RNN_Classification.C 2021-06-28 11:17:14.000000000 +0200 ++++ root-6.24.02/tutorials/tmva/TMVA_RNN_Classification.C 2021-08-10 15:21:15.657203486 +0200 +@@ -6,7 +6,6 @@ + /// This is an example of using a RNN in TMVA. We do classification using a toy time dependent data set + /// that is generated when running this example macro + /// +-/// \macro_image + /// \macro_output + /// \macro_code + /// +diff -ur root-6.24.02.orig/tutorials/v7/line.cxx root-6.24.02/tutorials/v7/line.cxx +--- root-6.24.02.orig/tutorials/v7/line.cxx 2021-06-28 11:17:14.000000000 +0200 ++++ root-6.24.02/tutorials/v7/line.cxx 2021-08-16 14:25:32.528867781 +0200 +@@ -6,7 +6,6 @@ + /// "normal" coordinates' system and changing the line color linearly from black + /// to red. + /// +-/// \macro_image (line.png) + /// \macro_code + /// + /// \date 2018-03-18 +diff -ur root-6.24.02.orig/tutorials/v7/ntuple/ntpl005_introspection.C root-6.24.02/tutorials/v7/ntuple/ntpl005_introspection.C +--- root-6.24.02.orig/tutorials/v7/ntuple/ntpl005_introspection.C 2021-06-28 11:17:14.000000000 +0200 ++++ root-6.24.02/tutorials/v7/ntuple/ntpl005_introspection.C 2021-08-10 15:22:06.504336763 +0200 +@@ -4,7 +4,6 @@ + /// Write and read an RNTuple from a user-defined class. Adapted from tv3.C + /// Illustrates various RNTuple introspection methods. + /// +-/// \macro_image + /// \macro_code + /// + /// \date April 2020 diff --git a/root-doxygen-fix1.patch b/root-doxygen-fix1.patch new file mode 100644 index 0000000..9525bf4 --- /dev/null +++ b/root-doxygen-fix1.patch @@ -0,0 +1,87 @@ +From e303e0105b6f7bd7848a4385fcb62bedb847abb4 Mon Sep 17 00:00:00 2001 +From: Olivier Couet +Date: Mon, 12 Apr 2021 16:22:49 +0200 +Subject: [PATCH] RLogScopedVerbosity doxygen doc fix (#7830) + +* RLogScopedVerbosity doxygen doc was not visible because source code was under ``` instead of ~~~ + +* [foundation] RLogger doc (NFC) - thanks, Sergey! + +Co-authored-by: Axel Naumann +--- + core/foundation/inc/ROOT/RLogger.hxx | 20 ++++++++++---------- + 1 file changed, 10 insertions(+), 10 deletions(-) + +diff --git a/core/foundation/inc/ROOT/RLogger.hxx b/core/foundation/inc/ROOT/RLogger.hxx +index d753bbc358..c1a1b22690 100644 +--- a/core/foundation/inc/ROOT/RLogger.hxx ++++ b/core/foundation/inc/ROOT/RLogger.hxx +@@ -109,7 +109,7 @@ public: + /// Construct an anonymous channel. + RLogChannel() = default; + +- /// Construct an anonymous channel with a default vebosity. ++ /// Construct an anonymous channel with a default verbosity. + explicit RLogChannel(ELogLevel verbosity) : fVerbosity(verbosity) {} + + /// Construct a log channel given its name, which is part of the diagnostics. +@@ -202,11 +202,11 @@ namespace Detail { + + This builder can be used through the utility preprocessor macros R__LOG_ERROR, + R__LOG_WARNING etc like this: +- ```c++ ++~~~ {.cpp} + R__LOG_INFO(ROOT::Experimental::HistLog()) << "all we know is " << 42; + const int decreasedInfoLevel = 5; + R__LOG_XDEBUG(ROOT::Experimental::WebGUILog(), decreasedInfoLevel) << "nitty-gritty details"; +- ``` ++~~~ + This will automatically capture the current class and function name, the file and line number. + */ + +@@ -235,10 +235,10 @@ public: + Change the verbosity level (global or specific to the RLogChannel passed to the + constructor) for the lifetime of this object. + Example: +- ```c++ ++~~~ {.cpp} + RLogScopedVerbosity debugThis(gFooLog, ELogLevel::kDebug); + Foo::SomethingToDebug(); +- ``` ++~~~ + */ + class RLogScopedVerbosity { + RLogChannel *fChannel; +@@ -331,10 +331,10 @@ inline ELogLevel RLogChannel::GetEffectiveVerbosity(const RLogManager &mgr) cons + + - The conditional `RLogBuilder` use prevents stream operators from being called if + verbosity is too low, i.e.: +- ```` ++ ~~~ + RLogScopedVerbosity silence(RLogLevel::kFatal); + R__LOG_DEBUG(7) << WillNotBeCalled(); +- ``` ++ ~~~ + - To update counts of warnings / errors / fatal errors, those RLogEntries must + always be created, even if in the end their emission will be silenced. This + should be fine, performance-wise, as they should not happen frequently. +@@ -350,13 +350,13 @@ inline ELogLevel RLogChannel::GetEffectiveVerbosity(const RLogManager &mgr) cons + + /// \name LogMacros + /// Macros to log diagnostics. +-/// ```c++ ++/// ~~~ {.cpp} + /// R__LOG_INFO(ROOT::Experimental::HistLog()) << "all we know is " << 42; + /// + /// RLogScopedVerbosity verbose(kDebug + 5); + /// const int decreasedInfoLevel = 5; +-/// R__LOG_DEBUG(decreasedInfoLevel, ROOT::Experimental::WebGUILog()) << "nitty-gritty details"; +-/// ``` ++/// R__LOG_DEBUG(ROOT::Experimental::WebGUILog(), decreasedInfoLevel) << "nitty-gritty details"; ++/// ~~~ + ///\{ + #define R__LOG_FATAL(...) R__LOG_TO_CHANNEL(ROOT::Experimental::ELogLevel::kFatal, __VA_ARGS__) + #define R__LOG_ERROR(...) R__LOG_TO_CHANNEL(ROOT::Experimental::ELogLevel::kError, __VA_ARGS__) +-- +2.33.1 + diff --git a/root-doxygen-fix2.patch b/root-doxygen-fix2.patch new file mode 100644 index 0000000..1fa75e7 --- /dev/null +++ b/root-doxygen-fix2.patch @@ -0,0 +1,26 @@ +From 37a1a43347bc1ecb492b13e2f06d80c16779c84f Mon Sep 17 00:00:00 2001 +From: Mattias Ellert +Date: Sun, 5 Dec 2021 21:51:32 +0100 +Subject: [PATCH] Fix doxygen warning + +warning: reached end of file while inside a ~~~ block! +--- + gui/webdisplay/src/RWebDisplayHandle.cxx | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/gui/webdisplay/src/RWebDisplayHandle.cxx b/gui/webdisplay/src/RWebDisplayHandle.cxx +index 44a544bb51..84ff7a6990 100644 +--- a/gui/webdisplay/src/RWebDisplayHandle.cxx ++++ b/gui/webdisplay/src/RWebDisplayHandle.cxx +@@ -608,7 +608,7 @@ std::unique_ptr RWebDisplayHandle::Display(const RWebDisplayA + /// Browser can specified when starting `root --web=firefox` + /// Returns true when browser started + /// It is convenience method, equivalent to: +-/// ~~~ ++/// ~~~ + /// RWebDisplayArgs args; + /// args.SetUrl(url); + /// args.SetStandalone(false); +-- +2.33.1 + diff --git a/root-epel7-ppc64le-pyroot.patch b/root-epel7-ppc64le-pyroot.patch new file mode 100644 index 0000000..4619bf0 --- /dev/null +++ b/root-epel7-ppc64le-pyroot.patch @@ -0,0 +1,16 @@ +diff -ur root-6.22.04.orig/bindings/pyroot/pythonizations/python/ROOT/__init__.py root-6.22.04/bindings/pyroot/pythonizations/python/ROOT/__init__.py +--- root-6.22.04.orig/bindings/pyroot/pythonizations/python/ROOT/__init__.py 2020-11-13 11:42:09.000000000 +0100 ++++ root-6.22.04/bindings/pyroot/pythonizations/python/ROOT/__init__.py 2020-11-14 15:38:24.462463625 +0100 +@@ -19,6 +19,12 @@ + # Prevent cppyy from filtering ROOT libraries + environ['CPPYY_NO_ROOT_FILTER'] = '1' + ++try: ++ from ctypes import cdll ++ libCore = cdll.LoadLibrary("libCore.so") ++except: ++ print("An exception occurred while loading libCore.so with ctypes") ++ + import cppyy + if not 'ROOTSYS' in environ: + # Revert setting made by cppyy diff --git a/root-fix-compilation-with-gcc-12.patch b/root-fix-compilation-with-gcc-12.patch new file mode 100644 index 0000000..2c34516 --- /dev/null +++ b/root-fix-compilation-with-gcc-12.patch @@ -0,0 +1,63 @@ +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-multicore-tests-with-few-cores.patch b/root-fix-multicore-tests-with-few-cores.patch new file mode 100644 index 0000000..55ad56e --- /dev/null +++ b/root-fix-multicore-tests-with-few-cores.patch @@ -0,0 +1,168 @@ +From 153f1c3de0e24f5678fd3a706f902ac12b11048e Mon Sep 17 00:00:00 2001 +From: Mattias Ellert +Date: Sun, 18 Apr 2021 07:28:41 +0200 +Subject: [PATCH] Fix multicore tests when running on machines with few cores + +When running on machines with few cores, enabling multithreading can +give you fewer cores than requested. For most of the tests this does +not matter. However, some tests verify the number of threads used. +This commit adapts those tests for this situation. +--- + tree/dataframe/test/dataframe_concurrency.cxx | 18 +++++++++------- + tree/dataframe/test/dataframe_interface.cxx | 7 +++++-- + tree/dataframe/test/dataframe_simple.cxx | 2 +- + tree/dataframe/test/dataframe_snapshot.cxx | 6 ++++-- + .../test/treeprocmt/treeprocessormt.cxx | 21 +++++++++++++++---- + 5 files changed, 37 insertions(+), 17 deletions(-) + +diff --git a/tree/dataframe/test/dataframe_concurrency.cxx b/tree/dataframe/test/dataframe_concurrency.cxx +index d1b25493e5..a4bce595f8 100644 +--- a/tree/dataframe/test/dataframe_concurrency.cxx ++++ b/tree/dataframe/test/dataframe_concurrency.cxx +@@ -57,33 +57,35 @@ TEST(RDFConcurrency, NestedParallelismBetweenDefineCalls) + // [DF] Warn on mismatch between slot pool size and effective number of slots + TEST(RDFSimpleTests, ThrowOnPoolSizeMismatch) + { ++ const unsigned int nslots = std::min(3u, std::thread::hardware_concurrency()); ++ + // pool created after RDF +- { ++ if (nslots > 1) { + ROOT::RDataFrame df(1); +- ROOT::EnableImplicitMT(3); ++ ROOT::EnableImplicitMT(nslots); + try { + df.Count().GetValue(); + } catch (const std::runtime_error &e) { + const auto expected_msg = "RLoopManager::Run: when the RDataFrame was constructed the number of slots required " +- "was 1, but when starting the event loop it was 3. Maybe EnableImplicitMT() was " ++ "was 1, but when starting the event loop it was " + std::to_string(nslots) + ". Maybe EnableImplicitMT() was " + "called after the RDataFrame was constructed?"; +- EXPECT_STREQ(e.what(), expected_msg); ++ EXPECT_STREQ(e.what(), expected_msg.c_str()); + } + ROOT::DisableImplicitMT(); + } + + // pool deleted after RDF creation +- { +- ROOT::EnableImplicitMT(3); ++ if (nslots > 1) { ++ ROOT::EnableImplicitMT(nslots); + ROOT::RDataFrame df(1); + ROOT::DisableImplicitMT(); + try { + df.Count().GetValue(); + } catch (const std::runtime_error &e) { + const auto expected_msg = "RLoopManager::Run: when the RDataFrame was constructed the number of slots required " +- "was 3, but when starting the event loop it was 1. Maybe DisableImplicitMT() was " ++ "was " + std::to_string(nslots) + ", but when starting the event loop it was 1. Maybe DisableImplicitMT() was " + "called after the RDataFrame was constructed?"; +- EXPECT_STREQ(e.what(), expected_msg); ++ EXPECT_STREQ(e.what(), expected_msg.c_str()); + } + } + } +diff --git a/tree/dataframe/test/dataframe_interface.cxx b/tree/dataframe/test/dataframe_interface.cxx +index afdd8360ef..90e052f1a7 100644 +--- a/tree/dataframe/test/dataframe_interface.cxx ++++ b/tree/dataframe/test/dataframe_interface.cxx +@@ -7,6 +7,8 @@ + + #include "gtest/gtest.h" + ++#include ++ + using namespace ROOT; + using namespace ROOT::RDF; + +@@ -351,9 +353,10 @@ TEST(RDataFrameInterface, GetNSlots) + ROOT::RDataFrame df0(1); + EXPECT_EQ(1U, df0.GetNSlots()); + #ifdef R__USE_IMT +- ROOT::EnableImplicitMT(3); ++ unsigned int nslots = std::min(3U, std::thread::hardware_concurrency()); ++ ROOT::EnableImplicitMT(nslots); + ROOT::RDataFrame df3(1); +- EXPECT_EQ(3U, df3.GetNSlots()); ++ EXPECT_EQ(nslots, df3.GetNSlots()); + ROOT::DisableImplicitMT(); + ROOT::RDataFrame df1(1); + EXPECT_EQ(1U, df1.GetNSlots()); +diff --git a/tree/dataframe/test/dataframe_simple.cxx b/tree/dataframe/test/dataframe_simple.cxx +index c6aba48b3e..e6b92be776 100644 +--- a/tree/dataframe/test/dataframe_simple.cxx ++++ b/tree/dataframe/test/dataframe_simple.cxx +@@ -26,7 +26,7 @@ using namespace ROOT::VecOps; + // Fixture for all tests in this file. If parameter is true, run with implicit MT, else run sequentially + class RDFSimpleTests : public ::testing::TestWithParam { + protected: +- RDFSimpleTests() : NSLOTS(GetParam() ? 4u : 1u) ++ RDFSimpleTests() : NSLOTS(GetParam() ? std::min(4u, std::thread::hardware_concurrency()) : 1u) + { + if (GetParam()) + ROOT::EnableImplicitMT(NSLOTS); +diff --git a/tree/dataframe/test/dataframe_snapshot.cxx b/tree/dataframe/test/dataframe_snapshot.cxx +index 3ce9254442..92444feff1 100644 +--- a/tree/dataframe/test/dataframe_snapshot.cxx ++++ b/tree/dataframe/test/dataframe_snapshot.cxx +@@ -10,6 +10,7 @@ + #include "gtest/gtest.h" + #include + #include ++#include + using namespace ROOT; // RDataFrame + using namespace ROOT::RDF; // RInterface + using namespace ROOT::VecOps; // RVec +@@ -1041,9 +1042,10 @@ TEST(RDFSnapshotMore, EmptyBuffersMT) + { + const auto fname = "emptybuffersmt.root"; + const auto treename = "t"; +- ROOT::EnableImplicitMT(4); ++ const unsigned int nslots = std::min(4U, std::thread::hardware_concurrency()); ++ ROOT::EnableImplicitMT(nslots); + ROOT::RDataFrame d(10); +- auto dd = d.DefineSlot("x", [](unsigned int s) { return s == 3 ? 0 : 1; }) ++ auto dd = d.DefineSlot("x", [&](unsigned int s) { return s == nslots - 1 ? 0 : 1; }) + .Filter([](int x) { return x == 0; }, {"x"}, "f"); + auto r = dd.Report(); + dd.Snapshot(treename, fname, {"x"}); +diff --git a/tree/treeplayer/test/treeprocmt/treeprocessormt.cxx b/tree/treeplayer/test/treeprocmt/treeprocessormt.cxx +index 5d5b2cbf42..963ce8a1b1 100644 +--- a/tree/treeplayer/test/treeprocmt/treeprocessormt.cxx ++++ b/tree/treeplayer/test/treeprocmt/treeprocessormt.cxx +@@ -294,14 +294,27 @@ TEST(TreeProcessorMT, LimitNTasks_CheckEntries) + } + }; + +- ROOT::EnableImplicitMT(4); ++ const unsigned int nslots = std::min(4U, std::thread::hardware_concurrency()); ++ ROOT::EnableImplicitMT(nslots); + + ROOT::TTreeProcessorMT p(filename, treename); + p.Process(f); + +- EXPECT_EQ(nTasks, 96U) << "Wrong number of tasks generated!\n"; +- EXPECT_EQ(nEntriesCountsMap[10], 65U) << "Wrong number of tasks with 10 clusters each!\n"; +- EXPECT_EQ(nEntriesCountsMap[11], 31U) << "Wrong number of tasks with 11 clusters each!\n"; ++ if (nslots == 4) { ++ EXPECT_EQ(nTasks, 96U) << "Wrong number of tasks generated!\n"; ++ EXPECT_EQ(nEntriesCountsMap[10], 65U) << "Wrong number of tasks with 10 clusters each!\n"; ++ EXPECT_EQ(nEntriesCountsMap[11], 31U) << "Wrong number of tasks with 11 clusters each!\n"; ++ } ++ else if (nslots == 2) { ++ EXPECT_EQ(nTasks, 48U) << "Wrong number of tasks generated!\n"; ++ EXPECT_EQ(nEntriesCountsMap[20], 17U) << "Wrong number of tasks with 20 clusters each!\n"; ++ EXPECT_EQ(nEntriesCountsMap[21], 31U) << "Wrong number of tasks with 21 clusters each!\n"; ++ } ++ else if (nslots == 1) { ++ EXPECT_EQ(nTasks, 24U) << "Wrong number of tasks generated!\n"; ++ EXPECT_EQ(nEntriesCountsMap[41], 17U) << "Wrong number of tasks with 41 clusters each!\n"; ++ EXPECT_EQ(nEntriesCountsMap[42], 7U) << "Wrong number of tasks with 42 clusters each!\n"; ++ } + + gSystem->Unlink(filename); + ROOT::DisableImplicitMT(); +-- +2.30.2 + diff --git a/root-fix-ppc64le-compilation-with-gcc-10.patch b/root-fix-ppc64le-compilation-with-gcc-10.patch new file mode 100644 index 0000000..2624de8 --- /dev/null +++ b/root-fix-ppc64le-compilation-with-gcc-10.patch @@ -0,0 +1,29 @@ +From 5b8e969ca045aa238c685009e0aa48d74cbdbf22 Mon Sep 17 00:00:00 2001 +From: Mattias Ellert +Date: Fri, 13 Mar 2020 17:09:03 +0100 +Subject: [PATCH 1/2] Fix ppc64le compilation with gcc 10 + +Reapply fix lost in the LLVM 9 upgrade. This fix is in LLVM 10. + +Backported from llvm upstream +https://reviews.llvm.org/D74129 +--- + interpreter/llvm/src/tools/clang/lib/Lex/Lexer.cpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/interpreter/llvm/src/tools/clang/lib/Lex/Lexer.cpp b/interpreter/llvm/src/tools/clang/lib/Lex/Lexer.cpp +index c8ed42d266..16bb00d2e9 100644 +--- a/interpreter/llvm/src/tools/clang/lib/Lex/Lexer.cpp ++++ b/interpreter/llvm/src/tools/clang/lib/Lex/Lexer.cpp +@@ -2546,7 +2546,7 @@ bool Lexer::SkipBlockComment(Token &Result, const char *CurPtr, + '/', '/', '/', '/', '/', '/', '/', '/' + }; + while (CurPtr+16 <= BufferEnd && +- !vec_any_eq(*(const vector unsigned char*)CurPtr, Slashes)) ++ !vec_any_eq(*(const __vector unsigned char*)CurPtr, Slashes)) + CurPtr += 16; + #else + // Scan for '/' quickly. Many block comments are very large. +-- +2.30.2 + diff --git a/root-fix-test-failure-on-ppc64le-and-aarch64-with-gcc-12.patch b/root-fix-test-failure-on-ppc64le-and-aarch64-with-gcc-12.patch new file mode 100644 index 0000000..007c3cd --- /dev/null +++ b/root-fix-test-failure-on-ppc64le-and-aarch64-with-gcc-12.patch @@ -0,0 +1,43 @@ +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 4e5e607..35705a4 100644 --- a/root-fontconfig.patch +++ b/root-fontconfig.patch @@ -1,60 +1,39 @@ -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(); +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(); - // 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) - } + // 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 @@ } - #endif -- delete [] ttfont; } + #endif +- delete [] ttfont; - 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 + // 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 @@ ${FREETYPE_LIBRARIES} ${X11_LIBRARIES} ZLIB::ZLIB @@ -62,11 +41,10 @@ index b5ccf983473..8ee57c1fac0 100644 DEPENDENCIES Core Graf -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" { +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 @@ # include } @@ -75,101 +53,135 @@ index 6ea60a78801..e85d804b7ec 100644 // auxiliary functions for general polygon filling #include "TASPolyUtils.c" -@@ -2620,11 +2622,88 @@ void TASImage::DrawText(Int_t x, Int_t y, const char *text, Int_t size, - // This is for backward compatibility... - if (fn.Last('/') == 0) fn = fn(1, fn.Length() - 1); +@@ -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); - const char *ttpath = gEnv->GetValue("Root.TTFontPath", - TROOT::GetTTFFontDir()); - char *tmpstr = gSystem->Which(ttpath, fn, kReadPermission); - fn = tmpstr; - delete [] tmpstr; -+ const char *basename = gSystem->BaseName(fn); ++ fn = ttfnt; + -+ 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); -+ } ++ 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; -@@ -2648,7 +2727,7 @@ void TASImage::DrawText(Int_t x, Int_t y, const char *text, Int_t size, +@@ -2626,14 +2734,11 @@ return; } @@ -177,12 +189,20 @@ index 6ea60a78801..e85d804b7ec 100644 + ASFont *font = get_asfont(gFontManager, fn.Data(), ttindex, size, ASF_GuessWho); if (!font) { - font = get_asfont(gFontManager, "fixed", 0, size, ASF_GuessWho); -diff --git a/graf2d/graf/CMakeLists.txt b/graf2d/graf/CMakeLists.txt -index d7d1b77c21a..c4ebb994a4a 100644 ---- a/graf2d/graf/CMakeLists.txt -+++ b/graf2d/graf/CMakeLists.txt -@@ -91,6 +91,7 @@ ROOT_STANDARD_LIBRARY_PACKAGE(Graf +- 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 @@ ${FREETYPE_LIBRARIES} ZLIB::ZLIB mathtext @@ -190,27 +210,24 @@ index d7d1b77c21a..c4ebb994a4a 100644 DEPENDENCIES Hist Matrix -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: +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 @@ 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 fgFontIdx[kTTMaxFonts]; ///< font index in font file -+ static Int_t fgFontIta[kTTMaxFonts]; ///< font slanted using transform +- static char *fgFontName[kTTMaxFonts]; ///< font name ++ static Int_t fgFontID[kTTMaxFonts]; ///< font ID static FT_Face fgFace[kTTMaxFonts]; ///< font face static TTF::TTGlyph fgGlyphs[kMaxGlyphs]; ///< glyphs static Bool_t fgHinting; ///< use hinting (true by default) -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. +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 @@ #include "TMath.h" #include "TError.h" @@ -219,184 +236,201 @@ index 758bb98c192..c90d0ac70a9 100644 // to scale fonts to the same size as the old TT version const Float_t kScale = 0.93376068; -@@ -38,10 +40,11 @@ Int_t TTF::fgTBlankW = 0; +@@ -38,10 +40,9 @@ 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::fgFontIdx[kTTMaxFonts]; -+Int_t TTF::fgFontIta[kTTMaxFonts]; +-char *TTF::fgFontName[kTTMaxFonts]; ++Int_t TTF::fgFontID[kTTMaxFonts]; FT_Matrix *TTF::fgRotMatrix = nullptr; FT_Library TTF::fgLibrary; FT_BBox TTF::fgCBox; -@@ -71,6 +74,11 @@ void TTF::Init() +@@ -72,6 +73,11 @@ return; } + // Add root's font directory + const char *ttpath = gEnv->GetValue("Root.TTFontPath", + TROOT::GetTTFFontDir()); -+ FcConfigAppFontAddDir (nullptr, (const FcChar8*)ttpath); ++ FcConfigAppFontAddDir (NULL, (const FcChar8*)ttpath); + // load default font (arialbd) SetTextFont(62); } -@@ -108,12 +116,15 @@ Short_t TTF::CharToUnicode(UInt_t code) +@@ -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 @@ charmap = fgFace[fgCurFontIdx]->charmaps[i]; platform = charmap->platform_id; encoding = charmap->encoding_id; - if ((platform == 3 && encoding == 1) || + if ((platform == 3 && encoding == 1 && -+ (fgFontIta[fgCurFontIdx] & 2) == 0) || ++ (fgFontID[fgCurFontIdx] != 12 && ++ fgFontID[fgCurFontIdx] != 14 && ++ fgFontID[fgCurFontIdx] != 15)) || (platform == 0 && encoding == 0) || + (platform == 7 && encoding == 2 && -+ (fgFontIta[fgCurFontIdx] & 2) != 0) || -+ (platform == 0 && encoding == 3 && -+ (fgFontIta[fgCurFontIdx] & 2) != 0) || ++ (fgFontID[fgCurFontIdx] == 12 || ++ fgFontID[fgCurFontIdx] == 14 || ++ fgFontID[fgCurFontIdx] == 15)) || (platform == 1 && encoding == 0 && - !strcmp(fgFontName[fgCurFontIdx], "wingding.ttf")) || - (platform == 1 && encoding == 0 && - !strcmp(fgFontName[fgCurFontIdx], "symbol.ttf"))) -+ (fgFontIta[fgCurFontIdx] & 2) != 0)) ++ (fgFontID[fgCurFontIdx] == 12 || ++ fgFontID[fgCurFontIdx] == 14 || ++ fgFontID[fgCurFontIdx] == 15))) { fgCharMap[fgCurFontIdx] = charmap; if (FT_Set_Charmap(fgFace[fgCurFontIdx], fgCharMap[fgCurFontIdx])) -@@ -392,21 +403,145 @@ Int_t TTF::SetTextFont(const char *fontname, Int_t italic) +@@ -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; } 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) { -+ pat = FcNameParse ((const FcChar8*) "freeserif:italic"); ++ SetTextFont(12); + } + else if (strcmp(basename, "timesbd.ttf") == 0 || + strcmp(basename, "FreeSerifBold.otf") == 0) { -+ pat = FcNameParse ((const FcChar8*) "freeserif:bold"); ++ SetTextFont(22); + } + else if (strcmp(basename, "timesbi.ttf") == 0 || + strcmp(basename, "FreeSerifBoldItalic.otf") == 0) { -+ pat = FcNameParse ((const FcChar8*) "freeserif:bold:italic"); ++ SetTextFont(32); + } + else if (strcmp(basename, "arial.ttf") == 0 || + strcmp(basename, "FreeSans.otf") == 0) { -+ pat = FcNameParse ((const FcChar8*) "freesans"); ++ SetTextFont(42); + } + else if (strcmp(basename, "ariali.ttf") == 0 || + strcmp(basename, "FreeSansOblique.otf") == 0) { -+ pat = FcNameParse ((const FcChar8*) "freesans:italic"); ++ SetTextFont(52); + } + else if (strcmp(basename, "arialbd.ttf") == 0 || + strcmp(basename, "FreeSansBold.otf") == 0) { -+ pat = FcNameParse ((const FcChar8*) "freesans:bold"); ++ SetTextFont(62); + } + else if (strcmp(basename, "arialbi.ttf") == 0 || + strcmp(basename, "FreeSansBoldOblique.otf") == 0) { -+ pat = FcNameParse ((const FcChar8*) "freesans:bold:italic"); ++ SetTextFont(72); + } + else if (strcmp(basename, "cour.ttf") == 0 || + strcmp(basename, "FreeMono.otf") == 0) { -+ pat = FcNameParse ((const FcChar8*) "freemono"); ++ SetTextFont(82); + } + else if (strcmp(basename, "couri.ttf") == 0 || + strcmp(basename, "FreeMonoOblique.otf") == 0) { -+ pat = FcNameParse ((const FcChar8*) "freemono:italic"); ++ SetTextFont(92); + } + else if (strcmp(basename, "courbd.ttf") == 0 || + strcmp(basename, "FreeMonoBold.otf") == 0) { -+ pat = FcNameParse ((const FcChar8*) "freemono:bold"); ++ SetTextFont(102); + } + else if (strcmp(basename, "courbi.ttf") == 0 || + strcmp(basename, "FreeMonoBoldOblique.otf") == 0) { -+ pat = FcNameParse ((const FcChar8*) "freemono:bold:italic"); ++ SetTextFont(112); + } + else if (strcmp(basename, "symbol.ttf") == 0) { -+ pat = FcNameParse ((const FcChar8*) "standardsymbolsps"); -+ italic &= 2; ++ if (italic) ++ SetTextFont(152); ++ else ++ SetTextFont(122); + } + else if (strcmp(basename, "times.ttf") == 0 || + strcmp(basename, "FreeSerif.otf") == 0) { -+ pat = FcNameParse ((const FcChar8*) "freeserif"); ++ SetTextFont(132); + } + else if (strcmp(basename, "wingding.ttf") == 0) { -+ pat = FcNameParse ((const FcChar8*) "dingbats"); -+ italic &= 2; ++ SetTextFont(142); + } + else if (strcmp(basename, "STIXGeneral.otf") == 0) { -+ pat = FcNameParse ((const FcChar8*) "stixgeneral"); ++ SetTextFont(162); + } + else if (strcmp(basename, "STIXGeneralItalic.otf") == 0) { -+ pat = FcNameParse ((const FcChar8*) "stixgeneral:italic"); ++ SetTextFont(172); + } + else if (strcmp(basename, "STIXGeneralBol.otf") == 0) { -+ pat = FcNameParse ((const FcChar8*) "stixgeneral:bold"); ++ SetTextFont(182); + } + else if (strcmp(basename, "STIXGeneralBolIta.otf") == 0) { -+ pat = FcNameParse ((const FcChar8*) "stixgeneral:bold:italic"); ++ SetTextFont(192); + } + else if (strcmp(basename, "STIXSiz1Sym.otf") == 0) { -+ pat = FcNameParse ((const FcChar8*) "stixsize1"); ++ SetTextFont(202); + } + else if (strcmp(basename, "STIXSiz1SymBol.otf") == 0) { -+ pat = FcNameParse ((const FcChar8*) "stixsize1:bold"); ++ SetTextFont(212); + } + else if (strcmp(basename, "STIXSiz2Sym.otf") == 0) { -+ pat = FcNameParse ((const FcChar8*) "stixsize2"); ++ SetTextFont(222); + } + else if (strcmp(basename, "STIXSiz2SymBol.otf") == 0) { -+ pat = FcNameParse ((const FcChar8*) "stixsize2:bold"); ++ SetTextFont(232); + } + else if (strcmp(basename, "STIXSiz3Sym.otf") == 0) { -+ pat = FcNameParse ((const FcChar8*) "stixsize3"); ++ SetTextFont(242); + } + else if (strcmp(basename, "STIXSiz3SymBol.otf") == 0) { -+ pat = FcNameParse ((const FcChar8*) "stixsize3:bold"); ++ SetTextFont(252); + } + else if (strcmp(basename, "STIXSiz4Sym.otf") == 0) { -+ pat = FcNameParse ((const FcChar8*) "stixsize4"); ++ SetTextFont(262); + } + else if (strcmp(basename, "STIXSiz4SymBol.otf") == 0) { -+ pat = FcNameParse ((const FcChar8*) "stixsize4:bold"); ++ SetTextFont(272); + } + else if (strcmp(basename, "STIXSiz5Sym.otf") == 0) { -+ pat = FcNameParse ((const FcChar8*) "stixsize5"); ++ SetTextFont(282); + } + else if (strcmp(basename, "DroidSansFallback.ttf") == 0) { -+ pat = FcNameParse ((const FcChar8*) "droidsansfallback:charset=4e00 0410"); ++ SetTextFont(292); + } -+ 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); ++ 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; + } -+ FcPatternDestroy (pat); + } + -+ if (!ttfont) ttfont = StrDup(fontname); ++ return 0; ++} + -+ basename = gSystem->BaseName(ttfont); ++//______________________________________________________________________________ ++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; ++ } + // check if font is in cache int i; @@ -413,30 +447,32 @@ index 758bb98c192..c90d0ac70a9 100644 - return 0; - } - } -+ if (!strcmp(fgFontName[i], basename) && -+ (fgFontIdx[i] == ttindex) && -+ (fgFontIta[i] == italic)) { ++ if (fgFontID[i] == fontid) { + fgCurFontIdx = i; -+ delete [] ttfont; -+ return 0; ++ return; } } -@@ -416,28 +551,13 @@ Int_t TTF::SetTextFont(const char *fontname, Int_t italic) +@@ -409,151 +541,215 @@ + if (fgFontCount >= kTTMaxFonts) { + Error("TTF::SetTextFont", "too many fonts opened (increase kTTMaxFont = %d)", kTTMaxFonts); - Warning("TTF::SetTextFont", "using default font %s", fgFontName[0]); +- Warning("TTF::SetTextFont", "using default font %s", fgFontName[0]); ++ Warning("TTF::SetTextFont", "using default font"); fgCurFontIdx = 0; // use font 0 (default font, set in ctor) -+ delete [] ttfont; - return 0; +- return 0; ++ return; } - // 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 %s", fontname, ttpath); +- Error("TTF::SetTextFont", "font file %s not found in path", fontname); - if (fgFontCount) { - Warning("TTF::SetTextFont", "using default font %s", fgFontName[0]); - fgCurFontIdx = 0; // use font 0 (default font, set in ctor) @@ -444,50 +480,245 @@ index 758bb98c192..c90d0ac70a9 100644 - } else { - return 1; - } -- } -- - FT_Face tface = (FT_Face) 0; ++ 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; - 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); -@@ -450,24 +570,25 @@ Int_t TTF::SetTextFont(const char *fontname, Int_t italic) - } +- 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; } -- delete [] ttfont; -- - fgFontName[fgFontCount] = StrDup(basename); -+ fgFontIdx[fgFontCount] = ttindex; -+ fgFontIta[fgFontCount] = italic; + delete [] ttfont; + +- fgFontName[fgFontCount] = StrDup(basename); ++ fgFontID[fgFontCount] = fontid; fgCurFontIdx = fgFontCount; fgFace[fgCurFontIdx] = tface; - fgCharMap[fgCurFontIdx] = (FT_CharMap) 0; + fgCharMap[fgCurFontIdx] = 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 ); -+ 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) - { +- } +- +- 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) +-{ - // 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. @@ -496,10 +727,10 @@ index 758bb98c192..c90d0ac70a9 100644 - { "Root.TTFont.1", "FreeSerifItalic.otf" }, - { "Root.TTFont.2", "FreeSerifBold.otf" }, - { "Root.TTFont.3", "FreeSerifBoldItalic.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.4", "FreeSans.otf" }, +- { "Root.TTFont.5", "FreeSansOblique.otf" }, +- { "Root.TTFont.6", "FreeSansBold.otf" }, +- { "Root.TTFont.7", "FreeSansBoldOblique.otf" }, - { "Root.TTFont.8", "FreeMono.otf" }, - { "Root.TTFont.9", "FreeMonoOblique.otf" }, - { "Root.TTFont.10", "FreeMonoBold.otf" }, @@ -524,47 +755,14 @@ index 758bb98c192..c90d0ac70a9 100644 - { "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 @@ -578,26 +776,21 @@ index 758bb98c192..c90d0ac70a9 100644 - // try backup free font - thisset = 1; - } -- } - Int_t italic = 0; ++ FT_Set_Transform( fgFace[fgCurFontIdx], &slantMat, NULL ); + } +- 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 --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 +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 @@ LIBRARIES ZLIB::ZLIB mathtext @@ -605,11 +798,10 @@ index eb091bbb396..a05023a3f41 100644 DEPENDENCIES Graf ) -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)`. +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 @@ #include #include #include @@ -617,7 +809,7 @@ index df9e3ae16ea..1e353e1ca53 100644 #include "strlcpy.h" #include "snprintf.h" -@@ -1584,56 +1585,60 @@ Bool_t TPostScript::FontEmbedType42(const char *filename) +@@ -1585,56 +1586,179 @@ void TPostScript::FontEmbed(void) { @@ -654,41 +846,8 @@ index df9e3ae16ea..1e353e1ca53 100644 - { "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) @@ -700,28 +859,182 @@ index df9e3ae16ea..1e353e1ca53 100644 - const char *filename = gEnv->GetValue( - fonttable[fontid][0], fonttable[fontid][1]); - char *ttfont = gSystem->Which(ttpath, filename, kReadPermission); -+ char *ttfont = nullptr; ++ ++ char *ttfont = NULL; + + FcPattern *pat, *match; ++ FcCharSet *set = NULL; + FcResult result; + -+ pat = FcNameParse ((const FcChar8*) fonttable[fontid]); ++ pat = FcPatternCreate (); + -+ FcConfigSubstitute (nullptr, pat, FcMatchPattern); ++ 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); + FcDefaultSubstitute (pat); -+ match = FcFontMatch (nullptr, pat, &result); -+ FcPatternGetString (match, FC_FILE, 0, (FcChar8**) &ttfont); ++ 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); + if (!ttfont) { - Error("TPostScript::FontEmbed", - "font %d (filename `%s') not found in path", - fontid, filename); -+ Error("TPostScript::FontEmbed", "font %d not found", ++ Error("TPostScript::FontEmbed", "font %d not found in path", + fontid); } else { if (FontEmbedType2(ttfont)) { // nothing -@@ -1642,12 +1647,13 @@ void TPostScript::FontEmbed(void) +@@ -1643,9 +1767,8 @@ } else if(FontEmbedType42(ttfont)) { // nothing } else { @@ -731,15 +1044,9 @@ index df9e3ae16ea..1e353e1ca53 100644 + Error("TPostScript::FontEmbed", "failed to embed font %d)", + fontid); } -- delete [] ttfont; + delete [] ttfont; } -+ -+ 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) +@@ -2837,10 +2960,10 @@ { "Root.PSFont.9", "/FreeMonoOblique" }, { "Root.PSFont.10", "/FreeMonoBold" }, { "Root.PSFont.11", "/FreeMonoBoldOblique" }, @@ -753,11 +1060,10 @@ index df9e3ae16ea..1e353e1ca53 100644 { "Root.PSFont.STIXGen", "/STIXGeneral" }, { "Root.PSFont.STIXGenIt", "/STIXGeneral-Italic" }, { "Root.PSFont.STIXGenBd", "/STIXGeneral-Bold" }, -diff --git a/graf3d/gl/CMakeLists.txt b/graf3d/gl/CMakeLists.txt -index e759473ca0f..c453397fc52 100644 ---- a/graf3d/gl/CMakeLists.txt -+++ b/graf3d/gl/CMakeLists.txt -@@ -211,6 +211,7 @@ ROOT_STANDARD_LIBRARY_PACKAGE(RGL +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 @@ ${GL2PS_LIBRARIES} ${X11_LIBRARIES} RGlew @@ -765,10 +1071,9 @@ index e759473ca0f..c453397fc52 100644 DEPENDENCIES Hist Gui -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 +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 @@ -36,6 +36,7 @@ # include "FTGLBitmapFont.h" #endif @@ -777,7 +1082,16 @@ index 58ea1188d59..647642de615 100644 /** \class TGLFont \ingroup opengl -@@ -448,16 +449,120 @@ void TGLFontManager::RegisterFont(Int_t sizeIn, Int_t fileID, TGLFont::EMode mod +@@ -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 @@ FontMap_i it = fFontMap.find(TGLFont(size, fileID, mode)); if (it == fFontMap.end()) { @@ -790,127 +1104,234 @@ index 58ea1188d59..647642de615 100644 - ((TObjString*)fgFontFileArray[fileID])->String()); - file = fp; - delete [] fp; -+ TString file; ++ char *file = NULL; ++ int ttindex = 0; + -+ TString fontname = fileID < fgExtendedFontStart ? -+ ((TObjString*)fgFontFileArray[fileID])->String() + ".ttf" : -+ ((TObjString*)fgFontFileArray[fileID])->String(); -+ -+ FcPattern *pat = nullptr, *match; ++ FcPattern *pat, *match; ++ FcCharSet *set = NULL; + FcResult result; + -+ 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"); - } -+ 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"); -+ } ++ pat = FcPatternCreate (); + -+ FcConfigSubstitute (nullptr, pat, FcMatchPattern); ++ 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); + } + ++ FcConfigSubstitute (NULL, pat, FcMatchPattern); + FcDefaultSubstitute (pat); -+ match = FcFontMatch (nullptr, pat, &result); ++ match = FcFontMatch (NULL, pat, &result); + char *ttfnt; -+ FcPatternGetString (match, FC_FILE, 0, (FcChar8**) &ttfnt); -+ file = ttfnt; ++ FcPatternGetString (match, FC_FILE, 0, (FcChar8**)&ttfnt); ++ file = StrDup (ttfnt); ++ FcPatternGetInteger (match, FC_INDEX, 0, &ttindex); + FcPatternDestroy (match); + FcPatternDestroy (pat); - ++ if (set) FcCharSetDestroy (set); ++ FTFont* ftfont = 0; switch (mode) -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 + { +@@ -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 @@ -32,6 +32,8 @@ # include "FTGLBitmapFont.h" #endif @@ -920,7 +1341,7 @@ index 2ed3ee0917a..03feb0ee0a4 100644 #define FTGL_BITMAP 0 #define FTGL_PIXMAP 1 #define FTGL_OUTLINE 2 -@@ -175,27 +177,35 @@ void TGLText::SetGLTextFont(Font_t fontnumber) +@@ -176,27 +178,92 @@ { int fontid = fontnumber / 10; @@ -945,39 +1366,96 @@ index 2ed3ee0917a..03feb0ee0a4 100644 - 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 = FcNameParse ((const FcChar8*) fonttable[fontid]); ++ pat = FcPatternCreate (); + -+ FcConfigSubstitute (nullptr, pat, FcMatchPattern); ++ 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); + FcDefaultSubstitute (pat); -+ match = FcFontMatch (nullptr, pat, &result); -+ FcPatternGetString (match, FC_FILE, 0, (FcChar8**) &ttfont); ++ match = FcFontMatch (NULL, pat, &result); ++ FcPatternGetString (match, FC_FILE, 0, (FcChar8**)&ttfont); ++ FcPatternGetInteger (match, FC_INDEX, 0, &ttindex); if (fGLTextFont) delete fGLTextFont; -@@ -203,7 +213,9 @@ void TGLText::SetGLTextFont(Font_t fontnumber) +@@ -204,7 +271,9 @@ fGLTextFont = new FTGLPolygonFont(ttfont); @@ -988,6 +1466,28 @@ index 2ed3ee0917a..03feb0ee0a4 100644 Error("SetGLTextFont","Cannot set FTGL::FaceSize"); - delete [] ttfont; } --- -2.52.0 - +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 diff --git a/root-gcc-16-libstdc-links-to-libatomic.patch b/root-gcc-16-libstdc-links-to-libatomic.patch deleted file mode 100644 index 776fff3..0000000 --- a/root-gcc-16-libstdc-links-to-libatomic.patch +++ /dev/null @@ -1,32 +0,0 @@ -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-src.sh b/root-get-src.sh deleted file mode 100755 index d83c34a..0000000 --- a/root-get-src.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh -VERSION=$1 -wget -N https://root.cern/download/root_v${VERSION}.source.tar.gz -tar -z -x -f root_v${VERSION}.source.tar.gz -find root-${VERSION}/fonts -type f -a '!' -name 'STIX*' -exec rm {} ';' -tar -J -c --group root --owner root -f root-${VERSION}.tar.xz root-${VERSION} diff --git a/root-jsmva-static.patch b/root-jsmva-static.patch new file mode 100644 index 0000000..a81848a --- /dev/null +++ b/root-jsmva-static.patch @@ -0,0 +1,36 @@ +diff -ur root-6.24.02.orig/bindings/jsmva/python/JsMVA/JPyInterface.py root-6.24.02/bindings/jsmva/python/JsMVA/JPyInterface.py +--- root-6.24.02.orig/bindings/jsmva/python/JsMVA/JPyInterface.py 2021-06-28 11:17:14.000000000 +0200 ++++ root-6.24.02/bindings/jsmva/python/JsMVA/JPyInterface.py 2021-08-11 09:06:21.894746090 +0200 +@@ -188,7 +188,7 @@ + ## Class for creating the output scripts and inserting them to cell output + class JsDraw: + ## Base repository +- __jsMVARepo = "https://root.cern.ch/js/jsmva/latest" ++ __jsMVARepo = "/static/JsMVA" + + ## String containing the link to JavaScript files + __jsMVASourceDir = __jsMVARepo + "/js" +diff -ur root-6.24.02.orig/bindings/pyroot_legacy/JsMVA/JPyInterface.py root-6.24.02/bindings/pyroot_legacy/JsMVA/JPyInterface.py +--- root-6.24.02.orig/bindings/pyroot_legacy/JsMVA/JPyInterface.py 2021-06-28 11:17:14.000000000 +0200 ++++ root-6.24.02/bindings/pyroot_legacy/JsMVA/JPyInterface.py 2021-08-11 09:06:21.925746168 +0200 +@@ -188,7 +188,7 @@ + ## Class for creating the output scripts and inserting them to cell output + class JsDraw: + ## Base repository +- __jsMVARepo = "https://root.cern.ch/js/jsmva/latest" ++ __jsMVARepo = "/static/JsMVA" + + ## String containing the link to JavaScript files + __jsMVASourceDir = __jsMVARepo + "/js" +diff -ur root-6.24.02.orig/etc/notebook/JsMVA/js/JsMVA.js root-6.24.02/etc/notebook/JsMVA/js/JsMVA.js +--- root-6.24.02.orig/etc/notebook/JsMVA/js/JsMVA.js 2021-06-28 11:17:14.000000000 +0200 ++++ root-6.24.02/etc/notebook/JsMVA/js/JsMVA.js 2021-08-11 09:10:45.638410266 +0200 +@@ -16,7 +16,7 @@ + + (function(factory){ + +- var JSROOT_source_dir = "https://root.cern.ch/js/notebook/scripts/"; ++ var JSROOT_source_dir = "/static/scripts/"; + + var url = ""; + if (requirejs.s.contexts.hasOwnProperty("_")) { diff --git a/root-memory-usage.patch b/root-memory-usage.patch new file mode 100644 index 0000000..aad7f1c --- /dev/null +++ b/root-memory-usage.patch @@ -0,0 +1,43 @@ +From 21395b23947df7e2b5e0c93626453aeacdee026c Mon Sep 17 00:00:00 2001 +From: Mattias Ellert +Date: Tue, 16 Jan 2018 10:25:50 +0100 +Subject: [PATCH] Reduce the needed memory for compilation + +The linking of rootcling_stage1 and libCling requires a lot of memory. +Since these are linked from mostly the same objects, the build is +ready to link them at the same time. If you make a parallel build this +means that the two targets that require the most amount of memory are +being linked in parallel. This exhausts the available memory, and the +computer starts swapping. + +This commit adds a dependency of one of the targets to the other. The +dependency is not really there since it is not needed for building, +but it prevents the two memory consuming targets to be built in +parallel. + +A similar dependency existed before the latest code changes (see +commit 2638f6fc7f54b0995f2f9d60363daaf8aae2386e), then between +rootcling and libCling. +--- + core/metacling/src/CMakeLists.txt | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/core/metacling/src/CMakeLists.txt b/core/metacling/src/CMakeLists.txt +index 2923345f7c..b44a4d4115 100644 +--- a/core/metacling/src/CMakeLists.txt ++++ b/core/metacling/src/CMakeLists.txt +@@ -114,6 +114,11 @@ ROOT_LINKER_LIBRARY(Cling + $ + LIBRARIES ${CLING_LIBRARIES} ${LINK_LIBS} ${CLING_PLUGIN_LINK_LIBS}) + ++# The dependency on rootcling_stage1 was added to prevent Cling (libCling) and ++# rootcling_stage1 from being linked in parallel. ++# This avoids doing two memory consuming operations in parallel. ++add_dependencies(Cling rootcling_stage1) ++ + if(MSVC) + set_target_properties(Cling PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS TRUE) + set(cling_exports +-- +2.26.2 + diff --git a/root-no-export-python-modules.patch b/root-no-export-python-modules.patch index d3fa4bc..aa7604d 100644 --- a/root-no-export-python-modules.patch +++ b/root-no-export-python-modules.patch @@ -1,53 +1,30 @@ -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) +diff -ur root-6.24.02.orig/bindings/jupyroot/CMakeLists.txt root-6.24.02/bindings/jupyroot/CMakeLists.txt +--- root-6.24.02.orig/bindings/jupyroot/CMakeLists.txt 2021-06-28 11:17:14.000000000 +0200 ++++ root-6.24.02/bindings/jupyroot/CMakeLists.txt 2021-08-11 10:53:03.272202496 +0200 +@@ -70,8 +70,7 @@ + endforeach() --install(TARGETS cppyy EXPORT ${CMAKE_PROJECT_NAME}Exports -- RUNTIME DESTINATION ${CMAKE_INSTALL_PYTHONDIR}/cppyy COMPONENT libraries # Windows -+install(TARGETS cppyy RUNTIME DESTINATION ${CMAKE_INSTALL_PYTHONDIR}/cppyy COMPONENT libraries # Windows - LIBRARY DESTINATION ${CMAKE_INSTALL_PYTHONDIR}/cppyy COMPONENT libraries - ARCHIVE DESTINATION ${CMAKE_INSTALL_PYTHONDIR}/cppyy COMPONENT libraries) + # Install library +- install(TARGETS ${libname} EXPORT ${CMAKE_PROJECT_NAME}Exports +- RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT libraries ++ install(TARGETS ${libname} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT libraries + LIBRARY DESTINATION ${CMAKE_INSTALL_PYTHONDIR} COMPONENT libraries + ARCHIVE DESTINATION ${CMAKE_INSTALL_PYTHONDIR} COMPONENT libraries) -diff --git a/bindings/pyroot/pythonizations/CMakeLists.txt b/bindings/pyroot/pythonizations/CMakeLists.txt -index 1230f18ca47..2df4b733320 100644 ---- a/bindings/pyroot/pythonizations/CMakeLists.txt -+++ b/bindings/pyroot/pythonizations/CMakeLists.txt -@@ -202,11 +202,6 @@ foreach(py_source ${py_sources}) - COMMENT "Compiling PyROOT source ${py_source} for Python ${Python3_VERSION}") - endforeach() +diff -ur root-6.24.02.orig/bindings/pyroot/pythonizations/CMakeLists.txt root-6.24.02/bindings/pyroot/pythonizations/CMakeLists.txt +--- root-6.24.02.orig/bindings/pyroot/pythonizations/CMakeLists.txt 2021-06-28 11:17:14.000000000 +0200 ++++ root-6.24.02/bindings/pyroot/pythonizations/CMakeLists.txt 2021-08-11 10:53:03.272202496 +0200 +@@ -137,11 +137,10 @@ + # Create meta-target PyROOT2 and PyROOT3 (INTERFACE library) + # Export of targets are not supported for custom targets(add_custom_targets()) + add_library(PyROOT${python_major_version_string} INTERFACE) +- target_link_libraries(PyROOT${python_major_version_string} INTERFACE cppyy_backend${python_under_version_string} cppyy${python_under_version_string} ROOTPythonizations${python_under_version_string}) ++ target_link_libraries(PyROOT${python_major_version_string} INTERFACE cppyy_backend${python_under_version_string} cppyy${python_under_version_string}) --# Create meta-target PyROOT3 (INTERFACE library) --# Export of targets are not supported for custom targets(add_custom_targets()) --add_library(PyROOT INTERFACE) --target_link_libraries(PyROOT INTERFACE cppyy_backend cppyy ROOTPythonizations) -- - # Define library output directories for build and install trees - set(pymoduledir_build "${localruntimedir}/ROOT") - set(pymoduledir_install "${CMAKE_INSTALL_PYTHONDIR}/ROOT") -@@ -231,8 +226,7 @@ if(NOT MSVC) - endif() + # Install library +- install(TARGETS ${libname} EXPORT ${CMAKE_PROJECT_NAME}Exports +- RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT libraries ++ install(TARGETS ${libname} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT libraries + LIBRARY DESTINATION ${CMAKE_INSTALL_PYTHONDIR} COMPONENT libraries + ARCHIVE DESTINATION ${CMAKE_INSTALL_PYTHONDIR} COMPONENT libraries) - # Install library --install(TARGETS ${libname} EXPORT ${CMAKE_PROJECT_NAME}Exports -- RUNTIME DESTINATION ${pymoduledir_install} COMPONENT libraries -+install(TARGETS ${libname} RUNTIME DESTINATION ${pymoduledir_install} COMPONENT libraries - LIBRARY DESTINATION ${pymoduledir_install} COMPONENT libraries - ARCHIVE DESTINATION ${pymoduledir_install} COMPONENT libraries) - --- -2.52.0 - diff --git a/root-old-gtest-compat.patch b/root-old-gtest-compat.patch new file mode 100644 index 0000000..bcba732 --- /dev/null +++ b/root-old-gtest-compat.patch @@ -0,0 +1,215 @@ +diff -ur root-6.24.02.orig/hist/hist/test/test_THBinIterator.cxx root-6.24.02/hist/hist/test/test_THBinIterator.cxx +--- root-6.24.02.orig/hist/hist/test/test_THBinIterator.cxx 2021-06-28 11:17:14.000000000 +0200 ++++ root-6.24.02/hist/hist/test/test_THBinIterator.cxx 2021-08-06 22:59:45.039518775 +0200 +@@ -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 -ur root-6.24.02.orig/math/mathcore/test/stress/testGenVector.cxx root-6.24.02/math/mathcore/test/stress/testGenVector.cxx +--- root-6.24.02.orig/math/mathcore/test/stress/testGenVector.cxx 2021-06-28 11:17:14.000000000 +0200 ++++ root-6.24.02/math/mathcore/test/stress/testGenVector.cxx 2021-08-06 09:31:38.795835283 +0200 +@@ -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 -ur root-6.24.02.orig/math/mathcore/test/stress/testSMatrix.cxx root-6.24.02/math/mathcore/test/stress/testSMatrix.cxx +--- root-6.24.02.orig/math/mathcore/test/stress/testSMatrix.cxx 2021-06-28 11:17:14.000000000 +0200 ++++ root-6.24.02/math/mathcore/test/stress/testSMatrix.cxx 2021-08-06 09:31:38.796835286 +0200 +@@ -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 -ur root-6.24.02.orig/math/mathcore/test/stress/testVector34.cxx root-6.24.02/math/mathcore/test/stress/testVector34.cxx +--- root-6.24.02.orig/math/mathcore/test/stress/testVector34.cxx 2021-06-28 11:17:14.000000000 +0200 ++++ root-6.24.02/math/mathcore/test/stress/testVector34.cxx 2021-08-06 09:31:38.796835286 +0200 +@@ -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 -ur root-6.24.02.orig/math/mathcore/test/stress/testVector.cxx root-6.24.02/math/mathcore/test/stress/testVector.cxx +--- root-6.24.02.orig/math/mathcore/test/stress/testVector.cxx 2021-06-28 11:17:14.000000000 +0200 ++++ root-6.24.02/math/mathcore/test/stress/testVector.cxx 2021-08-06 09:31:38.796835286 +0200 +@@ -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 -ur root-6.24.02.orig/math/mathcore/test/testGradient.cxx root-6.24.02/math/mathcore/test/testGradient.cxx +--- root-6.24.02.orig/math/mathcore/test/testGradient.cxx 2021-06-28 11:17:14.000000000 +0200 ++++ root-6.24.02/math/mathcore/test/testGradient.cxx 2021-08-06 09:31:38.796835286 +0200 +@@ -22,6 +22,10 @@ + + #include "gtest/gtest.h" + ++#ifndef TYPED_TEST_SUITE ++#define TYPED_TEST_SUITE TYPED_TEST_CASE ++#endif ++ + #include + #include + #include +diff -ur root-6.24.02.orig/math/mathcore/test/testGradientFitting.cxx root-6.24.02/math/mathcore/test/testGradientFitting.cxx +--- root-6.24.02.orig/math/mathcore/test/testGradientFitting.cxx 2021-06-28 11:17:14.000000000 +0200 ++++ root-6.24.02/math/mathcore/test/testGradientFitting.cxx 2021-08-06 09:31:38.797835288 +0200 +@@ -12,6 +12,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 -ur root-6.24.02.orig/math/mathmore/test/testStress.cxx root-6.24.02/math/mathmore/test/testStress.cxx +--- root-6.24.02.orig/math/mathmore/test/testStress.cxx 2021-06-28 11:17:14.000000000 +0200 ++++ root-6.24.02/math/mathmore/test/testStress.cxx 2021-08-06 09:31:38.797835288 +0200 +@@ -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 -ur root-6.24.02.orig/roofit/roofitcore/test/testProxiesAndCategories.cxx root-6.24.02/roofit/roofitcore/test/testProxiesAndCategories.cxx +--- root-6.24.02.orig/roofit/roofitcore/test/testProxiesAndCategories.cxx 2021-06-28 11:17:14.000000000 +0200 ++++ root-6.24.02/roofit/roofitcore/test/testProxiesAndCategories.cxx 2021-08-06 09:31:38.798835290 +0200 +@@ -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 -ur root-6.24.02.orig/tree/dataframe/test/dataframe_datablockcallback.cxx root-6.24.02/tree/dataframe/test/dataframe_datablockcallback.cxx +--- root-6.24.02.orig/tree/dataframe/test/dataframe_datablockcallback.cxx 2021-06-28 11:17:14.000000000 +0200 ++++ root-6.24.02/tree/dataframe/test/dataframe_datablockcallback.cxx 2021-08-06 09:31:38.801835298 +0200 +@@ -11,6 +11,10 @@ + + #include + ++#ifndef INSTANTIATE_TEST_SUITE_P ++#define INSTANTIATE_TEST_SUITE_P INSTANTIATE_TEST_CASE_P ++#endif ++ + #include // std::min + #include // std::hardware_concurrency + +diff -ur root-6.24.02.orig/tree/dataframe/test/dataframe_merge_results.cxx root-6.24.02/tree/dataframe/test/dataframe_merge_results.cxx +--- root-6.24.02.orig/tree/dataframe/test/dataframe_merge_results.cxx 2021-06-28 11:17:14.000000000 +0200 ++++ root-6.24.02/tree/dataframe/test/dataframe_merge_results.cxx 2021-08-06 09:31:38.802835300 +0200 +@@ -308,7 +308,7 @@ + EXPECT_FALSE(mh3); + EXPECT_FALSE(mh4); + EXPECT_FALSE(mh5); +- EXPECT_TRUE(mergedptr); ++ EXPECT_TRUE(!!mergedptr); + + const auto &mh = mergedptr->GetValue(); + +diff -ur root-6.24.02.orig/tree/dataframe/test/dataframe_regression.cxx root-6.24.02/tree/dataframe/test/dataframe_regression.cxx +--- root-6.24.02.orig/tree/dataframe/test/dataframe_regression.cxx 2021-06-28 11:17:14.000000000 +0200 ++++ root-6.24.02/tree/dataframe/test/dataframe_regression.cxx 2021-08-06 09:31:38.802835300 +0200 +@@ -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 -ur root-6.24.02.orig/tree/dataframe/test/dataframe_simple.cxx root-6.24.02/tree/dataframe/test/dataframe_simple.cxx +--- root-6.24.02.orig/tree/dataframe/test/dataframe_simple.cxx 2021-06-28 11:17:14.000000000 +0200 ++++ root-6.24.02/tree/dataframe/test/dataframe_simple.cxx 2021-08-06 09:31:38.803835303 +0200 +@@ -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/root-older-python.patch b/root-older-python.patch new file mode 100644 index 0000000..fa6a05a --- /dev/null +++ b/root-older-python.patch @@ -0,0 +1,46 @@ +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-ppc-codemodel.patch b/root-ppc-codemodel.patch new file mode 100644 index 0000000..223dc7c --- /dev/null +++ b/root-ppc-codemodel.patch @@ -0,0 +1,36 @@ +From 774ab9358d852e2c004564183de4a60eaaa5ac98 Mon Sep 17 00:00:00 2001 +From: Mattias Ellert +Date: Fri, 23 Apr 2021 21:40:14 +0200 +Subject: [PATCH 2/2] Actually request the use of the large code model for + ppc64/ppc64le + +Instead of erroring out with an assert. +--- + interpreter/cling/lib/Interpreter/IncrementalExecutor.cpp | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/interpreter/cling/lib/Interpreter/IncrementalExecutor.cpp b/interpreter/cling/lib/Interpreter/IncrementalExecutor.cpp +index 46771aa8c0..93a48f31f3 100644 +--- a/interpreter/cling/lib/Interpreter/IncrementalExecutor.cpp ++++ b/interpreter/cling/lib/Interpreter/IncrementalExecutor.cpp +@@ -73,14 +73,14 @@ CreateHostTargetMachine(const clang::CompilerInstance& CI) { + JTMB->getOptions().EmulatedTLS = false; + #endif // _WIN32 + +- std::unique_ptr TM = cantFail(JTMB->createTargetMachine()); +- + #if defined(__powerpc64__) || defined(__PPC64__) + // We have to use large code model for PowerPC64 because TOC and text sections + // can be more than 2GB apart. +- assert(TM->getCodeModel() >= CodeModel::Large); ++ JTMB->setCodeModel(CodeModel::Large); + #endif + ++ std::unique_ptr TM = cantFail(JTMB->createTargetMachine()); ++ + // Forcefully disable GlobalISel, it might be enabled on AArch64 without + // optimizations. In tests on an Apple M1 after the upgrade to LLVM 9, this + // new instruction selection framework emits branches / calls that expect all +-- +2.30.2 + diff --git a/root-ppc-segfault-fix.patch b/root-ppc-segfault-fix.patch new file mode 100644 index 0000000..b9cba0f --- /dev/null +++ b/root-ppc-segfault-fix.patch @@ -0,0 +1,49 @@ +From 55ae047b70e927de5c84cfa5ad42905cbd58d499 Mon Sep 17 00:00:00 2001 +From: Vassil Vassilev +Date: Sat, 4 Dec 2021 00:06:19 +0000 +Subject: [PATCH] [llvm] Restore the ppc64le support that we lost in llvm8. + +This patch is backported from https://reviews.llvm.org/D94183 + +For more discussion see https://github.com/numba/numba/issues/4026 + +Fixes root-project/root#8072 and root-project/root#9297 +--- + .../src/lib/Target/PowerPC/PPCISelLowering.cpp | 17 +++++++++-------- + 1 file changed, 9 insertions(+), 8 deletions(-) + +diff --git a/interpreter/llvm/src/lib/Target/PowerPC/PPCISelLowering.cpp b/interpreter/llvm/src/lib/Target/PowerPC/PPCISelLowering.cpp +index 24d50074860d..a922b40aa902 100644 +--- a/interpreter/llvm/src/lib/Target/PowerPC/PPCISelLowering.cpp ++++ b/interpreter/llvm/src/lib/Target/PowerPC/PPCISelLowering.cpp +@@ -4463,7 +4463,15 @@ callsShareTOCBase(const Function *Caller, SDValue Callee, + if (!G) + return false; + +- const GlobalValue *GV = G->getGlobal(); ++ const GlobalValue *GV = G->getGlobal(); ++ ++ // If the GV is not a strong definition then we need to assume it can be ++ // replaced by another function at link time. The function that replaces ++ // it may not share the same TOC as the caller since the callee may be ++ // replaced by a PC Relative version of the same function. ++ if (!GV->isStrongDefinitionForLinker()) ++ return false; ++ + // The medium and large code models are expected to provide a sufficiently + // large TOC to provide all data addressing needs of a module with a + // single TOC. Since each module will be addressed with a single TOC then we +@@ -4472,13 +4480,6 @@ callsShareTOCBase(const Function *Caller, SDValue Callee, + CodeModel::Large == TM.getCodeModel()) + return TM.shouldAssumeDSOLocal(*Caller->getParent(), GV); + +- // Otherwise we need to ensure callee and caller are in the same section, +- // since the linker may allocate multiple TOCs, and we don't know which +- // sections will belong to the same TOC base. +- +- if (!GV->isStrongDefinitionForLinker()) +- return false; +- + // Any explicitly-specified sections and section prefixes must also match. + // Also, if we're using -ffunction-sections, then each function is always in + // a different section (the same is true for COMDAT functions). diff --git a/root-ptr-is-null-RooFit-TMVA.patch b/root-ptr-is-null-RooFit-TMVA.patch new file mode 100644 index 0000000..3aa3acd --- /dev/null +++ b/root-ptr-is-null-RooFit-TMVA.patch @@ -0,0 +1,80 @@ +From c65f3d96f3f4433bff9d40fa9cf1dec100867a07 Mon Sep 17 00:00:00 2001 +From: Mattias Ellert +Date: Tue, 8 Jun 2021 10:12:37 +0200 +Subject: [PATCH] Fix 'this' pointer is null warnings + +.../roofit/roofitcore/src/RooDataHist.cxx: In member function 'void RooDataHist::_adjustBinning(RooRealVar&, const TAxis&, RooRealVar*, Int_t*)': +.../roofit/roofitcore/src/RooDataHist.cxx:595:122: warning: 'this' pointer is null [-Wnonnull] + 595 | coutE(InputArguments) << "RooDataHist::adjustBinning(" << GetName() << ") ERROR: dimension " << ourVar->GetName() << " must be real" << endl ; + | ^~~~~~~~~~~~~~~ + +.../roofit/roofitcore/src/RooRealSumFunc.cxx: In constructor 'RooRealSumFunc::RooRealSumFunc(const char*, const char*, const RooArgList&, const RooArgList&)': +.../roofit/roofitcore/src/RooRealSumFunc.cxx:156:35: warning: 'this' pointer is null [-Wnonnull] + 156 | << " is not of type RooAbsReal, fatal error" << endl; + | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.../tmva/tmva/src/DNN/Architectures/Reference/DataLoader.cxx: In member function 'void TMVA::DNN::TDataLoader >::CopyInput(TMatrixT&, TMVA::DNN::IndexIterator_t) [with AData = std::tuple >&, const TMVA::DataSetInfo&>; AReal = float]': +.../tmva/tmva/src/DNN/Architectures/Reference/DataLoader.cxx:131:34: warning: 'this' pointer is null [-Wnonnull] + 131 | Int_t n = event->GetNVariables(); + | ~~~~~~~~~~~~~~~~~~~~^~ +In file included from .../tmva/tmva/inc/TMVA/VariableTransformBase.h:48, + from .../tmva/tmva/inc/TMVA/Tools.h:58, + from .../tmva/tmva/inc/TMVA/DNN/GeneralLayer.h:36, + from .../tmva/tmva/inc/TMVA/DNN/CNN/ConvLayer.h:32, + from .../tmva/tmva/inc/TMVA/DNN/Architectures/Reference.h:24, + from .../tmva/tmva/src/DNN/Architectures/Reference/DataLoader.cxx:17: +.../tmva/tmva/inc/TMVA/Event.h:88:16: note: in a call to non-static member function 'UInt_t TMVA::Event::GetNVariables() const' + 88 | UInt_t GetNVariables() const; + | ^~~~~~~~~~~~~ +--- + roofit/roofitcore/src/RooDataHist.cxx | 2 +- + roofit/roofitcore/src/RooRealSumFunc.cxx | 4 ++-- + tmva/tmva/src/DNN/Architectures/Reference/DataLoader.cxx | 2 +- + 3 files changed, 4 insertions(+), 4 deletions(-) + +diff --git a/roofit/roofitcore/src/RooDataHist.cxx b/roofit/roofitcore/src/RooDataHist.cxx +index 84cf2c0f68..8dddb88e2b 100644 +--- a/roofit/roofitcore/src/RooDataHist.cxx ++++ b/roofit/roofitcore/src/RooDataHist.cxx +@@ -591,7 +591,7 @@ void RooDataHist::importDHistSet(const RooArgList& /*vars*/, RooCategory& indexC + void RooDataHist::_adjustBinning(RooRealVar &theirVar, const TAxis &axis, + RooRealVar *ourVar, Int_t *offset) + { +- if (!dynamic_cast(ourVar)) { ++ if (!dynamic_cast(static_cast(ourVar))) { + coutE(InputArguments) << "RooDataHist::adjustBinning(" << GetName() << ") ERROR: dimension " << ourVar->GetName() << " must be real" << endl ; + assert(0) ; + } +diff --git a/roofit/roofitcore/src/RooRealSumFunc.cxx b/roofit/roofitcore/src/RooRealSumFunc.cxx +index 3f78020acd..a1625d7e35 100644 +--- a/roofit/roofitcore/src/RooRealSumFunc.cxx ++++ b/roofit/roofitcore/src/RooRealSumFunc.cxx +@@ -149,10 +149,10 @@ RooRealSumFunc::RooRealSumFunc(const char *name, const char *title, const RooArg + _coefList.add(*coef); + } + +- func = (RooAbsReal *)funcIter->Next(); ++ func = (RooAbsArg *)funcIter->Next(); + if (func) { + if (!dynamic_cast(func)) { +- coutE(InputArguments) << "RooRealSumFunc::RooRealSumFunc(" << GetName() << ") last func " << coef->GetName() ++ coutE(InputArguments) << "RooRealSumFunc::RooRealSumFunc(" << GetName() << ") last func " << func->GetName() + << " is not of type RooAbsReal, fatal error" << endl; + assert(0); + } +diff --git a/tmva/tmva/src/DNN/Architectures/Reference/DataLoader.cxx b/tmva/tmva/src/DNN/Architectures/Reference/DataLoader.cxx +index 2465abf308..24a09d1fc0 100644 +--- a/tmva/tmva/src/DNN/Architectures/Reference/DataLoader.cxx ++++ b/tmva/tmva/src/DNN/Architectures/Reference/DataLoader.cxx +@@ -128,7 +128,7 @@ void TDataLoader>::CopyInput(TMatrixT &m + Event *event = nullptr; + + Int_t m = matrix.GetNrows(); +- Int_t n = event->GetNVariables(); ++ Int_t n = matrix.GetNcols(); + + // Copy input variables. + +-- +2.31.1 + diff --git a/root-ptr-is-null-TStreamerInfo.patch b/root-ptr-is-null-TStreamerInfo.patch new file mode 100644 index 0000000..869715c --- /dev/null +++ b/root-ptr-is-null-TStreamerInfo.patch @@ -0,0 +1,32 @@ +From 1ca221f010fdcfb6249ae7b1cac77fbe29b86214 Mon Sep 17 00:00:00 2001 +From: Enrico Guiraud +Date: Mon, 7 Jun 2021 11:02:48 +0200 +Subject: [PATCH] [io] Avoid nullptr deref when printing warning in + TStreamerInfo + +--- + io/io/src/TStreamerInfo.cxx | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/io/io/src/TStreamerInfo.cxx b/io/io/src/TStreamerInfo.cxx +index d545ab7be8..a026635890 100644 +--- a/io/io/src/TStreamerInfo.cxx ++++ b/io/io/src/TStreamerInfo.cxx +@@ -1109,12 +1109,12 @@ void TStreamerInfo::BuildCheck(TFile *file /* = 0 */, Bool_t load /* = kTRUE */) + fClassVersion, GetName(), GetName(), GetName(), fClassVersion); + } else { + Warning("BuildCheck", "\n\ +- The StreamerInfo from %s does not match existing one (%s:%d)\n\ ++ The StreamerInfo does not match existing one (%s:%d)\n\ + The existing one has not been used yet and will be discarded.\n\ + Reading should work properly, however writing object of\n\ + type %s will not work properly. Most likely the version number\n\ + of the class was not properly updated [See ClassDef(%s,%d)].", +- file->GetName(), GetName(), fClassVersion, GetName(), GetName(), fClassVersion); ++ GetName(), fClassVersion, GetName(), GetName(), fClassVersion); + } + } + } +-- +2.31.1 + diff --git a/root-stress-s390x.patch b/root-stress-s390x.patch new file mode 100644 index 0000000..b1d9b9d --- /dev/null +++ b/root-stress-s390x.patch @@ -0,0 +1,39 @@ +From 30cbc0d44364586ac64a3ac0fd6641e338549bbe Mon Sep 17 00:00:00 2001 +From: Mattias Ellert +Date: Tue, 10 Aug 2021 06:33:17 +0200 +Subject: [PATCH] Adjust tests for s390x + +--- + math/mathcore/test/stress/testGenVector.cxx | 2 +- + test/stressMathCore.cxx | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/math/mathcore/test/stress/testGenVector.cxx b/math/mathcore/test/stress/testGenVector.cxx +index 8da429c395..df9061c88e 100644 +--- a/math/mathcore/test/stress/testGenVector.cxx ++++ b/math/mathcore/test/stress/testGenVector.cxx +@@ -79,7 +79,7 @@ TYPED_TEST_P(GenVectorTest, TestGenVectors) + scale = this->fDim * 20; + if (this->fDim == 3 && this->V2Name() == "RhoEtaPhiVector") scale *= 12; // for problem with RhoEtaPhi + if (this->fDim == 4 && ( this->V2Name() == "PtEtaPhiMVector" || this->V2Name() == "PxPyPzMVector")) { +-#if (defined(__arm__) || defined(__arm64__) || defined(__aarch64__)) ++#if (defined(__arm__) || defined(__arm64__) || defined(__aarch64__) || defined(__s390x__)) + scale *= 1.E7; + #else + scale *= 10; +diff --git a/test/stressMathCore.cxx b/test/stressMathCore.cxx +index 4d4695a8a0..b6d2d2c9e7 100644 +--- a/test/stressMathCore.cxx ++++ b/test/stressMathCore.cxx +@@ -1120,7 +1120,7 @@ int testVector(int ngen, bool testio=false) { + scale = Dim*20; + if (Dim==3 && VecType::name() == "RhoEtaPhiVector") scale *= 12; // for problem with RhoEtaPhi + if (Dim==4 && ( VecType::name() == "PtEtaPhiMVector" || VecType::name() == "PxPyPzMVector")) { +-#if (defined(__arm__) || defined(__arm64__) || defined(__aarch64__)) ++#if (defined(__arm__) || defined(__arm64__) || defined(__aarch64__) || defined(__s390x__)) + scale *= 1.E7; + #else + scale *= 10; +-- +2.31.1 + diff --git a/root-symbol-rewrite.patch b/root-symbol-rewrite.patch new file mode 100644 index 0000000..c91bbe6 --- /dev/null +++ b/root-symbol-rewrite.patch @@ -0,0 +1,31 @@ +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-testfiles.sh b/root-testfiles.sh index c2451e9..db4d721 100755 --- a/root-testfiles.sh +++ b/root-testfiles.sh @@ -72,7 +72,14 @@ wget -N ${SITE}/tesla.root wget -N ${SITE}/wa91_ref_3.root wget -N ${SITE}/wa91.root +wget -N ${SITE}/AtlasGraphs.root wget -N ${SITE}/europe.root +wget -N ${SITE}/Higgs_data.root +wget -N ${SITE}/linearIO.root +wget -N ${SITE}/stressHistogram.5.18.00.root +wget -N ${SITE}/tmva_class_example.root +wget -N ${SITE}/tmva_multiclass_example.root +wget -N ${SITE}/tmva_reg_example.root wget -N ${SITE}/usa.root for f in *.root ; do ln -s $f $f.ROOT.cachefile ; done diff --git a/root-unbundle-gtest.patch b/root-unbundle-gtest.patch new file mode 100644 index 0000000..ae180a2 --- /dev/null +++ b/root-unbundle-gtest.patch @@ -0,0 +1,111 @@ +diff -ur root-6.24.02.orig/cmake/modules/SearchInstalledSoftware.cmake root-6.24.02/cmake/modules/SearchInstalledSoftware.cmake +--- root-6.24.02.orig/cmake/modules/SearchInstalledSoftware.cmake 2021-06-28 11:17:14.000000000 +0200 ++++ root-6.24.02/cmake/modules/SearchInstalledSoftware.cmake 2021-08-11 10:56:26.680731609 +0200 +@@ -1699,102 +1699,17 @@ + + #---Download googletest-------------------------------------------------------------- + if (testing) +- # FIXME: Remove our version of gtest in roottest. We can reuse this one. +- # Add googletest +- # http://stackoverflow.com/questions/9689183/cmake-googletest ++ # Workaround for missing libraries in Fedora's gmock packaging < 1.8.0 ++ if(EXISTS ${CMAKE_SOURCE_DIR}/googlemock) ++ set(_G_LIBRARY_PATH ${CMAKE_SOURCE_DIR}/googlemock) + +- set(_gtest_byproduct_binary_dir +- ${CMAKE_CURRENT_BINARY_DIR}/googletest-prefix/src/googletest-build) +- set(_gtest_byproducts +- ${_gtest_byproduct_binary_dir}/lib/libgtest.a +- ${_gtest_byproduct_binary_dir}/lib/libgtest_main.a +- ${_gtest_byproduct_binary_dir}/lib/libgmock.a +- ${_gtest_byproduct_binary_dir}/lib/libgmock_main.a +- ) +- +- if(MSVC) +- set(EXTRA_GTEST_OPTS +- -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG:PATH=${_gtest_byproduct_binary_dir}/lib/ +- -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_MINSIZEREL:PATH=${_gtest_byproduct_binary_dir}/lib/ +- -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE:PATH=${_gtest_byproduct_binary_dir}/lib/ +- -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELWITHDEBINFO:PATH=${_gtest_byproduct_binary_dir}/lib/ +- -Dgtest_force_shared_crt=ON +- BUILD_COMMAND ${CMAKE_COMMAND} --build --config Release) +- endif() +- if(APPLE) +- set(EXTRA_GTEST_OPTS +- -DCMAKE_OSX_SYSROOT=${CMAKE_OSX_SYSROOT}) +- endif() +- +- ExternalProject_Add( +- googletest +- GIT_REPOSITORY https://github.com/google/googletest.git +- GIT_SHALLOW 1 +- GIT_TAG release-1.10.0 +- UPDATE_COMMAND "" +- # TIMEOUT 10 +- # # Force separate output paths for debug and release builds to allow easy +- # # identification of correct lib in subsequent TARGET_LINK_LIBRARIES commands +- # CMAKE_ARGS -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG:PATH=DebugLibs +- # -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE:PATH=ReleaseLibs +- # -Dgtest_force_shared_crt=ON +- CMAKE_ARGS -G ${CMAKE_GENERATOR} +- -DCMAKE_BUILD_TYPE=Release +- -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} +- -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS} +- -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} +- -DCMAKE_CXX_FLAGS=${ROOT_EXTERNAL_CXX_FLAGS} +- -DCMAKE_AR=${CMAKE_AR} +- -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX} +- ${EXTRA_GTEST_OPTS} +- # Disable install step +- INSTALL_COMMAND "" +- BUILD_BYPRODUCTS ${_gtest_byproducts} +- # Wrap download, configure and build steps in a script to log output +- LOG_DOWNLOAD ON +- LOG_CONFIGURE ON +- LOG_BUILD ON +- TIMEOUT 600 +- ) +- +- # Specify include dirs for gtest and gmock +- ExternalProject_Get_Property(googletest source_dir) +- set(GTEST_INCLUDE_DIR ${source_dir}/googletest/include) +- set(GMOCK_INCLUDE_DIR ${source_dir}/googlemock/include) +- # Create the directories. Prevents bug https://gitlab.kitware.com/cmake/cmake/issues/15052 +- file(MAKE_DIRECTORY ${GTEST_INCLUDE_DIR} ${GMOCK_INCLUDE_DIR}) +- +- # Libraries +- ExternalProject_Get_Property(googletest binary_dir) +- set(_G_LIBRARY_PATH ${binary_dir}/lib/) +- +- # Use gmock_main instead of gtest_main because it initializes gtest as well. +- # Note: The libraries are listed in reverse order of their dependancies. +- foreach(lib gtest gtest_main gmock gmock_main) ++ foreach(lib gmock gmock_main) + add_library(${lib} IMPORTED STATIC GLOBAL) +- set_target_properties(${lib} PROPERTIES +- IMPORTED_LOCATION "${_G_LIBRARY_PATH}${CMAKE_STATIC_LIBRARY_PREFIX}${lib}${CMAKE_STATIC_LIBRARY_SUFFIX}" +- INTERFACE_INCLUDE_DIRECTORIES "${GTEST_INCLUDE_DIRS}" +- ) +- add_dependencies(${lib} googletest) +- if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" AND +- ${CMAKE_CXX_COMPILER_VERSION} VERSION_GREATER_EQUAL 9) +- target_compile_options(${lib} INTERFACE -Wno-deprecated-copy) +- endif() + endforeach() +- # Once we require at least cmake 3.11, target_include_directories will work for imported targets +- # Because of https://gitlab.kitware.com/cmake/cmake/-/merge_requests/1264 +- # We need this workaround: +- SET_PROPERTY(TARGET gtest APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${GTEST_INCLUDE_DIR}) +- SET_PROPERTY(TARGET gmock APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${GMOCK_INCLUDE_DIR}) +- #target_include_directories(gtest INTERFACE ${GTEST_INCLUDE_DIR}) +- #target_include_directories(gmock INTERFACE ${GMOCK_INCLUDE_DIR}) +- +- set_property(TARGET gtest PROPERTY IMPORTED_LOCATION ${_G_LIBRARY_PATH}/${CMAKE_STATIC_LIBRARY_PREFIX}gtest${CMAKE_STATIC_LIBRARY_SUFFIX}) +- set_property(TARGET gtest_main PROPERTY IMPORTED_LOCATION ${_G_LIBRARY_PATH}/${CMAKE_STATIC_LIBRARY_PREFIX}gtest_main${CMAKE_STATIC_LIBRARY_SUFFIX}) + set_property(TARGET gmock PROPERTY IMPORTED_LOCATION ${_G_LIBRARY_PATH}/${CMAKE_STATIC_LIBRARY_PREFIX}gmock${CMAKE_STATIC_LIBRARY_SUFFIX}) + set_property(TARGET gmock_main PROPERTY IMPORTED_LOCATION ${_G_LIBRARY_PATH}/${CMAKE_STATIC_LIBRARY_PREFIX}gmock_main${CMAKE_STATIC_LIBRARY_SUFFIX}) + ++ endif() + endif() + + #------------------------------------------------------------------------------------ diff --git a/root-uring.patch b/root-uring.patch new file mode 100644 index 0000000..129c38e --- /dev/null +++ b/root-uring.patch @@ -0,0 +1,55 @@ +diff --git a/io/io/src/RRawFileUnix.cxx b/io/io/src/RRawFileUnix.cxx +index 829c5e4cb6..417c3adf30 100644 +--- a/io/io/src/RRawFileUnix.cxx ++++ b/io/io/src/RRawFileUnix.cxx +@@ -115,26 +115,33 @@ void ROOT::Internal::RRawFileUnix::OpenImpl() + void ROOT::Internal::RRawFileUnix::ReadVImpl(RIOVec *ioVec, unsigned int nReq) + { + #ifdef R__HAS_URING +- if (RIoUring::IsAvailable()) { +- RIoUring ring; +- std::vector reads; +- reads.reserve(nReq); +- for (std::size_t i = 0; i < nReq; ++i) { +- RIoUring::RReadEvent ev; +- ev.fBuffer = ioVec[i].fBuffer; +- ev.fOffset = ioVec[i].fOffset; +- ev.fSize = ioVec[i].fSize; +- ev.fFileDes = fFileDes; +- reads.push_back(ev); ++ thread_local bool uring_failed = false; ++ if (!uring_failed) { ++ try { ++ RIoUring ring; // throws std::runtime_error ++ std::vector reads; ++ reads.reserve(nReq); ++ for (std::size_t i = 0; i < nReq; ++i) { ++ RIoUring::RReadEvent ev; ++ ev.fBuffer = ioVec[i].fBuffer; ++ ev.fOffset = ioVec[i].fOffset; ++ ev.fSize = ioVec[i].fSize; ++ ev.fFileDes = fFileDes; ++ reads.push_back(ev); ++ } ++ ring.SubmitReadsAndWait(reads.data(), nReq); ++ for (std::size_t i = 0; i < nReq; ++i) { ++ ioVec[i].fOutBytes = reads.at(i).fOutBytes; ++ } ++ return; + } +- ring.SubmitReadsAndWait(reads.data(), nReq); +- for (std::size_t i = 0; i < nReq; ++i) { +- ioVec[i].fOutBytes = reads.at(i).fOutBytes; ++ catch(const std::runtime_error &e) { ++ Warning("RIoUring", "io_uring is unexpectedly not available because:\n%s", e.what()); ++ Warning("RRawFileUnix", ++ "io_uring setup failed, falling back to blocking I/O in ReadV"); ++ uring_failed = true; + } +- return; + } +- Warning("RRawFileUnix", +- "io_uring setup failed, falling back to default ReadV implementation"); + #endif + RRawFile::ReadVImpl(ioVec, nReq); + } 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 deleted file mode 100644 index 369ce3e..0000000 --- a/root-vecops-Adaptive-size-of-long-RVec-instances-in-RVec-.patch +++ /dev/null @@ -1,135 +0,0 @@ -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 4cd9565..d40e5ea 100644 --- a/root.spec +++ b/root.spec @@ -1,51 +1,70 @@ +%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} >= 24 || %{?rhel}%{!?rhel:0} >= 8 +# Building the experimental ROOT 7 classes requires c++-14. +# This is the default for gcc 6.1 and later. %global root7 1 -%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 pandas 1 -%endif -%else -%global pandas 0 +%global root7 0 %endif -%if "%{?dist}" == ".el10_0" -# R not available in EPEL 10.0 -%global rrr 0 +%if %{?fedora}%{!?fedora:0} >= 33 || %{?rhel}%{!?rhel:0} >= 7 +%global xrootd5 1 %else -%global rrr 1 +%global xrootd5 0 %endif -%if %{?fedora}%{!?fedora:0} >= 40 || %{?rhel}%{!?rhel:0} >= 10 -%global roofitmp 1 +%if %{?fedora}%{!?fedora:0} >= 35 +# The required __malloc_hook was removed from glibc 2.33.9000-48 +# The memstat module is deprecated and will be removed in root 6.26 +%global memstat 0 %else -%global roofitmp 0 +%global memstat 1 %endif +%if %{?fedora}%{!?fedora:0} >= 28 || %{?rhel}%{!?rhel:0} >= 8 +# Multi-threading support requires TBB version >= 2018 +%global tbb 1 +%else +%global tbb 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 ^%{python3_sitearch}/.*/lib.*\\.so$ +%global __provides_exclude_from ^(%{?python2_sitearch:%{python2_sitearch}|}%{python3_sitearch})/lib.*\\.so$ Name: root -Version: 6.38.00 +Version: 6.24.06 %global libversion %(cut -d. -f 1-2 <<< %{version}) -Release: 6%{?dist} +Release: 6%{?dist}.1 Summary: Numerical data analysis framework -License: LGPL-2.1-or-later +License: LGPLv2+ URL: https://root.cern/ -# The upstream source is modified to exclude proprietary fonts -# See Source8 for how to create Source0 +# The upstream source is modified to exclude proprietary fonts: +# wget -N https://root.cern/download/root_v%%{version}.source.tar.gz +# tar -z -x -f root_v%%{version}.source.tar.gz +# find root-%%{version}/fonts -type f -a '!' -name 'STIX*' -exec rm {} ';' +# tar -J -c --group root --owner root -f root-%%{version}.tar.xz root-%%{version} Source0: %{name}-%{version}.tar.xz # Input data for the tests Source1: %{name}-testfiles.tar.xz @@ -60,61 +79,96 @@ Source6: application-x-root.png # Instructions for setting up a python virtual environment # for running the JupyROOT notebook on EPEL Source7: JupyROOT-on-EPEL -# Script to generate Source0 -Source8: %{name}-get-src.sh -# 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 +Patch1: %{name}-32bit-dataframe.patch +# Unbundle gtest +Patch2: %{name}-unbundle-gtest.patch +# Reduce memory usage of build +# Do not link rootcling_stage1 and libCling in parallel +Patch3: %{name}-memory-usage.patch # Reduce memory usage during linking on ARM and x86 by generating -# smaller debuginfo for the llvm libraries -# Fedora builders run out of memory with the default setting -Patch1: %{name}-memory-arm-x86.patch +# smaller debuginfo for the llmv libraries. +# Fedora builders run out of memory with the default setting. +Patch4: %{name}-memory-arm-x86.patch # Don't install minicern static library -Patch2: %{name}-dont-install-minicern.patch +Patch5: %{name}-dont-install-minicern.patch # Do not export Python modules in CMake config -Patch3: %{name}-no-export-python-modules.patch +Patch6: %{name}-no-export-python-modules.patch +# Don't create documentation notebooks +Patch7: %{name}-doc-no-notebooks.patch +# Don't run tutorials that crash during doc generation +Patch8: %{name}-doxygen-crash.patch +# Compatibility with older gtest +Patch9: %{name}-old-gtest-compat.patch # Run some test on 32 bit that upstream has disabled -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 +Patch10: %{name}-32bit-tests.patch +# Workaround for initialization problems for PyROOT on +# EPEL7 ppc64le +# https://sft.its.cern.ch/jira/browse/ROOT-10622 +Patch11: %{name}-epel7-ppc64le-pyroot.patch +# Use local static script and style files for JsMVA +Patch12: %{name}-jsmva-static.patch +# Compatibility with older python versions (no f-strings) +Patch13: %{name}-older-python.patch +# Fix multicore tests when running on machines with few cores +# https://github.com/root-project/root/pull/8068 +Patch14: %{name}-fix-multicore-tests-with-few-cores.patch +# Reapply altivec fix lost in the LLVM 9 upgrade +# https://github.com/root-project/root/pull/8069 +Patch15: %{name}-fix-ppc64le-compilation-with-gcc-10.patch +# Actually request the use of the large code model for ppc64le +# https://github.com/root-project/root/pull/8230 +Patch16: %{name}-ppc-codemodel.patch +# Fix segfaults on ppc64le when using the large code model +# PR by Vassil Vassilev based on upstream fix +# https://reviews.llvm.org/D91983 +# https://github.com/root-project/root/pull/9380 +Patch17: %{name}-ppc-segfault-fix.patch +# Fall back to blocking I/O if uring fails +# Backported +# - commit 691403b2cc504fd4e3e7227894023913014a61ff +# - commit 956951ee2af83426d73ad72b2d966f9f1acbea83 +# - commit 16e64da11edf91fcf31c2fc474f573fca2ee863c +# - commit 311a6822f9b0fd438c4210ed60617b45f2ddbe74 +Patch18: %{name}-uring.patch +# Add missing classes in LinkDef.h files +# Backported +Patch19: %{name}-add-TTreeProcessorMP-to-LinkDef-file.patch +Patch20: %{name}-add-RDisplay-to-LinkDef-file.patch +Patch21: %{name}-add-RCutFlowReport-to-LinkDef-file.patch +# Fix "pointer is null" warnings +# Backported +Patch22: %{name}-ptr-is-null-RooFit-TMVA.patch +Patch23: %{name}-ptr-is-null-TStreamerInfo.patch +# Fix two failing tests on s390x +# https://github.com/root-project/root/pull/8826 +Patch24: %{name}-stress-s390x.patch +# Doxygen warning fixes +# Backported from upstream +Patch25: root-doxygen-fix1.patch +# Doxygen warning fixes +# https://github.com/root-project/root/pull/9388 +Patch26: root-doxygen-fix2.patch +# Don't run tutorials that crash during doc generation +# EPEL 7 specific +Patch27: %{name}-doxygen-crash-el7.patch +# Backported fix from LLVM upstream +Patch28: %{name}-symbol-rewrite.patch +# Backport gcc 12 fix from LLVM +# https://github.com/root-project/root/pull/9586 +Patch29: %{name}-fix-compilation-with-gcc-12.patch +# Fix test failure on ppc64le and aarch64 with gcc 12 +# https://github.com/root-project/root/pull/9601 +Patch30: %{name}-fix-test-failure-on-ppc64le-and-aarch64-with-gcc-12.patch -BuildRequires: gcc-c++ -BuildRequires: gcc-gfortran BuildRequires: make -BuildRequires: cmake >= 3.20 +%if %{?rhel}%{!?rhel:0} == 7 +BuildRequires: cmake3 >= 3.9 +%else +BuildRequires: cmake >= 3.9 +%endif BuildRequires: libX11-devel BuildRequires: libXpm-devel BuildRequires: libXft-devel @@ -123,77 +177,99 @@ BuildRequires: fontconfig-devel BuildRequires: freetype-devel BuildRequires: fcgi-devel BuildRequires: ftgl-devel -BuildRequires: gl2ps-devel BuildRequires: glew-devel -BuildRequires: pcre2-devel +BuildRequires: gl2ps-devel +BuildRequires: pcre-devel BuildRequires: zlib-devel BuildRequires: xz-devel BuildRequires: lz4-devel BuildRequires: xxhash-devel BuildRequires: libzstd-devel -BuildRequires: libtiff-devel -BuildRequires: libpng-devel -BuildRequires: giflib-devel -BuildRequires: libjpeg-devel +# Require a version of libAfterImage that is properly linked to +# its dependencies +BuildRequires: libAfterImage-devel >= 1.20-21 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: libGL-devel -BuildRequires: libGLU-devel -BuildRequires: libxcrypt-devel -BuildRequires: python%{python3_pkgversion}-devel >= 3.7 +BuildRequires: unixODBC-devel +BuildRequires: mesa-libGL-devel +BuildRequires: mesa-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: python%{python3_pkgversion}-setuptools BuildRequires: python%{python3_pkgversion}-numpy -%ifarch %{qt6_qtwebengine_arches} -BuildRequires: qt6-qtbase-devel -BuildRequires: qt6-qtwebengine-devel +%if %{root7} +%ifarch %{qt5_qtwebengine_arches} +BuildRequires: qt5-qtbase-devel +BuildRequires: qt5-qtwebengine-devel +%endif %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 -# Davix version >= 0.6.4, but not between 0.6.8 and 0.7.0 -BuildRequires: davix-devel >= 0.7.1 -%if %{rrr} +BuildRequires: davix-devel >= 0.2.8 +BuildRequires: gfal2-devel BuildRequires: R-Rcpp-devel BuildRequires: R-RInside-devel -%endif BuildRequires: readline-devel -BuildRequires: tbb-devel >= 2020 -BuildRequires: libuuid-devel +%if %{tbb} +BuildRequires: tbb-devel >= 2018 +%endif +BuildRequires: emacs +BuildRequires: emacs-el +BuildRequires: gcc-c++ +BuildRequires: gcc-gfortran BuildRequires: graphviz-devel BuildRequires: expat-devel BuildRequires: pythia8-devel >= 8.1.80 +%if %{?fedora}%{!?fedora:0} >= 33 BuildRequires: flexiblas-devel -%if ! %{bundlejson} -BuildRequires: json-devel >= 3.9 +# 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 %endif +BuildRequires: json-devel +%if %{?fedora}%{!?fedora:0} BuildRequires: liburing-devel -%if %{tmvasofieparser} -BuildRequires: protobuf-devel >= 3.0 %endif -%ifnarch %{ix86} %{arm} -BuildRequires: libarrow-devel -%endif -%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} +%if %{?fedora}%{!?fedora:0} || %{?rhel}%{!?rhel:0} >= 8 BuildRequires: python%{python3_pkgversion}-pandas %endif +BuildRequires: doxygen +BuildRequires: graphviz +BuildRequires: yuicompressor BuildRequires: perl-generators BuildRequires: gtest-devel BuildRequires: gmock-devel +# Some of the tests call lsb_release +BuildRequires: redhat-lsb-core # Fonts BuildRequires: font(freesans) BuildRequires: font(freeserif) @@ -204,17 +280,16 @@ 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 @@ -228,7 +303,9 @@ 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. +interactively or in batch mode, as well as a general parallel +processing framework, PROOF, that can considerably speed up an +analysis. Thanks to the built-in C++ interpreter cling, the command, the scripting and the programming language are all C++. The interpreter @@ -252,20 +329,27 @@ Requires: %{name}-core = %{version}-%{release} %description icons This package contains icons used by the ROOT GUI. -%package font-files +%package fonts Summary: ROOT font collection BuildArch: noarch # STIX version 0.9 only -License: OFL-1.1 +License: OFL Requires: %{name}-core = %{version}-%{release} -# Package renamed -Provides: %{name}-fonts = %{version}-%{release} -Obsoletes: %{name}-fonts < 6.36.00-2 -%description font-files +%description fonts This package contains fonts used by ROOT that are not available in Fedora. In particular it contains STIX version 0.9 that is used by TMathText. +%package doc +Summary: Documentation for the ROOT system +BuildArch: noarch +License: LGPLv2+ and GPLv2+ and BSD +Requires: mathjax + +%description doc +This package contains the automatically generated ROOT class +documentation. + %package tutorial Summary: ROOT tutorial scripts and test suite BuildArch: noarch @@ -276,8 +360,8 @@ This package contains the tutorial scripts and test suite for ROOT. %package core Summary: ROOT core libraries -License: LGPL-2.1-or-later AND LGPL-2.0-or-later AND ISC AND MIT AND NCSA -Requires: %{name}-font-files = %{version}-%{release} +License: LGPLv2+ and BSD +Requires: %{name}-fonts = %{version}-%{release} Requires: %{name}-icons = %{version}-%{release} # Dynamic dependencies Requires: %{name}-cling%{?_isa} = %{version}-%{release} @@ -298,19 +382,11 @@ 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 -%if %{bundlejson} -Provides: bundled(json-devel) = 3.10.5 -%else -Requires: json-devel >= 3.9 -%endif +Requires: json-devel # Fonts Requires: xorg-x11-fonts-ISO8859-1-75dpi Requires: font(freesans) @@ -323,7 +399,6 @@ 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 @@ -336,22 +411,20 @@ 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 -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 -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 +%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 +%if ! %{memstat} +Obsoletes: %{name}-memstat < %{version}-%{release} +%endif %description core This package contains the core libraries used by ROOT: libCore, libNew, @@ -368,7 +441,7 @@ This package provides ROOT's multi-processor support library: libMultiProc. %package cling Summary: Cling C++ interpreter -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 +License: NCSA and (NCSA or LGPLv2+) Requires: %{name}-core%{?_isa} = %{version}-%{release} Requires: %{name}-io%{?_isa} = %{version}-%{release} # Root's cling interpreter uses a particular git commit of @@ -376,10 +449,10 @@ Requires: %{name}-io%{?_isa} = %{version}-%{release} # not work with the system libraries. The bundled llvm and # clang are compiled using -fvisibility=hidden, and are not # visible outside of the libCling module. -Provides: bundled(clang-libs) -Provides: bundled(llvm-libs) Requires: gcc-c++ Requires: redhat-rpm-config +Provides: bundled(clang-libs) +Provides: bundled(llvm-libs) Obsoletes: %{name}-cint7 < 5.26.00c Obsoletes: %{name}-cint < 6.00.00 Obsoletes: %{name}-cintex < 6.00.00 @@ -389,13 +462,6 @@ 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} @@ -407,9 +473,65 @@ 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. + +%package -n python2-distrdf +Summary: Distributed RDataFrame +BuildArch: noarch +%{?python_provide:%python_provide python2-distrdf} +Requires: python2-%{name} = %{version}-%{release} +Requires: %{name}-tree-dataframe = %{version}-%{release} + +%description -n python2-distrdf +A layer on top of RDataFrame to enable distributed computations. It is +a port of the previously known PyRDF python package. +%endif + %package -n python%{python3_pkgversion}-%{name} Summary: Python extension for ROOT -%py_provides python%{python3_pkgversion}-%{name} +%{?python_provide:%python_provide 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} @@ -417,7 +539,6 @@ 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 @@ -425,42 +546,44 @@ possible to use ROOT classes in Python. %package -n python%{python3_pkgversion}-jupyroot Summary: ROOT Jupyter kernel -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 +%{?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 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. -%if %{distrdf} +%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. + %package -n python%{python3_pkgversion}-distrdf Summary: Distributed RDataFrame BuildArch: noarch -%py_provides python%{python3_pkgversion}-distrdf +%{?python_provide:%python_provide python%{python3_pkgversion}-distrdf} Requires: python%{python3_pkgversion}-%{name} = %{version}-%{release} Requires: %{name}-tree-dataframe = %{version}-%{release} %description -n python%{python3_pkgversion}-distrdf 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} @@ -487,7 +610,6 @@ 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 @@ -501,53 +623,17 @@ 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}-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}-gui%{?_isa} = %{version}-%{release} +Requires: %{name}-gui-ged%{?_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-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. +%description geom +This package contains a library for defining geometries in ROOT. %package gdml Summary: GDML import/export for ROOT geometries @@ -573,12 +659,13 @@ 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 @@ -602,7 +689,6 @@ 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} @@ -681,7 +767,6 @@ 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} @@ -728,8 +813,6 @@ 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} @@ -811,14 +894,6 @@ 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} @@ -871,10 +946,36 @@ 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-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. @@ -887,6 +988,14 @@ Requires: %{name}-io%{?_isa} = %{version}-%{release} %description io-dcache This package contains the dCache extension for ROOT. +%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. + %package io-sql Summary: SQL input/output library for ROOT Requires: %{name}-core%{?_isa} = %{version}-%{release} @@ -932,7 +1041,7 @@ easier to use for the average user. %package fftw Summary: FFTW library for ROOT -License: GPL-2.0-or-later +License: GPLv2+ Requires: %{name}-core%{?_isa} = %{version}-%{release} %description fftw @@ -962,14 +1071,14 @@ Summary: Core mathematics library for ROOT Requires: %{name}-core%{?_isa} = %{version}-%{release} # Dynamic dependencies Requires: %{name}-mathmore%{?_isa} = %{version}-%{release} -Requires: %{name}-minuit2%{?_isa} = %{version}-%{release} +Requires: %{name}-minuit%{?_isa} = %{version}-%{release} %description mathcore This package contains the MathCore library for ROOT. %package mathmore Summary: GSL interface library for ROOT -License: GPL-2.0-or-later +License: GPLv2+ Requires: %{name}-core%{?_isa} = %{version}-%{release} Requires: %{name}-mathcore%{?_isa} = %{version}-%{release} @@ -1088,7 +1197,7 @@ discriminating variables. %package unuran Summary: Random number generator library -License: GPL-2.0-or-later +License: GPLv2+ Requires: %{name}-core%{?_isa} = %{version}-%{release} Requires: %{name}-hist%{?_isa} = %{version}-%{release} Requires: %{name}-mathcore%{?_isa} = %{version}-%{release} @@ -1117,6 +1226,19 @@ Obsoletes: %{name}-tree-player < 6.14.00 %description vecops This package contains a vector operation extension for ROOT. +%if %{memstat} +%package memstat +Summary: Memory statistics tool for use with ROOT +Requires: %{name}-core%{?_isa} = %{version}-%{release} +Requires: %{name}-hist%{?_isa} = %{version}-%{release} +Requires: %{name}-io%{?_isa} = %{version}-%{release} +Requires: %{name}-tree%{?_isa} = %{version}-%{release} + +%description memstat +This package contains the memory statistics tool for debugging memory +leaks and such. +%endif + %package montecarlo-eg Summary: Event generator library for ROOT Requires: %{name}-core%{?_isa} = %{version}-%{release} @@ -1135,10 +1257,21 @@ Requires: %{name}-montecarlo-eg%{?_isa} = %{version}-%{release} %description montecarlo-pythia8 This package contains the Pythia version 8 plug-in for ROOT. This -package provides the ROOT user with transparent interface to the Pythia +package provide 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. +%package montecarlo-vmc +Summary: Virtual Monte-Carlo (simulation) library for ROOT +Requires: %{name}-core%{?_isa} = %{version}-%{release} +Requires: %{name}-geom%{?_isa} = %{version}-%{release} +Requires: %{name}-mathcore%{?_isa} = %{version}-%{release} +Requires: %{name}-montecarlo-eg%{?_isa} = %{version}-%{release} +Requires: %{name}-physics%{?_isa} = %{version}-%{release} + +%description montecarlo-vmc +This package contains the VMC library for ROOT. + %package net Summary: Net library for ROOT Requires: %{name}-core%{?_isa} = %{version}-%{release} @@ -1148,16 +1281,16 @@ Requires: %{name}-io%{?_isa} = %{version}-%{release} This package contains the ROOT networking library. %package net-rpdutils -Summary: Authentication utilities used by rootd +Summary: Authentication utilities used by xproofd Requires: %{name}-core%{?_isa} = %{version}-%{release} -Requires: %{name}-net%{?_isa} = %{version}-%{release} %description net-rpdutils -This package contains authentication utilities used by rootd. +This package contains authentication utilities used by xproofd. %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 @@ -1165,7 +1298,7 @@ This package contains the basic authentication algorithms used by ROOT. %package net-davix Summary: Davix extension for ROOT -Requires: davix-libs%{?_isa} >= 0.6.4 +Requires: davix-libs%{?_isa} >= 0.2.8 Requires: %{name}-core%{?_isa} = %{version}-%{release} Requires: %{name}-io%{?_isa} = %{version}-%{release} @@ -1175,11 +1308,9 @@ 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 >= 7.10 +Requires: js-jsroot >= 6 # Library split (net-httpsniff from net-http) Obsoletes: %{name}-net-http < 6.14.00 @@ -1211,12 +1342,94 @@ Requires: %{name}-net%{?_isa} = %{version}-%{release} %description netx This package contains the NetX extension for ROOT, i.e. a client for -the xrootd server. Only the new (NetXNG) version is provided. +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 -%if %{roofit} %package roofit Summary: ROOT extension for modeling expected distributions - toolkit -License: BSD-2-Clause +License: BSD Requires: %{name}-core%{?_isa} = %{version}-%{release} Requires: %{name}-hist%{?_isa} = %{version}-%{release} Requires: %{name}-io%{?_isa} = %{version}-%{release} @@ -1245,7 +1458,7 @@ This package contains the RooFit toolkit classes. %package roofit-core Summary: ROOT extension for modeling expected distributions - core -License: BSD-2-Clause +License: BSD Requires: %{name}-core%{?_isa} = %{version}-%{release} Requires: %{name}-foam%{?_isa} = %{version}-%{release} Requires: %{name}-graf%{?_isa} = %{version}-%{release} @@ -1253,17 +1466,11 @@ 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}-minuit2%{?_isa} = %{version}-%{release} +Requires: %{name}-minuit%{?_isa} = %{version}-%{release} Requires: %{name}-roofit-batchcompute%{?_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 @@ -1282,10 +1489,11 @@ This package contains the core RooFit classes. %package roofit-more Summary: ROOT extension for modeling expected distributions - more -License: BSD-2-Clause +License: BSD 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 @@ -1307,8 +1515,9 @@ 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}-mathcore%{?_isa} = %{version}-%{release} +Requires: %{name}-roofit-core%{?_isa} = %{version}-%{release} %description roofit-batchcompute While fitting, a significant amount of time and processing power is @@ -1323,80 +1532,9 @@ 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-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-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 -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 JSON interface to RooFit. - -%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} - -%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} @@ -1415,54 +1553,26 @@ Obsoletes: %{name}-roofit < 6.20.00 RooStats is a package containing statistical tools built on top of RooFit. -%package hist-factory -Summary: RooFit PDFs from ROOT histograms +%package sql-mysql +Summary: MySQL client plugin for ROOT Requires: %{name}-core%{?_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} +Requires: %{name}-net%{?_isa} = %{version}-%{release} -%description hist-factory -Create RooFit probability density functions from ROOT histograms. +%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. -%package xroofit -Summary: Extra tools for RooFit projects -License: BSD-2-Clause +%package sql-odbc +Summary: ODBC plugin 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-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} +Requires: %{name}-net%{?_isa} = %{version}-%{release} -%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 +%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. %package sql-sqlite Summary: Sqlite client plugin for ROOT @@ -1475,9 +1585,20 @@ 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-3-Clause +License: BSD Requires: %{name}-core%{?_isa} = %{version}-%{release} Requires: %{name}-graf%{?_isa} = %{version}-%{release} Requires: %{name}-graf-gpad%{?_isa} = %{version}-%{release} @@ -1492,8 +1613,6 @@ 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 @@ -1515,35 +1634,19 @@ 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-3-Clause +License: BSD 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-3-Clause +License: BSD Requires: %{name}-core%{?_isa} = %{version}-%{release} Requires: %{name}-matrix%{?_isa} = %{version}-%{release} Requires: %{name}-r%{?_isa} = %{version}-%{release} @@ -1551,35 +1654,10 @@ 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) -generates C++ functions easily invokable for the fast inference of -trained neural network models. It takes ONNX model files as inputs and -produces C++ header files that can be included and utilized in a -"plug-and-go" style. - -%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} - -%description tmva-sofie-parser -Parsers for ROOT/TMVA SOFIE -%endif %package tmva-gui Summary: Toolkit for multivariate data analysis GUI -License: BSD-3-Clause +License: BSD Requires: %{name}-core%{?_isa} = %{version}-%{release} Requires: %{name}-graf%{?_isa} = %{version}-%{release} Requires: %{name}-graf-gpad%{?_isa} = %{version}-%{release} @@ -1589,7 +1667,6 @@ 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 @@ -1604,7 +1681,6 @@ 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} @@ -1612,15 +1688,15 @@ 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) 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 @@ -1656,17 +1732,6 @@ 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} @@ -1686,119 +1751,19 @@ Requires: python%{python3_pkgversion}-%{name} = %{version}-%{release} The ROOT command line utilities is a set of scripts for common tasks written in python. -%package gui-webdisplay -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. - -%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-qt6webdisplay -This package contains a Qt6 web display extension for ROOT. +%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 -%package gui-webgui6 -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-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. - -%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. +%description notebook +Javascript and style files for the Jupyter ROOT Notebook. %if %{root7} %package graf-gpadv7 @@ -1820,9 +1785,7 @@ 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-webdisplay%{?_isa} = %{version}-%{release} Requires: %{name}-hist%{?_isa} = %{version}-%{release} @@ -1837,33 +1800,32 @@ 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-v7 -Summary: Additional ROOT GUI browsable providers (ROOT 7) +%package gui-browsable +Summary: GUI browsable (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-v7 -This package contains additional ROOT GUI browsable providers for ROOT 7. +%description gui-browsable +This package contains GUI browsable components for ROOT 7. -%package gui-browserv7-v7 -Summary: Additional ROOT browser widgets (ROOT 7) +%package gui-browserv7 +Summary: Browser (ROOT 7) Requires: %{name}-core%{?_isa} = %{version}-%{release} +Requires: %{name}-graf-gpad%{?_isa} = %{version}-%{release} Requires: %{name}-graf-gpadv7%{?_isa} = %{version}-%{release} +Requires: %{name}-geom%{?_isa} = %{version}-%{release} +Requires: %{name}-graf3d-eve7%{?_isa} = %{version}-%{release} Requires: %{name}-gui-browsable%{?_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 +Requires: %{name}-gui-webdisplay%{?_isa} = %{version}-%{release} +Requires: %{name}-gui-webgui6%{?_isa} = %{version}-%{release} +Requires: %{name}-io%{?_isa} = %{version}-%{release} -%description gui-browserv7-v7 -This package contains additional ROOT browser widgets for ROOT 7. +%description gui-browserv7 +This package contains a file browser for ROOT 7. %package gui-canvaspainter Summary: Canvas painter (ROOT 7) @@ -1879,7 +1841,6 @@ 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} @@ -1889,115 +1850,203 @@ Requires: %{name}-mathcore%{?_isa} = %{version}-%{release} This package contains a library to show a pop-up dialog when fitting various kinds of data. +%ifarch %{qt5_qtwebengine_arches} +%package gui-qt5webdisplay +Summary: Qt5 Web display (ROOT 7) +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. +%endif + +%package gui-webdisplay +Summary: Web display (ROOT 7) +Requires: %{name}-core%{?_isa} = %{version}-%{release} +Requires: %{name}-mathcore%{?_isa} = %{version}-%{release} +Requires: %{name}-net-http%{?_isa} = %{version}-%{release} + +%description gui-webdisplay +This package contains a web display extension for ROOT 7. + +%package gui-webgui6 +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} + +%description gui-webgui6 +This package provides a Web based GUI for ROOT. + %package histv7 -Summary: Histogram library for ROOT 7 +Summary: Histogram library for ROOT (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} + +%description tree-ntuple +This package contains an ntuple extension for ROOT 7. %endif %prep -%setup -q -a 1 -a 9 +%setup -q -a 1 -%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 +%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 +%if %{?rhel}%{!?rhel:0} == 7 +%patch27 -p1 +%endif +%patch28 -p1 +%patch29 -p1 +%patch30 -p1 # Remove bundled sources in order to be sure they are not used # * afterimage -rm -rf graf2d/asimage/src/libAfterImage/{libjpeg,libpng,libungif,zlib} -sed '/zlib\/zlib.h/d' -i graf2d/asimage/src/libAfterImage/.depend +rm -rf graf2d/asimage/src/libAfterImage # * ftgl rm -rf graf3d/ftgl/src graf3d/ftgl/inc # * freetype rm -rf graf2d/freetype/src -# * glew, lz4, nlohmann, pcre, xxhash, zlib, zstd +# * davix, glew, lz4, nlohmann, openssl, pcre, tbb, xxhash, zlib, zstd +rm -rf builtins/davix rm -rf builtins/glew rm -rf builtins/lz4 -%if ! %{bundlejson} rm -rf builtins/nlohmann -%endif +rm -rf builtins/openssl rm -rf builtins/pcre +rm -rf builtins/tbb rm -rf builtins/xxhash rm -rf builtins/zlib rm -rf builtins/zstd # * lzma -rm core/lzma/src/*.tar.gz +rm -rf core/lzma/src/*.tar.gz # * gl2ps rm graf3d/gl/src/gl2ps.cxx graf3d/gl/src/gl2ps/gl2ps.h # * unuran -rm math/unuran/src/*.tar.gz +rm -rf math/unuran/src/*.tar.gz +# * xrootd-private-devel headers +rm -rf proof/xrdinc # * x11 extension headers rm -rf graf2d/x11/inc/X11 +# * mathjax +rm -rf documentation/doxygen/mathjax.tar.gz +sed /mathjax.tar.gz/d -i documentation/doxygen/Makefile +%if %{root7} +# * string_view ( requires c++-14) +rm core/foundation/inc/ROOT/libcpp_string_view.h \ + core/foundation/inc/ROOT/RWrap_libcpp_string_view.h +sed /RWrap_libcpp_string_view.h/d -i build/unix/module.modulemap +%endif # * jsroot -rm -rf js/[^f]* js/files/draw.htm js/files/online.htm +rm -rf js/* -# Additional documentation -install -p -m 644 %{SOURCE7} bindings/jupyroot +# Remove unsupported man page macros +sed -e '/^\.UR/d' -e '/^\.UE/d' -i man/man1/* + +# Work around missing libraries in Fedora's gmock packaging < 1.8.0 +if [ ! -r %{_libdir}/libgmock.so ] ; then +mkdir googlemock +pushd googlemock +g++ %{optflags} -DGTEST_HAS_PTHREAD=1 -c -o gmock-all.o /usr/src/gmock/gmock-all.cc +ar rv libgmock.a gmock-all.o +g++ %{optflags} -DGTEST_HAS_PTHREAD=1 -c -o gmock_main.o /usr/src/gmock/gmock_main.cc +ar rv libgmock_main.a gmock_main.o +popd +fi + +# Remove pre-minified script and style files +rm etc/notebook/JsMVA/js/*.min.js +rm etc/notebook/JsMVA/css/*.min.css %build -%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 -%cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo \ +# Minify script and style files +for s in etc/notebook/JsMVA/js/*.js ; do + yuicompressor ${s} -o ${s%.js}.min.js +done +for s in etc/notebook/JsMVA/css/*.css ; do + yuicompressor ${s} -o ${s%.css}.min.css +done + +# Avoid overlinking (this used to be the default with the old configure script) +LDFLAGS="-Wl,--as-needed %{?__global_ldflags}" + +%cmake3 \ -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_SKIP_INSTALL_RPATH:BOOL=ON \ - -DPython3_EXECUTABLE:PATH=%{__python3} \ + -DCMAKE_INSTALL_ELISPDIR:PATH=%{_emacs_sitelispdir}/%{name} \ -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 \ -Dbuiltin_davix:BOOL=OFF \ -Dbuiltin_fftw3:BOOL=OFF \ -Dbuiltin_freetype:BOOL=OFF \ -Dbuiltin_ftgl:BOOL=OFF \ - -Dbuiltin_gif:BOOL=OFF \ -Dbuiltin_gl2ps:BOOL=OFF \ -Dbuiltin_glew:BOOL=OFF \ -Dbuiltin_gsl:BOOL=OFF \ - -Dbuiltin_gtest:BOOL=OFF \ - -Dbuiltin_jpeg:BOOL=OFF \ -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 \ @@ -2005,82 +2054,75 @@ unset QTINC -Dbuiltin_veccore:BOOL=OFF \ -Dbuiltin_xrootd:BOOL=OFF \ -Dbuiltin_xxhash:BOOL=OFF \ - -Dbuiltin_zeromq:BOOL=OFF \ -Dbuiltin_zlib:BOOL=OFF \ -Dbuiltin_zstd:BOOL=OFF \ -%ifnarch %{ix86} %{arm} - -Darrow:BOOL=ON \ -%else + -Dalien:BOOL=OFF \ -Darrow:BOOL=OFF \ -%endif -Dasimage:BOOL=ON \ - -Dasimage_tiff:BOOL=ON \ -Dccache:BOOL=OFF \ -Ddistcc:BOOL=OFF \ -Dcefweb:BOOL=OFF \ - -Dcheck_connection:BOOL=OFF \ - -Dclad:BOOL=ON \ - -DCLAD_SOURCE_DIR:PATH=${PWD}/clad-2.2 \ + -Dclad:BOOL=OFF \ -Dcocoa:BOOL=OFF \ -Dcuda:BOOL=OFF \ - -Ddaos:BOOL=OFF \ -%if %{dataframe} - -Ddataframe:BOOL=ON \ +%if %{root7} + -Droot7:BOOL=ON \ + -Dwebgui:BOOL=ON \ %else - -Ddataframe:BOOL=OFF \ + -Droot7:BOOL=OFF \ + -Dwebgui:BOOL=OFF \ %endif + -Dcxxmodules:BOOL=OFF \ + -Ddataframe:BOOL=ON \ -Ddavix:BOOL=ON \ -Ddcache:BOOL=ON \ -Ddev:BOOL=OFF \ - -Dexperimental_adaptivecpp=OFF \ - -Dexperimental_genvectorx=OFF \ + -Dexceptions:BOOL=ON \ -Dfcgi:BOOL=ON \ -Dfftw3:BOOL=ON \ -DFIREFOX_EXECUTABLE:PATH=/usr/bin/firefox \ -Dfitsio:BOOL=ON \ -Dfortran:BOOL=ON \ -Dgdml:BOOL=ON \ - -Dgeom:BOOL=ON \ - -Dgeombuilder:BOOL=ON \ + -Dgfal:BOOL=ON \ + -Dgsl_shared: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_mpi:BOOL=OFF \ - -Dminuit2_omp:BOOL=ON \ +%if %{memstat} + -Dmemstat:BOOL=ON \ +%else + -Dmemstat:BOOL=OFF \ +%endif + -Dminuit2:BOOL=ON \ + -Dmlp:BOOL=ON \ + -Dmonalisa:BOOL=OFF \ -Dmpi:BOOL=OFF \ + -Dmysql:BOOL=ON \ + -Dodbc:BOOL=ON \ -Dopengl:BOOL=ON \ - -Dpyroot:BOOL=ON \ + -Doracle:BOOL=OFF \ + -Dpgsql:BOOL=ON \ + -Dpythia6:BOOL=OFF \ -Dpythia8:BOOL=ON \ -%ifarch %{qt6_qtwebengine_arches} - -Dqt6web:BOOL=ON \ + -Dpyroot:BOOL=ON \ + -Dpyroot_legacy:BOOL=OFF \ +%ifarch %{qt5_qtwebengine_arches} + -Dqt5web:BOOL=ON \ %else - -Dqt6web:BOOL=OFF \ + -Dqt5web: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 \ @@ -2089,51 +2131,50 @@ unset QTINC -Dspectrum:BOOL=ON \ -Dsqlite:BOOL=ON \ -Dssl:BOOL=ON \ - -Dthisroot_scripts:BOOL=OFF \ + -Dtcmalloc:BOOL=OFF \ -Dtmva:BOOL=ON \ +%if %{tbb} -Dtmva-cpu:BOOL=ON \ - -Dtmva-cudnn:BOOL=OFF \ +%else + -Dtmva-cpu:BOOL=OFF \ +%endif -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 \ - -Dwebgui:BOOL=ON \ + -Dvmc:BOOL=ON \ -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 \ -Dcoverage:BOOL=OFF \ -Droottest:BOOL=OFF \ -Drootbench:BOOL=OFF \ -Dasan:BOOL=OFF -%cmake_build +%cmake3_build %install -%cmake_install +%cmake3_install -# Let rpm redo the python byte compilation -find %{buildroot}%{python3_sitearch} -depth -type d -name __pycache__ -exec rm -r {} ';' +# Do emacs byte compilation +emacs -batch -no-site-file -f batch-byte-compile \ + %{buildroot}%{_emacs_sitelispdir}/%{name}/*.el # Install desktop entry and icon mkdir -p %{buildroot}%{_datadir}/applications @@ -2148,67 +2189,152 @@ 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}%{python3_sitearch}/cmdLineUtils.py \ +mv %{buildroot}%{_libdir}/%{name}/cmdLineUtils.py* \ %{buildroot}%{_datadir}/%{name}/cli +rm %{buildroot}%{_libdir}/%{name}/__pycache__/cmdLineUtils.* sed -e '/^\#!/d' -i %{buildroot}%{_datadir}/%{name}/cli/cmdLineUtils.py # Install GDB pretty printers to auto load safe path +# 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} -mv %{buildroot}%{_libdir}/%{name}/*-gdb.py \ - %{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 -# 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}%{python3_sitearch}/JupyROOT %{buildroot}%{python3_sitelib} -%if %{distrdf} -mv %{buildroot}%{python3_sitearch}/DistRDF %{buildroot}%{python3_sitelib} +# 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 -fi -# Create .dist-info files so that rpm auto-generates provides -mkdir %{buildroot}%{python3_sitearch}/ROOT-%{version}.dist-info +%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} +cp -pr %{buildroot}%{_libdir}/%{name}/DistRDF %{buildroot}%{python2_sitelib} + +# Create .egg-info files so that rpm auto-generates provides echo 'Name: ROOT' > \ - %{buildroot}%{python3_sitearch}/ROOT-%{version}.dist-info/METADATA + %{buildroot}%{python2_sitearch}/ROOT-%{version}.egg-info echo 'Version: %{version}' >> \ - %{buildroot}%{python3_sitearch}/ROOT-%{version}.dist-info/METADATA -mkdir %{buildroot}%{python3_sitelib}/JupyROOT-%{version}.dist-info + %{buildroot}%{python2_sitearch}/ROOT-%{version}.egg-info echo 'Name: JupyROOT' > \ - %{buildroot}%{python3_sitelib}/JupyROOT-%{version}.dist-info/METADATA + %{buildroot}%{python2_sitearch}/JupyROOT-%{version}.egg-info echo 'Version: %{version}' >> \ - %{buildroot}%{python3_sitelib}/JupyROOT-%{version}.dist-info/METADATA -%if %{distrdf} -mkdir %{buildroot}%{python3_sitelib}/DistRDF-%{version}.dist-info + %{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 echo 'Name: DistRDF' > \ - %{buildroot}%{python3_sitelib}/DistRDF-%{version}.dist-info/METADATA + %{buildroot}%{python2_sitelib}/DistRDF-%{version}.egg-info echo 'Version: %{version}' >> \ - %{buildroot}%{python3_sitelib}/DistRDF-%{version}.dist-info/METADATA + %{buildroot}%{python2_sitelib}/DistRDF-%{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 + +mkdir -p %{buildroot}%{python3_sitelib} +mv %{buildroot}%{_libdir}/%{name}/JsMVA %{buildroot}%{python3_sitelib} +mv %{buildroot}%{_libdir}/%{name}/DistRDF %{buildroot}%{python3_sitelib} + +# Create .egg-info files so that rpm auto-generates provides +echo 'Name: ROOT' > \ + %{buildroot}%{python3_sitearch}/ROOT-%{version}.egg-info +echo 'Version: %{version}' >> \ + %{buildroot}%{python3_sitearch}/ROOT-%{version}.egg-info +echo 'Name: JupyROOT' > \ + %{buildroot}%{python3_sitearch}/JupyROOT-%{version}.egg-info +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 +echo 'Name: DistRDF' > \ + %{buildroot}%{python3_sitelib}/DistRDF-%{version}.egg-info +echo 'Version: %{version}' >> \ + %{buildroot}%{python3_sitelib}/DistRDF-%{version}.egg-info + # 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_sitelib}/JupyROOT/kernel/rootkernel.py + -i %{buildroot}%{python3_sitearch}/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 @@ -2225,10 +2351,8 @@ 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 \ - %{buildroot}%{_bindir}/rootssh -sed -e 's!/usr/bin/env python3!%{__python3}!' \ +sed -e 's!/usr/bin/env bash!/bin/bash!' -i %{buildroot}%{_bindir}/root-config +sed -e 's!/usr/bin/env /usr/bin/python.*!%{__python3}!' \ -e '/import sys/d' \ -e '/import cmdLineUtils/iimport sys' \ -e '/import cmdLineUtils/isys.path.insert(0, "%{_datadir}/%{name}/cli")' \ @@ -2241,41 +2365,73 @@ sed -e 's!/usr/bin/env python3!%{__python3}!' \ %{buildroot}%{_bindir}/rootprint \ %{buildroot}%{_bindir}/rootrm \ %{buildroot}%{_bindir}/rootslimtree -sed -e 's!/usr/bin/env python3!%{__python3}!' \ +sed -e 's!/usr/bin/env /usr/bin/python.*!%{__python3}!' \ -i %{buildroot}%{_bindir}/rootdrawtree sed -e 's!/usr/bin/env python!%{__python3}!' \ - -i %{buildroot}%{_datadir}/%{name}/dictpch/makepch.py -sed -e 's!/usr/bin/python!%{__python3}!' \ - -i %{buildroot}%{_datadir}/%{name}/pdg_table_update.py + -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 # 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 -rf %{buildroot}%{_datadir}/%{name}/html +rm %{buildroot}%{_pkgdocdir}/README.MONALISA # 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 ! %{rrr} -rm ROOT@@Math@@Minimizer/P090_RMinimizer.C +%if ! %{root7} +rm TBrowserImp/P030_RWebBrowserImp.C %endif +rm TDataSetManager/P020_TDataSetManagerAliEn.C +rm TFile/P070_TAlienFile.C rm TGLManager/P020_TGWin32GLManager.C rm TGLManager/P030_TGOSXGLManager.C +rm TGrid/P010_TAlien.C +%if ! %{root7} +rm TGuiFactory/P030_TWebGuiFactory.C +%endif +%if %{xrootd5} +rm TProofMgr/P010_TXProofMgr.C +rm TProofServ/P010_TXProofServ.C +rm TSlave/P010_TXSlave.C +%endif +rm TSQLServer/P040_TOracleServer.C +rm TSystem/P030_TAlienSystem.C rm TVirtualGeoConverter/P010_TGeoVGConverter.C +%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 build img mathjax modules scripts files/draw.htm files/online.htm ; do - ln -nrs %{buildroot}%{_jsdir}/jsroot/$x \ - %{buildroot}%{_datadir}/%{name}/js/$x -done +# Replace bundled jsroot with symlink to system version +rmdir %{buildroot}%{_datadir}/%{name}/js +ln -s /usr/share/javascript/jsroot %{buildroot}%{_datadir}/%{name}/js # Create ldconfig configuration mkdir -p %{buildroot}%{_sysconfdir}/ld.so.conf.d @@ -2284,413 +2440,142 @@ echo %{_libdir}/%{name} > \ # Make ROOTConfig-targets.cmake not error on missing files to work better with # subpackages -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 %{?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}\ If this target is not used this warning can be ignored.")' \ - -e '/Possible reasons include/,/)/d' \ + -e '/FATAL.*import/,/)/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 + +# Generate documentation +pushd documentation/doxygen +mkdir -p doc/html +ln -s /usr/share/javascript/mathjax doc/html/mathjax +ln -s ../../files files +for x in df014_CsvDataSource_MuRun2010B_cpp.csv \ + df014_CsvDataSource_MuRun2010B_py.csv \ + df015_CsvDataSource_MuRun2010B.csv ; do + ln -sf ../../files/tutorials/df014_CsvDataSource_MuRun2010B.csv $x +done +# Create the py-hsimple.root file in advance (needed as input) +ROOTIGNOREPREFIX=1 PATH=${PWD}/../../%{_vpath_builddir}/bin:${PATH} \ + ROOTSYS=${PWD}/../../%{_vpath_builddir} \ + LD_LIBRARY_PATH=${PWD}/../../%{_vpath_builddir}/lib \ + PYTHONPATH=${PWD}/../../%{_vpath_builddir}/lib \ + %{__python3} ../../tutorials/pyroot/hsimple.py +ROOTIGNOREPREFIX=1 PATH=${PWD}/../../%{_vpath_builddir}/bin:${PATH} \ + ROOTSYS=${PWD}/../../%{_vpath_builddir} \ + LD_LIBRARY_PATH=${PWD}/../../%{_vpath_builddir}/lib \ + PYTHONPATH=${PWD}/../../%{_vpath_builddir}/lib \ + make DOXYGEN_OUTPUT_DIRECTORY=${PWD}/doc PYTHON_EXECUTABLE=%{__python3} +mv doc/html %{buildroot}%{_pkgdocdir}/html +popd + # Create includelist files ... -for f in `find %{_vpath_builddir} -name cmake_install.cmake -a '!' -path '*/llvm-project/*'` ; do +for f in `find %{_vpath_builddir} -name cmake_install.cmake -a '!' -path '*/llvm/*'` ; do l=`sed 's!%{_vpath_builddir}/\(.*\)/cmake_install.cmake!includelist-\1!' <<< $f` 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 - -# 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 -pushd %{_vpath_builddir} -pushd test -ln -s ../../files files -popd -pushd runtutorials -ln -s ../../files files -ln -s ../../files/tutorials/df014_CsvDataSource_MuRun2010B.csv CsvDataSource_MuRun2010B.csv -ln -s ../../files/usa.root usa.root -popd -popd - -# Exclude some tests that can not be run -# -# - test-stressIOPlugins-* -# requires network access (by design since they test the remote file IO) -# -# - 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-io-tree-imt_parTreeProcessing -# requires input data: http://root.cern.ch/files/tp_process_imt.root (707 MB) -# -# - tutorial-analysis-dataframe-df###_SQlite* -# reads sqlite data over network: -# http://root.cern.ch/files/root_download_stats.sqlite -# -# - 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-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-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-io-ntuple-ntpl004_dimuon -# reads input data over network -# http://root.cern.ch/files/NanoAOD_DoubleMuon_CMS2011OpenData.root (1.5 GB) -# -# - 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-RRawFileNetXNG -# reads input file over network -# root://eospublic.cern.ch/eos/root-eos/xrootd.test -# -# - 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-machine_learning-tmva100_DataPreparation-py -# reads input data over network -# 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-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" - -%ifarch %{ix86} -# - gtest-hist-hist-TFormulaGradientTests -# out of memory -# -# - 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-hist-hist-TFormulaGradientTests|\ -pyunittests-bindings-pyroot-pythonizations-pyroot-array-numpy-views|\ -tmva-sofie-test-TestCustomModelsFromONNX\$\$" +cat includelist-net-netxng > includelist-netx +%if ! %{xrootd5} +cat includelist-net-netx >> includelist-netx %endif -%ifarch %{power64} -%if %{?fedora}%{!?fedora:0} >= 42 -# - gtest-tree-ntuple-ntuple-emulated -# - gtest-tree-ntuple-ntuple-evolution-shape -# waitpid() failed -excluded="${excluded}|\ -gtest-tree-ntuple-ntuple-emulated|\ -gtest-tree-ntuple-ntuple-evolution-shape" -%endif +%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 || : %endif -%ifarch s390x -# - gtest-roofit-roofitcore-testNaNPacker -# - gtest-roofit-roofitcore-testLikelihoodGradientJob -# Uses "Packed NaN" feature, not implemented for big endian. -excluded="${excluded}|\ -gtest-roofit-roofitcore-testNaNPacker|\ -gtest-roofit-roofitcore-testLikelihoodGradientJob" - -# - gtest-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 -# -# - 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-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-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-math-fit-combinedFit-py|\ -tutorial-math-fit-NumericalMinimization-py|\ -tutorial-visualisation-rcanvas-rbox-py|\ -test-stresshistofit\$\$|\ -test-stresshistofit-interpreted|\ -test-stresshistogram\$\$|\ -test-stresshistogram-interpreted" - -# 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 -# - gtest-tree-readspeed-readspeed-general -# - gtest-tree-tree-testTBranch -%if %{?fedora}%{!?fedora:0} >= 43 -excluded="${excluded}|\ -test-stress\$\$|\ -gtest-tree-readspeed-readspeed-general|\ -gtest-tree-tree-testTBranch" +%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 -%endif - -# 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}|\ -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 -# 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" -st = posix.stat(path) -if st and st.type == "link" then - os.remove(path) -end - -%post net-http -# Replace bundled jsroot with symlinks to system version -for x in build img mathjax modules scripts files/draw.htm files/online.htm ; do - ln -fnrs %{_jsdir}/jsroot/$x %{_datadir}/%{name}/js/$x -done %pre -n python%{python3_pkgversion}-%{name} if [ -r /var/lib/alternatives/libPyROOT.so ] ; then +%if %{?rhel}%{!?rhel:0} == 7 + for alt in `grep python%{python3_version}/.*.so /var/lib/alternatives/libPyROOT.so` ; do +%else for alt in `grep python3.*/.*.so /var/lib/alternatives/libPyROOT.so` ; do +%endif %{_sbindir}/update-alternatives --remove libPyROOT.so $alt done fi -%post -n python%{python3_pkgversion}-jupyroot +%post notebook mkdir -p /etc/jupyter if [ -e /etc/jupyter/jupyter_notebook_config.py ] ; then - sed '/Extra static paths for JupyROOT - start/','/Extra static paths for JupyROOT - end/'d -i /etc/jupyter/jupyter_notebook_config.py + sed '/Extra static path for JupyROOT - start/','/Extra static path for JupyROOT - end/'d -i /etc/jupyter/jupyter_notebook_config.py fi cat << EOF >> /etc/jupyter/jupyter_notebook_config.py -# 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 +# 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 EOF if [ -e /etc/jupyter/jupyter_server_config.py ] ; then - sed '/Extra static paths for JupyROOT - start/','/Extra static paths for JupyROOT - end/'d -i /etc/jupyter/jupyter_server_config.py + sed '/Extra static path for JupyROOT - start/','/Extra static path for JupyROOT - end/'d -i /etc/jupyter/jupyter_server_config.py fi cat << EOF >> /etc/jupyter/jupyter_server_config.py -# 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 +# 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 EOF -%postun -n python%{python3_pkgversion}-jupyroot +%postun notebook if [ $1 -eq 0 ] ; then if [ -e /etc/jupyter/jupyter_notebook_config.py ] ; then - sed '/Extra static paths for JupyROOT - start/','/Extra static paths for JupyROOT - end/'d -i /etc/jupyter/jupyter_notebook_config.py + sed '/Extra static path for JupyROOT - start/','/Extra static path 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 paths for JupyROOT - start/','/Extra static paths for JupyROOT - end/'d -i /etc/jupyter/jupyter_server_config.py + sed '/Extra static path for JupyROOT - start/','/Extra static path 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 || : @@ -2701,17 +2586,129 @@ 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 +%ldconfig_scriptlets io-gfal +%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 +%if %{memstat} +%ldconfig_scriptlets memstat +%endif +%ldconfig_scriptlets montecarlo-eg +%ldconfig_scriptlets montecarlo-pythia8 +%ldconfig_scriptlets montecarlo-vmc +%ldconfig_scriptlets net +%ldconfig_scriptlets net-rpdutils +%ldconfig_scriptlets net-auth +%ldconfig_scriptlets net-davix +%ldconfig_scriptlets net-http +%ldconfig_scriptlets net-httpsniff +%ldconfig_scriptlets netx +%ldconfig_scriptlets proof +%ldconfig_scriptlets proof-bench +%ldconfig_scriptlets proof-player +%ldconfig_scriptlets proof-sessionviewer +%if ! %{xrootd5} +%ldconfig_scriptlets xproof +%endif +%ldconfig_scriptlets roofit +%ldconfig_scriptlets roofit-core +%ldconfig_scriptlets roofit-more +%ldconfig_scriptlets roofit-batchcompute +%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-gui +%ldconfig_scriptlets tree +%ldconfig_scriptlets tree-dataframe +%ldconfig_scriptlets tree-player +%ldconfig_scriptlets tree-viewer +%ldconfig_scriptlets unfold +%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 +%ifarch %{qt5_qtwebengine_arches} +%ldconfig_scriptlets gui-qt5webdisplay +%endif +%ldconfig_scriptlets gui-webdisplay +%ldconfig_scriptlets gui-webgui6 +%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* @@ -2721,19 +2718,27 @@ 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 font-files +%files fonts %{_datadir}/%{name}/fonts +%files doc +%doc %{_pkgdocdir}/html + %files tutorial %doc %{_pkgdocdir}/tutorials %files core -f includelist-core +%{_bindir}/memprobe %{_bindir}/rmkdepend %{_bindir}/root-config +%{_mandir}/man1/memprobe.1* %{_mandir}/man1/rmkdepend.1* %{_mandir}/man1/root-config.1* %dir %{_libdir}/%{name} @@ -2745,8 +2750,10 @@ 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 @@ -2759,26 +2766,20 @@ 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}/ROOT.modulemap +%{_includedir}/%{name}/RGitCommit.h %{_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 @@ -2789,7 +2790,6 @@ 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 @@ -2806,38 +2806,70 @@ fi %doc interpreter/cling/CREDITS.txt %doc interpreter/cling/README.md %license interpreter/cling/LICENSE.TXT - -%files testsupport -%{_includedir}/%{name}/ROOT/TestSupport.hxx -%{_libdir}/%{name}/TestSupport -%doc core/testsupport/README.md +%doc interpreter/llvm/src/llvm-CREDITS.TXT +%doc interpreter/llvm/src/llvm-README.txt +%license interpreter/llvm/src/llvm-LICENSE.TXT %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 + +%files -n python2-distrdf +%{python2_sitelib}/DistRDF +%{python2_sitelib}/DistRDF-*.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-*.dist-info -%{_libdir}/%{name}/libCPyCppyy.* +%{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}.* %dir %{_includedir}/%{name}/CPyCppyy %files -n python%{python3_pkgversion}-jupyroot -%{python3_sitelib}/JupyROOT -%{python3_sitelib}/JupyROOT-*.dist-info +%{python3_sitearch}/JupyROOT +%{python3_sitearch}/JupyROOT-*.egg-info +%{python3_sitearch}/libJupyROOT%{python3_version_uscore}%{python3_ext_suffix} %{_datadir}/jupyter/kernels/python%{python3_pkgversion}-jupyroot -%{_bindir}/rootnb.exe %doc bindings/jupyroot/README.md -%doc bindings/jupyroot/JupyROOT-on-EPEL -%if %{distrdf} +%files -n python%{python3_pkgversion}-jsmva +%{python3_sitelib}/JsMVA +%{python3_sitelib}/JsMVA-*.egg-info + %files -n python%{python3_pkgversion}-distrdf %{python3_sitelib}/DistRDF -%{python3_sitelib}/DistRDF-*.dist-info -%endif +%{python3_sitelib}/DistRDF-*.egg-info -%if %{rrr} %files r -f includelist-bindings-r %{_libdir}/%{name}/libRInterface.* %{_libdir}/%{name}/libRInterface_rdict.pcm @@ -2847,27 +2879,22 @@ 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-geom +%files geom -f includelist-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.* @@ -2982,10 +3009,6 @@ 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 @@ -3013,6 +3036,22 @@ 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 @@ -3024,9 +3063,15 @@ fi %{_datadir}/%{name}/plugins/TFile/P040_TDCacheFile.C %{_datadir}/%{name}/plugins/TSystem/P020_TDCacheSystem.C +%files io-gfal -f includelist-io-gfal +%{_libdir}/%{name}/libGFAL.* +%{_libdir}/%{name}/libGFAL_rdict.pcm +%{_datadir}/%{name}/plugins/TFile/P050_TGFALFile.C + %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.* @@ -3099,6 +3144,8 @@ 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.* @@ -3131,17 +3178,27 @@ fi %{_libdir}/%{name}/libROOTVecOps.* %{_libdir}/%{name}/libROOTVecOps_rdict.pcm +%if %{memstat} +%files memstat -f includelist-misc-memstat +%{_libdir}/%{name}/libMemStat.* +%{_libdir}/%{name}/libMemStat_rdict.pcm +%endif + %files montecarlo-eg -f includelist-montecarlo-eg %{_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 %{_libdir}/%{name}/libEGPythia8.* %{_libdir}/%{name}/libEGPythia8_rdict.pcm +%files montecarlo-vmc -f includelist-montecarlo-vmc +%{_libdir}/%{name}/libVMC.* +%{_libdir}/%{name}/libVMC_rdict.pcm +%{_datadir}/%{name}/vmc + %files net -f includelist-net-net %{_libdir}/%{name}/libNet.* %{_libdir}/%{name}/libNet_rdict.pcm @@ -3174,34 +3231,79 @@ fi %files net-http -f includelist-net-http %{_libdir}/%{name}/libRHTTP.* %{_libdir}/%{name}/libRHTTP_rdict.pcm -%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/mathjax -%ghost %{_datadir}/%{name}/js/modules -%ghost %{_datadir}/%{name}/js/scripts -%ghost %{_datadir}/%{name}/js/files/draw.htm -%ghost %{_datadir}/%{name}/js/files/online.htm +%{_datadir}/%{name}/js %doc net/http/README.txt net/http/civetweb/*.md %files net-httpsniff -f includelist-net-httpsniff %{_libdir}/%{name}/libRHTTPSniff.* %{_libdir}/%{name}/libRHTTPSniff_rdict.pcm -%files netx -f includelist-net-netxng +%files netx -f includelist-netx +%if ! %{xrootd5} +%{_libdir}/%{name}/libNetx.* +%{_libdir}/%{name}/libNetx_rdict.pcm +%endif %{_libdir}/%{name}/libNetxNG.* %{_libdir}/%{name}/libNetxNG_rdict.pcm %{_datadir}/%{name}/plugins/TFile/P100_TXNetFile.C %{_datadir}/%{name}/plugins/TFileStager/P010_TXNetFileStager.C %{_datadir}/%{name}/plugins/TSystem/P040_TXNetSystem.C -%{_datadir}/%{name}/plugins/ROOT@@Internal@@RRawFile/P020_RRawFileNetXNG.C -%if %{roofit} +%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 + %files roofit -f includelist-roofit-roofit %{_libdir}/%{name}/libRooFit.* %{_libdir}/%{name}/libRooFit_rdict.pcm @@ -3209,133 +3311,64 @@ fi %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 +%files roofit-batchcompute -f includelist-roofit-batchcompute %{_libdir}/%{name}/libRooBatchCompute.* %{_libdir}/%{name}/libRooBatchCompute_* - -%files roofit-hs3 -f includelist-roofit-hs3 -%{_libdir}/%{name}/libRooFitHS3.* -%{_libdir}/%{name}/libRooFitHS3_rdict.pcm -%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 +%doc roofit/batchcompute/README.md %files roostats -f includelist-roofit-roostats %{_libdir}/%{name}/libRooStats.* %{_libdir}/%{name}/libRooStats_rdict.pcm %dir %{_includedir}/%{name}/RooStats -%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-mysql -f includelist-sql-mysql +%{_libdir}/%{name}/libRMySQL.* +%{_libdir}/%{name}/libRMySQL_rdict.pcm +%{_datadir}/%{name}/plugins/TSQLServer/P010_TMySQLServer.C -%files xroofit -f includelist-roofit-xroofit -%{_libdir}/%{name}/libRooFitXRooFit.* -%{_libdir}/%{name}/libRooFitXRooFit_rdict.pcm -%dir %{_includedir}/%{name}/RooFit/xRooFit -%endif +%files sql-odbc -f includelist-sql-odbc +%{_libdir}/%{name}/libRODBC.* +%{_libdir}/%{name}/libRODBC_rdict.pcm +%{_datadir}/%{name}/plugins/TSQLServer/P050_TODBCServer.C %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 -%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 +%dir %{_includedir}/%{name}/TMVA/DNN/Architectures/Reference +%license tmva/doc/LICENSE %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.* -%{_libdir}/%{name}/libROOTTMVASofie_rdict.pcm -%doc tmva/sofie/README.md - -%if %{tmvasofieparser} -%files tmva-sofie-parser -f includelist-tmva-sofie_parsers -%{_libdir}/%{name}/libROOTTMVASofieParser.* -%{_libdir}/%{name}/libROOTTMVASofieParser_rdict.pcm -%endif %files tmva-gui -f includelist-tmva-tmvagui %{_libdir}/%{name}/libTMVAGui.* @@ -3346,11 +3379,9 @@ 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.* @@ -3363,19 +3394,16 @@ 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 @@ -3383,64 +3411,10 @@ fi %{_bindir}/rootslimtree %{_datadir}/%{name}/cli -%files gui-webdisplay -f includelist-gui-webdisplay -%{_libdir}/%{name}/libROOTWebDisplay.* -%{_libdir}/%{name}/libROOTWebDisplay_rdict.pcm -%{_datadir}/%{name}/runfirefox.sh -%{_datadir}/%{name}/ui5 - -%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/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 +%files notebook +%{_bindir}/rootnb.exe +%{_datadir}/%{name}/notebook +%doc %{_pkgdocdir}/JupyROOT-on-EPEL %if %{root7} %files graf-gpadv7 -f includelist-graf2d-gpadv7 @@ -3454,14 +3428,26 @@ 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-v7 +%files gui-browsable -f includelist-gui-browsable +%{_libdir}/%{name}/libROOTBrowsable.* +%{_libdir}/%{name}/libROOTBrowsable_rdict.pcm +%{_libdir}/%{name}/libROOTBranchBrowseProvider.* +%{_libdir}/%{name}/libROOTHistDrawProvider.* +%{_libdir}/%{name}/libROOTLeafDraw6Provider.* %{_libdir}/%{name}/libROOTLeafDraw7Provider.* -%{_libdir}/%{name}/libROOTNTupleDraw7Provider.* +%{_libdir}/%{name}/libROOTObjectDraw6Provider.* %{_libdir}/%{name}/libROOTObjectDraw7Provider.* -%files gui-browserv7-v7 +%files gui-browserv7 -f includelist-gui-browserv7 +%{_libdir}/%{name}/libROOTBrowserv7.* +%{_libdir}/%{name}/libROOTBrowserv7_rdict.pcm +%{_libdir}/%{name}/libROOTBrowserGeomWidget.* %{_libdir}/%{name}/libROOTBrowserRCanvasWidget.* +%{_libdir}/%{name}/libROOTBrowserTCanvasWidget.* +%{_libdir}/%{name}/libROOTBrowserWidgets.* +%{_datadir}/%{name}/plugins/TBrowserImp/P030_RWebBrowserImp.C %files gui-canvaspainter %{_libdir}/%{name}/libROOTCanvasPainter.* @@ -3470,427 +3456,42 @@ fi %{_libdir}/%{name}/libROOTFitPanelv7.* %{_libdir}/%{name}/libROOTFitPanelv7_rdict.pcm +%ifarch %{qt5_qtwebengine_arches} +%files gui-qt5webdisplay +%{_libdir}/%{name}/libROOTQt5WebDisplay.* +%endif + +%files gui-webdisplay -f includelist-gui-webdisplay +%{_libdir}/%{name}/libROOTWebDisplay.* +%{_libdir}/%{name}/libROOTWebDisplay_rdict.pcm +%{_datadir}/%{name}/ui5 + +%files gui-webgui6 -f includelist-gui-webgui6 +%{_libdir}/%{name}/libWebGui6.* +%{_libdir}/%{name}/libWebGui6_rdict.pcm +%{_datadir}/%{name}/plugins/TGuiFactory/P030_TWebGuiFactory.C + %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 - and root-Guard-gInterpreterMutex-in-TClingClassInfo-IsEnum.patch - (fixed upstream) -- Use different filenames in io/loopdir tests -- Update root-test-timeout.patch to address one more issue - -* Fri Oct 28 2022 Mattias Ellert - 6.26.08-2 -- Avoid race condition between C++ and Python version of a roofit test - -* Wed Oct 19 2022 Mattias Ellert - 6.26.08-1 -- Update to 6.26.08 -- Drop patch root-move-private-decl.patch (fixed upstream) -- Drop some previously backported patches -- Rename patch root-blas-linking-and-ignore-prefix.patch (partially fixed) -- Backport locking of gInterpreterMutex in TClingClassInfo::IsEnum - -* Sat Oct 01 2022 Mattias Ellert - 6.26.06-5 -- Use upstream's proposed change for the Python garbage collection issue - -* Tue Aug 23 2022 Mamoru TASAKA - 6.26.06-4 -- Rebuild for gsl-2.7.1 - -* Fri Aug 19 2022 Mattias Ellert - 6.26.06-3 -- Use the json 3.11 fix upstream settled on - -* Wed Aug 17 2022 Mattias Ellert - 6.26.06-2 -- Compatibility with nlohmann json 3.11+ -- Enable gfal support in EPEL 9 (gfal2 now available) - -* Sat Jul 30 2022 Mattias Ellert - 6.26.06-1 -- Update to 6.26.06 - -* Sat Jul 23 2022 Fedora Release Engineering - 6.26.04-5 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild - -* Mon Jul 18 2022 Mattias Ellert - 6.26.04-4 -- Don't use yuicompressor on Fedora (Java no longer available on ix86) - -* Sun Jul 03 2022 Mattias Ellert - 6.26.04-3 -- Backport python 3.11 fixes from upstream -- Backport additional python 3.11 fixes from CPyCppyy upstream -- Exclude some failing tests on Fedora 37+ - (segfaults during Python garbage collection with Python 3.11) -- Adjust some test timeouts - -* Wed Jun 15 2022 Python Maint - 6.26.04-2 -- Rebuilt for Python 3.11 - -* Tue Jun 14 2022 Mattias Ellert - 6.26.04-1 -- Update to 6.26.04 -- Drop patch root-missing-include.patch (accepted upstream) - -* Fri May 20 2022 Mattias Ellert - 6.26.02-3 -- Rebuild for gcc 12.1 (Fedora 36) -- Update the root-tmva-threads patch - -* Fri Apr 29 2022 Mattias Ellert - 6.26.02-2 -- Rebuild for gcc 11.3 (Fedora 35) -- Use upstream's version of the dataframe-snapshot on 32 bit patch - -* Thu Apr 14 2022 Mattias Ellert - 6.26.02-1 -- Update to 6.26.02 -- Drop patch root-roofit-overflow.patch (previously backported) - -* Sat Mar 26 2022 Mattias Ellert - 6.26.00-1 -- Update to 6.26.00 -- New subpackages: root-roofit-common, root-roofit-dataframe-helpers, - root-roofit-hs3, root-tmva-sofie and root-tmva-sofie-parser -- Removed subpackages: root-memstat and root-montecarlo-vmc -- Drop the doxygen generated root-doc package (doxygen runs out of memory) -- Dropped patches: 17 -- New patches: 22 -- Updated patches: 5 - * Thu Feb 10 2022 Orion Poplawski - 6.24.06-6 - Rebuild for glew 2.2 * Fri Jan 28 2022 Mattias Ellert - 6.24.06-5 - Exclude failing test on Fedora 36 ppc64le: test-stressHistFactory(-interpreted) -- Disable package note flags +# Disable package note flags * Fri Jan 21 2022 Fedora Release Engineering - 6.24.06-4 - Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild diff --git a/sources b/sources index 98e90e5..31dae3c 100644 --- a/sources +++ b/sources @@ -1,3 +1,2 @@ -SHA512 (root-6.38.00.tar.xz) = 7c452b509e8171a0cbb7c102a3d4c07333fc8535f1b2c2ab0b9f7434604f098989a78bb71c41039dd41dbbd3438ea8703939826092f075d9d730b6b53c84ac55 -SHA512 (root-testfiles.tar.xz) = 4bb7f8ca00b1427ba49f6428e9cfe5908a2ffdd2ce4134d3bc169a0629198352b5500fe0cf92c121d148e5af41f7016c96038a77794a4d37d94e6ec0a9d75670 -SHA512 (clad-2.2.tar.gz) = 6f76d706a829901fc0fcdb38b5ddad6ea8ad9186ea48a4b6b585fc62974a2cda11b96a448c25daaba0586962d6428773e7ab751236c6afa72a91d12f30f2d05e +SHA512 (root-6.24.06.tar.xz) = fe316283503dae60acb26d2ae3e838e6f9c01e1f89ff9973aa2b666a30c00f99f5e0df02b54e3744cd14a45a49ca2fc7d1f19fbac6b69071b9c9e0c98f2e0645 +SHA512 (root-testfiles.tar.xz) = 945aef1a0cf5af672d4ab84b0ac00b76118e93008ff72447658ee82d9e955a1540af3ff7126e701418872f1d91b92ee96d4985840a519036c42732023a13f00f