diff --git a/root-32bit-tests.patch b/root-32bit-tests.patch index ea926b4..ae15a5d 100644 --- a/root-32bit-tests.patch +++ b/root-32bit-tests.patch @@ -1,7 +1,7 @@ -From 70d941cd6ebbc3726e08ef7f52d0135453f0b840 Mon Sep 17 00:00:00 2001 +From 55446dcd6eabc1fff218f266c11f31697fe99f09 Mon Sep 17 00:00:00 2001 From: Mattias Ellert Date: Fri, 13 Mar 2020 16:21:55 +0100 -Subject: [PATCH 2/3] Run tests on 32 bit +Subject: [PATCH] Run tests on 32 bit --- test/stressGeometry.cxx | 8 -------- @@ -9,7 +9,7 @@ Subject: [PATCH 2/3] Run tests on 32 bit 2 files changed, 3 insertions(+), 15 deletions(-) diff --git a/test/stressGeometry.cxx b/test/stressGeometry.cxx -index 5e81f5f2ca..18e41a6f45 100644 +index f8d78f4f54..617b9e1644 100644 --- a/test/stressGeometry.cxx +++ b/test/stressGeometry.cxx @@ -257,14 +257,6 @@ void stressGeometry(const char *exp="*", Bool_t generate_ref=kFALSE, Bool_t vecg @@ -28,26 +28,26 @@ index 5e81f5f2ca..18e41a6f45 100644 TString fname; for (i=0; i +Date: Tue, 2 Dec 2025 05:33:31 +0100 +Subject: [PATCH] Adjust test/stressGraphics.ref + +--- + test/stressGraphics.ref | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +diff --git a/test/stressGraphics.ref b/test/stressGraphics.ref +index 2498ec6d755..4520a5ab113 100644 +--- a/test/stressGraphics.ref ++++ b/test/stressGraphics.ref +@@ -10,11 +10,11 @@ Test# PS1Ref# PS1Err# PDFRef# PDFErr# JPGRef# JPGErr# PNGRef# PN + 9 9253 100 14377 150 19851 2400 12199 900 9283 100 + 10 8863 70 13645 100 24343 1100 23278 1700 8894 70 + 11 12971 100 14750 50 34063 2000 32033 1200 13070 150 +- 12 7674 100 13533 50 83557 3000 38505 4000 7720 150 +- 13 5600 400 13242 300 16881 400 15063 800 5638 400 ++ 12 7674 100 13533 100 83557 3000 38505 4000 7720 150 ++ 13 5600 400 13242 400 16881 400 15063 800 5638 400 + 14 14190539 4000000 12926 100 23076 9500 25987 3000 14190704 4000000 + 15 15690 5000 17179 200 23076 9500 14232 1500 10437 5000 +- 16 28072 400 23520 200 44462 11000 30062 5000 38007 400 ++ 16 28072 400 23520 250 44462 11000 30062 5000 38007 400 + 17 20444 400 21520 150 27511 11000 16867 600 20721 400 + 18 15894 100 19305 200 27187 10300 15925 350 15925 100 + 19 22521 300 42926 250 43868 17000 19232 11000 22729 300 +@@ -44,7 +44,7 @@ Test# PS1Ref# PS1Err# PDFRef# PDFErr# JPGRef# JPGErr# PNGRef# PN + 43 207729 750 87126 750 76094 38000 54717 11000 210497 800 + 44 401670 6500 156361 2000 62719 34100 45592 14000 410114 6500 + 45 566142 5000 225206 2000 65828 31800 53934 6500 573396 5000 +- 46 3738751 35000 1292739 12000 60580 9900 133547 3500 3783013 35000 ++ 46 3738751 35000 1292739 13000 60580 9900 133547 3500 3783013 35000 + 47 1466028 9000 853193 50000 38425 13500 91242 18100 1463263 7500 + 48 38312 200 56877 750 36524 11800 119641 8000 38121 200 + 49 19556 1000 31967 1000 36859 10000 37602 8000 19900 3000 +@@ -53,7 +53,7 @@ Test# PS1Ref# PS1Err# PDFRef# PDFErr# JPGRef# JPGErr# PNGRef# PN + 52 270825 10000 115500 1000 45496 11000 34685 5000 272950 10000 + 53 15025 3000 29289 500 42525 11300 33336 3900 14787 4000 + 54 254604 5000 383258 7000 55666 30400 46534 6500 259594 7000 +- 55 4846 150 14075 150 33239 600 25303 500 4877 150 ++ 55 4846 150 14075 200 33239 600 25303 500 4877 150 + 56 1435879 150000 12837 100 25830 100 365000 15000 1085792 250000 + 57 5884 500 16577 200 40706 14000 30026 4000 5884 500 + 58 5723 700 15720 200 32236 11000 16916 3200 5670 800 +-- +2.52.0 + diff --git a/root-Fix-a-numpy-test-for-32-bit-archs.patch b/root-Fix-a-numpy-test-for-32-bit-archs.patch new file mode 100644 index 0000000..5e095f3 --- /dev/null +++ b/root-Fix-a-numpy-test-for-32-bit-archs.patch @@ -0,0 +1,32 @@ +From 40f8cd0adeb7257778c789e1ae639f260780402b Mon Sep 17 00:00:00 2001 +From: Mattias Ellert +Date: Sun, 7 Dec 2025 19:30:55 +0100 +Subject: [PATCH] Fix a numpy test for 32 bit archs + +The default dtype used in numpy array is "int". This type has +different sizes on 32 and 64 bit architectures. The test tries to use +the numpy array as a Long64_t dataframe. On 32 bit architectures this +results in an error. + +This commit explicitly changes the numpy array's dtype to "int64" to +match the Long64_t dataframe type on all architectyres. +--- + bindings/pyroot/pythonizations/test/rdataframe_misc.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/bindings/pyroot/pythonizations/test/rdataframe_misc.py b/bindings/pyroot/pythonizations/test/rdataframe_misc.py +index 1a1efd21b3e..150828613b3 100644 +--- a/bindings/pyroot/pythonizations/test/rdataframe_misc.py ++++ b/bindings/pyroot/pythonizations/test/rdataframe_misc.py +@@ -132,7 +132,7 @@ class RDataFrameMisc(unittest.TestCase): + return + out_path = "dataframe_misc_regression_gh20291.root" + try: +- x, y = numpy.array([1, 2, 3]), numpy.array([4, 5, 6]) ++ x, y = numpy.array([1, 2, 3], dtype='int64'), numpy.array([4, 5, 6], dtype='int64') + df = ROOT.RDF.FromNumpy({"x": x, "y": y}) + + df.Snapshot("tree", out_path) +-- +2.52.0 + diff --git a/root-Geom-Add-missing-includes-of-TMath.h.patch b/root-Geom-Add-missing-includes-of-TMath.h.patch new file mode 100644 index 0000000..966d8da --- /dev/null +++ b/root-Geom-Add-missing-includes-of-TMath.h.patch @@ -0,0 +1,63 @@ +From 0e1e1f0ba1908ae1020337ed7ec0565bf979b92c Mon Sep 17 00:00:00 2001 +From: Mattias Ellert +Date: Tue, 2 Dec 2025 04:57:30 +0100 +Subject: [PATCH] [Geom] Add missing includes of TMath.h + +--- + geom/geombuilder/src/TGeoParaEditor.cxx | 1 + + geom/geombuilder/src/TGeoPconEditor.cxx | 1 + + geom/geombuilder/src/TGeoPgonEditor.cxx | 1 + + geom/geombuilder/src/TGeoTrapEditor.cxx | 1 + + 4 files changed, 4 insertions(+) + +diff --git a/geom/geombuilder/src/TGeoParaEditor.cxx b/geom/geombuilder/src/TGeoParaEditor.cxx +index fdc344ba4d2..bd173607d2c 100644 +--- a/geom/geombuilder/src/TGeoParaEditor.cxx ++++ b/geom/geombuilder/src/TGeoParaEditor.cxx +@@ -27,6 +27,7 @@ Editor for a TGeoPara. + #include "TVirtualGeoPainter.h" + #include "TVirtualPad.h" + #include "TView.h" ++#include "TMath.h" + #include "TGButton.h" + #include "TGTextEntry.h" + #include "TGNumberEntry.h" +diff --git a/geom/geombuilder/src/TGeoPconEditor.cxx b/geom/geombuilder/src/TGeoPconEditor.cxx +index a66359853be..50598d2cb90 100644 +--- a/geom/geombuilder/src/TGeoPconEditor.cxx ++++ b/geom/geombuilder/src/TGeoPconEditor.cxx +@@ -27,6 +27,7 @@ Editor for a TGeoPcon. + #include "TVirtualGeoPainter.h" + #include "TVirtualPad.h" + #include "TView.h" ++#include "TMath.h" + #include "TGCanvas.h" + #include "TGButton.h" + #include "TGTextEntry.h" +diff --git a/geom/geombuilder/src/TGeoPgonEditor.cxx b/geom/geombuilder/src/TGeoPgonEditor.cxx +index 949d0045a66..33638d66b2b 100644 +--- a/geom/geombuilder/src/TGeoPgonEditor.cxx ++++ b/geom/geombuilder/src/TGeoPgonEditor.cxx +@@ -27,6 +27,7 @@ Editor for a TGeoPgon. + #include "TVirtualGeoPainter.h" + #include "TVirtualPad.h" + #include "TView.h" ++#include "TMath.h" + #include "TGTextEntry.h" + #include "TGNumberEntry.h" + #include "TGLabel.h" +diff --git a/geom/geombuilder/src/TGeoTrapEditor.cxx b/geom/geombuilder/src/TGeoTrapEditor.cxx +index d9c2916d075..459e0191117 100644 +--- a/geom/geombuilder/src/TGeoTrapEditor.cxx ++++ b/geom/geombuilder/src/TGeoTrapEditor.cxx +@@ -27,6 +27,7 @@ Editor for a TGeoTrap. + #include "TVirtualGeoPainter.h" + #include "TVirtualPad.h" + #include "TView.h" ++#include "TMath.h" + #include "TGButton.h" + #include "TGTextEntry.h" + #include "TGNumberEntry.h" +-- +2.52.0 + diff --git a/root-PyROOT-Don-t-install-the-python-modules-twice.patch b/root-PyROOT-Don-t-install-the-python-modules-twice.patch new file mode 100644 index 0000000..608765d --- /dev/null +++ b/root-PyROOT-Don-t-install-the-python-modules-twice.patch @@ -0,0 +1,70 @@ +From f09b4ce027b31dcd19ea8a398c35c5dfbcc0507f Mon Sep 17 00:00:00 2001 +From: Mattias Ellert +Date: Thu, 18 Dec 2025 11:49:12 +0100 +Subject: [PATCH] [PyROOT] Don't install the python modules twice + +The binary python modules were moved one directory level down into the +ROOT and cppyy directories, so that they reside alongside the python +files in the same directories. The install rule for the python files +must therefore be extended to exclude the binary modules (PATTERN *.so +EXCLUDE) so that these are not installed a second time overwriting the +files installed by the install rule for the binary modules with another +copy with the wrong file permissions. + +Also use the no-version option for the cppyy binary module as is +already done for the pythonization binary module, since it is now +installed in the python directory. Before it was installed in the +library directory with an unversioned symlink in the python directory. +--- + bindings/pyroot/cppyy/CPyCppyy/CMakeLists.txt | 2 +- + bindings/pyroot/cppyy/cppyy/CMakeLists.txt | 5 +++-- + bindings/pyroot/pythonizations/CMakeLists.txt | 3 ++- + 3 files changed, 6 insertions(+), 4 deletions(-) + +diff --git a/bindings/pyroot/cppyy/CPyCppyy/CMakeLists.txt b/bindings/pyroot/cppyy/CPyCppyy/CMakeLists.txt +index bb48c032974..065a89348ff 100644 +--- a/bindings/pyroot/cppyy/CPyCppyy/CMakeLists.txt ++++ b/bindings/pyroot/cppyy/CPyCppyy/CMakeLists.txt +@@ -73,7 +73,7 @@ endif() + add_library(cppyy SHARED src/CPyCppyyPyModule.cxx) + + # Set the suffix to '.so' and the prefix to 'lib' +-set_target_properties(cppyy PROPERTIES ${ROOT_LIBRARY_PROPERTIES} ++set_target_properties(cppyy PROPERTIES ${ROOT_LIBRARY_PROPERTIES_NO_VERSION} + LIBRARY_OUTPUT_DIRECTORY ${localruntimedir}/cppyy) + if(MSVC) + target_link_libraries(cppyy PRIVATE CPyCppyy) +diff --git a/bindings/pyroot/cppyy/cppyy/CMakeLists.txt b/bindings/pyroot/cppyy/cppyy/CMakeLists.txt +index 3a29b4525f7..842ad12df97 100644 +--- a/bindings/pyroot/cppyy/cppyy/CMakeLists.txt ++++ b/bindings/pyroot/cppyy/cppyy/CMakeLists.txt +@@ -31,8 +31,9 @@ endforeach() + # Install Python sources and bytecode + install(DIRECTORY ${localruntimedir}/cppyy + DESTINATION ${CMAKE_INSTALL_PYTHONDIR} +- COMPONENT libraries) ++ COMPONENT libraries ++ PATTERN *.so EXCLUDE) + + if(NOT MSVC) + ROOT_ADD_TEST_SUBDIRECTORY(test) +-endif() +\ No newline at end of file ++endif() +diff --git a/bindings/pyroot/pythonizations/CMakeLists.txt b/bindings/pyroot/pythonizations/CMakeLists.txt +index 1230f18ca47..b415ba13697 100644 +--- a/bindings/pyroot/pythonizations/CMakeLists.txt ++++ b/bindings/pyroot/pythonizations/CMakeLists.txt +@@ -239,7 +239,8 @@ install(TARGETS ${libname} EXPORT ${CMAKE_PROJECT_NAME}Exports + # Install Python sources and bytecode + install(DIRECTORY ${localruntimedir}/ROOT + DESTINATION ${CMAKE_INSTALL_PYTHONDIR} +- COMPONENT libraries) ++ COMPONENT libraries ++ PATTERN *.so EXCLUDE) + + # Install headers required by pythonizations + install(FILES ${PYROOT_EXTRA_HEADERS} +-- +2.52.0 + diff --git a/root-Python-Fix-TF1-Pythonization-test-for-NumPy-2.4.0.patch b/root-Python-Fix-TF1-Pythonization-test-for-NumPy-2.4.0.patch new file mode 100644 index 0000000..2bc2576 --- /dev/null +++ b/root-Python-Fix-TF1-Pythonization-test-for-NumPy-2.4.0.patch @@ -0,0 +1,82 @@ +From d5135f7869406396b3ba8e944c71dbdd67d3ea01 Mon Sep 17 00:00:00 2001 +From: Jonas Rembser +Date: Tue, 23 Dec 2025 19:04:45 +0100 +Subject: [PATCH] [Python] Fix TF1 Pythonization test for NumPy 2.4.0 + +The new NumPy 2.4.0 is more strict when implicitly converting 1-element +arrays to scalars. It doesn't do that anymore, causing the TF1 +Pythonization tests to fail (see log below). + +This actually pointed to a real mistake in setting up the test, where a +2D array was used to define the TFormula parameters while it should be a +1D array. + +```txt + 962/3718 Test #93: pyunittests-bindings-pyroot-pythonizations-pyroot-pyz-tf-pycallables ..............................***Failed 3.05 sec +test_callable (tf_pycallables.TF1.test_callable) +Test function provided as callable ... ok +test_evalpar (tf_pycallables.TF1.test_evalpar) +Test the 2D Numpy array pythonizations for TF1::EvalPar ... ERROR +test_evalpar_dynamic (tf_pycallables.TF1.test_evalpar_dynamic) +Test the 2D NumPy pythonizations with dynamic TF1 data dimensions ... ok +test_fitgauss (tf_pycallables.TF1.test_fitgauss) +Test fitting a histogram to a Python function ... ok +test_identity (tf_pycallables.TF1.test_identity) +Test simple function without parameters ... ok +test_params (tf_pycallables.TF1.test_params) +Test function with parameters ... ok +test_params (tf_pycallables.TF2.test_params) +Test function with parameters ... ok +test_params (tf_pycallables.TF3.test_params) +Test function with parameters ... ok + +====================================================================== +ERROR: test_evalpar (tf_pycallables.TF1.test_evalpar) +Test the 2D Numpy array pythonizations for TF1::EvalPar +---------------------------------------------------------------------- +Traceback (most recent call last): + File "/github/home/ROOT-CI/src/bindings/pyroot/pythonizations/test/tf_pycallables.py", line 129, in test_evalpar + expected_value = pyf_tf1_coulomb(x[i, ::2], params) + File "/github/home/ROOT-CI/src/bindings/pyroot/pythonizations/test/tf_pycallables.py", line 33, in pyf_tf1_coulomb + return p[1] * x[0] * x[1] / (p[0]**2) * math.exp(-p[2] / p[0]) + ~~~~~~~~^^^^^^^^^^^^^^ +TypeError: only 0-dimensional arrays can be converted to Python scalars + +---------------------------------------------------------------------- +Ran 8 tests in 1.469s + +FAILED (errors=1) +CMake Error at /github/home/ROOT-CI/src/cmake/modules/RootTestDriver.cmake:232 (message): + error code: 1 + +``` +--- + .../pyroot/pythonizations/test/tf_pycallables.py | 12 +++++++----- + 1 file changed, 7 insertions(+), 5 deletions(-) + +diff --git a/bindings/pyroot/pythonizations/test/tf_pycallables.py b/bindings/pyroot/pythonizations/test/tf_pycallables.py +index 2a7d6b72462..5a223030ec9 100644 +--- a/bindings/pyroot/pythonizations/test/tf_pycallables.py ++++ b/bindings/pyroot/pythonizations/test/tf_pycallables.py +@@ -116,11 +116,13 @@ class TF1(unittest.TestCase): + [3.0, 10, 4.0] + ]) + +- params = np.array([ +- [1.0], # Distance between charges r +- [8.99e9], # Coulomb constant k (in N·m²/C²) +- [0.1] # Additional factor for modulation +- ]) ++ params = np.array( ++ [ ++ 1.0, # Distance between charges r ++ 8.99e9, # Coulomb constant k (in N·m²/C²) ++ 0.1, # Additional factor for modulation ++ ] ++ ) + + # Slice to avoid the dummy column of 10's + res = rtf1_coulomb.EvalPar(x[:, ::2], params) +-- +2.52.0 + diff --git a/root-RF-Use-TRandom3-in-test-RooFuncWrapper.patch b/root-RF-Use-TRandom3-in-test-RooFuncWrapper.patch new file mode 100644 index 0000000..34bdebc --- /dev/null +++ b/root-RF-Use-TRandom3-in-test-RooFuncWrapper.patch @@ -0,0 +1,50 @@ +From e1f42658629ad67ce7cb224a1379d133f61f2e35 Mon Sep 17 00:00:00 2001 +From: Jonas Rembser +Date: Sun, 11 Jan 2026 10:25:51 +0100 +Subject: [PATCH] [RF] Use TRandom3 in test RooFuncWrapper + +Use TRandom3 instead of the `` to get compiler-independent, +reproducible behavior. +--- + roofit/roofitcore/test/testRooFuncWrapper.cxx | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +diff --git a/roofit/roofitcore/test/testRooFuncWrapper.cxx b/roofit/roofitcore/test/testRooFuncWrapper.cxx +index 2ebdf95333f..189e8f2e266 100644 +--- a/roofit/roofitcore/test/testRooFuncWrapper.cxx ++++ b/roofit/roofitcore/test/testRooFuncWrapper.cxx +@@ -34,12 +34,12 @@ + #include + + #include ++#include + #include ++#include + #include +-#include + + #include +-#include + + #include "gtest_wrapper.h" + +@@ -66,13 +66,13 @@ double getNumDerivative(const RooAbsReal &pdf, RooRealVar &var, const RooArgSet + + void randomizeParameters(const RooArgSet ¶meters) + { ++ TRandom3 rng(1337); ++ + double lowerBound = -0.1; + double upperBound = 0.1; +- std::uniform_real_distribution unif(lowerBound, upperBound); +- std::default_random_engine re; + + for (auto *param : parameters) { +- double mul = unif(re); ++ double mul = rng.Uniform(lowerBound, upperBound); + + auto par = dynamic_cast(param); + if (!par) +-- +2.52.0 + diff --git a/root-Revert-test-Fetch-the-geometries-from-EOS-and-not-fr.patch b/root-Revert-test-Fetch-the-geometries-from-EOS-and-not-fr.patch new file mode 100644 index 0000000..a45ae41 --- /dev/null +++ b/root-Revert-test-Fetch-the-geometries-from-EOS-and-not-fr.patch @@ -0,0 +1,60 @@ +From 4da50ef374cd231163dff77493f9367cd62583d9 Mon Sep 17 00:00:00 2001 +From: Mattias Ellert +Date: Sun, 30 Mar 2025 21:23:14 +0200 +Subject: [PATCH] Revert "[test] Fetch the geometries from EOS and not from the + website" + +This reverts commit a8a879ce252e45405452db38d9178c7883582a7d. +--- + test/stressGeometry.cxx | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +diff --git a/test/stressGeometry.cxx b/test/stressGeometry.cxx +index 7fb6bf97e7..f8d78f4f54 100644 +--- a/test/stressGeometry.cxx ++++ b/test/stressGeometry.cxx +@@ -1,6 +1,6 @@ + // Program to check a TGeo geometry + // The first time you run this program, the geometry files will be taken +-// from /eos/root-eos/testfiles/ (previously from http://root.cern/files) ++// from http://root.cern/files + // + // How the program works + // If the file _ref.root does not exist, it is generated. The file +@@ -274,13 +274,13 @@ void stressGeometry(const char *exp="*", Bool_t generate_ref=kFALSE, Bool_t vecg + delete gGeoManager; + gGeoManager = 0; + } +- TGeoManager::Import(Form("root://eospublic.cern.ch//eos/root-eos/testfiles/%s",fname.Data())); ++ TGeoManager::Import(Form("http://root.cern/files/%s",fname.Data())); + if (!gGeoManager) return; + if (vecgeom) TVirtualGeoConverter::Instance()->ConvertGeometry(); + + fname = TString::Format("files/%s_ref_%d.root", exps[i],versions[i]); + +- if (gen_ref || !TFile::Open(Form("root://eospublic.cern.ch//eos/root-eos/testfiles//%s_ref_%d.root",exps[i],versions[i]),"CACHEREAD")) { ++ if (gen_ref || !TFile::Open(Form("http://root.cern/files/%s_ref_%d.root",exps[i],versions[i]),"CACHEREAD")) { + if (!gen_ref) fprintf(stderr,"File: %s does not exist, generating it\n", fname.Data()); + else fprintf(stderr,"Generating reference file %s\n", fname.Data()); + WriteRef(i); +@@ -320,7 +320,7 @@ void ReadRef(Int_t kexp) { + TFile *f = 0; + //use ref_[version[i]] files + if (!gen_ref) +- fname = TString::Format("root://eospublic.cern.ch//eos/root-eos/testfiles//%s_ref_%d.root", exps[kexp],versions[kexp]); ++ fname = TString::Format("http://root.cern/files/%s_ref_%d.root", exps[kexp],versions[kexp]); + else + fname.Format("files/%s_ref_%d.root", exps[kexp],versions[kexp]); + +@@ -546,7 +546,7 @@ void InspectDiff(const char* exp="alice",Long64_t ientry=-1) { + Float_t rad = 0.; + TString fname(TString::Format("%s.root",exp)); + if (gSystem->AccessPathName(fname)) { +- TGeoManager::Import(Form("root://eospublic.cern.ch//eos/root-eos/testfiles//%s",fname.Data())); ++ TGeoManager::Import(Form("http://root.cern/files/%s",fname.Data())); + } else { + TGeoManager::Import(fname); + } +-- +2.49.0 + diff --git a/root-Save-memory-Do-not-link-to-LLVM-libraries-in-parallel.patch b/root-Save-memory-Do-not-link-to-LLVM-libraries-in-parallel.patch new file mode 100644 index 0000000..4d5587f --- /dev/null +++ b/root-Save-memory-Do-not-link-to-LLVM-libraries-in-parallel.patch @@ -0,0 +1,47 @@ +From 98a5042a02dd7c1aaa9fbd5e54c8620c6b72484f Mon Sep 17 00:00:00 2001 +From: Mattias Ellert +Date: Mon, 2 Jun 2025 21:22:39 +0200 +Subject: [PATCH] Save memory. Do not link to LLVM libraries in parallel + +--- + core/clingutils/test/CMakeLists.txt | 3 +++ + interpreter/CppInterOp/unittests/CppInterOp/CMakeLists.txt | 6 ++++++ + 2 files changed, 9 insertions(+) + +diff --git a/core/clingutils/test/CMakeLists.txt b/core/clingutils/test/CMakeLists.txt +index a6c7aedac99..90ac0139c24 100644 +--- a/core/clingutils/test/CMakeLists.txt ++++ b/core/clingutils/test/CMakeLists.txt +@@ -36,3 +36,6 @@ if(NOT builtin_clang) + endif() + + ROOT_ADD_UNITTEST_DIR(Core ${CLING_LIBRARIES} $) ++ ++# Save memory. Do not link to LLVM libraries in parallel ++add_dependencies(coreclingutilstestUnit CppInterOpTests) +diff --git a/interpreter/CppInterOp/unittests/CppInterOp/CMakeLists.txt b/interpreter/CppInterOp/unittests/CppInterOp/CMakeLists.txt +index 4b4b43bdd29..a028802fedc 100644 +--- a/interpreter/CppInterOp/unittests/CppInterOp/CMakeLists.txt ++++ b/interpreter/CppInterOp/unittests/CppInterOp/CMakeLists.txt +@@ -66,6 +66,9 @@ target_link_libraries(CppInterOpTests + clangCppInterOp + ) + ++# Save memory. Do not link to LLVM libraries in parallel ++add_dependencies(CppInterOpTests DynamicLibraryManagerTests) ++ + set_output_directory(CppInterOpTests + BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${EXTRA_PATH_TEST_BINARIES} + LIBRARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${EXTRA_PATH_TEST_BINARIES} +@@ -129,5 +132,8 @@ set_output_directory(DynamicLibraryManagerTests + + add_dependencies(DynamicLibraryManagerTests TestSharedLib) + ++# Save memory. Do not link to LLVM libraries in parallel ++add_dependencies(DynamicLibraryManagerTests Cling) ++ + #export_executable_symbols_for_plugins(TestSharedLib) + add_subdirectory(TestSharedLib) +-- +2.52.0 + diff --git a/root-VecOps-Remove-outdated-IsSmall-helper-function-in-te.patch b/root-VecOps-Remove-outdated-IsSmall-helper-function-in-te.patch new file mode 100644 index 0000000..58ba414 --- /dev/null +++ b/root-VecOps-Remove-outdated-IsSmall-helper-function-in-te.patch @@ -0,0 +1,34 @@ +From fd18e83ae79760f7e8cca6f28b6d0f89d912b152 Mon Sep 17 00:00:00 2001 +From: Jonas Rembser +Date: Wed, 26 Nov 2025 12:40:03 +0100 +Subject: [PATCH] [VecOps] Remove outdated `IsSmall` helper function in tests + +The commit 2605710bea7b1 changed from using the `ROOT::Detail::VecOps::` +namespace explicitly for `IsSmall` to a `using` statement. However, +there was also a remnant `IsSmall` function with an outdated +implementation in the test file itself, which we can now remove. +--- + math/vecops/test/vecops_rvec.cxx | 7 ------- + 1 file changed, 7 deletions(-) + +diff --git a/math/vecops/test/vecops_rvec.cxx b/math/vecops/test/vecops_rvec.cxx +index 034f06ca211..432c673a553 100644 +--- a/math/vecops/test/vecops_rvec.cxx ++++ b/math/vecops/test/vecops_rvec.cxx +@@ -1493,13 +1493,6 @@ TEST(VecOps, Construct) + EXPECT_TRUE(fourVects[2] == ref2); + } + +-bool IsSmall(const RVec &v) +-{ +- // the first array element is right after the 3 data members of SmallVectorBase +- return reinterpret_cast(v.begin()) - reinterpret_cast(&v) == +- sizeof(void *) + 2 * sizeof(int); +-} +- + // this is a regression test for https://github.com/root-project/root/issues/6796 + TEST(VecOps, MemoryAdoptionAndClear) + { +-- +2.52.0 + diff --git a/root-avoid-out-of-memory-during-linking.patch b/root-avoid-out-of-memory-during-linking.patch deleted file mode 100644 index d182e44..0000000 --- a/root-avoid-out-of-memory-during-linking.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 51b84e7bc21f8729de8d3e8f9ff08b337af33b78 Mon Sep 17 00:00:00 2001 -From: Mattias Ellert -Date: Fri, 17 Nov 2023 17:15:15 +0100 -Subject: [PATCH] Avoid out of memory during linking regardless of build type - ---- - core/metacling/src/CMakeLists.txt | 7 ++----- - 1 file changed, 2 insertions(+), 5 deletions(-) - -diff --git a/core/metacling/src/CMakeLists.txt b/core/metacling/src/CMakeLists.txt -index e750480eb3..dd50793d29 100644 ---- a/core/metacling/src/CMakeLists.txt -+++ b/core/metacling/src/CMakeLists.txt -@@ -111,11 +111,8 @@ ROOT_LINKER_LIBRARY(Cling - $ - LIBRARIES ${CLING_LIBRARIES} ${LINK_LIBS} ${CLING_PLUGIN_LINK_LIBS}) - --string(TOUPPER "${LLVM_BUILD_TYPE}" THE_BUILD_TYPE) --if("${THE_BUILD_TYPE}" STREQUAL DEBUG OR "${THE_BUILD_TYPE}" STREQUAL RELWITHDEBINFO) -- # When these two link at the same time, they can exhaust the RAM on many machines, since they both link against llvm. -- add_dependencies(Cling rootcling_stage1) --endif() -+# When these two link at the same time, they can exhaust the RAM on many machines, since they both link against llvm. -+add_dependencies(Cling rootcling_stage1) - - if(MSVC) - set_target_properties(Cling PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS TRUE) --- -2.43.0 - diff --git a/root-big-endian-byte-swap.patch b/root-big-endian-byte-swap.patch deleted file mode 100644 index caa3076..0000000 --- a/root-big-endian-byte-swap.patch +++ /dev/null @@ -1,58 +0,0 @@ -From b32c7a1b080cb5d14f242070bf906ea6929d604d Mon Sep 17 00:00:00 2001 -From: Mattias Ellert -Date: Fri, 25 Mar 2022 11:13:12 +0100 -Subject: [PATCH] Byte swap values read from the protobuf raw data stream on - big endian - ---- - tmva/sofie_parsers/src/RModelParser_ONNX.cxx | 23 +++++++++++++++----- - 1 file changed, 17 insertions(+), 6 deletions(-) - -diff --git a/tmva/sofie_parsers/src/RModelParser_ONNX.cxx b/tmva/sofie_parsers/src/RModelParser_ONNX.cxx -index ab457dcddc..d701fb3299 100644 ---- a/tmva/sofie_parsers/src/RModelParser_ONNX.cxx -+++ b/tmva/sofie_parsers/src/RModelParser_ONNX.cxx -@@ -1,3 +1,4 @@ -+#include "Byteswap.h" - #include "TMVA/RModelParser_ONNX.hxx" - #include "onnx_proto3.pb.h" - -@@ -335,9 +336,14 @@ RModel RModelParser_ONNX::Parse(std::string filename, bool verbose) - case ETensorType::FLOAT: { - std::shared_ptr data(malloc(fLength * sizeof(float)), free); - -- if (tensorproto->raw_data().empty() == false) { -- auto raw_data_ptr = reinterpret_cast(const_cast(tensorproto->raw_data().c_str())); -- std::memcpy(data.get(), raw_data_ptr, fLength * sizeof(float)); -+ if (!tensorproto->raw_data().empty()) { -+#ifdef R__BYTESWAP -+ std::memcpy(data.get(), tensorproto->raw_data().c_str(), fLength * sizeof(float)); -+#else -+ for (std::size_t k = 0; k < fLength; ++k) -+ (reinterpret_cast(data.get()))[k] = -+ Rbswap_32((reinterpret_cast(tensorproto->raw_data().c_str()))[k]); -+#endif - } else { - tensorproto->mutable_float_data()->ExtractSubrange(0, tensorproto->float_data_size(), - static_cast(data.get())); -@@ -350,9 +356,14 @@ RModel RModelParser_ONNX::Parse(std::string filename, bool verbose) - case ETensorType::INT64: { - std::shared_ptr data(malloc(fLength * sizeof(int64_t)), free); - -- if (tensorproto->raw_data().empty() == false) { -- auto raw_data_ptr = reinterpret_cast(const_cast(tensorproto->raw_data().c_str())); -- std::memcpy(data.get(), raw_data_ptr, fLength * sizeof(int64_t)); -+ if (!tensorproto->raw_data().empty()) { -+#ifdef R__BYTESWAP -+ std::memcpy(data.get(), tensorproto->raw_data().c_str(), fLength * sizeof(int64_t)); -+#else -+ for (std::size_t k = 0; k < fLength; ++k) -+ (reinterpret_cast(data.get()))[k] = -+ Rbswap_64((reinterpret_cast(tensorproto->raw_data().c_str()))[k]); -+#endif - } else { - tensorproto->mutable_int64_data()->ExtractSubrange(0, tensorproto->int64_data_size(), - static_cast(data.get())); --- -2.39.2 - diff --git a/root-clad.patch b/root-clad.patch deleted file mode 100644 index 139775e..0000000 --- a/root-clad.patch +++ /dev/null @@ -1,26 +0,0 @@ -From fae9b92742c5e991ad33769d1357a721838e93f9 Mon Sep 17 00:00:00 2001 -From: Mattias Ellert -Date: Fri, 17 Nov 2023 11:37:23 +0100 -Subject: [PATCH 1/3] Add fit/exampleFit3D.C to clad veto - ---- - tutorials/CMakeLists.txt | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/tutorials/CMakeLists.txt b/tutorials/CMakeLists.txt -index 5cba95407b..81f6539f03 100644 ---- a/tutorials/CMakeLists.txt -+++ b/tutorials/CMakeLists.txt -@@ -74,7 +74,8 @@ if(NOT ROOT_minuit2_FOUND) - #---Tutorials disabled depending on the build components------------- - - if(NOT clad) -- set(clad_veto fit/minuit2GausFit.C) -+ set(clad_veto fit/minuit2GausFit.C -+ fit/exampleFit3D.C) - endif() - - # RBatchGenerator tutorials need Python 3.8+. --- -2.42.0 - diff --git a/root-cppyy-Remove-code-related-to-finding-CPyCppyy-API-he.patch b/root-cppyy-Remove-code-related-to-finding-CPyCppyy-API-he.patch new file mode 100644 index 0000000..882247f --- /dev/null +++ b/root-cppyy-Remove-code-related-to-finding-CPyCppyy-API-he.patch @@ -0,0 +1,109 @@ +From 251de0f8b237ce041df4960f831fe4a1fade6d92 Mon Sep 17 00:00:00 2001 +From: Jonas Rembser +Date: Sat, 6 Dec 2025 17:39:40 +0100 +Subject: [PATCH] [cppyy] Remove code related to finding CPyCppyy API header + path + +This is not needed for ROOT, because the CPyCppyy API headers are +installed with the other ROOT headers anyway, and ROOT knows where to +find them already. +--- + .../cppyy/cppyy/python/cppyy/__init__.py | 82 ------------------- + 1 file changed, 82 deletions(-) + +diff --git a/bindings/pyroot/cppyy/cppyy/python/cppyy/__init__.py b/bindings/pyroot/cppyy/cppyy/python/cppyy/__init__.py +index 68e3c49e5fe..c8dd458bfdd 100644 +--- a/bindings/pyroot/cppyy/cppyy/python/cppyy/__init__.py ++++ b/bindings/pyroot/cppyy/cppyy/python/cppyy/__init__.py +@@ -297,88 +297,6 @@ elif ispypy: + if os.path.exists(apipath) and os.path.exists(os.path.join(apipath, 'Python.h')): + add_include_path(apipath) + +-# add access to extra headers for dispatcher (CPyCppyy only (?)) +-if not ispypy: +- try: +- apipath_extra = os.environ['CPPYY_API_PATH'] +- if os.path.basename(apipath_extra) == 'CPyCppyy': +- apipath_extra = os.path.dirname(apipath_extra) +- except KeyError: +- apipath_extra = None +- +- if apipath_extra is None: +- try: +- if 0x30a0000 <= sys.hexversion: +- import importlib.metadata as m +- +- for p in m.files('CPyCppyy'): +- if p.match('API.h'): +- ape = p.locate() +- break +- del p, m +- else: +- import pkg_resources as pr +- +- d = pr.get_distribution('CPyCppyy') +- for line in d.get_metadata_lines('RECORD'): +- if 'API.h' in line: +- ape = os.path.join(d.location, line[0:line.find(',')]) +- break +- del line, d, pr +- +- if os.path.exists(ape): +- apipath_extra = os.path.dirname(os.path.dirname(ape)) +- del ape +- except Exception: +- pass +- +- if apipath_extra is None: +- ldversion = sysconfig.get_config_var('LDVERSION') +- if not ldversion: +- ldversion = sys.version[:3] +- +- apipath_extra = os.path.join(os.path.dirname(apipath), 'site', 'python'+ldversion) +- if not os.path.exists(os.path.join(apipath_extra, 'CPyCppyy')): +- import glob +- import platform +- +- if platform.system() == "Windows": +- # Install locations are handled differently on Windows +- import libcppyy +- +- ape = os.path.dirname(libcppyy.__file__) +- else: +- import cppyy.libcppyy as libcppyy +- +- ape = os.path.dirname(libcppyy.__file__) +- # a "normal" structure finds the include directory up to 3 levels up, +- # ie. dropping lib/pythonx.y[md]/site-packages +- for i in range(3): +- if os.path.exists(os.path.join(ape, 'include')): +- break +- ape = os.path.dirname(ape) +- +- ape = os.path.join(ape, 'include') +- if os.path.exists(os.path.join(ape, 'CPyCppyy')): +- apipath_extra = ape +- else: +- # add back pythonx.y or site/pythonx.y if present +- for p in glob.glob(os.path.join(ape, 'python'+sys.version[:3]+'*'))+\ +- glob.glob(os.path.join(ape, '*', 'python'+sys.version[:3]+'*')): +- if os.path.exists(os.path.join(p, 'CPyCppyy')): +- apipath_extra = p +- break +- +- if apipath_extra.lower() != 'none': +- if not os.path.exists(os.path.join(apipath_extra, 'CPyCppyy')): +- warnings.warn("CPyCppyy API not found (tried: %s); " +- "set CPPYY_API_PATH envar to the 'CPyCppyy' API directory to fix" +- % apipath_extra) +- else: +- add_include_path(apipath_extra) +- +- del apipath_extra +- + if os.getenv('CONDA_PREFIX'): + # MacOS, Linux + include_path = os.path.join(os.getenv('CONDA_PREFIX'), 'include') +-- +2.52.0 + diff --git a/root-cppyy-Remove-now-irrelevant-load_cpp_backend-call.patch b/root-cppyy-Remove-now-irrelevant-load_cpp_backend-call.patch new file mode 100644 index 0000000..a79c861 --- /dev/null +++ b/root-cppyy-Remove-now-irrelevant-load_cpp_backend-call.patch @@ -0,0 +1,46 @@ +From f4577e76a5dc23842d6be0a82df804f71fc820ef Mon Sep 17 00:00:00 2001 +From: Jonas Rembser +Date: Mon, 1 Dec 2025 16:51:36 +0100 +Subject: [PATCH] [cppyy] Remove now irrelevant `load_cpp_backend()` call + +As we don't have a separate `cppyy_backend` anymore (neither as a Python +package, nor as a shared library), trying to load the backend library +will always give an exception that will be caught as an `ImportError`. + +It would be cleaner if this code branch is not even taken. +--- + .../cppyy/cppyy/python/cppyy/_cpython_cppyy.py | 12 ------------ + 1 file changed, 12 deletions(-) + +diff --git a/bindings/pyroot/cppyy/cppyy/python/cppyy/_cpython_cppyy.py b/bindings/pyroot/cppyy/cppyy/python/cppyy/_cpython_cppyy.py +index bac078ea7c9..f98a34a697c 100644 +--- a/bindings/pyroot/cppyy/cppyy/python/cppyy/_cpython_cppyy.py ++++ b/bindings/pyroot/cppyy/cppyy/python/cppyy/_cpython_cppyy.py +@@ -19,24 +19,12 @@ __all__ = [ + '_end_capture_stderr' + ] + +-# First load the dependency libraries of the backend, then pull in the libcppyy +-# extension module. If the backed can't be loaded, it was probably linked +-# statically into the extension module, so we don't error out at this point. +-try: +- from cppyy_backend import loader +- c = loader.load_cpp_backend() +-except ImportError: +- c = None +- + if platform.system() == "Windows": + # On Windows, the library has to be searched without prefix + import libcppyy as _backend + else: + import cppyy.libcppyy as _backend + +-if c is not None: +- _backend._cpp_backend = c +- + # explicitly expose APIs from libcppyy + _w = ctypes.CDLL(_backend.__file__, ctypes.RTLD_GLOBAL) + +-- +2.52.0 + diff --git a/root-fix-test-failure-on-ppc64le-and-aarch64-with-gcc-12.patch b/root-fix-test-failure-on-ppc64le-and-aarch64-with-gcc-12.patch deleted file mode 100644 index 274aa66..0000000 --- a/root-fix-test-failure-on-ppc64le-and-aarch64-with-gcc-12.patch +++ /dev/null @@ -1,44 +0,0 @@ -From 15f50c71b4d89bfbf06ce817dee38e843f0f55cd Mon Sep 17 00:00:00 2001 -From: Mattias Ellert -Date: Mon, 17 Jan 2022 23:50:47 +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 | 5 ++--- - 1 file changed, 2 insertions(+), 3 deletions(-) - -diff --git a/hist/hist/test/test_tprofile2poly.cxx b/hist/hist/test/test_tprofile2poly.cxx -index 40cb3052a2..ecf559a4b3 100644 ---- a/hist/hist/test/test_tprofile2poly.cxx -+++ b/hist/hist/test/test_tprofile2poly.cxx -@@ -58,15 +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); - } - - void binErrorCompare(TProfile2D* tp2d, TProfile2Poly* tpp) { --- -2.39.2 - diff --git a/root-fontconfig.patch b/root-fontconfig.patch index e8ad108..4e5e607 100644 --- a/root-fontconfig.patch +++ b/root-fontconfig.patch @@ -1,7 +1,27 @@ -diff -ur root-6.28.00.orig/core/base/src/TApplication.cxx root-6.28.00/core/base/src/TApplication.cxx ---- root-6.28.00.orig/core/base/src/TApplication.cxx 2023-02-03 15:34:27.000000000 +0100 -+++ root-6.28.00/core/base/src/TApplication.cxx 2023-02-04 12:47:19.757759982 +0100 -@@ -251,18 +251,11 @@ +From 4d450f306a8ab8220f43675c70f399d89e5a4a03 Mon Sep 17 00:00:00 2001 +From: Mattias Ellert +Date: Sat, 11 May 2024 20:09:47 +0200 +Subject: [PATCH] Use system fonts via fontconfig + +--- + core/base/src/TApplication.cxx | 11 +- + graf2d/asimage/CMakeLists.txt | 1 + + graf2d/asimage/src/TASImage.cxx | 91 +++++++- + graf2d/graf/CMakeLists.txt | 1 + + graf2d/graf/inc/TTF.h | 3 +- + graf2d/graf/src/TTF.cxx | 295 +++++++++++++++++--------- + graf2d/postscript/CMakeLists.txt | 1 + + graf2d/postscript/src/TPostScript.cxx | 106 ++++----- + graf3d/gl/CMakeLists.txt | 1 + + graf3d/gl/src/TGLFontManager.cxx | 123 ++++++++++- + graf3d/gl/src/TGLText.cxx | 56 +++-- + 11 files changed, 495 insertions(+), 194 deletions(-) + +diff --git a/core/base/src/TApplication.cxx b/core/base/src/TApplication.cxx +index f0d2124a8f6..41ad4c73020 100644 +--- a/core/base/src/TApplication.cxx ++++ b/core/base/src/TApplication.cxx +@@ -253,18 +253,12 @@ void TApplication::InitializeGraphics(Bool_t only_web) LoadGraphicsLibs(); // Try to load TrueType font renderer. Only try to load if not in batch @@ -14,7 +34,7 @@ diff -ur root-6.28.00.orig/core/base/src/TApplication.cxx root-6.28.00/core/base - // 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)) { @@ -22,7 +42,7 @@ diff -ur root-6.28.00.orig/core/base/src/TApplication.cxx root-6.28.00/core/base if (gClassTable->GetDict("TGX11TTF")) { // in principle we should not have linked anything against libGX11TTF // but with ACLiC this can happen, initialize TGX11TTF by hand -@@ -276,7 +269,6 @@ +@@ -278,7 +272,6 @@ void TApplication::InitializeGraphics(Bool_t only_web) } } #endif @@ -30,10 +50,11 @@ diff -ur root-6.28.00.orig/core/base/src/TApplication.cxx root-6.28.00/core/base } if (!only_web || !fAppImp) { -diff -ur root-6.28.00.orig/graf2d/asimage/CMakeLists.txt root-6.28.00/graf2d/asimage/CMakeLists.txt ---- root-6.28.00.orig/graf2d/asimage/CMakeLists.txt 2023-02-03 15:34:27.000000000 +0100 -+++ root-6.28.00/graf2d/asimage/CMakeLists.txt 2023-02-04 12:47:19.757759982 +0100 -@@ -30,6 +30,7 @@ +diff --git a/graf2d/asimage/CMakeLists.txt b/graf2d/asimage/CMakeLists.txt +index b5ccf983473..8ee57c1fac0 100644 +--- a/graf2d/asimage/CMakeLists.txt ++++ b/graf2d/asimage/CMakeLists.txt +@@ -28,6 +28,7 @@ ROOT_STANDARD_LIBRARY_PACKAGE(ASImage ${FREETYPE_LIBRARIES} ${X11_LIBRARIES} ZLIB::ZLIB @@ -41,10 +62,11 @@ diff -ur root-6.28.00.orig/graf2d/asimage/CMakeLists.txt root-6.28.00/graf2d/asi DEPENDENCIES Core Graf -diff -ur root-6.28.00.orig/graf2d/asimage/src/TASImage.cxx root-6.28.00/graf2d/asimage/src/TASImage.cxx ---- root-6.28.00.orig/graf2d/asimage/src/TASImage.cxx 2023-02-03 15:34:27.000000000 +0100 -+++ root-6.28.00/graf2d/asimage/src/TASImage.cxx 2023-02-04 12:47:19.760759989 +0100 -@@ -115,6 +115,8 @@ +diff --git a/graf2d/asimage/src/TASImage.cxx b/graf2d/asimage/src/TASImage.cxx +index 6ea60a78801..e85d804b7ec 100644 +--- a/graf2d/asimage/src/TASImage.cxx ++++ b/graf2d/asimage/src/TASImage.cxx +@@ -117,6 +117,8 @@ extern "C" { # include } @@ -53,135 +75,101 @@ diff -ur root-6.28.00.orig/graf2d/asimage/src/TASImage.cxx root-6.28.00/graf2d/a // auxiliary functions for general polygon filling #include "TASPolyUtils.c" -@@ -2590,14 +2592,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 = nullptr; -+ 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*)"standardsymbolsps"); -+ 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 (nullptr, pat, FcMatchPattern); -+ FcDefaultSubstitute (pat); -+ match = FcFontMatch (nullptr, pat, &result); -+ FcPatternGetString (match, FC_FILE, 0, (FcChar8**)&ttfnt); -+ FcPatternGetInteger (match, FC_INDEX, 0, &ttindex); +@@ -2620,11 +2622,88 @@ void TASImage::DrawText(Int_t x, Int_t y, const char *text, Int_t size, + // This is for backward compatibility... + if (fn.Last('/') == 0) fn = fn(1, fn.Length() - 1); - const char *ttpath = gEnv->GetValue("Root.TTFontPath", - TROOT::GetTTFFontDir()); - char *tmpstr = gSystem->Which(ttpath, fn, kReadPermission); - fn = tmpstr; - delete [] tmpstr; -+ fn = ttfnt; ++ const char *basename = gSystem->BaseName(fn); + -+ FcPatternDestroy (match); -+ FcPatternDestroy (pat); ++ int ttindex = 0; ++ ++ FcPattern *pat = nullptr, *match; ++ FcResult result; ++ ++ if (strcmp(basename, "timesi.ttf") == 0 || ++ strcmp(basename, "FreeSerifItalic.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "freeserif:italic"); ++ } ++ else if (strcmp(basename, "timesbd.ttf") == 0 || ++ strcmp(basename, "FreeSerifBold.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "freeserif:bold"); ++ } ++ else if (strcmp(basename, "timesbi.ttf") == 0 || ++ strcmp(basename, "FreeSerifBoldItalic.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "freeserif:bold:italic"); ++ } ++ else if (strcmp(basename, "arial.ttf") == 0 || ++ strcmp(basename, "FreeSans.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "freesans"); ++ } ++ else if (strcmp(basename, "ariali.ttf") == 0 || ++ strcmp(basename, "FreeSansOblique.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "freesans:italic"); ++ } ++ else if (strcmp(basename, "arialbd.ttf") == 0 || ++ strcmp(basename, "FreeSansBold.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "freesans:bold"); ++ } ++ else if (strcmp(basename, "arialbi.ttf") == 0 || ++ strcmp(basename, "FreeSansBoldOblique.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "freesans:bold:italic"); ++ } ++ else if (strcmp(basename, "cour.ttf") == 0 || ++ strcmp(basename, "FreeMono.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "freemono"); ++ } ++ else if (strcmp(basename, "couri.ttf") == 0 || ++ strcmp(basename, "FreeMonoOblique.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "freemono:italic"); ++ } ++ else if (strcmp(basename, "courbd.ttf") == 0 || ++ strcmp(basename, "FreeMonoBold.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "freemono:bold"); ++ } ++ else if (strcmp(basename, "courbi.ttf") == 0 || ++ strcmp(basename, "FreeMonoBoldOblique.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "freemono:bold:italic"); ++ } ++ else if (strcmp(basename, "symbol.ttf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "standardsymbolsps"); ++ } ++ else if (strcmp(basename, "times.ttf") == 0 || ++ strcmp(basename, "FreeSerif.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "freeserif"); ++ } ++ else if (strcmp(basename, "wingding.ttf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "dingbats"); ++ } ++ else if (strcmp(basename, "BlackChancery.ttf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "urwchanceryl"); ++ } ++ else if (gSystem->AccessPathName(fn, kReadPermission) != 0) { ++ // Font name is not a file - usae as pattern ++ pat = FcNameParse ((const FcChar8*) fn.Data()); ++ } ++ ++ if (pat) { ++ FcConfigSubstitute (nullptr, pat, FcMatchPattern); ++ FcDefaultSubstitute (pat); ++ match = FcFontMatch (nullptr, pat, &result); ++ if (match) { ++ char *ttfnt; ++ FcPatternGetString (match, FC_FILE, 0, (FcChar8**) &ttfnt); ++ fn = ttfnt; ++ FcPatternGetInteger (match, FC_INDEX, 0, &ttindex); ++ FcPatternDestroy (match); ++ } ++ FcPatternDestroy (pat); ++ } if (fn.EndsWith(".pfa") || fn.EndsWith(".PFA") || fn.EndsWith(".pfb") || fn.EndsWith(".PFB") || fn.EndsWith(".ttf") || fn.EndsWith(".TTF") || fn.EndsWith(".otf") || fn.EndsWith(".OTF")) { ttfont = kTRUE; -@@ -2621,14 +2729,11 @@ +@@ -2648,7 +2727,7 @@ void TASImage::DrawText(Int_t x, Int_t y, const char *text, Int_t size, return; } @@ -189,20 +177,12 @@ diff -ur root-6.28.00.orig/graf2d/asimage/src/TASImage.cxx root-6.28.00/graf2d/a + ASFont *font = get_asfont(gFontManager, fn.Data(), ttindex, size, ASF_GuessWho); if (!font) { -- font = get_asfont(gFontManager, "fixed", 0, size, ASF_GuessWho); -- if (!font) { -- Warning("DrawText", "cannot find a font %s", font_name); -- return; -- } -+ Warning("DrawText", "cannot find a font %s", font_name); -+ return; - } - - get_text_size(text, font, (ASText3DType)type, &width, &height); -diff -ur root-6.28.00.orig/graf2d/graf/CMakeLists.txt root-6.28.00/graf2d/graf/CMakeLists.txt ---- root-6.28.00.orig/graf2d/graf/CMakeLists.txt 2023-02-03 15:34:27.000000000 +0100 -+++ root-6.28.00/graf2d/graf/CMakeLists.txt 2023-02-04 12:47:19.861760233 +0100 -@@ -91,6 +91,7 @@ + font = get_asfont(gFontManager, "fixed", 0, size, ASF_GuessWho); +diff --git a/graf2d/graf/CMakeLists.txt b/graf2d/graf/CMakeLists.txt +index d7d1b77c21a..c4ebb994a4a 100644 +--- a/graf2d/graf/CMakeLists.txt ++++ b/graf2d/graf/CMakeLists.txt +@@ -91,6 +91,7 @@ ROOT_STANDARD_LIBRARY_PACKAGE(Graf ${FREETYPE_LIBRARIES} ZLIB::ZLIB mathtext @@ -210,24 +190,27 @@ diff -ur root-6.28.00.orig/graf2d/graf/CMakeLists.txt root-6.28.00/graf2d/graf/C DEPENDENCIES Hist Matrix -diff -ur root-6.28.00.orig/graf2d/graf/inc/TTF.h root-6.28.00/graf2d/graf/inc/TTF.h ---- root-6.28.00.orig/graf2d/graf/inc/TTF.h 2023-02-03 15:34:27.000000000 +0100 -+++ root-6.28.00/graf2d/graf/inc/TTF.h 2023-02-04 12:47:19.862760235 +0100 -@@ -76,9 +76,8 @@ +diff --git a/graf2d/graf/inc/TTF.h b/graf2d/graf/inc/TTF.h +index 864ce06b4f0..050796d1ded 100644 +--- a/graf2d/graf/inc/TTF.h ++++ b/graf2d/graf/inc/TTF.h +@@ -76,9 +76,10 @@ protected: static FT_BBox fgCBox; ///< string control box static FT_CharMap fgCharMap[kTTMaxFonts]; ///< font character map static Int_t fgCurFontIdx; ///< current font index - static Int_t fgSymbItaFontIdx; ///< Symbol italic font index static Int_t fgFontCount; ///< number of fonts loaded -- static char *fgFontName[kTTMaxFonts]; ///< font name -+ static Int_t fgFontID[kTTMaxFonts]; ///< font ID + static char *fgFontName[kTTMaxFonts]; ///< font name ++ static Int_t fgFontIdx[kTTMaxFonts]; ///< font index in font file ++ static Int_t fgFontIta[kTTMaxFonts]; ///< font slanted using transform static FT_Face fgFace[kTTMaxFonts]; ///< font face static TTF::TTGlyph fgGlyphs[kMaxGlyphs]; ///< glyphs static Bool_t fgHinting; ///< use hinting (true by default) -diff -ur root-6.28.00.orig/graf2d/graf/src/TTF.cxx root-6.28.00/graf2d/graf/src/TTF.cxx ---- root-6.28.00.orig/graf2d/graf/src/TTF.cxx 2023-02-03 15:34:27.000000000 +0100 -+++ root-6.28.00/graf2d/graf/src/TTF.cxx 2023-02-04 12:47:19.863760238 +0100 -@@ -25,6 +25,8 @@ +diff --git a/graf2d/graf/src/TTF.cxx b/graf2d/graf/src/TTF.cxx +index 758bb98c192..c90d0ac70a9 100644 +--- a/graf2d/graf/src/TTF.cxx ++++ b/graf2d/graf/src/TTF.cxx +@@ -25,6 +25,8 @@ Interface to the freetype 2 library. #include "TMath.h" #include "TError.h" @@ -236,19 +219,20 @@ diff -ur root-6.28.00.orig/graf2d/graf/src/TTF.cxx root-6.28.00/graf2d/graf/src/ // to scale fonts to the same size as the old TT version const Float_t kScale = 0.93376068; -@@ -38,10 +40,9 @@ +@@ -38,10 +40,11 @@ Int_t TTF::fgTBlankW = 0; Int_t TTF::fgWidth = 0; Int_t TTF::fgAscent = 0; Int_t TTF::fgCurFontIdx = -1; -Int_t TTF::fgSymbItaFontIdx = -1; Int_t TTF::fgFontCount = 0; Int_t TTF::fgNumGlyphs = 0; --char *TTF::fgFontName[kTTMaxFonts]; -+Int_t TTF::fgFontID[kTTMaxFonts]; + char *TTF::fgFontName[kTTMaxFonts]; ++Int_t TTF::fgFontIdx[kTTMaxFonts]; ++Int_t TTF::fgFontIta[kTTMaxFonts]; FT_Matrix *TTF::fgRotMatrix = nullptr; FT_Library TTF::fgLibrary; FT_BBox TTF::fgCBox; -@@ -72,6 +73,11 @@ +@@ -71,6 +74,11 @@ void TTF::Init() return; } @@ -260,180 +244,159 @@ diff -ur root-6.28.00.orig/graf2d/graf/src/TTF.cxx root-6.28.00/graf2d/graf/src/ // load default font (arialbd) SetTextFont(62); } -@@ -84,7 +90,6 @@ - if (!fgInit) return; - - for (int i = 0; i < fgFontCount; i++) { -- delete [] fgFontName[i]; - FT_Done_Face(fgFace[i]); - } - if (fgRotMatrix) delete fgRotMatrix; -@@ -109,12 +114,22 @@ +@@ -108,12 +116,15 @@ Short_t TTF::CharToUnicode(UInt_t code) charmap = fgFace[fgCurFontIdx]->charmaps[i]; platform = charmap->platform_id; encoding = charmap->encoding_id; - if ((platform == 3 && encoding == 1) || + if ((platform == 3 && encoding == 1 && -+ (fgFontID[fgCurFontIdx] != 12 && -+ fgFontID[fgCurFontIdx] != 14 && -+ fgFontID[fgCurFontIdx] != 15)) || ++ (fgFontIta[fgCurFontIdx] & 2) == 0) || (platform == 0 && encoding == 0) || + (platform == 7 && encoding == 2 && -+ (fgFontID[fgCurFontIdx] == 12 || -+ fgFontID[fgCurFontIdx] == 14 || -+ fgFontID[fgCurFontIdx] == 15)) || ++ (fgFontIta[fgCurFontIdx] & 2) != 0) || + (platform == 0 && encoding == 3 && -+ (fgFontID[fgCurFontIdx] == 12 || -+ fgFontID[fgCurFontIdx] == 15)) || ++ (fgFontIta[fgCurFontIdx] & 2) != 0) || (platform == 1 && encoding == 0 && - !strcmp(fgFontName[fgCurFontIdx], "wingding.ttf")) || - (platform == 1 && encoding == 0 && - !strcmp(fgFontName[fgCurFontIdx], "symbol.ttf"))) -+ (fgFontID[fgCurFontIdx] == 12 || -+ fgFontID[fgCurFontIdx] == 14 || -+ fgFontID[fgCurFontIdx] == 15))) ++ (fgFontIta[fgCurFontIdx] & 2) != 0)) { fgCharMap[fgCurFontIdx] = charmap; if (FT_Set_Charmap(fgFace[fgCurFontIdx], fgCharMap[fgCurFontIdx])) -@@ -381,27 +393,147 @@ - - if (!fontname || !fontname[0]) { - Warning("TTF::SetTextFont", -- "no font name specified, using default font %s", fgFontName[0]); -+ "no font name specified, using default font"); - fgCurFontIdx = 0; - return 0; +@@ -392,21 +403,145 @@ Int_t TTF::SetTextFont(const char *fontname, Int_t italic) } const char *basename = gSystem->BaseName(fontname); ++ char *ttfont = nullptr; ++ int ttindex = 0; ++ ++ FcPattern *pat = nullptr, *match; ++ FcResult result; ++ + if (strcmp(basename, "timesi.ttf") == 0 || + strcmp(basename, "FreeSerifItalic.otf") == 0) { -+ SetTextFont(12); ++ pat = FcNameParse ((const FcChar8*) "freeserif:italic"); + } + else if (strcmp(basename, "timesbd.ttf") == 0 || + strcmp(basename, "FreeSerifBold.otf") == 0) { -+ SetTextFont(22); ++ pat = FcNameParse ((const FcChar8*) "freeserif:bold"); + } + else if (strcmp(basename, "timesbi.ttf") == 0 || + strcmp(basename, "FreeSerifBoldItalic.otf") == 0) { -+ SetTextFont(32); ++ pat = FcNameParse ((const FcChar8*) "freeserif:bold:italic"); + } + else if (strcmp(basename, "arial.ttf") == 0 || + strcmp(basename, "FreeSans.otf") == 0) { -+ SetTextFont(42); ++ pat = FcNameParse ((const FcChar8*) "freesans"); + } + else if (strcmp(basename, "ariali.ttf") == 0 || + strcmp(basename, "FreeSansOblique.otf") == 0) { -+ SetTextFont(52); ++ pat = FcNameParse ((const FcChar8*) "freesans:italic"); + } + else if (strcmp(basename, "arialbd.ttf") == 0 || + strcmp(basename, "FreeSansBold.otf") == 0) { -+ SetTextFont(62); ++ pat = FcNameParse ((const FcChar8*) "freesans:bold"); + } + else if (strcmp(basename, "arialbi.ttf") == 0 || + strcmp(basename, "FreeSansBoldOblique.otf") == 0) { -+ SetTextFont(72); ++ pat = FcNameParse ((const FcChar8*) "freesans:bold:italic"); + } + else if (strcmp(basename, "cour.ttf") == 0 || + strcmp(basename, "FreeMono.otf") == 0) { -+ SetTextFont(82); ++ pat = FcNameParse ((const FcChar8*) "freemono"); + } + else if (strcmp(basename, "couri.ttf") == 0 || + strcmp(basename, "FreeMonoOblique.otf") == 0) { -+ SetTextFont(92); ++ pat = FcNameParse ((const FcChar8*) "freemono:italic"); + } + else if (strcmp(basename, "courbd.ttf") == 0 || + strcmp(basename, "FreeMonoBold.otf") == 0) { -+ SetTextFont(102); ++ pat = FcNameParse ((const FcChar8*) "freemono:bold"); + } + else if (strcmp(basename, "courbi.ttf") == 0 || + strcmp(basename, "FreeMonoBoldOblique.otf") == 0) { -+ SetTextFont(112); ++ pat = FcNameParse ((const FcChar8*) "freemono:bold:italic"); + } + else if (strcmp(basename, "symbol.ttf") == 0) { -+ if (italic) -+ SetTextFont(152); -+ else -+ SetTextFont(122); ++ pat = FcNameParse ((const FcChar8*) "standardsymbolsps"); ++ italic &= 2; + } + else if (strcmp(basename, "times.ttf") == 0 || + strcmp(basename, "FreeSerif.otf") == 0) { -+ SetTextFont(132); ++ pat = FcNameParse ((const FcChar8*) "freeserif"); + } + else if (strcmp(basename, "wingding.ttf") == 0) { -+ SetTextFont(142); ++ pat = FcNameParse ((const FcChar8*) "dingbats"); ++ italic &= 2; + } + else if (strcmp(basename, "STIXGeneral.otf") == 0) { -+ SetTextFont(162); ++ pat = FcNameParse ((const FcChar8*) "stixgeneral"); + } + else if (strcmp(basename, "STIXGeneralItalic.otf") == 0) { -+ SetTextFont(172); ++ pat = FcNameParse ((const FcChar8*) "stixgeneral:italic"); + } + else if (strcmp(basename, "STIXGeneralBol.otf") == 0) { -+ SetTextFont(182); ++ pat = FcNameParse ((const FcChar8*) "stixgeneral:bold"); + } + else if (strcmp(basename, "STIXGeneralBolIta.otf") == 0) { -+ SetTextFont(192); ++ pat = FcNameParse ((const FcChar8*) "stixgeneral:bold:italic"); + } + else if (strcmp(basename, "STIXSiz1Sym.otf") == 0) { -+ SetTextFont(202); ++ pat = FcNameParse ((const FcChar8*) "stixsize1"); + } + else if (strcmp(basename, "STIXSiz1SymBol.otf") == 0) { -+ SetTextFont(212); ++ pat = FcNameParse ((const FcChar8*) "stixsize1:bold"); + } + else if (strcmp(basename, "STIXSiz2Sym.otf") == 0) { -+ SetTextFont(222); ++ pat = FcNameParse ((const FcChar8*) "stixsize2"); + } + else if (strcmp(basename, "STIXSiz2SymBol.otf") == 0) { -+ SetTextFont(232); ++ pat = FcNameParse ((const FcChar8*) "stixsize2:bold"); + } + else if (strcmp(basename, "STIXSiz3Sym.otf") == 0) { -+ SetTextFont(242); ++ pat = FcNameParse ((const FcChar8*) "stixsize3"); + } + else if (strcmp(basename, "STIXSiz3SymBol.otf") == 0) { -+ SetTextFont(252); ++ pat = FcNameParse ((const FcChar8*) "stixsize3:bold"); + } + else if (strcmp(basename, "STIXSiz4Sym.otf") == 0) { -+ SetTextFont(262); ++ pat = FcNameParse ((const FcChar8*) "stixsize4"); + } + else if (strcmp(basename, "STIXSiz4SymBol.otf") == 0) { -+ SetTextFont(272); ++ pat = FcNameParse ((const FcChar8*) "stixsize4:bold"); + } + else if (strcmp(basename, "STIXSiz5Sym.otf") == 0) { -+ SetTextFont(282); ++ pat = FcNameParse ((const FcChar8*) "stixsize5"); + } + else if (strcmp(basename, "DroidSansFallback.ttf") == 0) { -+ SetTextFont(292); ++ pat = FcNameParse ((const FcChar8*) "droidsansfallback:charset=4e00 0410"); + } -+ else { -+ Error("TTF::SetTextFont", "font %s not known to ROOT", basename); -+ if (fgFontCount) { -+ Warning("TTF::SetTextFont", "using default font"); -+ fgCurFontIdx = 0; // use font 0 (default font, set in ctor) -+ return 0; -+ } else { -+ return 1; ++ else if (strcmp(basename, "BlackChancery.ttf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "urwchanceryl"); ++ } ++ else if (gSystem->AccessPathName(fontname, kReadPermission) != 0) { ++ // Font name is not a file - usae as pattern ++ pat = FcNameParse ((const FcChar8*) fontname); ++ } ++ ++ if (pat) { ++ FcConfigSubstitute (nullptr, pat, FcMatchPattern); ++ FcDefaultSubstitute (pat); ++ match = FcFontMatch (nullptr, pat, &result); ++ if (match) { ++ const char *ttfnt; ++ FcPatternGetString (match, FC_FILE, 0, (FcChar8**) &ttfnt); ++ ttfont = StrDup(ttfnt); ++ FcPatternGetInteger (match, FC_INDEX, 0, &ttindex); ++ FcPatternDestroy (match); + } ++ FcPatternDestroy (pat); + } + -+ return 0; -+} ++ if (!ttfont) ttfont = StrDup(fontname); + -+//______________________________________________________________________________ -+void TTF::SetTextFont(Font_t fontnumber) -+{ -+ int fontid = fontnumber / 10; -+ if (fontid < 0 || fontid > 31) fontid = 0; -+ -+ Int_t italic = 0; -+ if (fontid==15) italic = 1; -+ -+ if (!fgInit) Init(); -+ -+ if (fontid == 0) { -+ fgCurFontIdx = 0; // use font 0 (default font, set in ctor) -+ return; -+ } ++ basename = gSystem->BaseName(ttfont); + // check if font is in cache int i; @@ -450,32 +413,30 @@ diff -ur root-6.28.00.orig/graf2d/graf/src/TTF.cxx root-6.28.00/graf2d/graf/src/ - return 0; - } - } -+ if (fgFontID[i] == fontid) { ++ if (!strcmp(fgFontName[i], basename) && ++ (fgFontIdx[i] == ttindex) && ++ (fgFontIta[i] == italic)) { + fgCurFontIdx = i; -+ return; ++ delete [] ttfont; ++ return 0; } } -@@ -409,151 +541,215 @@ - if (fgFontCount >= kTTMaxFonts) { - Error("TTF::SetTextFont", "too many fonts opened (increase kTTMaxFont = %d)", +@@ -416,28 +551,13 @@ Int_t TTF::SetTextFont(const char *fontname, Int_t italic) kTTMaxFonts); -- Warning("TTF::SetTextFont", "using default font %s", fgFontName[0]); -+ Warning("TTF::SetTextFont", "using default font"); + Warning("TTF::SetTextFont", "using default font %s", fgFontName[0]); fgCurFontIdx = 0; // use font 0 (default font, set in ctor) -- return 0; -+ return; ++ delete [] ttfont; + return 0; } - // try to load font (font must be in Root.TTFontPath resource) - const char *ttpath = gEnv->GetValue("Root.TTFontPath", - TROOT::GetTTFFontDir()); - char *ttfont = gSystem->Which(ttpath, fontname, kReadPermission); -+ char *ttfont = nullptr; -+ int ttindex = 0; - +- - if (!ttfont) { -- Error("TTF::SetTextFont", "font file %s not found in path", fontname); +- Error("TTF::SetTextFont", "font file %s not found in path %s", fontname, ttpath); - if (fgFontCount) { - Warning("TTF::SetTextFont", "using default font %s", fgFontName[0]); - fgCurFontIdx = 0; // use font 0 (default font, set in ctor) @@ -483,180 +444,8 @@ diff -ur root-6.28.00.orig/graf2d/graf/src/TTF.cxx root-6.28.00/graf2d/graf/src/ - } else { - return 1; - } -+ FcPattern *pat, *match; -+ FcCharSet *set = nullptr; -+ 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*)"standardsymbolsps"); -+ 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 (nullptr, pat, FcMatchPattern); -+ FcDefaultSubstitute (pat); -+ match = FcFontMatch (nullptr, 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 = (FT_Face) 0; - if (FT_New_Face(fgLibrary, ttfont, 0, &tface)) { @@ -664,64 +453,41 @@ diff -ur root-6.28.00.orig/graf2d/graf/src/TTF.cxx root-6.28.00/graf2d/graf/src/ Error("TTF::SetTextFont", "error loading font %s", ttfont); delete [] ttfont; if (tface) FT_Done_Face(tface); -- if (fgFontCount) { -- Warning("TTF::SetTextFont", "using default font %s", fgFontName[0]); -- fgCurFontIdx = 0; -- return 0; -- } else { -- return 1; -- } -+ Warning("TTF::SetTextFont", "using default font"); -+ fgCurFontIdx = 0; -+ return; +@@ -450,24 +570,25 @@ Int_t TTF::SetTextFont(const char *fontname, Int_t italic) + } } - delete [] ttfont; - -- fgFontName[fgFontCount] = StrDup(basename); -+ fgFontID[fgFontCount] = fontid; +- delete [] ttfont; +- + fgFontName[fgFontCount] = StrDup(basename); ++ fgFontIdx[fgFontCount] = ttindex; ++ fgFontIta[fgFontCount] = italic; fgCurFontIdx = fgFontCount; fgFace[fgCurFontIdx] = tface; fgCharMap[fgCurFontIdx] = (FT_CharMap) 0; fgFontCount++; - if (italic) { +- if (italic) { - fgSymbItaFontIdx = fgCurFontIdx; ++ if ((italic & 1) != 0) { FT_Matrix slantMat; slantMat.xx = (1 << 16); slantMat.xy = ((1 << 16) >> 2); slantMat.yx = 0; slantMat.yy = (1 << 16); - FT_Set_Transform( fgFace[fgSymbItaFontIdx], &slantMat, NULL ); -- } -- -- return 0; --} -- --//////////////////////////////////////////////////////////////////////////////// --/// Set specified font. --/// List of the currently supported fonts (screen and PostScript) --/// --/// | Font ID | X11 | TTF | --/// |---------|---------------------------|------------------| --/// | 1 | times-medium-i-normal | timesi.ttf | --/// | 2 | times-bold-r-normal | timesbd.ttf | --/// | 3 | times-bold-i-normal | timesbi.ttf | --/// | 4 | helvetica-medium-r-normal | arial.ttf | --/// | 5 | helvetica-medium-o-normal | ariali.ttf | --/// | 6 | helvetica-bold-r-normal | arialbd.ttf | --/// | 7 | helvetica-bold-o-normal | arialbi.ttf | --/// | 8 | courier-medium-r-normal | cour.ttf | --/// | 9 | courier-medium-o-normal | couri.ttf | --/// | 10 | courier-bold-r-normal | courbd.ttf | --/// | 11 | courier-bold-o-normal | courbi.ttf | --/// | 12 | symbol-medium-r-normal | symbol.ttf | --/// | 13 | times-medium-r-normal | times.ttf | --/// | 14 | | wingding.ttf | --/// | 15 | symbol oblique is emulated from symbol.ttf | | -- --void TTF::SetTextFont(Font_t fontnumber) --{ ++ FT_Set_Transform( fgFace[fgCurFontIdx], &slantMat, nullptr ); + } + ++ delete [] ttfont; ++ + return 0; + } + +@@ -494,70 +615,50 @@ Int_t TTF::SetTextFont(const char *fontname, Int_t italic) + + void TTF::SetTextFont(Font_t fontnumber) + { - // Added by cholm for use of DFSG - fonts - based on Kevins fix. - // Table of Microsoft and (for non-MSFT operating systems) backup - // FreeFont TTF fonts. @@ -730,10 +496,10 @@ diff -ur root-6.28.00.orig/graf2d/graf/src/TTF.cxx root-6.28.00/graf2d/graf/src/ - { "Root.TTFont.1", "FreeSerifItalic.otf" }, - { "Root.TTFont.2", "FreeSerifBold.otf" }, - { "Root.TTFont.3", "FreeSerifBoldItalic.otf" }, -- { "Root.TTFont.4", "FreeSans.otf" }, -- { "Root.TTFont.5", "FreeSansOblique.otf" }, -- { "Root.TTFont.6", "FreeSansBold.otf" }, -- { "Root.TTFont.7", "FreeSansBoldOblique.otf" }, +- { "Root.TTFont.4", "texgyreheros-regular.otf" }, +- { "Root.TTFont.5", "texgyreheros-italic.otf" }, +- { "Root.TTFont.6", "texgyreheros-bold.otf" }, +- { "Root.TTFont.7", "texgyreheros-bolditalic.otf" }, - { "Root.TTFont.8", "FreeMono.otf" }, - { "Root.TTFont.9", "FreeMonoOblique.otf" }, - { "Root.TTFont.10", "FreeMonoBold.otf" }, @@ -758,14 +524,47 @@ diff -ur root-6.28.00.orig/graf2d/graf/src/TTF.cxx root-6.28.00/graf2d/graf/src/ - { "Root.TTFont.ME", "DroidSansFallback.ttf" }, - { "Root.TTFont.CJKMing", "DroidSansFallback.ttf" }, - { "Root.TTFont.CJKGothic", "DroidSansFallback.ttf" } -- }; -- ++ static const char *fonttable[] = { ++ "freesans:bold", ++ "freeserif:italic", ++ "freeserif:bold", ++ "freeserif:bold:italic", ++ "freesans", ++ "freesans:italic", ++ "freesans:bold", ++ "freesans:bold:italic", ++ "freemono", ++ "freemono:italic", ++ "freemono:bold", ++ "freemono:bold:italic", ++ "standardsymbolsps", ++ "freeserif", ++ "dingbats", ++ "standardsymbolsps", ++ "stixgeneral", ++ "stixgeneral:italic", ++ "stixgeneral:bold", ++ "stixgeneral:bold:italic", ++ "stixsize1", ++ "stixsize1:bold", ++ "stixsize2", ++ "stixsize2:bold", ++ "stixsize3", ++ "stixsize3:bold", ++ "stixsize4", ++ "stixsize4:bold", ++ "stixsize5", ++ "droidsansfallback:charset=4e00 0410", ++ "droidsansfallback:charset=4e00 0410", ++ "droidsansfallback:charset=4e00 0410" + }; + - static int fontset = -1; - int thisset = fontset; - -- int fontid = fontnumber / 10; -- if (fontid < 0 || fontid > 31) fontid = 0; -- + int fontid = fontnumber / 10; + if (fontid < 0 || fontid > 31) fontid = 0; + - if (thisset == -1) { - // try to load font (font must be in Root.TTFontPath resource) - // to see which fontset we have available @@ -779,21 +578,26 @@ diff -ur root-6.28.00.orig/graf2d/graf/src/TTF.cxx root-6.28.00/graf2d/graf/src/ - // try backup free font - thisset = 1; - } -+ FT_Set_Transform( fgFace[fgCurFontIdx], &slantMat, nullptr ); - } -- Int_t italic = 0; +- } + Int_t italic = 0; - if (fontid==15) italic = 1; - int ret = SetTextFont(gEnv->GetValue(fonttable[fontid][thisset], fonttable[fontid][1]), italic); - // Do not define font set is we're loading the symbol.ttf - it's - // the same in both cases. - if (ret == 0 && fontid != 12) fontset = thisset; ++ if (fontid==12) italic = 2; ++ if (fontid==14) italic = 2; ++ if (fontid==15) italic = 3; ++ ++ SetTextFont(fonttable[fontid], italic); } //////////////////////////////////////////////////////////////////////////////// -diff -ur root-6.28.00.orig/graf2d/postscript/CMakeLists.txt root-6.28.00/graf2d/postscript/CMakeLists.txt ---- root-6.28.00.orig/graf2d/postscript/CMakeLists.txt 2023-02-03 15:34:27.000000000 +0100 -+++ root-6.28.00/graf2d/postscript/CMakeLists.txt 2023-02-04 12:47:19.863760238 +0100 -@@ -27,6 +27,7 @@ +diff --git a/graf2d/postscript/CMakeLists.txt b/graf2d/postscript/CMakeLists.txt +index eb091bbb396..a05023a3f41 100644 +--- a/graf2d/postscript/CMakeLists.txt ++++ b/graf2d/postscript/CMakeLists.txt +@@ -27,6 +27,7 @@ ROOT_STANDARD_LIBRARY_PACKAGE(Postscript LIBRARIES ZLIB::ZLIB mathtext @@ -801,10 +605,11 @@ diff -ur root-6.28.00.orig/graf2d/postscript/CMakeLists.txt root-6.28.00/graf2d/ DEPENDENCIES Graf ) -diff -ur root-6.28.00.orig/graf2d/postscript/src/TPostScript.cxx root-6.28.00/graf2d/postscript/src/TPostScript.cxx ---- root-6.28.00.orig/graf2d/postscript/src/TPostScript.cxx 2023-02-03 15:34:27.000000000 +0100 -+++ root-6.28.00/graf2d/postscript/src/TPostScript.cxx 2023-02-04 12:47:19.864760240 +0100 -@@ -234,6 +234,7 @@ +diff --git a/graf2d/postscript/src/TPostScript.cxx b/graf2d/postscript/src/TPostScript.cxx +index df9e3ae16ea..1e353e1ca53 100644 +--- a/graf2d/postscript/src/TPostScript.cxx ++++ b/graf2d/postscript/src/TPostScript.cxx +@@ -234,6 +234,7 @@ To change the color model use `gStyle->SetColorModelPS(c)`. #include #include #include @@ -812,7 +617,7 @@ diff -ur root-6.28.00.orig/graf2d/postscript/src/TPostScript.cxx root-6.28.00/gr #include "strlcpy.h" #include "snprintf.h" -@@ -1585,56 +1586,179 @@ +@@ -1584,56 +1585,60 @@ Bool_t TPostScript::FontEmbedType42(const char *filename) void TPostScript::FontEmbed(void) { @@ -849,8 +654,41 @@ diff -ur root-6.28.00.orig/graf2d/postscript/src/TPostScript.cxx root-6.28.00/gr - { "Root.TTFont.ME", "DroidSansFallback.ttf" }, - { "Root.TTFont.CJKMing", "DroidSansFallback.ttf" }, - { "Root.TTFont.CJKCothic", "DroidSansFallback.ttf" } -- }; -- ++ static const char *fonttable[] = { ++ "freesans:bold", ++ "freeserif:italic", ++ "freeserif:bold", ++ "freeserif:bold:italic", ++ "freesans", ++ "freesans:italic", ++ "freesans:bold", ++ "freesans:bold:italic", ++ "freemono", ++ "freemono:italic", ++ "freemono:bold", ++ "freemono:bold:italic", ++ "standardsymbolsps", ++ "freeserif", ++ "dingbats", ++ "standardsymbolsps", ++ "stixgeneral", ++ "stixgeneral:italic", ++ "stixgeneral:bold", ++ "stixgeneral:bold:italic", ++ "stixsize1", ++ "stixsize1:bold", ++ "stixsize2", ++ "stixsize2:bold", ++ "stixsize3", ++ "stixsize3:bold", ++ "stixsize4", ++ "stixsize4:bold", ++ "stixsize5", ++ "droidsansfallback:charset=4e00 0410", ++ "droidsansfallback:charset=4e00 0410", ++ "droidsansfallback:charset=4e00 0410" + }; + PrintStr("%%IncludeResource: ProcSet (FontSetInit)@"); - // try to load font (font must be in Root.TTFontPath resource) @@ -862,182 +700,28 @@ diff -ur root-6.28.00.orig/graf2d/postscript/src/TPostScript.cxx root-6.28.00/gr - const char *filename = gEnv->GetValue( - fonttable[fontid][0], fonttable[fontid][1]); - char *ttfont = gSystem->Which(ttpath, filename, kReadPermission); -+ + char *ttfont = nullptr; + + FcPattern *pat, *match; -+ FcCharSet *set = nullptr; + 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: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"standardsymbolsps"); -+ 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; -+ } ++ pat = FcNameParse ((const FcChar8*) fonttable[fontid]); + + FcConfigSubstitute (nullptr, pat, FcMatchPattern); + FcDefaultSubstitute (pat); + match = FcFontMatch (nullptr, pat, &result); -+ char *ttfnt; -+ FcPatternGetString (match, FC_FILE, 0, (FcChar8**)&ttfnt); -+ ttfont = StrDup(ttfnt); -+ FcPatternDestroy (match); -+ FcPatternDestroy (pat); -+ if (set) FcCharSetDestroy (set); ++ FcPatternGetString (match, FC_FILE, 0, (FcChar8**) &ttfont); + if (!ttfont) { - Error("TPostScript::FontEmbed", - "font %d (filename `%s') not found in path", - fontid, filename); -+ Error("TPostScript::FontEmbed", "font %d not found in path", ++ Error("TPostScript::FontEmbed", "font %d not found", + fontid); } else { if (FontEmbedType2(ttfont)) { // nothing -@@ -1643,9 +1767,8 @@ +@@ -1642,12 +1647,13 @@ void TPostScript::FontEmbed(void) } else if(FontEmbedType42(ttfont)) { // nothing } else { @@ -1047,9 +731,15 @@ diff -ur root-6.28.00.orig/graf2d/postscript/src/TPostScript.cxx root-6.28.00/gr + Error("TPostScript::FontEmbed", "failed to embed font %d)", + fontid); } - delete [] ttfont; +- delete [] ttfont; } -@@ -2837,10 +2960,10 @@ ++ ++ FcPatternDestroy (match); ++ FcPatternDestroy (pat); + } + } + PrintStr("%%IncludeResource: font Times-Roman@"); +@@ -2836,10 +2842,10 @@ void TPostScript::Text(Double_t xx, Double_t yy, const wchar_t *chars) { "Root.PSFont.9", "/FreeMonoOblique" }, { "Root.PSFont.10", "/FreeMonoBold" }, { "Root.PSFont.11", "/FreeMonoBoldOblique" }, @@ -1063,10 +753,11 @@ diff -ur root-6.28.00.orig/graf2d/postscript/src/TPostScript.cxx root-6.28.00/gr { "Root.PSFont.STIXGen", "/STIXGeneral" }, { "Root.PSFont.STIXGenIt", "/STIXGeneral-Italic" }, { "Root.PSFont.STIXGenBd", "/STIXGeneral-Bold" }, -diff -ur root-6.28.00.orig/graf3d/gl/CMakeLists.txt root-6.28.00/graf3d/gl/CMakeLists.txt ---- root-6.28.00.orig/graf3d/gl/CMakeLists.txt 2023-02-03 15:34:27.000000000 +0100 -+++ root-6.28.00/graf3d/gl/CMakeLists.txt 2023-02-04 12:47:19.867760247 +0100 -@@ -208,6 +208,7 @@ +diff --git a/graf3d/gl/CMakeLists.txt b/graf3d/gl/CMakeLists.txt +index e759473ca0f..c453397fc52 100644 +--- a/graf3d/gl/CMakeLists.txt ++++ b/graf3d/gl/CMakeLists.txt +@@ -211,6 +211,7 @@ ROOT_STANDARD_LIBRARY_PACKAGE(RGL ${GL2PS_LIBRARIES} ${X11_LIBRARIES} RGlew @@ -1074,9 +765,10 @@ diff -ur root-6.28.00.orig/graf3d/gl/CMakeLists.txt root-6.28.00/graf3d/gl/CMake DEPENDENCIES Hist Gui -diff -ur root-6.28.00.orig/graf3d/gl/src/TGLFontManager.cxx root-6.28.00/graf3d/gl/src/TGLFontManager.cxx ---- root-6.28.00.orig/graf3d/gl/src/TGLFontManager.cxx 2023-02-03 15:34:27.000000000 +0100 -+++ root-6.28.00/graf3d/gl/src/TGLFontManager.cxx 2023-02-04 12:47:19.867760247 +0100 +diff --git a/graf3d/gl/src/TGLFontManager.cxx b/graf3d/gl/src/TGLFontManager.cxx +index 58ea1188d59..647642de615 100644 +--- a/graf3d/gl/src/TGLFontManager.cxx ++++ b/graf3d/gl/src/TGLFontManager.cxx @@ -36,6 +36,7 @@ # include "FTGLBitmapFont.h" #endif @@ -1085,16 +777,7 @@ diff -ur root-6.28.00.orig/graf3d/gl/src/TGLFontManager.cxx root-6.28.00/graf3d/ /** \class TGLFont \ingroup opengl -@@ -419,7 +420,7 @@ - ClassImp(TGLFontManager); - - TObjArray TGLFontManager::fgFontFileArray; --Int_t TGLFontManager::fgExtendedFontStart; -+Int_t TGLFontManager::fgExtendedFontStart = 0; - TGLFontManager::FontSizeVec_t TGLFontManager::fgFontSizeArray; - Bool_t TGLFontManager::fgStaticInitDone = kFALSE; - -@@ -450,17 +451,175 @@ +@@ -448,16 +449,120 @@ void TGLFontManager::RegisterFont(Int_t sizeIn, Int_t fileID, TGLFont::EMode mod FontMap_i it = fFontMap.find(TGLFont(size, fileID, mode)); if (it == fFontMap.end()) { @@ -1107,234 +790,127 @@ diff -ur root-6.28.00.orig/graf3d/gl/src/TGLFontManager.cxx root-6.28.00/graf3d/ - ((TObjString*)fgFontFileArray[fileID])->String()); - file = fp; - delete [] fp; -+ char *file = nullptr; -+ int ttindex = 0; ++ TString file; + -+ FcPattern *pat, *match; -+ FcCharSet *set = nullptr; ++ TString fontname = fileID < fgExtendedFontStart ? ++ ((TObjString*)fgFontFileArray[fileID])->String() + ".ttf" : ++ ((TObjString*)fgFontFileArray[fileID])->String(); ++ ++ FcPattern *pat = nullptr, *match; + FcResult result; + -+ pat = FcPatternCreate (); -+ -+ switch (fileID) { -+ case 0: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freeserif"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ITALIC); -+ break; -+ case 1: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freeserif"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_BOLD); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 2: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freeserif"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_BOLD); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ITALIC); -+ break; -+ case 3: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freesans"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 4: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freesans"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ITALIC); -+ break; -+ case 5: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freesans"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_BOLD); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 6: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freesans"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_BOLD); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ITALIC); -+ break; -+ case 7: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freemono"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 8: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freemono"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ITALIC); -+ break; -+ case 9: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freemono"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_BOLD); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 10: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freemono"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_BOLD); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ITALIC); -+ break; -+ case 11: -+ case 14: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"standardsymbolsps"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 12: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"freeserif"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 13: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"dingbats"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 15: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"stixgeneral"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 16: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"stixgeneral"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ITALIC); -+ break; -+ case 17: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"stixgeneral"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_BOLD); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 18: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"stixgeneral"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_BOLD); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ITALIC); -+ break; -+ case 19: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"stixsize1"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 20: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"stixsize1"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_BOLD); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 21: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"stixsize2"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 22: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"stixsize2"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_BOLD); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 23: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"stixsize3"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 24: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"stixsize3"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_BOLD); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 25: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"stixsize4"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 26: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"stixsize4"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_BOLD); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 27: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"stixsize5"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ break; -+ case 28: -+ case 29: -+ case 30: -+ FcPatternAddString (pat, FC_FAMILY, (const FcChar8*)"droidsansfallback"); -+ FcPatternAddInteger (pat, FC_WEIGHT, FC_WEIGHT_REGULAR); -+ FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ROMAN); -+ set = FcCharSetCreate (); -+ FcCharSetAddChar (set, 0x0410); // Cyrillic -+ FcCharSetAddChar (set, 0x4e00); // CJK -+ FcPatternAddCharSet (pat, FC_CHARSET, set); ++ if (strcmp(fontname, "timesi.ttf") == 0 || ++ strcmp(fontname, "FreeSerifItalic.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "freeserif:italic"); ++ } ++ else if (strcmp(fontname, "timesbd.ttf") == 0 || ++ strcmp(fontname, "FreeSerifBold.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "freeserif:bold"); ++ } ++ else if (strcmp(fontname, "timesbi.ttf") == 0 || ++ strcmp(fontname, "FreeSerifBoldItalic.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "freeserif:bold:italic"); ++ } ++ else if (strcmp(fontname, "arial.ttf") == 0 || ++ strcmp(fontname, "FreeSans.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "freesans"); ++ } ++ else if (strcmp(fontname, "ariali.ttf") == 0 || ++ strcmp(fontname, "FreeSansOblique.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "freesans:italic"); ++ } ++ else if (strcmp(fontname, "arialbd.ttf") == 0 || ++ strcmp(fontname, "FreeSansBold.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "freesans:bold"); ++ } ++ else if (strcmp(fontname, "arialbi.ttf") == 0 || ++ strcmp(fontname, "FreeSansBoldOblique.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "freesans:bold:italic"); ++ } ++ else if (strcmp(fontname, "cour.ttf") == 0 || ++ strcmp(fontname, "FreeMono.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "freemono"); ++ } ++ else if (strcmp(fontname, "couri.ttf") == 0 || ++ strcmp(fontname, "FreeMonoOblique.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "freemono:italic"); ++ } ++ else if (strcmp(fontname, "courbd.ttf") == 0 || ++ strcmp(fontname, "FreeMonoBold.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "freemono:bold"); ++ } ++ else if (strcmp(fontname, "courbi.ttf") == 0 || ++ strcmp(fontname, "FreeMonoBoldOblique.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "freemono:bold:italic"); ++ } ++ else if (strcmp(fontname, "symbol.ttf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "standardsymbolsps"); ++ } ++ else if (strcmp(fontname, "times.ttf") == 0 || ++ strcmp(fontname, "FreeSerif.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "freeserif"); } - ++ else if (strcmp(fontname, "wingding.ttf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "dingbats"); ++ } ++ else if (strcmp(fontname, "STIXGeneral.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "stixgeneral"); ++ } ++ else if (strcmp(fontname, "STIXGeneralItalic.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "stixgeneral:italic"); ++ } ++ else if (strcmp(fontname, "STIXGeneralBol.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "stixgeneral:bold"); ++ } ++ else if (strcmp(fontname, "STIXGeneralBolIta.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "stixgeneral:bold:italic"); ++ } ++ else if (strcmp(fontname, "STIXSiz1Sym.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "stixsize1"); ++ } ++ else if (strcmp(fontname, "STIXSiz1SymBol.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "stixsize1:bold"); ++ } ++ else if (strcmp(fontname, "STIXSiz2Sym.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "stixsize2"); ++ } ++ else if (strcmp(fontname, "STIXSiz2SymBol.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "stixsize2:bold"); ++ } ++ else if (strcmp(fontname, "STIXSiz3Sym.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "stixsize3"); ++ } ++ else if (strcmp(fontname, "STIXSiz3SymBol.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "stixsize3:bold"); ++ } ++ else if (strcmp(fontname, "STIXSiz4Sym.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "stixsize4"); ++ } ++ else if (strcmp(fontname, "STIXSiz4SymBol.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "stixsize4:bold"); ++ } ++ else if (strcmp(fontname, "STIXSiz5Sym.otf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "stixsize5"); ++ } ++ else if (strcmp(fontname, "DroidSansFallback.ttf") == 0) { ++ pat = FcNameParse ((const FcChar8*) "droidsansfallback:charset=4e00 0410"); ++ } ++ + FcConfigSubstitute (nullptr, pat, FcMatchPattern); + FcDefaultSubstitute (pat); + match = FcFontMatch (nullptr, pat, &result); + char *ttfnt; -+ FcPatternGetString (match, FC_FILE, 0, (FcChar8**)&ttfnt); -+ file = StrDup (ttfnt); -+ FcPatternGetInteger (match, FC_INDEX, 0, &ttindex); ++ FcPatternGetString (match, FC_FILE, 0, (FcChar8**) &ttfnt); ++ file = ttfnt; + FcPatternDestroy (match); + FcPatternDestroy (pat); -+ if (set) FcCharSetDestroy (set); -+ + FTFont* ftfont = 0; switch (mode) - { -@@ -484,10 +643,14 @@ - ftfont = new FTGLTextureFont(file); - break; - default: -+ delete [] file; - Error("TGLFontManager::RegisterFont", "invalid FTGL type"); - return; - break; - } -+ -+ delete [] file; -+ - ftfont->FaceSize(size); - const TGLFont &mf = fFontMap.insert(std::make_pair(TGLFont(size, fileID, mode, ftfont, 0), 1)).first->first; - out.CopyAttributes(mf); -@@ -570,8 +733,6 @@ - { - if (fgStaticInitDone == kFALSE) InitStatics(); - -- assert(fgExtendedFontStart > 0 && "GetExtendedFontStartIndex, invalid index"); -- - return fgExtendedFontStart; - } - -@@ -641,28 +802,6 @@ - fgFontFileArray.Add(new TObjString("wingding")); // 140 - fgFontFileArray.Add(new TObjString("symbol")); // 150 - -- fgExtendedFontStart = fgFontFileArray.GetEntries(); -- //"Extended" fonts for gl-pad. -- //fgPadFontStart + ... -- fgFontFileArray.Add(new TObjString("FreeSerifItalic.otf")); // 10 (160) -- fgFontFileArray.Add(new TObjString("FreeSerifBold.otf")); // 20 (170) -- fgFontFileArray.Add(new TObjString("FreeSerifBoldItalic.otf")); // 30 -- -- fgFontFileArray.Add(new TObjString("FreeSans.otf")); // 40 -- fgFontFileArray.Add(new TObjString("FreeSansOblique.otf")); // 50 -- fgFontFileArray.Add(new TObjString("FreeSansBold.otf")); // 60 -- fgFontFileArray.Add(new TObjString("FreeSansBoldOblique.otf")); // 70 -- -- fgFontFileArray.Add(new TObjString("FreeMono.otf")); // 80 -- fgFontFileArray.Add(new TObjString("FreeMonoOblique.otf")); // 90 -- fgFontFileArray.Add(new TObjString("FreeMonoBold.otf")); // 100 -- fgFontFileArray.Add(new TObjString("FreeMonoBoldOblique.otf")); // 110 -- -- fgFontFileArray.Add(new TObjString("symbol.ttf")); // 120 -- fgFontFileArray.Add(new TObjString("FreeSerif.otf")); // 130 -- fgFontFileArray.Add(new TObjString("wingding.ttf")); // 140 -- fgFontFileArray.Add(new TObjString("symbol.ttf")); // 150 -- - fgFontFileArray.Add(new TObjString("STIXGeneral.otf")); // 200 - fgFontFileArray.Add(new TObjString("STIXGeneralItalic.otf")); // 210 - fgFontFileArray.Add(new TObjString("STIXGeneralBol.otf")); // 220 -diff -ur root-6.28.00.orig/graf3d/gl/src/TGLText.cxx root-6.28.00/graf3d/gl/src/TGLText.cxx ---- root-6.28.00.orig/graf3d/gl/src/TGLText.cxx 2023-02-03 15:34:27.000000000 +0100 -+++ root-6.28.00/graf3d/gl/src/TGLText.cxx 2023-02-04 12:47:19.868760250 +0100 +diff --git a/graf3d/gl/src/TGLText.cxx b/graf3d/gl/src/TGLText.cxx +index 2ed3ee0917a..03feb0ee0a4 100644 +--- a/graf3d/gl/src/TGLText.cxx ++++ b/graf3d/gl/src/TGLText.cxx @@ -32,6 +32,8 @@ # include "FTGLBitmapFont.h" #endif @@ -1344,7 +920,7 @@ diff -ur root-6.28.00.orig/graf3d/gl/src/TGLText.cxx root-6.28.00/graf3d/gl/src/ #define FTGL_BITMAP 0 #define FTGL_PIXMAP 1 #define FTGL_OUTLINE 2 -@@ -176,27 +178,92 @@ +@@ -175,27 +177,35 @@ void TGLText::SetGLTextFont(Font_t fontnumber) { int fontid = fontnumber / 10; @@ -1369,96 +945,39 @@ diff -ur root-6.28.00.orig/graf3d/gl/src/TGLText.cxx root-6.28.00/graf3d/gl/src/ - const char *ttpath = gEnv->GetValue("Root.TTFontPath", - TROOT::GetTTFFontDir()); - char *ttfont = gSystem->Which(ttpath, fontname, kReadPermission); ++ static const char *fonttable[] = { ++ "freesans:bold", ++ "freeserif:italic", ++ "freeserif:bold", ++ "freeserif:bold:italic", ++ "freesans", ++ "freesans:italic", ++ "freesans:bold", ++ "freesans:bold:italic", ++ "freemono", ++ "freemono:italic", ++ "freemono:bold", ++ "freemono:bold:italic", ++ "standardsymbolsps", ++ "freeserif", ++ "dingbats", ++ }; ++ ++ char *ttfont; ++ + FcPattern *pat, *match; + FcResult result; -+ char *ttfont; -+ int ttindex; + -+ pat = FcPatternCreate (); -+ -+ 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*)"standardsymbolsps"); -+ 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; -+ } ++ pat = FcNameParse ((const FcChar8*) fonttable[fontid]); + + FcConfigSubstitute (nullptr, pat, FcMatchPattern); + FcDefaultSubstitute (pat); + match = FcFontMatch (nullptr, pat, &result); -+ FcPatternGetString (match, FC_FILE, 0, (FcChar8**)&ttfont); -+ FcPatternGetInteger (match, FC_INDEX, 0, &ttindex); ++ FcPatternGetString (match, FC_FILE, 0, (FcChar8**) &ttfont); if (fGLTextFont) delete fGLTextFont; -@@ -204,7 +271,9 @@ +@@ -203,7 +213,9 @@ void TGLText::SetGLTextFont(Font_t fontnumber) fGLTextFont = new FTGLPolygonFont(ttfont); @@ -1469,28 +988,6 @@ diff -ur root-6.28.00.orig/graf3d/gl/src/TGLText.cxx root-6.28.00/graf3d/gl/src/ Error("SetGLTextFont","Cannot set FTGL::FaceSize"); - delete [] ttfont; } -diff -ur root-6.28.00.orig/gui/gui/src/TGApplication.cxx root-6.28.00/gui/gui/src/TGApplication.cxx ---- root-6.28.00.orig/gui/gui/src/TGApplication.cxx 2023-02-03 15:34:27.000000000 +0100 -+++ root-6.28.00/gui/gui/src/TGApplication.cxx 2023-02-04 12:47:19.868760250 +0100 -@@ -81,20 +81,12 @@ - gROOT->SetBatch(kFALSE); - - if (strcmp(appClassName, "proofserv")) { -- const char *ttpath = gEnv->GetValue("Root.TTFontPath", -- TROOT::GetTTFFontDir()); -- char *ttfont = gSystem->Which(ttpath, "arialbd.ttf", kReadPermission); -- // Added by cholm for use of DFSG - fonts - based on fix by Kevin -- if (!ttfont) -- ttfont = gSystem->Which(ttpath, "FreeSansBold.ttf", kReadPermission); -- if (ttfont && gEnv->GetValue("Root.UseTTFonts", 1)) { -+ if (gEnv->GetValue("Root.UseTTFonts", 1)) { - TPluginHandler *h; - if ((h = gROOT->GetPluginManager()->FindHandler("TVirtualX", "x11ttf"))) - if (h->LoadPlugin() == -1) - Info("TGApplication", "no TTF support"); - } -- -- delete [] ttfont; - } - - // Create the canvas colors early so they are allocated before +-- +2.52.0 + diff --git a/root-gcc-16-libstdc-links-to-libatomic.patch b/root-gcc-16-libstdc-links-to-libatomic.patch new file mode 100644 index 0000000..776fff3 --- /dev/null +++ b/root-gcc-16-libstdc-links-to-libatomic.patch @@ -0,0 +1,32 @@ +From 7b1632f5602a1bb6e6278d66c25640349c852ab1 Mon Sep 17 00:00:00 2001 +From: Mattias Ellert +Date: Fri, 9 Jan 2026 00:32:27 +0100 +Subject: [PATCH] Starting with gcc 16, libstdc++ links to libatomic. Add to + whitelist. + +$ ldd /lib64/libstdc++.so.6 + linux-vdso.so.1 (0x00007f3cb4c13000) + libm.so.6 => /lib64/libm.so.6 (0x00007f3cb4afc000) + libatomic.so.1 => /lib64/libatomic.so.1 (0x00007f3cb4af1000) + libc.so.6 => /lib64/libc.so.6 (0x00007f3cb460d000) + libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f3cb4ac5000) + /lib64/ld-linux-x86-64.so.2 (0x00007f3cb4c15000) +--- + bindings/pyroot/pythonizations/test/import_load_libs.py | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/bindings/pyroot/pythonizations/test/import_load_libs.py b/bindings/pyroot/pythonizations/test/import_load_libs.py +index 63feeca89ba..18906ff921e 100644 +--- a/bindings/pyroot/pythonizations/test/import_load_libs.py ++++ b/bindings/pyroot/pythonizations/test/import_load_libs.py +@@ -77,6 +77,7 @@ class ImportLoadLibs(unittest.TestCase): + "ld.*", + "libffi", + "libgcc_s", ++ "libatomic", + # AddressSanitizer runtime and ROOT configuration + "libclang_rt.asan-.*", + "libROOTSanitizerConfig", +-- +2.52.0 + diff --git a/root-gtest-back.patch b/root-gtest-back.patch deleted file mode 100644 index 1624451..0000000 --- a/root-gtest-back.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 1942f5569b1d101f2c89341765ea37850e3de669 Mon Sep 17 00:00:00 2001 -From: Mattias Ellert -Date: Fri, 17 Nov 2023 11:43:46 +0100 -Subject: [PATCH 2/3] Add old gtest compat for SetUpTestSuite/TearDownTestSuite - ---- - tree/tree/test/friendinfo.cxx | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/tree/tree/test/friendinfo.cxx b/tree/tree/test/friendinfo.cxx -index 141a495052..6e94056946 100644 ---- a/tree/tree/test/friendinfo.cxx -+++ b/tree/tree/test/friendinfo.cxx -@@ -14,6 +14,8 @@ - // Backward compatibility for gtest version < 1.10.0 - #ifndef INSTANTIATE_TEST_SUITE_P - #define INSTANTIATE_TEST_SUITE_P INSTANTIATE_TEST_CASE_P -+#define SetUpTestSuite SetUpTestCase -+#define TearDownTestSuite TearDownTestCase - #endif - - namespace { --- -2.42.0 - diff --git a/root-ignore-warnings-about-RooNaNPacker-not-being-impleme.patch b/root-ignore-warnings-about-RooNaNPacker-not-being-impleme.patch deleted file mode 100644 index 20e2ee5..0000000 --- a/root-ignore-warnings-about-RooNaNPacker-not-being-impleme.patch +++ /dev/null @@ -1,33 +0,0 @@ -From ba0dc65e558fd916dbe18f8dbe8208a3be932c25 Mon Sep 17 00:00:00 2001 -From: Mattias Ellert -Date: Mon, 28 Mar 2022 09:20:18 +0200 -Subject: [PATCH] Ignore warnings about RooNaNPacker not being implemented for - big endian - -This warning is triggered in many tests, so it makes sense to put it -in the default ignored set. ---- - core/testsupport/src/TestSupport.cxx | 7 +++++++ - 1 file changed, 7 insertions(+) - -diff --git a/core/testsupport/src/TestSupport.cxx b/core/testsupport/src/TestSupport.cxx -index 259ab4e09c..79cd476950 100644 ---- a/core/testsupport/src/TestSupport.cxx -+++ b/core/testsupport/src/TestSupport.cxx -@@ -73,6 +73,13 @@ static struct ForbidDiagnostics { - return; - } - -+ // FIXME: RooNaNPacker warns about not being implemented for big endian -+ if (level == kWarning -+ && strcmp(msg, "Fast recovery from undefined function values only implemented for little-endian machines. If necessary, request an extension of functionality on https://root.cern") == 0) { -+ std::cerr << "Warning in " << location << " " << msg << std::endl; -+ return; -+ } -+ - FAIL() << "Received unexpected diagnostic of severity " - << level - << " at '" << location << "' reading '" << msg << "'.\n" --- -2.42.0 - diff --git a/root-jsmva-static.patch b/root-jsmva-static.patch deleted file mode 100644 index 2550f4d..0000000 --- a/root-jsmva-static.patch +++ /dev/null @@ -1,36 +0,0 @@ -diff -ur root-6.24.02.orig/bindings/jsmva/python/JsMVA/JPyInterface.py root-6.24.02/bindings/jsmva/python/JsMVA/JPyInterface.py ---- root-6.24.02.orig/bindings/jsmva/python/JsMVA/JPyInterface.py 2021-06-28 11:17:14.000000000 +0200 -+++ root-6.24.02/bindings/jsmva/python/JsMVA/JPyInterface.py 2021-08-11 09:06:21.894746090 +0200 -@@ -188,7 +188,7 @@ - ## Class for creating the output scripts and inserting them to cell output - class JsDraw: - ## Base repository -- __jsMVARepo = "https://root.cern.ch/js/jsmva/latest" -+ __jsMVARepo = "/static/JsMVA" - - ## String containing the link to JavaScript files - __jsMVASourceDir = __jsMVARepo + "/js" -diff -ur root-6.24.02.orig/bindings/pyroot_legacy/JsMVA/JPyInterface.py root-6.24.02/bindings/pyroot_legacy/JsMVA/JPyInterface.py ---- root-6.24.02.orig/bindings/pyroot_legacy/JsMVA/JPyInterface.py 2021-06-28 11:17:14.000000000 +0200 -+++ root-6.24.02/bindings/pyroot_legacy/JsMVA/JPyInterface.py 2021-08-11 09:06:21.925746168 +0200 -@@ -188,7 +188,7 @@ - ## Class for creating the output scripts and inserting them to cell output - class JsDraw: - ## Base repository -- __jsMVARepo = "https://root.cern.ch/js/jsmva/latest" -+ __jsMVARepo = "/static/JsMVA" - - ## String containing the link to JavaScript files - __jsMVASourceDir = __jsMVARepo + "/js" -diff -ur root-6.24.02.orig/etc/notebook/JsMVA/js/JsMVA.js root-6.24.02/etc/notebook/JsMVA/js/JsMVA.js ---- root-6.24.02.orig/etc/notebook/JsMVA/js/JsMVA.js 2021-06-28 11:17:14.000000000 +0200 -+++ root-6.24.02/etc/notebook/JsMVA/js/JsMVA.js 2021-08-11 09:10:45.638410266 +0200 -@@ -16,7 +16,7 @@ - - (function(factory){ - -- var JSROOT_source_dir = "https://root.cern/js/5.9.1/scripts/"; -+ var JSROOT_source_dir = "/static/scripts/"; - - var url = ""; - if (requirejs.s.contexts.hasOwnProperty("_")) { diff --git a/root-new-zlib.patch b/root-new-zlib.patch deleted file mode 100644 index f12eef7..0000000 --- a/root-new-zlib.patch +++ /dev/null @@ -1,89 +0,0 @@ -From 260fc202a1387cfc3f3ef756f584923ab5b0a198 Mon Sep 17 00:00:00 2001 -From: Mattias Ellert -Date: Thu, 21 Dec 2023 17:58:49 +0100 -Subject: [PATCH] Adapt tests to work with zlib-ng - -Fedora 40 has replaced zlib with a zlib compatible version of zlib-ng ---- - test/stress.cxx | 2 +- - test/stressGraphics.ref | 28 ++++++++++++++-------------- - 2 files changed, 15 insertions(+), 15 deletions(-) - -diff --git a/test/stress.cxx b/test/stress.cxx -index de8061a9fc..77f48d43b8 100644 ---- a/test/stress.cxx -+++ b/test/stress.cxx -@@ -406,7 +406,7 @@ void stress3() - #else - constexpr Long64_t lastgood = 52090; - #endif -- constexpr Long64_t tolerance = 150; -+ constexpr Long64_t tolerance = 300; - #ifdef R__HAS_DEFAULT_LZ4 - constexpr Long64_t difflastgoodlz4 = 5500; - if (last < lastgood - tolerance || last > lastgood + difflastgoodlz4 + tolerance || comp < 1.5 || comp > 2.1) -diff --git a/test/stressGraphics.ref b/test/stressGraphics.ref -index 16d06e33fa..a21068927d 100644 ---- a/test/stressGraphics.ref -+++ b/test/stressGraphics.ref -@@ -2,12 +2,12 @@ Test# PS1Ref# PS1Err# PDFRef# PDFErr# JPGRef# JPGErr# PNGRef# PN - 1 529 50 12767 50 23848 3700 3937 100 569 60 - 2 4627 600 14506 100 13368 7900 9208 3000 4690 600 - 3 452 50 12694 50 11232 4200 3796 10700 492 50 -- 4 23617 1500 19386 100 143320 123000 45665 11000 24908 1500 -+ 4 23617 1500 19386 200 143320 123000 45665 11000 24908 1500 - 5 1025 150 12802 200 33468 9900 30846 5000 1072 200 - 6 430 50 12669 50 9558 100 5325 700 471 50 - 7 4980 50 13893 50 16143 1300 12230 500 5011 70 - 8 5442 80 13473 50 18430 700 12398 300 5469 80 -- 9 9253 100 14377 50 19851 2400 12199 900 9449 100 -+ 9 9253 100 14377 100 19851 2400 12199 900 9449 100 - 10 8863 70 13645 100 24343 1100 23278 1700 8894 70 - 11 12971 100 14444 50 34063 2000 32033 1200 12864 150 - 12 7674 100 13533 50 83557 3000 38505 4000 7720 150 -@@ -15,30 +15,30 @@ Test# PS1Ref# PS1Err# PDFRef# PDFErr# JPGRef# JPGErr# PNGRef# PN - 14 14190539 4000000 12926 100 23076 9500 25987 3000 14190704 4000000 - 15 15690 5000 17179 200 23076 9500 15202 900 10437 5000 - 16 28072 400 23287 200 44462 11000 30062 5000 38007 400 -- 17 20444 400 21520 100 27511 11000 16867 600 20721 400 -- 18 15894 100 19305 100 27187 10300 15925 350 15925 100 -- 19 22521 300 42926 150 43868 17000 19232 11000 22729 300 -+ 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 200 43868 17000 19232 11000 22729 300 - 20 3664 600 14437 100 19824 6300 10396 900 4220 600 - 21 17608 600 13900 150 49440 6300 37586 9000 5938 600 - 22 4866 600 14162 100 30889 10050 21311 1800 4845 600 -- 23 4131 40 15272 50 34038 2500 12258 1400 4162 40 -+ 23 4131 40 15272 100 34038 2500 12258 1400 4162 40 - 24 7813 300 23739 100 11085 6000 6973 3100 8081 300 - 25 28422 150 29391 300 14104 14800 7386 2800 14493 150 - 26 4545 150 14541 100 27602 14800 13094 2800 4467 150 - 27 6141 200 15967 100 39594 21600 19331 7000 6596 500 - 28 9110 500 16584 200 21346 21600 10645 7000 8869 500 - 29 7419 500 15112 200 18872 21600 7928 7000 7296 500 -- 30 17016 5500 18198 100 32434 17400 22157 5000 20823 5500 -- 31 30615 8200 27176 150 50520 18200 35724 5400 36690 8200 -- 32 3304592 100 712308 500 62688 19000 123056 7000 0 0 -+ 30 17016 5500 18198 250 32434 17400 22157 5000 20823 5500 -+ 31 30615 8200 27176 200 50520 18200 35724 5400 36690 8200 -+ 32 3304592 100 712308 3000 62688 19000 123056 7000 0 0 - 33 89233 500 47975 300 65532 27800 37314 12000 90600 500 - 34 36514 300 16815 200 47408 12700 33739 3700 36399 300 -- 35 207729 750 87126 100 76094 38000 54717 11000 210497 800 -- 36 401670 6500 156361 500 62719 34100 45592 14000 410114 6500 -- 37 566142 5000 225206 750 65828 31800 53934 6500 573396 5000 -- 38 3738751 35000 1292739 8000 60580 9900 133547 3500 3783013 35000 -+ 35 207729 750 87126 750 76094 38000 54717 11000 210497 800 -+ 36 401670 6500 156361 2000 62719 34100 45592 14000 410114 6500 -+ 37 566142 5000 225206 2000 65828 31800 53934 6500 573396 5000 -+ 38 3738751 35000 1292739 12000 60580 9900 133547 3500 3783013 35000 - 39 1466028 9000 853193 50000 38425 13500 91242 18100 1463263 7500 -- 40 38312 200 56877 250 36524 11800 119641 8000 38121 200 -+ 40 38312 200 56877 750 36524 11800 119641 8000 38121 200 - 41 15025 3000 29289 500 42525 11300 33336 3900 14787 4000 - 42 254604 5000 383258 7000 55666 30400 46534 6500 259594 7000 - 43 4846 150 14075 150 33239 600 25303 300 4877 150 --- -2.43.0 - diff --git a/root-no-export-python-modules.patch b/root-no-export-python-modules.patch index aa7604d..d3fa4bc 100644 --- a/root-no-export-python-modules.patch +++ b/root-no-export-python-modules.patch @@ -1,30 +1,53 @@ -diff -ur root-6.24.02.orig/bindings/jupyroot/CMakeLists.txt root-6.24.02/bindings/jupyroot/CMakeLists.txt ---- root-6.24.02.orig/bindings/jupyroot/CMakeLists.txt 2021-06-28 11:17:14.000000000 +0200 -+++ root-6.24.02/bindings/jupyroot/CMakeLists.txt 2021-08-11 10:53:03.272202496 +0200 -@@ -70,8 +70,7 @@ - endforeach() +From b4e57c8ccd59d69fe61fa5f6470b3a99ba52aeeb Mon Sep 17 00:00:00 2001 +From: Mattias Ellert +Date: Thu, 4 Dec 2025 23:13:28 +0100 +Subject: [PATCH] Dont export Python modules + +--- + bindings/pyroot/cppyy/CPyCppyy/CMakeLists.txt | 3 +-- + bindings/pyroot/pythonizations/CMakeLists.txt | 8 +------- + 2 files changed, 2 insertions(+), 9 deletions(-) + +diff --git a/bindings/pyroot/cppyy/CPyCppyy/CMakeLists.txt b/bindings/pyroot/cppyy/CPyCppyy/CMakeLists.txt +index bb48c032974..c34069855b2 100644 +--- a/bindings/pyroot/cppyy/CPyCppyy/CMakeLists.txt ++++ b/bindings/pyroot/cppyy/CPyCppyy/CMakeLists.txt +@@ -119,8 +119,7 @@ install(TARGETS CPyCppyy EXPORT ${CMAKE_PROJECT_NAME}Exports + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries) - # Install library -- install(TARGETS ${libname} EXPORT ${CMAKE_PROJECT_NAME}Exports -- RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT libraries -+ install(TARGETS ${libname} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT libraries - LIBRARY DESTINATION ${CMAKE_INSTALL_PYTHONDIR} COMPONENT libraries - ARCHIVE DESTINATION ${CMAKE_INSTALL_PYTHONDIR} COMPONENT libraries) +-install(TARGETS cppyy EXPORT ${CMAKE_PROJECT_NAME}Exports +- RUNTIME DESTINATION ${CMAKE_INSTALL_PYTHONDIR}/cppyy COMPONENT libraries # Windows ++install(TARGETS cppyy RUNTIME DESTINATION ${CMAKE_INSTALL_PYTHONDIR}/cppyy COMPONENT libraries # Windows + LIBRARY DESTINATION ${CMAKE_INSTALL_PYTHONDIR}/cppyy COMPONENT libraries + ARCHIVE DESTINATION ${CMAKE_INSTALL_PYTHONDIR}/cppyy COMPONENT libraries) -diff -ur root-6.24.02.orig/bindings/pyroot/pythonizations/CMakeLists.txt root-6.24.02/bindings/pyroot/pythonizations/CMakeLists.txt ---- root-6.24.02.orig/bindings/pyroot/pythonizations/CMakeLists.txt 2021-06-28 11:17:14.000000000 +0200 -+++ root-6.24.02/bindings/pyroot/pythonizations/CMakeLists.txt 2021-08-11 10:53:03.272202496 +0200 -@@ -137,11 +137,10 @@ - # Create meta-target PyROOT2 and PyROOT3 (INTERFACE library) - # Export of targets are not supported for custom targets(add_custom_targets()) - add_library(PyROOT${python_major_version_string} INTERFACE) -- target_link_libraries(PyROOT${python_major_version_string} INTERFACE cppyy_backend${python_under_version_string} cppyy${python_under_version_string} ROOTPythonizations${python_under_version_string}) -+ target_link_libraries(PyROOT${python_major_version_string} INTERFACE cppyy_backend${python_under_version_string} cppyy${python_under_version_string}) +diff --git a/bindings/pyroot/pythonizations/CMakeLists.txt b/bindings/pyroot/pythonizations/CMakeLists.txt +index 1230f18ca47..2df4b733320 100644 +--- a/bindings/pyroot/pythonizations/CMakeLists.txt ++++ b/bindings/pyroot/pythonizations/CMakeLists.txt +@@ -202,11 +202,6 @@ foreach(py_source ${py_sources}) + COMMENT "Compiling PyROOT source ${py_source} for Python ${Python3_VERSION}") + endforeach() - # Install library -- install(TARGETS ${libname} EXPORT ${CMAKE_PROJECT_NAME}Exports -- RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT libraries -+ install(TARGETS ${libname} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT libraries - LIBRARY DESTINATION ${CMAKE_INSTALL_PYTHONDIR} COMPONENT libraries - ARCHIVE DESTINATION ${CMAKE_INSTALL_PYTHONDIR} COMPONENT libraries) +-# Create meta-target PyROOT3 (INTERFACE library) +-# Export of targets are not supported for custom targets(add_custom_targets()) +-add_library(PyROOT INTERFACE) +-target_link_libraries(PyROOT INTERFACE cppyy_backend cppyy ROOTPythonizations) +- + # Define library output directories for build and install trees + set(pymoduledir_build "${localruntimedir}/ROOT") + set(pymoduledir_install "${CMAKE_INSTALL_PYTHONDIR}/ROOT") +@@ -231,8 +226,7 @@ if(NOT MSVC) + endif() + # Install library +-install(TARGETS ${libname} EXPORT ${CMAKE_PROJECT_NAME}Exports +- RUNTIME DESTINATION ${pymoduledir_install} COMPONENT libraries ++install(TARGETS ${libname} RUNTIME DESTINATION ${pymoduledir_install} COMPONENT libraries + LIBRARY DESTINATION ${pymoduledir_install} COMPONENT libraries + ARCHIVE DESTINATION ${pymoduledir_install} COMPONENT libraries) + +-- +2.52.0 + diff --git a/root-np32.patch b/root-np32.patch deleted file mode 100644 index 832f6c7..0000000 --- a/root-np32.patch +++ /dev/null @@ -1,111 +0,0 @@ -From 42b9c691fdd2d0001c61f78cc8adfbb9c994f6b4 Mon Sep 17 00:00:00 2001 -From: Mattias Ellert -Date: Fri, 17 Nov 2023 11:46:14 +0100 -Subject: [PATCH 3/3] Fix pythonizations test errors on ix86 Linux - -====================================================================== -ERROR: test_sliced_array (rdataframe_makenumpy.DataFrameFromNumpy.test_sliced_array) -Test correct reading of a sliced numpy array (#13690) ----------------------------------------------------------------------- -Traceback (most recent call last): - File "/builddir/build/BUILD/root-6.30.00/bindings/pyroot/pythonizations/test/rdataframe_makenumpy.py", line 153, in test_sliced_array - x_col = df.Take['Long64_t']("x") - ^^^^^^^^^^^^^^^^^^^^^^^^ -cppyy.gbl.std.runtime_error: Could not instantiate Take: - ROOT::RDF::RResultPtr > ROOT::RDF::RInterface::Take(basic_string_view > column = "") => - runtime_error: Column x has type int while the id specified is associated to type Long64_t ----------------------------------------------------------------------- - -====================================================================== -ERROR: test_dtypes (rtensor.AsRTensor.test_dtypes) -Test adoption of numpy arrays with different data types ----------------------------------------------------------------------- -Traceback (most recent call last): - File "/builddir/build/BUILD/root-6.30.00/bindings/pyroot/pythonizations/test/rtensor.py", line 45, in test_dtypes - root_obj = ROOT.TMVA.Experimental.RTensor(self.cpptypes[i])(np_obj) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "/builddir/build/BUILD/root-6.30.00/redhat-linux-build/lib/ROOT/_pythonization/_tmva/_rtensor.py", line 131, in RTensorInit - return self._original_init_(data,shape,layout) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -TypeError: none of the 6 overloaded methods succeeded. Full details: - RTensor >::RTensor >(TMVA::Experimental::RTensor >&&) => - TypeError: takes at most 1 arguments (3 given) - RTensor >::RTensor >(const TMVA::Experimental::RTensor >&) => - TypeError: takes at most 1 arguments (3 given) - RTensor >::RTensor >(shared_ptr > container, vector shape, TMVA::Experimental::MemoryLayout layout = MemoryLayout::RowMajor) => - TypeError: could not convert argument 1 - RTensor >::RTensor >(vector shape, TMVA::Experimental::MemoryLayout layout = MemoryLayout::RowMajor) => - TypeError: takes at most 2 arguments (3 given) - RTensor >::RTensor >(long* data, vector shape, vector strides, TMVA::Experimental::MemoryLayout layout = MemoryLayout::RowMajor) => - TypeError: could not convert argument 1 (could not convert argument to buffer or nullptr) - RTensor >::RTensor >(long* data, vector shape, TMVA::Experimental::MemoryLayout layout = MemoryLayout::RowMajor) => - TypeError: could not convert argument 1 (could not convert argument to buffer or nullptr) ----------------------------------------------------------------------- ---- - .../pyroot/pythonizations/test/rdataframe_makenumpy.py | 8 ++++---- - bindings/pyroot/pythonizations/test/rtensor.py | 8 +------- - 2 files changed, 5 insertions(+), 11 deletions(-) - -diff --git a/bindings/pyroot/pythonizations/test/rdataframe_makenumpy.py b/bindings/pyroot/pythonizations/test/rdataframe_makenumpy.py -index cd2ebc9b5b..cc46f5bea1 100644 ---- a/bindings/pyroot/pythonizations/test/rdataframe_makenumpy.py -+++ b/bindings/pyroot/pythonizations/test/rdataframe_makenumpy.py -@@ -142,19 +142,19 @@ class DataFrameFromNumpy(unittest.TestCase): - gc.collect() - ref4 = sys.getrefcount(x) - self.assertEqual(ref1, ref4) -- -+ - def test_sliced_array(self): - """ - Test correct reading of a sliced numpy array (#13690) - """ -- table = np.array([[1,2], [3,4]]) -+ table = np.array([[1,2], [3,4]], dtype="int64") - columns = {'x': table[:,0], 'y': table[:,1]} - df = ROOT.RDF.FromNumpy(columns) - x_col = df.Take['Long64_t']("x") - y_col = df.Take['Long64_t']("y") -- self.assertEqual(list(x_col.GetValue()), [1,3]) -+ self.assertEqual(list(x_col.GetValue()), [1,3]) - self.assertEqual(list(y_col.GetValue()), [2,4]) -- -+ - - if __name__ == '__main__': - unittest.main() -diff --git a/bindings/pyroot/pythonizations/test/rtensor.py b/bindings/pyroot/pythonizations/test/rtensor.py -index 99b458cfa9..ca119f0b41 100644 ---- a/bindings/pyroot/pythonizations/test/rtensor.py -+++ b/bindings/pyroot/pythonizations/test/rtensor.py -@@ -2,7 +2,6 @@ import unittest - import ROOT - RTensor = ROOT.TMVA.Experimental.RTensor - import numpy as np --import platform - - - def check_shape(root_obj, np_obj): -@@ -21,18 +20,13 @@ class AsRTensor(unittest.TestCase): - dtypes = [ - "int32", "int64", "uint32", "uint64", "float32", "float64" - ] -- cpptypes = ["int", "long", "unsigned int", "unsigned long", "float", "double"] -+ cpptypes = ["int32_t", "int64_t", "uint32_t", "uint64_t", "float", "double"] - - # Tests - def test_dtypes(self): - """ - Test adoption of numpy arrays with different data types - """ -- #using long long on Linux does not work although it is same size as long -- if (platform.system() == "Windows") : -- self.cpptypes[1] = "long long" -- self.cpptypes[3] = "unsigned long long" -- - i = 0 - for dtype in self.dtypes: - np_obj = np.array([[1, 2], [3, 4], [5, 6]], dtype=dtype) --- -2.43.0 - diff --git a/root-old-gtest.patch b/root-old-gtest.patch deleted file mode 100644 index 87b6fe4..0000000 --- a/root-old-gtest.patch +++ /dev/null @@ -1,83 +0,0 @@ -From 8b7369a527aa52204e1ce529c8cb206cfee4c61b Mon Sep 17 00:00:00 2001 -From: Mattias Ellert -Date: Fri, 17 Nov 2023 16:18:12 +0100 -Subject: [PATCH] Disable tests that don't compile with old gtest (EPEL 8) - ---- - core/metacling/test/TClingLoadUnloadFileTests.cxx | 2 ++ - roofit/histfactory/test/testHistFactory.cxx | 2 ++ - roofit/roofitcore/test/testRooProdPdf.cxx | 2 ++ - roofit/roofitcore/test/testTestStatistics.cxx | 2 ++ - 4 files changed, 8 insertions(+) - -diff --git a/core/metacling/test/TClingLoadUnloadFileTests.cxx b/core/metacling/test/TClingLoadUnloadFileTests.cxx -index 7f97f3f441..d1b7a65fbc 100644 ---- a/core/metacling/test/TClingLoadUnloadFileTests.cxx -+++ b/core/metacling/test/TClingLoadUnloadFileTests.cxx -@@ -73,6 +73,7 @@ void remove_n_library_artifacts(const std::string &basename, unsigned int n) - } - } - -+/* - TEST(TClingLoadUnloadFile, ConcurrentLoadUnloadSameLib) - { - GTEST_SKIP() << "fails sporadically, see " -@@ -125,3 +126,4 @@ TEST(TClingLoadUnloadFile, ConcurrentLoadUnloadOneLibPerThread) - - remove_n_library_artifacts(basename, n_libraries); - } -+*/ -diff --git a/roofit/histfactory/test/testHistFactory.cxx b/roofit/histfactory/test/testHistFactory.cxx -index 7553ba4e4a..fefdca8e97 100644 ---- a/roofit/histfactory/test/testHistFactory.cxx -+++ b/roofit/histfactory/test/testHistFactory.cxx -@@ -752,6 +752,7 @@ std::string getNameFromInfo(testing::TestParamInfo const & - return getName(paramInfo.param, false); - } - -+/* - INSTANTIATE_TEST_SUITE_P( - HistFactory, HFFixture, - testing::Combine(testing::Values(MakeModelMode::OverallSyst, MakeModelMode::HistoSyst, MakeModelMode::StatSyst, -@@ -784,3 +785,4 @@ INSTANTIATE_TEST_SUITE_P(HistFactoryCodeGen, HFFixtureFit, - testing::Values(RooFit::EvalBackend::Codegen())), - getNameFromInfo); - #endif -+*/ -diff --git a/roofit/roofitcore/test/testRooProdPdf.cxx b/roofit/roofitcore/test/testRooProdPdf.cxx -index 34fb559cd1..09734f5c5d 100644 ---- a/roofit/roofitcore/test/testRooProdPdf.cxx -+++ b/roofit/roofitcore/test/testRooProdPdf.cxx -@@ -64,6 +64,7 @@ TEST_P(TestProdPdf, CachingOpt) - << "b=" << b.getVal() << " +- " << b.getError() << " doesn't match truth value with O" << _optimize << "."; - } - -+/* - INSTANTIATE_TEST_SUITE_P(RooProdPdf, TestProdPdf, - testing::Combine(testing::Values(0, 1, 2), - testing::Values(ROOFIT_EVAL_BACKENDS)), -@@ -72,6 +73,7 @@ INSTANTIATE_TEST_SUITE_P(RooProdPdf, TestProdPdf, - ss << "opt" << std::get<0>(paramInfo.param) << std::get<1>(paramInfo.param).name(); - return ss.str(); - }); -+*/ - - TEST(RooProdPdf, TestGetPartIntList) - { -diff --git a/roofit/roofitcore/test/testTestStatistics.cxx b/roofit/roofitcore/test/testTestStatistics.cxx -index 3099d82060..5846353043 100644 ---- a/roofit/roofitcore/test/testTestStatistics.cxx -+++ b/roofit/roofitcore/test/testTestStatistics.cxx -@@ -585,6 +585,7 @@ INSTANTIATE_TEST_SUITE_P(RooNLLVar, TestStatisticTest, testing::Values(ROOFIT_EV - return ss.str(); - }); - -+/* - INSTANTIATE_TEST_SUITE_P(RooNLLVar, OffsetBinTest, - testing::Combine(testing::Values(ROOFIT_EVAL_BACKENDS), // EvalBackend - testing::Values(false, true), // unbinned or binned -@@ -622,3 +623,4 @@ INSTANTIATE_TEST_SUITE_P(RooNLLVarBinnedL, OffsetBinTest, - ss << (std::get<5>(paramInfo.param) ? "BinnedL" : ""); - return ss.str(); - }); -+*/ diff --git a/root-pcre2.patch b/root-pcre2.patch deleted file mode 100644 index 359acc2..0000000 --- a/root-pcre2.patch +++ /dev/null @@ -1,456 +0,0 @@ -From f89fc640f9ca1b2cccf0dc496b0b7ea434b53fad Mon Sep 17 00:00:00 2001 -From: Mattias Ellert -Date: Mon, 2 Oct 2023 09:25:13 +0200 -Subject: [PATCH] Support PCRE2 - ---- - .../pythonizations/test/import_load_libs.py | 1 + - cmake/modules/FindPCRE2.cmake | 106 ++++++++++++++++++ - cmake/modules/SearchInstalledSoftware.cmake | 17 +-- - core/base/CMakeLists.txt | 9 +- - core/base/src/TPRegexp.cxx | 99 +++++++++++++++- - tutorials/legacy/regexp/regexp.C | 6 +- - 6 files changed, 223 insertions(+), 15 deletions(-) - create mode 100644 cmake/modules/FindPCRE2.cmake - -diff --git a/bindings/pyroot/pythonizations/test/import_load_libs.py b/bindings/pyroot/pythonizations/test/import_load_libs.py -index 087db7da5c..179c76f6fd 100644 ---- a/bindings/pyroot/pythonizations/test/import_load_libs.py -+++ b/bindings/pyroot/pythonizations/test/import_load_libs.py -@@ -23,6 +23,7 @@ class ImportLoadLibs(unittest.TestCase): - 'libc', - 'libdl', - 'libpcre', -+ 'libpcre2-8', - # libCling and dependencies - 'libCling.*', - 'librt', -diff --git a/cmake/modules/FindPCRE2.cmake b/cmake/modules/FindPCRE2.cmake -new file mode 100644 -index 0000000000..2417453e8b ---- /dev/null -+++ b/cmake/modules/FindPCRE2.cmake -@@ -0,0 +1,106 @@ -+# Copyright (C) 1995-2019, Rene Brun and Fons Rademakers. -+# All rights reserved. -+# -+# For the licensing terms see $ROOTSYS/LICENSE. -+# For the list of contributors see $ROOTSYS/README/CREDITS. -+ -+#.rst: -+# FindPCRE2 -+# -------- -+# -+# Find PCRE2 library -+# -+# Imported Targets -+# ^^^^^^^^^^^^^^^^ -+# -+# This module defines :prop_tgt:`IMPORTED` target: -+# -+# ``PCRE2::PCRE2`` -+# The pcre2 library, if found. -+# -+# Result Variables -+# ^^^^^^^^^^^^^^^^ -+# This module will set the following variables in your project: -+# -+# ``PCRE2_FOUND`` -+# True if PCRE2 has been found. -+# ``PCRE2_INCLUDE_DIRS`` -+# Where to find pcre2.h -+# ``PCRE2_LIBRARIES`` -+# The libraries to link against to use PCRE2. -+# ``PCRE2_VERSION`` -+# The version of the PCRE2 found (e.g. 10.42) -+# -+# Obsolete variables -+# ^^^^^^^^^^^^^^^^^^ -+# -+# The following variables may also be set, for backwards compatibility: -+# -+# ``PCRE2_PCRE2_LIBRARY`` -+# where to find the PCRE2_PCRE2 library. -+# ``PCRE2_INCLUDE_DIR`` -+# where to find the pcre2.h header (same as PCRE2_INCLUDE_DIRS) -+# -+ -+foreach(var PCRE2_FOUND PCRE2_INCLUDE_DIR PCRE2_PCRE2_LIBRARY PCRE2_LIBRARIES) -+ unset(${var} CACHE) -+endforeach() -+ -+find_path(PCRE2_INCLUDE_DIR NAMES pcre2.h PATH_SUFFIXES include) -+mark_as_advanced(PCRE2_INCLUDE_DIR) -+ -+if (PCRE2_INCLUDE_DIR AND EXISTS "${PCRE2_INCLUDE_DIR}/pcre2.h") -+ file(STRINGS "${PCRE2_INCLUDE_DIR}/pcre2.h" PCRE2_H REGEX "^#define PCRE2_(MAJOR|MINOR).*$") -+ string(REGEX REPLACE "^.*PCRE2_MAJOR[ ]+([0-9]+).*$" "\\1" PCRE2_VERSION_MAJOR "${PCRE2_H}") -+ string(REGEX REPLACE "^.*PCRE2_MINOR[ ]+([0-9]+).*$" "\\1" PCRE2_VERSION_MINOR "${PCRE2_H}") -+ set(PCRE2_VERSION "${PCRE2_VERSION_MAJOR}.${PCRE2_VERSION_MINOR}") -+endif() -+ -+if(NOT PCRE2_PCRE2_LIBRARY) -+ find_library(PCRE2_PCRE2_LIBRARY_RELEASE NAMES pcre2-8) -+ find_library(PCRE2_PCRE2_LIBRARY_DEBUG NAMES pcre2-8${CMAKE_DEBUG_POSTFIX} pcre2-8d) -+ include(SelectLibraryConfigurations) -+ select_library_configurations(PCRE2_PCRE2) -+endif() -+ -+include(FindPackageHandleStandardArgs) -+find_package_handle_standard_args(PCRE2 -+ REQUIRED_VARS -+ PCRE2_INCLUDE_DIR -+ PCRE2_PCRE2_LIBRARY -+ VERSION_VAR -+ PCRE2_VERSION -+) -+ -+if(PCRE2_FOUND) -+ set(PCRE2_INCLUDE_DIRS "${PCRE2_INCLUDE_DIR}") -+ -+ if (NOT PCRE2_LIBRARIES) -+ set(PCRE2_LIBRARIES "${PCRE2_PCRE2_LIBRARY}") -+ endif() -+ -+ if(NOT TARGET PCRE2::PCRE2) -+ add_library(PCRE2::PCRE2 UNKNOWN IMPORTED) -+ set_target_properties(PCRE2::PCRE2 PROPERTIES -+ INTERFACE_INCLUDE_DIRECTORIES "${PCRE2_INCLUDE_DIRS}") -+ -+ if(PCRE2_PCRE2_LIBRARY_DEBUG) -+ set_property(TARGET PCRE2::PCRE2 APPEND PROPERTY -+ IMPORTED_CONFIGURATIONS DEBUG) -+ set_target_properties(PCRE2::PCRE2 PROPERTIES -+ IMPORTED_LOCATION_DEBUG "${PCRE2_PCRE2_LIBRARY_DEBUG}") -+ endif() -+ -+ if(PCRE2_PCRE2_LIBRARY_RELEASE) -+ set_property(TARGET PCRE2::PCRE2 APPEND PROPERTY -+ IMPORTED_CONFIGURATIONS RELEASE) -+ set_target_properties(PCRE2::PCRE2 PROPERTIES -+ IMPORTED_LOCATION_RELEASE "${PCRE2_PCRE2_LIBRARY_RELEASE}") -+ endif() -+ -+ if(NOT PCRE2_PCRE2_LIBRARY_DEBUG AND NOT PCRE2_PCRE2_LIBRARY_RELEASE) -+ set_property(TARGET PCRE2::PCRE2 APPEND PROPERTY -+ IMPORTED_LOCATION "${PCRE2_PCRE2_LIBRARY}") -+ endif() -+ endif() -+endif() -diff --git a/cmake/modules/SearchInstalledSoftware.cmake b/cmake/modules/SearchInstalledSoftware.cmake -index 464155fd50..252aa56737 100644 ---- a/cmake/modules/SearchInstalledSoftware.cmake -+++ b/cmake/modules/SearchInstalledSoftware.cmake -@@ -204,13 +204,16 @@ if(NOT builtin_pcre) - foreach(suffix FOUND INCLUDE_DIR PCRE_LIBRARY) - unset(PCRE_${suffix} CACHE) - endforeach() -- if(fail-on-missing) -- find_package(PCRE REQUIRED) -- else() -- find_package(PCRE) -- if(NOT PCRE_FOUND) -- message(STATUS "PCRE not found. Switching on builtin_pcre option") -- set(builtin_pcre ON CACHE BOOL "Enabled because PCRE not found (${builtin_pcre_description})" FORCE) -+ find_package(PCRE2) -+ if(NOT PCRE2_FOUND) -+ if(fail-on-missing) -+ find_package(PCRE REQUIRED) -+ else() -+ find_package(PCRE) -+ if(NOT PCRE_FOUND) -+ message(STATUS "PCRE not found. Switching on builtin_pcre option") -+ set(builtin_pcre ON CACHE BOOL "Enabled because PCRE not found (${builtin_pcre_description})" FORCE) -+ endif() - endif() - endif() - endif() -diff --git a/core/base/CMakeLists.txt b/core/base/CMakeLists.txt -index df701fedea..5798c93775 100644 ---- a/core/base/CMakeLists.txt -+++ b/core/base/CMakeLists.txt -@@ -214,7 +214,14 @@ target_include_directories(Core PUBLIC - $ - ) - --target_link_libraries(Core PRIVATE PCRE::PCRE) -+if(PCRE2_FOUND) -+ target_link_libraries(Core PRIVATE PCRE2::PCRE2) -+ set_source_files_properties(src/TPRegexp.cxx -+ TARGET_DIRECTORY Core -+ PROPERTIES COMPILE_DEFINITIONS USE_PCRE2) -+else() -+ target_link_libraries(Core PRIVATE PCRE::PCRE) -+endif() - - ROOT_INSTALL_HEADERS(${BASE_HEADER_DIRS}) - -diff --git a/core/base/src/TPRegexp.cxx b/core/base/src/TPRegexp.cxx -index 949b8cc8e9..d70f3e5b8b 100644 ---- a/core/base/src/TPRegexp.cxx -+++ b/core/base/src/TPRegexp.cxx -@@ -25,19 +25,36 @@ found at : http://perldoc.perl.org/perlre.html - #include "TObjString.h" - #include "TError.h" - -+#ifdef USE_PCRE2 -+#ifdef R__WIN32 -+#define PCRE2_STATIC -+#endif -+#define PCRE2_CODE_UNIT_WIDTH 8 -+#include -+#define PCRE_CASELESS PCRE2_CASELESS -+#define PCRE_MULTILINE PCRE2_MULTILINE -+#define PCRE_DOTALL PCRE2_DOTALL -+#define PCRE_EXTENDED PCRE2_EXTENDED -+#define PCRE_ERROR_NOMATCH PCRE2_ERROR_NOMATCH -+#else - #ifdef R__WIN32 - #define PCRE_STATIC - #endif - #include -+#endif - - #include - #include - - struct PCREPriv_t { -+#ifdef USE_PCRE2 -+ pcre2_code *fPCRE; -+ PCREPriv_t() { fPCRE = nullptr; } -+#else - pcre *fPCRE; - pcre_extra *fPCREExtra; -- - PCREPriv_t() { fPCRE = nullptr; fPCREExtra = nullptr; } -+#endif - }; - - -@@ -79,10 +96,15 @@ TPRegexp::TPRegexp(const TPRegexp &p) - - TPRegexp::~TPRegexp() - { -+#ifdef USE_PCRE2 -+ if (fPriv->fPCRE) -+ pcre2_code_free(fPriv->fPCRE); -+#else - if (fPriv->fPCRE) - pcre_free(fPriv->fPCRE); - if (fPriv->fPCREExtra) - pcre_free(fPriv->fPCREExtra); -+#endif - delete fPriv; - } - -@@ -93,12 +115,18 @@ TPRegexp &TPRegexp::operator=(const TPRegexp &p) - { - if (this != &p) { - fPattern = p.fPattern; -+#ifdef USE_PCRE2 -+ if (fPriv->fPCRE) -+ pcre2_code_free(fPriv->fPCRE); -+ fPriv->fPCRE = nullptr; -+#else - if (fPriv->fPCRE) - pcre_free(fPriv->fPCRE); - fPriv->fPCRE = nullptr; - if (fPriv->fPCREExtra) - pcre_free(fPriv->fPCREExtra); - fPriv->fPCREExtra = nullptr; -+#endif - fPCREOpts = p.fPCREOpts; - } - return *this; -@@ -197,31 +225,50 @@ TString TPRegexp::GetModifiers() const - - void TPRegexp::Compile() - { -+#ifdef USE_PCRE2 -+ if (fPriv->fPCRE) -+ pcre2_code_free(fPriv->fPCRE); -+#else - if (fPriv->fPCRE) - pcre_free(fPriv->fPCRE); -+#endif - - if (fPCREOpts & kPCRE_DEBUG_MSGS) - Info("Compile", "PREGEX compiling %s", fPattern.Data()); - -+#ifdef USE_PCRE2 -+ int errcode; -+ PCRE2_SIZE patIndex; -+ fPriv->fPCRE = pcre2_compile((PCRE2_SPTR)fPattern.Data(), fPattern.Length(), -+ fPCREOpts & kPCRE_INTMASK, -+ &errcode, &patIndex, nullptr); -+#else - const char *errstr; - Int_t patIndex; - fPriv->fPCRE = pcre_compile(fPattern.Data(), fPCREOpts & kPCRE_INTMASK, - &errstr, &patIndex, nullptr); -+#endif - - if (!fPriv->fPCRE) { -+#ifdef USE_PCRE2 -+ PCRE2_UCHAR errstr[256]; -+ pcre2_get_error_message(errcode, errstr, 256); -+#endif - if (fgThrowAtCompileError) { - throw std::runtime_error - (TString::Format("TPRegexp::Compile() compilation of TPRegexp(%s) failed at: %d because %s", -- fPattern.Data(), patIndex, errstr).Data()); -+ fPattern.Data(), (int)patIndex, errstr).Data()); - } else { - Error("Compile", "compilation of TPRegexp(%s) failed at: %d because %s", -- fPattern.Data(), patIndex, errstr); -+ fPattern.Data(), (int)patIndex, errstr); - return; - } - } - -+#ifndef USE_PCRE2 - if (fPriv->fPCREExtra || (fPCREOpts & kPCRE_OPTIMIZE)) - Optimize(); -+#endif - } - - //////////////////////////////////////////////////////////////////////////////// -@@ -229,6 +276,7 @@ void TPRegexp::Compile() - - void TPRegexp::Optimize() - { -+#ifndef USE_PCRE2 - if (fPriv->fPCREExtra) - pcre_free(fPriv->fPCREExtra); - -@@ -243,6 +291,7 @@ void TPRegexp::Optimize() - Error("Optimize", "Optimization of TPRegexp(%s) failed: %s", - fPattern.Data(), errstr); - } -+#endif - } - - //////////////////////////////////////////////////////////////////////////////// -@@ -308,21 +357,43 @@ Int_t TPRegexp::MatchInternal(const TString &s, Int_t start, - Int_t nMaxMatch, TArrayI *pos) const - { - Int_t *offVec = new Int_t[3*nMaxMatch]; -+ -+#ifdef USE_PCRE2 -+ pcre2_match_data *match_data; -+ match_data = pcre2_match_data_create_from_pattern(fPriv->fPCRE, nullptr); -+ Int_t nrMatch = pcre2_match(fPriv->fPCRE, (PCRE2_SPTR8)s.Data(), -+ s.Length(), start, 0, -+ match_data, nullptr); -+#else - // pcre_exec allows less options - see pcre_internal.h PUBLIC_EXEC_OPTIONS. - Int_t nrMatch = pcre_exec(fPriv->fPCRE, fPriv->fPCREExtra, s.Data(), - s.Length(), start, 0, - offVec, 3*nMaxMatch); -+#endif - - if (nrMatch == PCRE_ERROR_NOMATCH) - nrMatch = 0; - else if (nrMatch <= 0) { - Error("Match","pcre_exec error = %d", nrMatch); -+#ifdef USE_PCRE2 -+ pcre2_match_data_free(match_data); -+#endif - delete [] offVec; - return 0; - } - -- if (pos) -+ if (pos) { -+#ifdef USE_PCRE2 -+ PCRE2_SIZE *oVec = pcre2_get_ovector_pointer(match_data); -+ for (int i = 0; i < 2 * nrMatch; ++i) -+ offVec[i] = oVec[i]; -+#endif - pos->Set(2*nrMatch, offVec); -+ } -+ -+#ifdef USE_PCRE2 -+ pcre2_match_data_free(match_data); -+#endif - delete [] offVec; - - return nrMatch; -@@ -404,13 +475,24 @@ Int_t TPRegexp::SubstituteInternal(TString &s, const TString &replacePattern, - Int_t offset = start; - Int_t last = 0; - -+#ifdef USE_PCRE2 -+ pcre2_match_data *match_data; -+ match_data = pcre2_match_data_create_from_pattern(fPriv->fPCRE, nullptr); -+#endif -+ - while (kTRUE) { - - // find next matching subs - // pcre_exec allows less options - see pcre_internal.h PUBLIC_EXEC_OPTIONS. -+#ifdef USE_PCRE2 -+ Int_t nrMatch = pcre2_match(fPriv->fPCRE, (PCRE2_SPTR)s.Data(), -+ s.Length(), offset, 0, -+ match_data, nullptr); -+#else - Int_t nrMatch = pcre_exec(fPriv->fPCRE, fPriv->fPCREExtra, s.Data(), - s.Length(), offset, 0, - offVec, 3*nMaxMatch); -+#endif - - if (nrMatch == PCRE_ERROR_NOMATCH) { - break; -@@ -419,6 +501,12 @@ Int_t TPRegexp::SubstituteInternal(TString &s, const TString &replacePattern, - break; - } - -+#ifdef USE_PCRE2 -+ PCRE2_SIZE *oVec = pcre2_get_ovector_pointer(match_data); -+ for (int i = 0; i < 2 * nrMatch; ++i) -+ offVec[i] = oVec[i]; -+#endif -+ - // append anything previously unmatched, but not substituted - if (last <= offVec[0]) { - fin += s(last,offVec[0]-last); -@@ -446,6 +534,9 @@ Int_t TPRegexp::SubstituteInternal(TString &s, const TString &replacePattern, - } - } - -+#ifdef USE_PCRE2 -+ pcre2_match_data_free(match_data); -+#endif - delete [] offVec; - - fin += s(last,s.Length()-last); -diff --git a/tutorials/legacy/regexp/regexp.C b/tutorials/legacy/regexp/regexp.C -index 995b823bce..f38ed6799e 100644 ---- a/tutorials/legacy/regexp/regexp.C -+++ b/tutorials/legacy/regexp/regexp.C -@@ -94,11 +94,11 @@ void regexp() - // criteria: - // 1) It should be of the form string1@string2 . The "^" and "$" ensure that we compare the complete - // email string -- // 2) ([\\w-\\.]+) : -+ // 2) ([\\w\\-\\.]+) : - // string1 is only allowed to be composed out of the alphanumeric characters, "-" and "." . - // The "+" ensures that string1 can not be empty . - // 3) string2 is matched against three different parts : -- // a. ((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([\\w-]+\\.)+)) : -+ // a. ((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([\\w\\-]+\\.)+)) : - // This regular expression ensures that EITHER the string starts with "[" followed by three groups - // of numbers, separated by "." , where each group has 1 to 3 numbers, OR alphanumeric strings, - // possibly containing "-" characters, separated by "." . -@@ -108,7 +108,7 @@ void regexp() - // At most one "]" character . - - TString s5("fons.rademakers@cern.ch"); -- TPRegexp r5("^([\\w-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([\\w-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$"); -+ TPRegexp r5("^([\\w\\-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([\\w\\-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$"); - cout << "Check if the email address \"" << s5 << "\" is valid: " << (r5.MatchB(s5) ? "TRUE" : "FALSE") << endl; - - // Substitute Example with pattern modifier : --- -2.41.0 - diff --git a/root-testfiles.sh b/root-testfiles.sh index db4d721..c2451e9 100755 --- a/root-testfiles.sh +++ b/root-testfiles.sh @@ -72,14 +72,7 @@ wget -N ${SITE}/tesla.root wget -N ${SITE}/wa91_ref_3.root wget -N ${SITE}/wa91.root -wget -N ${SITE}/AtlasGraphs.root wget -N ${SITE}/europe.root -wget -N ${SITE}/Higgs_data.root -wget -N ${SITE}/linearIO.root -wget -N ${SITE}/stressHistogram.5.18.00.root -wget -N ${SITE}/tmva_class_example.root -wget -N ${SITE}/tmva_multiclass_example.root -wget -N ${SITE}/tmva_reg_example.root wget -N ${SITE}/usa.root for f in *.root ; do ln -s $f $f.ROOT.cachefile ; done diff --git a/root-use-consistent-wording-in-tmva-test-comments.patch b/root-use-consistent-wording-in-tmva-test-comments.patch deleted file mode 100644 index 1d3e52a..0000000 --- a/root-use-consistent-wording-in-tmva-test-comments.patch +++ /dev/null @@ -1,86 +0,0 @@ -From e6928c405fe1647a0ee6ea32543b18ebc3828227 Mon Sep 17 00:00:00 2001 -From: Mattias Ellert -Date: Thu, 23 Feb 2023 22:10:46 +0100 -Subject: [PATCH] Use consistent wording of the comments in the different TMVA - classification tests to avoid confusion. - ---- - tutorials/tmva/TMVA_CNN_Classification.C | 2 +- - tutorials/tmva/TMVA_CNN_Classification.py | 4 ++-- - tutorials/tmva/TMVA_RNN_Classification.C | 6 ++++-- - tutorials/tmva/TMVA_RNN_Classification.py | 5 +++-- - 4 files changed, 10 insertions(+), 7 deletions(-) - -diff --git a/tutorials/tmva/TMVA_CNN_Classification.C b/tutorials/tmva/TMVA_CNN_Classification.C -index cc6829a24d..db5af784d4 100644 ---- a/tutorials/tmva/TMVA_CNN_Classification.C -+++ b/tutorials/tmva/TMVA_CNN_Classification.C -@@ -134,7 +134,7 @@ void TMVA_CNN_Classification(int nevts = 1000, std::vector opt = {1, 1, 1, - - bool writeOutputFile = true; - -- int num_threads = 4; // use by default 4 threads if value is not set before -+ int num_threads = 4; // use max 4 threads - // switch off MT in OpenBLAS to avoid conflict with tbb - gSystem->Setenv("OMP_NUM_THREADS", "1"); - -diff --git a/tutorials/tmva/TMVA_CNN_Classification.py b/tutorials/tmva/TMVA_CNN_Classification.py -index 85fde20763..5d3c6e7220 100644 ---- a/tutorials/tmva/TMVA_CNN_Classification.py -+++ b/tutorials/tmva/TMVA_CNN_Classification.py -@@ -25,7 +25,7 @@ - - import ROOT - --#switch off MT in OpenMP (BLAS) -+# switch off MT in OpenBLAS to avoid conflict with tbb - ROOT.gSystem.Setenv("OMP_NUM_THREADS", "1") - - TMVA = ROOT.TMVA -@@ -145,7 +145,7 @@ if not useTMVACNN: - - writeOutputFile = True - --num_threads = 4 # use default threads -+num_threads = 4 # use max 4 threads - max_epochs = 10 # maximum number of epochs used for training - - -diff --git a/tutorials/tmva/TMVA_RNN_Classification.C b/tutorials/tmva/TMVA_RNN_Classification.C -index 8701ba6c19..d4bb7a4e4a 100644 ---- a/tutorials/tmva/TMVA_RNN_Classification.C -+++ b/tutorials/tmva/TMVA_RNN_Classification.C -@@ -191,8 +191,10 @@ void TMVA_RNN_Classification(int nevts = 2000, int use_type = 1) - useKeras = false; - #endif - -- int num_threads = 4; // use by default all threads -- gSystem->Setenv("OMP_NUM_THREADS", "1"); // switch off MT in OpenBLAS -+ int num_threads = 4; // use max 4 threads -+ // switch off MT in OpenBLAS to avoid conflict with tbb -+ gSystem->Setenv("OMP_NUM_THREADS", "1"); -+ - // do enable MT running - if (num_threads >= 0) { - ROOT::EnableImplicitMT(num_threads); -diff --git a/tutorials/tmva/TMVA_RNN_Classification.py b/tutorials/tmva/TMVA_RNN_Classification.py -index 625a120b3d..65aa83c070 100644 ---- a/tutorials/tmva/TMVA_RNN_Classification.py -+++ b/tutorials/tmva/TMVA_RNN_Classification.py -@@ -26,10 +26,11 @@ num_threads = 4 # use max 4 threads - # do enable MT running - if ROOT.gSystem.GetFromPipe("root-config --has-imt") == "yes": - ROOT.EnableImplicitMT(num_threads) -- ROOT.gSystem.Setenv("OMP_NUM_THREADS", "1") # switch OFF MT in OpenBLAS -+ # switch off MT in OpenBLAS to avoid conflict with tbb -+ ROOT.gSystem.Setenv("OMP_NUM_THREADS", "1") - print("Running with nthreads = {}".format(ROOT.GetThreadPoolSize())) - else: -- print("Running in serail mode since ROOT does not support MT") -+ print("Running in serial mode since ROOT does not support MT") - - - TMVA = ROOT.TMVA --- -2.39.2 - diff --git a/root-vecops-Adaptive-size-of-long-RVec-instances-in-RVec-.patch b/root-vecops-Adaptive-size-of-long-RVec-instances-in-RVec-.patch new file mode 100644 index 0000000..369ce3e --- /dev/null +++ b/root-vecops-Adaptive-size-of-long-RVec-instances-in-RVec-.patch @@ -0,0 +1,135 @@ +From 44c501ac9fdb9049783d9738a9603eec572f52f0 Mon Sep 17 00:00:00 2001 +From: Jonas Rembser +Date: Wed, 26 Nov 2025 18:11:25 +0100 +Subject: [PATCH] [vecops] Adaptive size of long RVec instances in RVec test + +For the tests to make sense, some vectors need to be longer than the +maximum small vector size. This maximum size is compiler and +architecture dependent. For `RVec` on ARM64 with gcc 14, the +small vector capacity turns out to be 60, which is larger than the +current test vector size of 18. + +Therefore, the test is refactored to adapt the large vector size +automatically, according to the maximum small vector size. +--- + math/vecops/test/vecops_rvec.cxx | 81 +++++++++++++++++++++++++------- + 1 file changed, 63 insertions(+), 18 deletions(-) + +diff --git a/math/vecops/test/vecops_rvec.cxx b/math/vecops/test/vecops_rvec.cxx +index 432c673a553..8cbe36ee6d8 100644 +--- a/math/vecops/test/vecops_rvec.cxx ++++ b/math/vecops/test/vecops_rvec.cxx +@@ -1672,15 +1672,35 @@ TEST_P(VecOpsSwap, BothSmallVectors) + + TEST_P(VecOpsSwap, BothRegularVectors) + { +- RVec fixed_vreg1{1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3}; +- RVec fixed_vreg2{4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6}; +- RVec fixed_vreg3{7, 8, 9, 7, 8, 9, 7, 8, 9, 7, 8, 9, 7, 8, 9, 7, 8, 9, 7}; ++ constexpr std::size_t smallVecSize = ROOT::Internal::VecOps::RVecInlineStorageSize::value; ++ ++ // The number of elemens in the large RVecs will be the smallest multiple of ++ // three that larger than smallVecSize. ++ constexpr int nCycle = 3; ++ constexpr std::size_t nElems = ((smallVecSize / nCycle) + 1) * nCycle; ++ ++ RVec fixed_vreg1(nElems); ++ RVec fixed_vreg2(nElems); ++ RVec fixed_vreg3(nElems + 1); + RVec fixed_vmocksmall{0, 7}; + +- RVec vreg1{1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3}; +- RVec vreg2{4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6}; +- RVec vreg3{7, 8, 9, 7, 8, 9, 7, 8, 9, 7, 8, 9, 7, 8, 9, 7, 8, 9, 7}; +- RVec vmocksmall{0, 7, 8, 9, 7, 8, 9, 7, 8, 9, 7, 8, 7, 8, 9, 7, 8, 9}; ++ RVec vreg1(nElems); ++ RVec vreg2(nElems); ++ RVec vreg3(nElems + 1); ++ RVec vmocksmall(nElems + 1); ++ ++ for (std::size_t i = 0; i < nElems; ++i) { ++ vreg1[i] = (i % nCycle) + 1; ++ vreg2[i] = vreg1[i] + nCycle; ++ vreg3[i] = vreg2[i] + nCycle; ++ fixed_vreg1[i] = vreg1[i]; ++ fixed_vreg2[i] = vreg2[i]; ++ fixed_vreg3[i] = vreg3[i]; ++ vmocksmall[i + 1] = vreg3[i]; ++ } ++ fixed_vreg3[nElems] = fixed_vreg3[0]; ++ vreg3[nElems] = vreg3[0]; ++ + vmocksmall.erase(vmocksmall.begin() + 2, vmocksmall.end()); + // vmocksmall is a regular vector of size 2 + +@@ -1798,11 +1818,22 @@ TEST_P(VecOpsSwap, BothAdoptingVectors) + // in cases where ROOT::VecOps::swap produces 1 regular and 1 adopting vector + TEST_P(VecOpsSwap, SmallRegularVectors) + { ++ constexpr std::size_t smallVecSize = ROOT::Internal::VecOps::RVecInlineStorageSize::value; ++ ++ // The number of elemens in the large RVecs will be the smallest multiple of ++ // three that larger than smallVecSize. ++ constexpr int nCycle = 3; ++ constexpr std::size_t nElems1 = ((smallVecSize / nCycle) + 1) * nCycle; ++ constexpr std::size_t nElems2 = nElems1 + nCycle; // some vectors should be larger than others ++ + RVec fixed_vsmall{1, 2, 3}; + RVec fixed_vreg1{4, 5, 6}; + RVec fixed_vreg2{7, 8}; + RVec fixed_vreg3{9, 10, 11, 12, 13, 14}; +- RVec fixed_vreg4{15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30}; ++ RVec fixed_vreg4(nElems1); ++ for (std::size_t i = 0; i < nElems1; ++i) { ++ fixed_vreg4[i] = i + 15; ++ } + + // need multiple hard copies since after swap of a small and a regular, + // there is no fixed policy whether 2 regular vectors are produced or 1 small and 1 regular +@@ -1815,19 +1846,33 @@ TEST_P(VecOpsSwap, SmallRegularVectors) + RVec vsmall7{1, 2, 3}; + RVec vsmall8{1, 2, 3}; + +- RVec vreg1{4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6}; +- vreg1.erase(vreg1.begin() + 3, vreg1.end()); // regular vector of size 3 +- RVec vreg10{4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6}; ++ RVec vreg1; ++ RVec vreg10; ++ RVec vreg2{7, 8}; ++ RVec vreg20{7, 8}; ++ RVec vreg3{9, 10, 11, 12, 13, 14}; ++ RVec vreg30{9, 10, 11, 12, 13, 14}; ++ RVec vreg4(nElems1); ++ ++ for (std::size_t i = 0; i < nElems2; ++i) { ++ double val = (i % nCycle) + 4; ++ vreg1.push_back(val); ++ vreg10.push_back(vreg1.back()); ++ vreg2.push_back(val); ++ vreg20.push_back(vreg2.back()); ++ vreg3.push_back(val); ++ vreg30.push_back(vreg3.back()); ++ } ++ for (std::size_t i = 0; i < nElems1; ++i) { ++ vreg4[i] = i + 15; ++ } ++ ++ vreg1.erase(vreg1.begin() + 3, vreg1.end()); // regular vector of size 3 + vreg10.erase(vreg10.begin() + 3, vreg10.end()); // regular vector of size 3 +- RVec vreg2{7, 8, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6}; +- vreg2.erase(vreg2.begin() + 2, vreg2.end()); // regular vector of size 2 +- RVec vreg20{7, 8, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6}; ++ vreg2.erase(vreg2.begin() + 2, vreg2.end()); // regular vector of size 2 + vreg20.erase(vreg20.begin() + 2, vreg20.end()); // regular vector of size 2 +- RVec vreg3{9, 10, 11, 12, 13, 14, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6}; +- vreg3.erase(vreg3.begin() + 6, vreg3.end()); // regular vector of size 6 +- RVec vreg30{9, 10, 11, 12, 13, 14, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6}; ++ vreg3.erase(vreg3.begin() + 6, vreg3.end()); // regular vector of size 6 + vreg30.erase(vreg30.begin() + 6, vreg30.end()); // regular vector of size 6 +- RVec vreg4{15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30}; + // vreg4 is a regular vector that cannot "fit" to small vector + + // verify that initially vectors are not small +-- +2.52.0 + diff --git a/root.spec b/root.spec index 9632e82..4cd9565 100644 --- a/root.spec +++ b/root.spec @@ -1,53 +1,45 @@ -# Needed for EPEL 8 -%undefine __cmake_in_source_build - # Disable package note flags, since root saves the compiler/linker flags # used during the build %undefine _package_note_flags -%global python3_version_uscore %(tr . _ <<< "%{python3_version}") - %global root7 1 - -%if %{?rhel}%{!?rhel:0} == 8 -%ifarch %{power64} -# These modules cause "pure virtual method called" errors -# https://github.com/root-project/root/issues/12372 -%global dataframe 0 -%global roofit 0 -%global tmvasofieparser 0 -%else %global dataframe 1 %global roofit 1 %global tmvasofieparser 1 -%endif -%else -%global dataframe 1 -%global roofit 1 -%global tmvasofieparser 1 -%endif - -%if %{?rhel}%{!?rhel:0} == 8 -# DistRDF requires Python 3.8 or later, RHEL 8 has version 3.6 -%global distrdf 0 -%else %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 %endif -%if %{?rhel}%{!?rhel:0} == 8 -# Requires nlohmann json version 3.9 or later, RHEL 8 has version 3.6 -%global bundlejson 1 +%if "%{?dist}" == ".el10_0" +# R not available in EPEL 10.0 +%global rrr 0 %else -%global bundlejson 0 +%global rrr 1 +%endif + +%if %{?fedora}%{!?fedora:0} >= 40 || %{?rhel}%{!?rhel:0} >= 10 +%global roofitmp 1 +%else +%global roofitmp 0 %endif # Do not generate autoprovides for Python modules -%global __provides_exclude_from ^%{python3_sitearch}/lib.*\\.so$ +%global __provides_exclude_from ^%{python3_sitearch}/.*/lib.*\\.so$ Name: root -Version: 6.30.06 +Version: 6.38.00 %global libversion %(cut -d. -f 1-2 <<< %{version}) -Release: 1%{?dist} +Release: 6%{?dist} Summary: Numerical data analysis framework License: LGPL-2.1-or-later @@ -70,6 +62,9 @@ Source6: application-x-root.png Source7: JupyROOT-on-EPEL # Script to generate Source0 Source8: %{name}-get-src.sh +# Clad is a source-transformation automatic differentiation (AD) +# library for C++, implemented as a plugin for the Clang compiler +Source9: https://github.com/vgvassilev/clad/archive/v2.2/clad-2.2.tar.gz # Use system fonts Patch0: %{name}-fontconfig.patch # Reduce memory usage during linking on ARM and x86 by generating @@ -82,39 +77,44 @@ Patch2: %{name}-dont-install-minicern.patch Patch3: %{name}-no-export-python-modules.patch # Run some test on 32 bit that upstream has disabled Patch4: %{name}-32bit-tests.patch -# Use local static script and style files for JsMVA -Patch5: %{name}-jsmva-static.patch -# Fix test failure on ppc64le and aarch64 with gcc 12 -# https://github.com/root-project/root/pull/9601 -Patch6: %{name}-fix-test-failure-on-ppc64le-and-aarch64-with-gcc-12.patch -# Byte swap values read from the protobuf raw data stream on -# big endian architectures -# https://github.com/root-project/root/pull/10308 -Patch7: %{name}-big-endian-byte-swap.patch -# https://github.com/root-project/root/pull/12375 -Patch8: %{name}-use-consistent-wording-in-tmva-test-comments.patch -# https://github.com/root-project/root/pull/10303 -Patch9: %{name}-ignore-warnings-about-RooNaNPacker-not-being-impleme.patch -# Port to pcre2 -# https://github.com/root-project/root/issues/11395 -# https://github.com/root-project/root/pull/13771 -Patch10: %{name}-pcre2.patch -# https://github.com/root-project/root/pull/14111 -Patch11: %{name}-avoid-out-of-memory-during-linking.patch -# https://github.com/root-project/root/pull/14112 -Patch12: %{name}-clad.patch -Patch13: %{name}-gtest-back.patch -Patch14: %{name}-np32.patch -# Adjust tests for zlib-ng -# https://github.com/root-project/root/pull/14295 -Patch15: %{name}-new-zlib.patch -# Only for EPEL 8 - disable tests not working with old gtest -Patch16: %{name}-old-gtest.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 BuildRequires: gcc-c++ BuildRequires: gcc-gfortran BuildRequires: make -BuildRequires: cmake >= 3.16 +BuildRequires: cmake >= 3.20 BuildRequires: libX11-devel BuildRequires: libXpm-devel BuildRequires: libXft-devel @@ -131,27 +131,22 @@ BuildRequires: xz-devel BuildRequires: lz4-devel BuildRequires: xxhash-devel BuildRequires: libzstd-devel -# Require a version of libAfterImage that is properly linked to -# its dependencies -BuildRequires: libAfterImage-devel >= 1.20-21 +BuildRequires: libtiff-devel +BuildRequires: libpng-devel +BuildRequires: giflib-devel +BuildRequires: libjpeg-devel BuildRequires: ncurses-devel BuildRequires: libxml2-devel BuildRequires: fftw-devel BuildRequires: gsl-devel BuildRequires: unuran-devel -BuildRequires: mariadb-connector-c-devel BuildRequires: sqlite-devel -BuildRequires: unixODBC-devel BuildRequires: libGL-devel BuildRequires: libGLU-devel -BuildRequires: libpq-devel -BuildRequires: python%{python3_pkgversion}-devel +BuildRequires: libxcrypt-devel +BuildRequires: python%{python3_pkgversion}-devel >= 3.7 BuildRequires: python%{python3_pkgversion}-setuptools BuildRequires: python%{python3_pkgversion}-numpy -%ifarch %{qt5_qtwebengine_arches} -BuildRequires: qt5-qtbase-devel -BuildRequires: qt5-qtwebengine-devel -%endif %ifarch %{qt6_qtwebengine_arches} BuildRequires: qt6-qtbase-devel BuildRequires: qt6-qtwebengine-devel @@ -162,31 +157,23 @@ BuildRequires: desktop-file-utils BuildRequires: dcap-devel BuildRequires: xrootd-client-devel >= 1:5.0.0 BuildRequires: cfitsio-devel -BuildRequires: davix-devel >= 0.6.4 +# Davix version >= 0.6.4, but not between 0.6.8 and 0.7.0 +BuildRequires: davix-devel >= 0.7.1 +%if %{rrr} BuildRequires: R-Rcpp-devel BuildRequires: R-RInside-devel +%endif BuildRequires: readline-devel -BuildRequires: tbb-devel >= 2018 +BuildRequires: tbb-devel >= 2020 BuildRequires: libuuid-devel BuildRequires: graphviz-devel BuildRequires: expat-devel BuildRequires: pythia8-devel >= 8.1.80 -%if %{?fedora}%{!?fedora:0} || %{?rhel}%{!?rhel:0} >= 9 BuildRequires: flexiblas-devel -# Required for FlexiBLAS support in FindBLAS.cmake -# (in cmake 3.19.0, backported to cmake 3.18.3-1 in Fedora) -BuildRequires: cmake-data >= 3.18.3-1 -%else -BuildRequires: openblas-devel -%endif %if ! %{bundlejson} BuildRequires: json-devel >= 3.9 %endif -%if %{?fedora}%{!?fedora:0} -# Disable uring in EPEL 8 and 9 (liburing is available, -# but uring not supported by the kernel) BuildRequires: liburing-devel -%endif %if %{tmvasofieparser} BuildRequires: protobuf-devel >= 3.0 %endif @@ -194,18 +181,16 @@ BuildRequires: protobuf-devel >= 3.0 BuildRequires: libarrow-devel %endif %if %{roofit} -%if %{?fedora}%{!?fedora:0} >= 40 +%if %{roofitmp} # Required for roofit-multiprocess # Requires new zeromq with zmq_ppoll BuildRequires: zeromq-devel >= 4.3.5 BuildRequires: cppzmq-devel %endif %endif -%if %{?fedora}%{!?fedora:0} || %{?rhel}%{!?rhel:0} == 8 +%if %{pandas} BuildRequires: python%{python3_pkgversion}-pandas %endif -BuildRequires: python%{python3_pkgversion}-rcssmin -BuildRequires: uglify-js3 BuildRequires: perl-generators BuildRequires: gtest-devel BuildRequires: gmock-devel @@ -227,6 +212,7 @@ 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 Obsoletes: emacs-%{name} < 5.34.28 @@ -242,9 +228,7 @@ the bulk of the data. Included are histogramming methods in an arbitrary number of dimensions, curve fitting, function evaluation, minimization, graphics and visualization classes to allow the easy setup of an analysis system that can query and process the data -interactively or in batch mode, as well as a general parallel -processing framework, PROOF, that can considerably speed up an -analysis. +interactively or in batch mode. Thanks to the built-in C++ interpreter cling, the command, the scripting and the programming language are all C++. The interpreter @@ -268,14 +252,17 @@ Requires: %{name}-core = %{version}-%{release} %description icons This package contains icons used by the ROOT GUI. -%package fonts +%package font-files Summary: ROOT font collection BuildArch: noarch # STIX version 0.9 only License: OFL-1.1 Requires: %{name}-core = %{version}-%{release} +# Package renamed +Provides: %{name}-fonts = %{version}-%{release} +Obsoletes: %{name}-fonts < 6.36.00-2 -%description fonts +%description font-files This package contains fonts used by ROOT that are not available in Fedora. In particular it contains STIX version 0.9 that is used by TMathText. @@ -290,7 +277,7 @@ 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}-fonts = %{version}-%{release} +Requires: %{name}-font-files = %{version}-%{release} Requires: %{name}-icons = %{version}-%{release} # Dynamic dependencies Requires: %{name}-cling%{?_isa} = %{version}-%{release} @@ -314,6 +301,8 @@ 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 @@ -334,6 +323,7 @@ Requires: font(droidsansfallback) Obsoletes: %{name}-ruby < 6.00.00 Obsoletes: %{name}-vdt < 6.10.00 Obsoletes: %{name}-proof-pq2 < 6.16.00 +Obsoletes: %{name}-proofd < 6.16.00 Obsoletes: %{name}-rootd < 6.16.00 Obsoletes: %{name}-geocad < 6.18.00 Obsoletes: %{name}-graf-qt < 6.18.00 @@ -346,31 +336,22 @@ Obsoletes: %{name}-net-globus < 6.18.00 Obsoletes: %{name}-net-ldap < 6.18.00 Obsoletes: %{name}-net-krb5 < 6.18.00 Obsoletes: %{name}-table < 6.18.00 +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 -%if %{?rhel}%{!?rhel:0} == 8 -# Obsolete the DistRDF package in EPEL 8 -# Minimum Python version requirement introduced -Obsoletes: python%{python3_pkgversion}-distrdf < 6.26.00 -%ifarch %{power64} -# Obsolete for ppc64le in EPEL 8 -# These modules cause "pure virtual method called" errors -Obsoletes: %{name}-tree-dataframe < 6.28.00 -Obsoletes: %{name}-roofit < 6.28.00 -Obsoletes: %{name}-roofit-common < 6.28.00 -Obsoletes: %{name}-roofit-core < 6.28.00 -Obsoletes: %{name}-roofit-more < 6.28.00 -Obsoletes: %{name}-roofit-batchcompute < 6.28.00 -Obsoletes: %{name}-roofit-dataframe-helpers < 6.28.00 -Obsoletes: %{name}-roofit-hs3 < 6.28.00 -Obsoletes: %{name}-roostats < 6.28.00 -Obsoletes: %{name}-hist-factory < 6.28.00 -Obsoletes: %{name}-tmva-sofie-parser < 6.28.00 -%endif -%endif +Obsoletes: %{name}-gui-qt5webdisplay < 6.36.00 +Obsoletes: %{name}-hist-draw < 6.36.00 +Obsoletes: %{name}-html < 6.36.00 +Obsoletes: %{name}-proof < 6.38.00 +Obsoletes: %{name}-proof-bench < 6.38.00 +Obsoletes: %{name}-proof-player < 6.38.00 +Obsoletes: %{name}-proof-sessionviewer < 6.38.00 +Obsoletes: %{name}-sql-mysql < 6.38.00 +Obsoletes: %{name}-sql-odbc < 6.38.00 +Obsoletes: %{name}-sql-pgsql < 6.38.00 %description core This package contains the core libraries used by ROOT: libCore, libNew, @@ -436,6 +417,7 @@ Requires: %{name}-io%{?_isa} = %{version}-%{release} Requires: %{name}-tree%{?_isa} = %{version}-%{release} # Package split (tpython from Python bindings) Obsoletes: python%{python3_pkgversion}-%{name} < 6.22.00 +Obsoletes: python%{python3_pkgversion}-jsmva < 6.32.00 %description -n python%{python3_pkgversion}-%{name} This package contains the Python extension for ROOT. It makes it @@ -443,12 +425,18 @@ 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}%{?_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} +Requires: python%{python3_pkgversion}-%{name} = %{version}-%{release} +Requires: %{name}-core = %{version}-%{release} +# notebook package was merged with JupyROOT package +Provides: %{name}-notebook = %{version}-%{release} +Obsoletes: %{name}-notebook < 6.32.00 +Requires: js-jsroot >= 7.10 +%if %{?fedora}%{!?fedora:0} || ( %{?rhel}%{!?rhel:0} >= 10 && "%{?dist}" != ".el10_0" ) +# jupyter-notebook not available in RHEL/EPEL +# some functionality missing +Requires: jupyter-notebook # python-metakernel not available in RHEL/EPEL # some functionality missing Requires: python%{python3_pkgversion}-ipython @@ -459,15 +447,6 @@ Requires: python-jupyter-filesystem %description -n python%{python3_pkgversion}-jupyroot The Jupyter kernel for the ROOT notebook. -%package -n python%{python3_pkgversion}-jsmva -Summary: TMVA interface used by JupyROOT -BuildArch: noarch -%py_provides python%{python3_pkgversion}-jsmva -Requires: %{name}-tmva = %{version}-%{release} - -%description -n python%{python3_pkgversion}-jsmva -TMVA interface used by JupyROOT. - %if %{distrdf} %package -n python%{python3_pkgversion}-distrdf Summary: Distributed RDataFrame @@ -481,6 +460,7 @@ A layer on top of RDataFrame to enable distributed computations. It is a port of the previously known PyRDF python package. %endif +%if %{rrr} %package r Summary: R interface for ROOT Requires: %{name}-core%{?_isa} = %{version}-%{release} @@ -507,6 +487,7 @@ Requires: %{name}-r%{?_isa} = %{version}-%{release} %description r-tools This package contains a minimizer module for ROOT that uses the ROOT R interface. +%endif %package genetic Summary: Genetic algorithms for ROOT @@ -532,6 +513,7 @@ This package contains a library for defining geometries in ROOT. 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) @@ -540,8 +522,8 @@ Obsoletes: %{name}-geom < 6.28.00 %description geom-builder This package contains a library for building geometries in ROOT. -%package geom-painter -Summary: Geometry painter library for 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} @@ -550,6 +532,17 @@ 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 @@ -580,13 +573,12 @@ This package contains the 2-dimensional graphics library for ROOT. Summary: AfterImage graphics renderer for ROOT Requires: %{name}-core%{?_isa} = %{version}-%{release} Requires: %{name}-graf%{?_isa} = %{version}-%{release} +Requires: %{name}-graf-gpad%{?_isa} = %{version}-%{release} +Requires: %{name}-graf-postscript%{?_isa} = %{version}-%{release} Requires: %{name}-gui%{?_isa} = %{version}-%{release} Requires: %{name}-hist%{?_isa} = %{version}-%{release} Requires: %{name}-io%{?_isa} = %{version}-%{release} Requires: %{name}-mathcore%{?_isa} = %{version}-%{release} -# Require a version of libAfterImage that is properly linked to -# its dependencies -Requires: libAfterImage >= 1.20-21 %description graf-asimage This package contains the AfterImage renderer for ROOT, which allows @@ -689,6 +681,7 @@ This package contains a library for defining event displays in ROOT. Summary: GL renderer for ROOT Requires: %{name}-core%{?_isa} = %{version}-%{release} Requires: %{name}-graf%{?_isa} = %{version}-%{release} +Requires: %{name}-graf-asimage%{?_isa} = %{version}-%{release} Requires: %{name}-graf-gpad%{?_isa} = %{version}-%{release} Requires: %{name}-graf3d%{?_isa} = %{version}-%{release} Requires: %{name}-graf3d-csg%{?_isa} = %{version}-%{release} @@ -735,6 +728,8 @@ Requires: %{name}-graf%{?_isa} = %{version}-%{release} Requires: %{name}-graf-gpad%{?_isa} = %{version}-%{release} Requires: %{name}-io%{?_isa} = %{version}-%{release} Requires: %{name}-mathcore%{?_isa} = %{version}-%{release} +Requires: %{name}-tree-ntuple%{?_isa} = %{version}-%{release} +Requires: %{name}-tree-ntuple-browse%{?_isa} = %{version}-%{release} # Dynamic dependencies Requires: %{name}-graf-x11%{?_isa} = %{version}-%{release} Requires: %{name}-gui-ged%{?_isa} = %{version}-%{release} @@ -816,6 +811,14 @@ Recorded events are: All the recorded events from one session are stored in one TFile and can be replayed again anytime. +%package gui-treemap +Summary: GUI element for tree maps in ROOT +Requires: %{name}-core%{?_isa} = %{version}-%{release} +Requires: %{name}-graf%{?_isa} = %{version}-%{release} + +%description gui-treemap +This package contains a library to show tree maps in the ROOT GUI. + %package hbook Summary: Hbook library for ROOT Requires: %{name}-core%{?_isa} = %{version}-%{release} @@ -868,19 +871,10 @@ Requires: %{name}-hist%{?_isa} = %{version}-%{release} %description spectrum-painter This package contains a painter of spectra for ROOT. -%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. @@ -968,7 +962,7 @@ Summary: Core mathematics library for ROOT Requires: %{name}-core%{?_isa} = %{version}-%{release} # Dynamic dependencies Requires: %{name}-mathmore%{?_isa} = %{version}-%{release} -Requires: %{name}-minuit%{?_isa} = %{version}-%{release} +Requires: %{name}-minuit2%{?_isa} = %{version}-%{release} %description mathcore This package contains the MathCore library for ROOT. @@ -1141,7 +1135,7 @@ Requires: %{name}-montecarlo-eg%{?_isa} = %{version}-%{release} %description montecarlo-pythia8 This package contains the Pythia version 8 plug-in for ROOT. This -package provide the ROOT user with transparent interface to the Pythia +package provides the ROOT user with transparent interface to the Pythia (version 8) event generators for hadronic interactions. If the term "hadronic" does not ring any bells, this package is not for you. @@ -1154,16 +1148,16 @@ Requires: %{name}-io%{?_isa} = %{version}-%{release} This package contains the ROOT networking library. %package net-rpdutils -Summary: Authentication utilities used by xproofd +Summary: Authentication utilities used by rootd Requires: %{name}-core%{?_isa} = %{version}-%{release} +Requires: %{name}-net%{?_isa} = %{version}-%{release} %description net-rpdutils -This package contains authentication utilities used by xproofd. +This package contains authentication utilities used by rootd. %package net-auth Summary: Authentication extension for ROOT Requires: %{name}-core%{?_isa} = %{version}-%{release} -Requires: %{name}-io%{?_isa} = %{version}-%{release} Requires: %{name}-net%{?_isa} = %{version}-%{release} %description net-auth @@ -1181,9 +1175,11 @@ access to http based storage such as webdav and S3. %package net-http Summary: HTTP server extension for ROOT +# The system civetweb is not compiled with websocket support +Provides: bundled(civetweb) Requires: %{name}-core%{?_isa} = %{version}-%{release} Requires: %{name}-io%{?_isa} = %{version}-%{release} -Requires: js-jsroot >= 7.5 +Requires: js-jsroot >= 7.10 # Library split (net-httpsniff from net-http) Obsoletes: %{name}-net-http < 6.14.00 @@ -1217,70 +1213,6 @@ Requires: %{name}-net%{?_isa} = %{version}-%{release} This package contains the NetX extension for ROOT, i.e. a client for the xrootd server. Only the new (NetXNG) version is 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 -Obsoletes: %{name}-xproof < 6.22.08-2 - -%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 %{roofit} %package roofit Summary: ROOT extension for modeling expected distributions - toolkit @@ -1321,11 +1253,17 @@ Requires: %{name}-hist%{?_isa} = %{version}-%{release} Requires: %{name}-io%{?_isa} = %{version}-%{release} Requires: %{name}-mathcore%{?_isa} = %{version}-%{release} Requires: %{name}-matrix%{?_isa} = %{version}-%{release} -Requires: %{name}-minuit%{?_isa} = %{version}-%{release} +Requires: %{name}-minuit2%{?_isa} = %{version}-%{release} Requires: %{name}-roofit-batchcompute%{?_isa} = %{version}-%{release} +%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 @@ -1371,9 +1309,6 @@ This package contains RooFit classes that use the mathmore library. Summary: Optimized computation functions for PDFs License: BSD-2-Clause Requires: %{name}-core%{?_isa} = %{version}-%{release} -Requires: %{name}-io%{?_isa} = %{version}-%{release} -Requires: %{name}-multiproc%{?_isa} = %{version}-%{release} -Requires: %{name}-net%{?_isa} = %{version}-%{release} %description roofit-batchcompute While fitting, a significant amount of time and processing power is @@ -1388,28 +1323,6 @@ 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. -%if %{dataframe} -%package roofit-dataframe-helpers -Summary: RooFit DaraFrame helpers -License: BSD-2-Clause -Requires: %{name}-core%{?_isa} = %{version}-%{release} - -%description roofit-dataframe-helpers -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 DaraFrame helper classes for RooFit -%endif - %package roofit-hs3 Summary: RooFit HS3 License: BSD-2-Clause @@ -1420,7 +1333,6 @@ 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} -Requires: %{name}-roostats%{?_isa} = %{version}-%{release} %description roofit-hs3 When using RooFit, statistical models can be conveniently handled and @@ -1450,7 +1362,19 @@ suitable for adoption in different disciplines as well. This package contains the JSON interface to RooFit. -%if %{?fedora}%{!?fedora:0} >= 40 +%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 @@ -1459,7 +1383,7 @@ Requires: %{name}-hist%{?_isa} = %{version}-%{release} Requires: %{name}-roofit-zmq%{?_isa} = %{version}-%{release} %description roofit-multiprocess -This package contains a library providing classes that implements +This package contains a library providing classes that implement mult-process support for RooFit. %package roofit-zmq @@ -1494,8 +1418,6 @@ RooFit. %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} @@ -1513,6 +1435,7 @@ 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} @@ -1523,6 +1446,7 @@ Requires: %{name}-roofit%{?_isa} = %{version}-%{release} Requires: %{name}-roofit-core%{?_isa} = %{version}-%{release} Requires: %{name}-roofit-hs3%{?_isa} = %{version}-%{release} Requires: %{name}-roostats%{?_isa} = %{version}-%{release} +Requires: %{name}-tree%{?_isa} = %{version}-%{release} %description xroofit The RooFit packages provide a toolkit for modeling the expected @@ -1540,27 +1464,6 @@ suitable for adoption in different disciplines as well. This package contains extra tools for RooFit projects. %endif -%package sql-mysql -Summary: MySQL client plugin for ROOT -Requires: %{name}-core%{?_isa} = %{version}-%{release} -Requires: %{name}-net%{?_isa} = %{version}-%{release} - -%description sql-mysql -This package contains the MySQL plugin for ROOT. This plugin -provides a thin client (interface) to MySQL servers. Using this -client, one can obtain information from a MySQL database into the -ROOT environment. - -%package sql-odbc -Summary: ODBC plugin for ROOT -Requires: %{name}-core%{?_isa} = %{version}-%{release} -Requires: %{name}-net%{?_isa} = %{version}-%{release} - -%description sql-odbc -This package contains the ODBC (Open DataBase Connectivity) plugin -for ROOT, that allows transparent access to any kind of database that -supports the ODBC protocol. - %package sql-sqlite Summary: Sqlite client plugin for ROOT Requires: %{name}-core%{?_isa} = %{version}-%{release} @@ -1572,17 +1475,6 @@ 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 @@ -1642,11 +1534,13 @@ License: BSD-3-Clause Requires: %{name}-core%{?_isa} = %{version}-%{release} Requires: %{name}-tmva%{?_isa} = %{version}-%{release} Requires: %{name}-tmva-sofie%{?_isa} = %{version}-%{release} +Requires: %{name}-tree%{?_isa} = %{version}-%{release} Requires: python%{python3_pkgversion}-numpy %description tmva-python Python integration with TMVA. +%if %{rrr} %package tmva-r Summary: Toolkit for multivariate data analysis (R) License: BSD-3-Clause @@ -1657,11 +1551,13 @@ Requires: %{name}-tmva%{?_isa} = %{version}-%{release} %description tmva-r R integration with TMVA. +%endif %package tmva-sofie Summary: ROOT/TMVA SOFIE (System for Optimized Fast Inference code Emit) License: BSD-3-Clause Requires: %{name}-core%{?_isa} = %{version}-%{release} +Requires: %{name}-io%{?_isa} = %{version}-%{release} %description tmva-sofie ROOT/TMVA SOFIE (System for Optimized Fast Inference code Emit) @@ -1693,6 +1589,7 @@ Requires: %{name}-io%{?_isa} = %{version}-%{release} Requires: %{name}-io-xml%{?_isa} = %{version}-%{release} Requires: %{name}-matrix%{?_isa} = %{version}-%{release} Requires: %{name}-tmva%{?_isa} = %{version}-%{release} +Requires: %{name}-tree%{?_isa} = %{version}-%{release} Requires: %{name}-tree-viewer%{?_isa} = %{version}-%{release} %description tmva-gui @@ -1715,9 +1612,7 @@ Requires: %{name}-hist%{?_isa} = %{version}-%{release} Requires: %{name}-io%{?_isa} = %{version}-%{release} Requires: %{name}-mathcore%{?_isa} = %{version}-%{release} Requires: %{name}-tree%{?_isa} = %{version}-%{release} -%if %{root7} Requires: %{name}-tree-ntuple%{?_isa} = %{version}-%{release} -%endif Requires: %{name}-tree-player%{?_isa} = %{version}-%{release} Requires: %{name}-vecops%{?_isa} = %{version}-%{release} # Library split (tree-dataframe and vecops from tree-player) @@ -1791,23 +1686,10 @@ Requires: python%{python3_pkgversion}-%{name} = %{version}-%{release} The ROOT command line utilities is a set of scripts for common tasks written in python. -%package notebook -Summary: Static files for the Jupyter ROOT Notebook -BuildArch: noarch -Requires: %{name}-core = %{version}-%{release} -Requires: js-jsroot >= 7.5 -%if %{?fedora}%{!?fedora:0} -# jupyter-notebook not available in RHEL/EPEL -# some functionality missing -Requires: jupyter-notebook -%endif - -%description notebook -Javascript and style files for the Jupyter ROOT Notebook. - %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} @@ -1815,17 +1697,6 @@ Requires: %{name}-net-http%{?_isa} = %{version}-%{release} %description gui-webdisplay This package contains a web display extension for ROOT. -%ifarch %{qt5_qtwebengine_arches} -%package gui-qt5webdisplay -Summary: Qt5 Web display -Requires: %{name}-core%{?_isa} = %{version}-%{release} -Requires: %{name}-gui-webdisplay%{?_isa} = %{version}-%{release} -Requires: %{name}-net-http%{?_isa} = %{version}-%{release} - -%description gui-qt5webdisplay -This package contains a Qt5 web display extension for ROOT. -%endif - %ifarch %{qt6_qtwebengine_arches} %package gui-qt6webdisplay Summary: Qt6 Web display @@ -1845,15 +1716,50 @@ 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. -%if %{root7} +%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} @@ -1861,6 +1767,40 @@ Requires: %{name}-io%{?_isa} = %{version}-%{release} %description geom-webviewer This package contains a library for viewing geometries in a web GUI. +%package tree-ntuple +Summary: The new ROOT n-tuple class +Requires: %{name}-core%{?_isa} = %{version}-%{release} +Requires: %{name}-io%{?_isa} = %{version}-%{release} + +%description tree-ntuple +This package contains the new ROOT n-tuple class (RNTuple). + +%package tree-ntuple-browse +Summary: N-Tuple browsing library for ROOT +Requires: %{name}-core%{?_isa} = %{version}-%{release} +Requires: %{name}-graf%{?_isa} = %{version}-%{release} +Requires: %{name}-graf-gpad%{?_isa} = %{version}-%{release} +Requires: %{name}-gui-treemap%{?_isa} = %{version}-%{release} +Requires: %{name}-hist%{?_isa} = %{version}-%{release} +Requires: %{name}-io%{?_isa} = %{version}-%{release} +Requires: %{name}-tree-ntuple%{?_isa} = %{version}-%{release} +Requires: %{name}-tree-ntuple-utils%{?_isa} = %{version}-%{release} + +%description tree-ntuple-browse +This package contains a library for browsing n-tuples. + +%package tree-ntuple-utils +Summary: Ntuple utility library +Requires: %{name}-core%{?_isa} = %{version}-%{release} +Requires: %{name}-hist%{?_isa} = %{version}-%{release} +Requires: %{name}-io%{?_isa} = %{version}-%{release} +Requires: %{name}-tree%{?_isa} = %{version}-%{release} +Requires: %{name}-tree-ntuple%{?_isa} = %{version}-%{release} + +%description tree-ntuple-utils +This package contains utility functions for ntuples. + +%if %{root7} %package graf-gpadv7 Summary: Canvas and pad library for ROOT (ROOT 7) Requires: %{name}-core%{?_isa} = %{version}-%{release} @@ -1880,9 +1820,10 @@ This package contains graphics primitives for ROOT 7 Summary: Event display library for ROOT (ROOT 7) Requires: %{name}-core%{?_isa} = %{version}-%{release} Requires: %{name}-geom%{?_isa} = %{version}-%{release} +Requires: %{name}-geom-webviewer%{?_isa} = %{version}-%{release} Requires: %{name}-graf%{?_isa} = %{version}-%{release} +Requires: %{name}-graf3d%{?_isa} = %{version}-%{release} Requires: %{name}-graf3d-csg%{?_isa} = %{version}-%{release} -Requires: %{name}-gui-browserv7%{?_isa} = %{version}-%{release} Requires: %{name}-gui-webdisplay%{?_isa} = %{version}-%{release} Requires: %{name}-hist%{?_isa} = %{version}-%{release} Requires: %{name}-io%{?_isa} = %{version}-%{release} @@ -1896,35 +1837,33 @@ Requires: %{name}-tree-player%{?_isa} = %{version}-%{release} %description graf3d-eve7 This package contains a library for defining event displays in ROOT 7. -%package gui-browsable -Summary: GUI browsable (ROOT 7) +%package gui-browsable-v7 +Summary: Additional ROOT GUI browsable providers (ROOT 7) Requires: %{name}-core%{?_isa} = %{version}-%{release} Requires: %{name}-graf-gpadv7%{?_isa} = %{version}-%{release} -Requires: %{name}-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} - -%description gui-browsable -This package contains GUI browsable components for ROOT 7. - -%package gui-browserv7 -Summary: Browser (ROOT 7) -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}-graf-gpadv7%{?_isa} = %{version}-%{release} Requires: %{name}-gui-browsable%{?_isa} = %{version}-%{release} -Requires: %{name}-gui-webdisplay%{?_isa} = %{version}-%{release} -Requires: %{name}-gui-webgui6%{?_isa} = %{version}-%{release} -Requires: %{name}-io%{?_isa} = %{version}-%{release} +Requires: %{name}-gui-treemap%{?_isa} = %{version}-%{release} +Requires: %{name}-hist%{?_isa} = %{version}-%{release} Requires: %{name}-tree%{?_isa} = %{version}-%{release} -Requires: %{name}-tree-webviewer%{?_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-browserv7 -This package contains a file browser for ROOT 7. +%description gui-browsable-v7 +This package contains additional ROOT GUI browsable providers for ROOT 7. + +%package gui-browserv7-v7 +Summary: Additional ROOT browser widgets (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-browserv7%{?_isa} = %{version}-%{release} +# Package split (gui-browserv7-v7 from gui-browserv7) +Obsoletes: %{name}-gui-browserv7 < 6.32.06 + +%description gui-browserv7-v7 +This package contains additional ROOT browser widgets for ROOT 7. %package gui-canvaspainter Summary: Canvas painter (ROOT 7) @@ -1940,6 +1879,7 @@ This package contains a canvas painter extension for ROOT 7 Summary: GUI element for fits in ROOT (ROOT 7) Requires: %{name}-core%{?_isa} = %{version}-%{release} Requires: %{name}-graf-gpad%{?_isa} = %{version}-%{release} +Requires: %{name}-graf-gpadv7%{?_isa} = %{version}-%{release} Requires: %{name}-gui-webdisplay%{?_isa} = %{version}-%{release} Requires: %{name}-hist%{?_isa} = %{version}-%{release} Requires: %{name}-io%{?_isa} = %{version}-%{release} @@ -1950,80 +1890,51 @@ This package contains a library to show a pop-up dialog when fitting various kinds of data. %package histv7 -Summary: Histogram library for ROOT (ROOT 7) +Summary: Histogram library for ROOT 7 Requires: %{name}-core%{?_isa} = %{version}-%{release} %description histv7 This package contains a library for histogramming in ROOT 7. - -%package hist-draw -Summary: Histogram drawing (ROOT 7) -Requires: %{name}-core%{?_isa} = %{version}-%{release} -Requires: %{name}-graf-gpadv7%{?_isa} = %{version}-%{release} - -%description hist-draw -This package contains an histogram drawing extension for ROOT 7. - -%package tree-ntuple -Summary: Ntuple (ROOT 7) -Requires: %{name}-core%{?_isa} = %{version}-%{release} -Requires: %{name}-io%{?_isa} = %{version}-%{release} - -%description tree-ntuple -This package contains an ntuple extension for ROOT 7. - -%package tree-ntuple-utils -Summary: Ntuple utility library (ROOT 7) -Requires: %{name}-core%{?_isa} = %{version}-%{release} -Requires: %{name}-tree-ntuple%{?_isa} = %{version}-%{release} - -%description tree-ntuple-utils -This package contains utility functions for ntuples. %endif %prep -%setup -q -a 1 +%setup -q -a 1 -a 9 -%patch -P 0 -p1 -%patch -P 1 -p1 -%patch -P 2 -p1 -%patch -P 3 -p1 -%patch -P 4 -p1 -%patch -P 5 -p1 -%patch -P 6 -p1 -%patch -P 7 -p1 -%patch -P 8 -p1 -%patch -P 9 -p1 -%patch -P 10 -p1 -%patch -P 11 -p1 -%patch -P 12 -p1 -%patch -P 13 -p1 -%patch -P 14 -p1 -%patch -P 15 -p1 -%if %{?rhel}%{!?rhel:0} == 8 -%patch -P 16 -p1 -%endif +%patch -P0 -p1 +%patch -P1 -p1 +%patch -P2 -p1 +%patch -P3 -p1 +%patch -P4 -p1 +%patch -P5 -p1 +%patch -P6 -p1 +%patch -P7 -p1 +%patch -P8 -p1 +%patch -P9 -p1 +%patch -P10 -p1 +%patch -P11 -p1 +%patch -P12 -p1 +%patch -P13 -p1 +%patch -P14 -p1 +%patch -P15 -p1 +%patch -P16 -p1 +%patch -P17 -p1 # Remove bundled sources in order to be sure they are not used # * afterimage -rm -rf graf2d/asimage/src/libAfterImage +rm -rf graf2d/asimage/src/libAfterImage/{libjpeg,libpng,libungif,zlib} +sed '/zlib\/zlib.h/d' -i graf2d/asimage/src/libAfterImage/.depend # * ftgl rm -rf graf3d/ftgl/src graf3d/ftgl/inc # * freetype rm -rf graf2d/freetype/src -# * davix, glew, lz4, nlohmann, openssl, pcre, tbb, xxhash, zlib, zstd -rm -rf builtins/davix +# * glew, lz4, nlohmann, pcre, xxhash, zlib, zstd rm -rf builtins/glew rm -rf builtins/lz4 %if ! %{bundlejson} rm -rf builtins/nlohmann %endif -rm -rf builtins/openssl rm -rf builtins/pcre -rm -rf builtins/tbb -rm -rf builtins/xrootd rm -rf builtins/xxhash -rm -rf builtins/zeromq rm -rf builtins/zlib rm -rf builtins/zstd # * lzma @@ -2032,49 +1943,36 @@ rm core/lzma/src/*.tar.gz rm graf3d/gl/src/gl2ps.cxx graf3d/gl/src/gl2ps/gl2ps.h # * unuran rm math/unuran/src/*.tar.gz -# * xrootd-private-devel headers -rm -rf proof/xrdinc/* # * x11 extension headers rm -rf graf2d/x11/inc/X11 # * jsroot rm -rf js/[^f]* js/files/draw.htm js/files/online.htm -# Remove pre-minified script and style files -rm etc/notebook/JsMVA/js/*.min.js -rm etc/notebook/JsMVA/css/*.min.css +# Additional documentation +install -p -m 644 %{SOURCE7} bindings/jupyroot %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 -# Minify script and style files -for s in etc/notebook/JsMVA/js/*.js ; do - uglifyjs-3 ${s} -c -m -o ${s%.js}.min.js -done -for s in etc/notebook/JsMVA/css/*.css ; do - python3 -m rcssmin < ${s} > ${s%.css}.min.css -done - -# Avoid overlinking (this is the default on Fedora and EPEL 9) -%if %{?rhel}%{!?rhel:0} == 8 -LDFLAGS="-Wl,--as-needed %{?__global_ldflags}" -%endif - %cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DCMAKE_INSTALL_PREFIX:PATH=%{_prefix} \ -DCMAKE_INSTALL_LIBDIR:PATH=%{_libdir}/%{name} \ -DCMAKE_INSTALL_PYTHONDIR:PATH=%{python3_sitearch} \ -DCMAKE_INSTALL_SYSCONFDIR:PATH=%{_datadir}/%{name} \ -DCMAKE_INSTALL_DOCDIR:PATH=%{_pkgdocdir} \ - -DPYTHON_EXECUTABLE=%{__python3} \ + -DCMAKE_SKIP_INSTALL_RPATH:BOOL=ON \ + -DPython3_EXECUTABLE:PATH=%{__python3} \ -Dgnuinstall:BOOL=ON \ - -Dbuiltin_afterimage:BOOL=OFF \ -Dbuiltin_cfitsio:BOOL=OFF \ + -Dbuiltin_civetweb:BOOL=ON \ -Dbuiltin_clang:BOOL=ON \ -Dbuiltin_cling:BOOL=ON \ -Dbuiltin_cppzmq:BOOL=OFF \ @@ -2082,10 +1980,12 @@ LDFLAGS="-Wl,--as-needed %{?__global_ldflags}" -Dbuiltin_fftw3:BOOL=OFF \ -Dbuiltin_freetype:BOOL=OFF \ -Dbuiltin_ftgl:BOOL=OFF \ + -Dbuiltin_gif:BOOL=OFF \ -Dbuiltin_gl2ps:BOOL=OFF \ -Dbuiltin_glew:BOOL=OFF \ -Dbuiltin_gsl:BOOL=OFF \ -Dbuiltin_gtest:BOOL=OFF \ + -Dbuiltin_jpeg:BOOL=OFF \ -Dbuiltin_llvm:BOOL=ON \ -Dbuiltin_lz4:BOOL=OFF \ -Dbuiltin_lzma:BOOL=OFF \ @@ -2097,6 +1997,7 @@ LDFLAGS="-Wl,--as-needed %{?__global_ldflags}" -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 \ @@ -2113,13 +2014,15 @@ LDFLAGS="-Wl,--as-needed %{?__global_ldflags}" -Darrow:BOOL=OFF \ %endif -Dasimage:BOOL=ON \ + -Dasimage_tiff:BOOL=ON \ -Dccache:BOOL=OFF \ -Ddistcc:BOOL=OFF \ -Dcefweb:BOOL=OFF \ - -Dclad:BOOL=OFF \ + -Dcheck_connection:BOOL=OFF \ + -Dclad:BOOL=ON \ + -DCLAD_SOURCE_DIR:PATH=${PWD}/clad-2.2 \ -Dcocoa:BOOL=OFF \ -Dcuda:BOOL=OFF \ - -Dcxxmodules:BOOL=OFF \ -Ddaos:BOOL=OFF \ %if %{dataframe} -Ddataframe:BOOL=ON \ @@ -2129,48 +2032,41 @@ LDFLAGS="-Wl,--as-needed %{?__global_ldflags}" -Ddavix:BOOL=ON \ -Ddcache:BOOL=ON \ -Ddev:BOOL=OFF \ - -Dexceptions:BOOL=ON \ + -Dexperimental_adaptivecpp=OFF \ + -Dexperimental_genvectorx=OFF \ -Dfcgi:BOOL=ON \ -Dfftw3:BOOL=ON \ -DFIREFOX_EXECUTABLE:PATH=/usr/bin/firefox \ -Dfitsio:BOOL=ON \ -Dfortran:BOOL=ON \ -Dgdml:BOOL=ON \ + -Dgeom:BOOL=ON \ + -Dgeombuilder:BOOL=ON \ -Dgviz:BOOL=ON \ -Dhttp:BOOL=ON \ -Dimt:BOOL=ON \ -Dlibcxx:BOOL=OFF \ -Dmathmore:BOOL=ON \ -Dmemory_termination:BOOL=OFF \ - -Dminuit2:BOOL=ON \ -Dminuit2_mpi:BOOL=OFF \ - -Dminuit2_omp:BOOL=OFF \ - -Dmlp:BOOL=ON \ + -Dminuit2_omp:BOOL=ON \ -Dmpi:BOOL=OFF \ - -Dmysql:BOOL=ON \ - -Dodbc:BOOL=ON \ -Dopengl:BOOL=ON \ - -Doracle:BOOL=OFF \ - -Dpgsql:BOOL=ON \ - -Dproof:BOOL=ON \ -Dpyroot:BOOL=ON \ - -Dpyroot-python2:BOOL=OFF \ - -Dpythia6:BOOL=OFF \ -Dpythia8:BOOL=ON \ -%ifarch %{qt5_qtwebengine_arches} - -Dqt5web:BOOL=ON \ -%else - -Dqt5web:BOOL=OFF \ -%endif %ifarch %{qt6_qtwebengine_arches} -Dqt6web:BOOL=ON \ %else -Dqt6web:BOOL=OFF \ %endif +%if %{rrr} -Dr:BOOL=ON \ +%else + -Dr:BOOL=OFF \ +%endif %if %{roofit} -Droofit:BOOL=ON \ -%if %{?fedora}%{!?fedora:0} >= 40 +%if %{roofitmp} -Droofit_multiprocess:BOOL=ON \ %else -Droofit_multiprocess:BOOL=OFF \ @@ -2185,7 +2081,6 @@ LDFLAGS="-Wl,--as-needed %{?__global_ldflags}" %else -Droot7:BOOL=OFF \ %endif - -Drpath:BOOL=OFF \ -Druby:BOOL=OFF \ -Druntime_cxxmodules:BOOL=OFF \ -Dshadowpw:BOOL=ON \ @@ -2194,23 +2089,26 @@ LDFLAGS="-Wl,--as-needed %{?__global_ldflags}" -Dspectrum:BOOL=ON \ -Dsqlite:BOOL=ON \ -Dssl:BOOL=ON \ + -Dthisroot_scripts:BOOL=OFF \ -Dtmva:BOOL=ON \ -Dtmva-cpu:BOOL=ON \ + -Dtmva-cudnn:BOOL=OFF \ -Dtmva-gpu:BOOL=OFF \ -Dtmva-pymva:BOOL=ON \ +%if %{rrr} -Dtmva-rmva:BOOL=ON \ +%else + -Dtmva-rmva:BOOL=OFF \ +%endif %if %{tmvasofieparser} -Dtmva-sofie:BOOL=ON \ %else -Dtmva-sofie:BOOL=OFF \ %endif + -Dtpython:BOOL=ON \ -Dunfold:BOOL=ON \ -Dunuran:BOOL=ON \ -%if %{?fedora}%{!?fedora:0} -During:BOOL=ON \ -%else - -During:BOOL=OFF \ -%endif -Dvc:BOOL=OFF \ -Dvdt:BOOL=OFF \ -Dveccore:BOOL=OFF \ @@ -2221,6 +2119,7 @@ LDFLAGS="-Wl,--as-needed %{?__global_ldflags}" -Dxrootd:BOOL=ON \ -Dfail-on-missing:BOOL=ON \ -Dtesting:BOOL=ON \ + -Dtestsupport:BOOL=ON \ -Dtest_distrdf_pyspark:BOOL=OFF \ -Dtest_distrdf_dask:BOOL=OFF \ -Dclingtest:BOOL=OFF \ @@ -2249,9 +2148,6 @@ 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 \ @@ -2264,43 +2160,37 @@ mv %{buildroot}%{_libdir}/%{name}/*-gdb.py \ %{buildroot}%{_datadir}/gdb/auto-load%{_libdir}/%{name} # Fix python extension suffix -mv %{buildroot}%{python3_sitearch}/libROOTPythonizations%{python3_version_uscore}.so.%{version} \ - %{buildroot}%{python3_sitearch}/libROOTPythonizations%{python3_version_uscore}%{python3_ext_suffix} -rm %{buildroot}%{python3_sitearch}/libROOTPythonizations%{python3_version_uscore}.so.%{libversion} -rm %{buildroot}%{python3_sitearch}/libROOTPythonizations%{python3_version_uscore}.so - -mv %{buildroot}%{python3_sitearch}/libJupyROOT%{python3_version_uscore}.so.%{version} \ - %{buildroot}%{python3_sitearch}/libJupyROOT%{python3_version_uscore}%{python3_ext_suffix} -rm %{buildroot}%{python3_sitearch}/libJupyROOT%{python3_version_uscore}.so.%{libversion} -rm %{buildroot}%{python3_sitearch}/libJupyROOT%{python3_version_uscore}.so +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}/JsMVA %{buildroot}%{python3_sitelib} +mv %{buildroot}%{python3_sitearch}/JupyROOT %{buildroot}%{python3_sitelib} %if %{distrdf} mv %{buildroot}%{python3_sitearch}/DistRDF %{buildroot}%{python3_sitelib} %endif fi -# Create .egg-info files so that rpm auto-generates provides +# Create .dist-info files so that rpm auto-generates provides +mkdir %{buildroot}%{python3_sitearch}/ROOT-%{version}.dist-info echo 'Name: ROOT' > \ - %{buildroot}%{python3_sitearch}/ROOT-%{version}.egg-info + %{buildroot}%{python3_sitearch}/ROOT-%{version}.dist-info/METADATA echo 'Version: %{version}' >> \ - %{buildroot}%{python3_sitearch}/ROOT-%{version}.egg-info + %{buildroot}%{python3_sitearch}/ROOT-%{version}.dist-info/METADATA +mkdir %{buildroot}%{python3_sitelib}/JupyROOT-%{version}.dist-info echo 'Name: JupyROOT' > \ - %{buildroot}%{python3_sitearch}/JupyROOT-%{version}.egg-info + %{buildroot}%{python3_sitelib}/JupyROOT-%{version}.dist-info/METADATA echo 'Version: %{version}' >> \ - %{buildroot}%{python3_sitearch}/JupyROOT-%{version}.egg-info -echo 'Name: JsMVA' > \ - %{buildroot}%{python3_sitelib}/JsMVA-%{version}.egg-info -echo 'Version: %{version}' >> \ - %{buildroot}%{python3_sitelib}/JsMVA-%{version}.egg-info + %{buildroot}%{python3_sitelib}/JupyROOT-%{version}.dist-info/METADATA %if %{distrdf} +mkdir %{buildroot}%{python3_sitelib}/DistRDF-%{version}.dist-info echo 'Name: DistRDF' > \ - %{buildroot}%{python3_sitelib}/DistRDF-%{version}.egg-info + %{buildroot}%{python3_sitelib}/DistRDF-%{version}.dist-info/METADATA echo 'Version: %{version}' >> \ - %{buildroot}%{python3_sitelib}/DistRDF-%{version}.egg-info + %{buildroot}%{python3_sitelib}/DistRDF-%{version}.dist-info/METADATA %endif # Put jupyter stuff in the right places @@ -2312,12 +2202,13 @@ sed -e 's/ROOT C++/& (Python 3)/' \ -e 's!python[0-9]*\.[0-9]*!%{__python3}!' \ -i %{buildroot}%{_datadir}/jupyter/kernels/python%{python3_pkgversion}-jupyroot/kernel.json sed -e '/^\#!/d' \ - -i %{buildroot}%{python3_sitearch}/JupyROOT/kernel/rootkernel.py + -i %{buildroot}%{python3_sitelib}/JupyROOT/kernel/rootkernel.py rm -rf %{buildroot}%{_datadir}/%{name}/notebook/custom rm -rf %{buildroot}%{_datadir}/%{name}/notebook/html rm -rf %{buildroot}%{_datadir}/%{name}/notebook/kernels rm %{buildroot}%{_datadir}/%{name}/notebook/jupyter_notebook_config.py +rmdir %{buildroot}%{_datadir}/%{name}/notebook # Replace the rootnb.exe wrapper with a simpler one cat > %{buildroot}%{_bindir}/rootnb.exe << EOF @@ -2334,8 +2225,10 @@ jupyter notebook "\$@" EOF # Avoid /usr/bin/env shebangs (and adapt cli to cmdLineUtils location) -sed -e 's!/usr/bin/env bash!/bin/bash!' -i %{buildroot}%{_bindir}/root-config -sed -e 's!/usr/bin/env /usr/bin/python.*!%{__python3}!' \ +sed -e 's!/usr/bin/env bash!/bin/bash!' \ + -i %{buildroot}%{_bindir}/root-config \ + %{buildroot}%{_bindir}/rootssh +sed -e 's!/usr/bin/env python3!%{__python3}!' \ -e '/import sys/d' \ -e '/import cmdLineUtils/iimport sys' \ -e '/import cmdLineUtils/isys.path.insert(0, "%{_datadir}/%{name}/cli")' \ @@ -2348,57 +2241,33 @@ sed -e 's!/usr/bin/env /usr/bin/python.*!%{__python3}!' \ %{buildroot}%{_bindir}/rootprint \ %{buildroot}%{_bindir}/rootrm \ %{buildroot}%{_bindir}/rootslimtree -sed -e 's!/usr/bin/env /usr/bin/python.*!%{__python3}!' \ +sed -e 's!/usr/bin/env python3!%{__python3}!' \ -i %{buildroot}%{_bindir}/rootdrawtree sed -e 's!/usr/bin/env python!%{__python3}!' \ - -i %{buildroot}%{_datadir}/%{name}/dictpch/makepch.py \ - %{buildroot}%{_pkgdocdir}/tutorials/histfactory/example.py \ - %{buildroot}%{_pkgdocdir}/tutorials/histfactory/makeQuickModel.py \ - %{buildroot}%{_pkgdocdir}/tutorials/tmva/keras/ApplicationClassificationKeras.py \ - %{buildroot}%{_pkgdocdir}/tutorials/tmva/keras/ApplicationRegressionKeras.py \ - %{buildroot}%{_pkgdocdir}/tutorials/tmva/keras/ClassificationKeras.py \ - %{buildroot}%{_pkgdocdir}/tutorials/tmva/keras/GenerateModel.py \ - %{buildroot}%{_pkgdocdir}/tutorials/tmva/keras/MulticlassKeras.py \ - %{buildroot}%{_pkgdocdir}/tutorials/tmva/keras/RegressionKeras.py + -i %{buildroot}%{_datadir}/%{name}/dictpch/makepch.py sed -e 's!/usr/bin/python!%{__python3}!' \ -i %{buildroot}%{_datadir}/%{name}/pdg_table_update.py # Remove some junk -rm %{buildroot}%{_datadir}/%{name}/proof/*.sample -rm -rf %{buildroot}%{_datadir}/%{name}/proof/utils rm %{buildroot}%{_datadir}/%{name}/root.desktop -rm %{buildroot}%{_bindir}/setxrd* -rm %{buildroot}%{_bindir}/thisroot* rm %{buildroot}%{_pkgdocdir}/INSTALL rm %{buildroot}%{_pkgdocdir}/README.CXXMODULES.md -rm %{buildroot}%{_pkgdocdir}/README.MONALISA +rm -rf %{buildroot}%{_datadir}/%{name}/html # Only used on Windows rm %{buildroot}%{_datadir}/%{name}/macros/fileopen.C # Remove plugin definitions for non-built and obsolete plugins pushd %{buildroot}%{_datadir}/%{name}/plugins -%if ! %{root7} -rm TBrowserImp/P030_RWebBrowserImp.C +%if ! %{rrr} +rm ROOT@@Math@@Minimizer/P090_RMinimizer.C %endif -rm TFile/P050_TGFALFile.C rm TGLManager/P020_TGWin32GLManager.C rm TGLManager/P030_TGOSXGLManager.C -rm TProofMgr/P010_TXProofMgr.C -rm TProofServ/P010_TXProofServ.C -rm TSlave/P010_TXSlave.C -rm TSQLServer/P040_TOracleServer.C rm TVirtualGeoConverter/P010_TGeoVGConverter.C -%if ! %{root7} -rm TVirtualGeoPainter/P020_RGeoPainter.C -%endif rm TVirtualGLImp/P020_TGWin32GL.C -rm TVirtualMonitoringWriter/P010_TMonaLisaWriter.C rm TVirtualX/P030_TGWin32.C rm TVirtualX/P050_TGQuartz.C -rmdir TProofMgr -rmdir TProofServ -rmdir TSlave rmdir TVirtualGeoConverter popd @@ -2450,20 +2319,9 @@ ln -s ../../files files popd pushd runtutorials ln -s ../../files files -for x in df014_CsvDataSource_MuRun2010B_cpp.csv \ - df014_CsvDataSource_MuRun2010B_py.csv \ - df015_CsvDataSource_MuRun2010B.csv ; do - ln -sf ../../files/tutorials/df014_CsvDataSource_MuRun2010B.csv $x -done +ln -s ../../files/tutorials/df014_CsvDataSource_MuRun2010B.csv CsvDataSource_MuRun2010B.csv +ln -s ../../files/usa.root usa.root popd -pushd tmva/tmva/test -ln -s ../../../../files files -popd -pushd tmva/tmva/test/DNN -ln -s ../../../../../files files -popd -pushd tmva/tmva/test/envelope -ln -s ../../../../../files files popd # Exclude some tests that can not be run @@ -2471,363 +2329,317 @@ popd # - test-stressIOPlugins-* # requires network access (by design since they test the remote file IO) # -# - tutorial-dataframe-df101_h1Analysis -# - tutorial-tree-run_h1analysis -# - tutorial-multicore-imt001_parBranchProcessing -# - tutorial-multicore-mp103_processSelector -# - tutorial-multicore-mp104_processH1 -# - tutorial-multicore-mp105_processEntryList +# - tutorial-analysis-dataframe-df101_h1Analysis +# - tutorial-analysis-tree-run_h1analysis +# - tutorial-legacy-multicore-mp104_processH1 # requires network access: http://root.cern.ch/files/h1/ # -# - tutorial-multicore-imt101_parTreeProcessing +# - tutorial-io-tree-imt_parTreeProcessing # requires input data: http://root.cern.ch/files/tp_process_imt.root (707 MB) # -# - tutorial-dataframe-df###_SQlite* +# - tutorial-analysis-dataframe-df###_SQlite* # reads sqlite data over network: # http://root.cern.ch/files/root_download_stats.sqlite # -# - tutorial-dataframe-df033_Describe-py -# - tutorial-dataframe-df102_NanoAODDimuonAnalysis(-py)? +# - tutorial-analysis-dataframe-df033_Describe-py +# - tutorial-analysis-dataframe-df102_NanoAODDimuonAnalysis(-py)? # reads input data over network: # root://eospublic.cern.ch//eos/opendata/cms/derived-data/ # AOD2NanoAODOutreachTool/Run2012BC_DoubleMuParked_Muons.root # -# - gtest-tree-treeplayer-test-treeprocessormt-remotefiles -# - tutorial-dataframe-df103_NanoAODHiggsAnalysis(-py)? +# - gtest-tree-treeplayer-treeprocessormt-remotefiles +# - tutorial-analysis-dataframe-df103_NanoAODHiggsAnalysis(-py)? # reads input data over network: # root://eospublic.cern.ch//eos/root-eos/cms_opendata_2012_nanoaod/ # -# - tutorial-dataframe-df104_HiggsToTwoPhotons-py -# - tutorial-dataframe-df105_WBosonAnalysis-py -# - tutorial-dataframe-df106_HiggsToFourLeptons(-py) -# - tutorial-dataframe-df107_SingleTopAnalysis-py -# - tutorial-rcanvas-df104-py -# - tutorial-rcanvas-df105-py +# - tutorial-analysis-dataframe-df104_HiggsToTwoPhotons-py +# - tutorial-analysis-dataframe-df105_WBosonAnalysis-py +# - tutorial-analysis-dataframe-df106_HiggsToFourLeptons(-py) +# - tutorial-analysis-dataframe-df107_SingleTopAnalysis-py +# - tutorial-visualisation-rcanvas-df104-py +# - tutorial-visualisation-rcanvas-df105-py # reads input data over network: # root://eospublic.cern.ch//eos/opendata/atlas/OutreachDatasets/2020-01-22/ # -# - tutorial-v7-global_temperatures.cxx -# reads input data over network -# http://root.cern.ch/files/tutorials/GlobalLandTemperaturesByCity.csv -# -# - tutorial-v7-ntuple-ntpl003_lhcbOpenData -# reads input data over network -# http://root.cern.ch/files/LHCb/lhcb_B2HHH_MagnetUp.root (425 MB) -# -# - tutorial-v7-ntuple-ntpl004_dimuon +# - tutorial-io-ntuple-ntpl004_dimuon # reads input data over network # http://root.cern.ch/files/NanoAOD_DoubleMuon_CMS2011OpenData.root (1.5 GB) # -# - tutorial-v7-ntuple-ntpl008_import +# - tutorial-io-ntuple-ntpl008_import # reads input data over network # http://root.cern.ch/files/HiggsTauTauReduced/GluGluToHToTauTau.root (20 MB) # -# - gtest-net-davix-test-RRawFileDavix +# - tutorial-io-ntuple-ntpl011_global_temperatures +# reads input data over network +# http://root.cern.ch/files/tutorials/GlobalLandTemperaturesByCity.csv +# +# - gtest-net-davix-RRawFileDavix # reads input file over network # http://root.cern.ch/files/davix.test # -# - gtest-net-netxng-test-RRawFileNetXNG +# - gtest-net-netxng-RRawFileNetXNG # reads input file over network # root://eospublic.cern.ch/eos/root-eos/xrootd.test # -# - gtest-net-netxng-test-TNetXNGFileTest +# - gtest-net-netxng-TNetXNGFileTest +# - tutorial-analysis-parallel-mp_processSelector # reads input file over network # root://eospublic.cern.ch/eos/root-eos/h1/dstarmb.root # -# - gtest-tmva-tmva-test-rreader -# - gtest-tmva-tmva-test-rstandardscaler -# - tutorial-tmva-tmva003_RReader -# - tutorial-tmva-tmva004_RStandardScaler +# - tutorial-machine_learning-tmva100_DataPreparation-py # reads input data over network -# http://root.cern.ch/files/tmva_class_example.root -# -# - tutorial-tmva-tmva103_Application -# reads input data over network -# http://root.cern/files/tmva101.root -# -# - tutorial-tmva-RBatchGenerator_NumPy-py -# reads input data over network -# http://root.cern/files/Higgs_data.root -# -# - test-import-numba -# - tutorial-pyroot-pyroot004_NumbaDeclare-py -# - pyunittests-pyroot-numbadeclare -# these tests require the numba python module which is not available +# root://eospublic.cern.ch/eos/root-eos/cms_opendata_2012_nanoaod/SMHiggsToZZTo4L.root # # - test-webgui-ping # error: Cannot display window in native +# +# - test-stressgraphics-firefox-skip3d: +# requires firefox... +# +# - test-stressgraphics-svg +# Font metric differences +# +# - tutorial-visualisation-webcanv-fonts_ttf.cxx: +# Requires web graphics excluded="\ test-stressIOPlugins|\ -tutorial-dataframe-df101_h1Analysis|\ -tutorial-tree-run_h1analysis|\ -tutorial-multicore-imt001_parBranchProcessing|\ -tutorial-multicore-mp103_processSelector|\ -tutorial-multicore-mp104_processH1|\ -tutorial-multicore-mp105_processEntryList|\ -tutorial-multicore-imt101_parTreeProcessing|\ -tutorial-dataframe-df..._SQlite|\ -tutorial-dataframe-df033_Describe-py|\ -tutorial-dataframe-df102_NanoAODDimuonAnalysis|\ -gtest-tree-treeplayer-test-treeprocessormt-remotefiles|\ -tutorial-dataframe-df103_NanoAODHiggsAnalysis|\ -tutorial-dataframe-df104_HiggsToTwoPhotons-py|\ -tutorial-dataframe-df105_WBosonAnalysis-py|\ -tutorial-dataframe-df106_HiggsToFourLeptons|\ -tutorial-dataframe-df107_SingleTopAnalysis-py|\ -tutorial-rcanvas-df104-py|\ -tutorial-rcanvas-df105-py|\ -tutorial-v7-global_temperatures.cxx|\ -tutorial-v7-ntuple-ntpl003_lhcbOpenData|\ -tutorial-v7-ntuple-ntpl004_dimuon|\ -tutorial-v7-ntuple-ntpl008_import|\ -gtest-net-davix-test-RRawFileDavix|\ -gtest-net-netxng-test-RRawFileNetXNG|\ -gtest-net-netxng-test-TNetXNGFileTest|\ -gtest-tmva-tmva-test-rreader|\ -gtest-tmva-tmva-test-rstandardscaler|\ -tutorial-tmva-tmva003_RReader|\ -tutorial-tmva-tmva004_RStandardScaler|\ -tutorial-tmva-tmva103_Application|\ -tutorial-tmva-RBatchGenerator_NumPy-py|\ -test-import-numba|\ -tutorial-pyroot-pyroot004_NumbaDeclare-py|\ -pyunittests-pyroot-numbadeclare|\ -test-webgui-ping" - -%if ! ( %{?fedora}%{!?fedora:0} || %{?rhel}%{!?rhel:0} == 8 ) -# - test-import-pandas -# - tutorial-dataframe-df026_AsNumpyArrays-py -# - tutorial-roofit-rf409_NumPyPandasToRooFit-py -# Requires the pandas python module not (yet) available in RHEL/EPEL 9 -excluded="${excluded}|\ -test-import-pandas|\ -tutorial-dataframe-df026_AsNumpyArrays-py|\ -tutorial-roofit-rf409_NumPyPandasToRooFit-py" -%endif +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-tree-dataframe-test-dataframe-concurrency -# "There's already an active task arena." +# - 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-tree-dataframe-test-dataframe-concurrency" +gtest-hist-hist-TFormulaGradientTests|\ +pyunittests-bindings-pyroot-pythonizations-pyroot-array-numpy-views|\ +tmva-sofie-test-TestCustomModelsFromONNX\$\$" %endif %ifarch %{power64} -# PPC64LE specific failures -# - test-stresshistofit-interpreted -# - test-stresshistogram-interpreted -# - test-stressmathcore-interpreted -# -# Always timeout (hang?) -# - test-stressinterpreter -# - tutorial-unuran-unuranFoamTest +%if %{?fedora}%{!?fedora:0} >= 42 +# - gtest-tree-ntuple-ntuple-emulated +# - gtest-tree-ntuple-ntuple-evolution-shape +# waitpid() failed excluded="${excluded}|\ -test-stresshistofit-interpreted|\ -test-stresshistogram-interpreted|\ -test-stressmathcore-interpreted|\ -test-stressinterpreter|\ -tutorial-unuran-unuranFoamTest" - -%if %{?rhel}%{!?rhel:0} == 8 -# Fails on ppc64le since RHEL 8.5 update -# Exception: Found not whitelisted libraries after importing ROOT: -# - libpthread-2.28 -# - libm-2.28 -# - libc-2.28 -# - librt-2.28 -# - pyunittests-pyroot-import-load-libs -# -# - tutorial-fit-combinedFit(-py) -# - tutorial-fit-fit2dHist -# - tutorial-fit-fitCircle -# - tutorial-fit-line3Dfit -# - tutorial-math-exampleFunction-py -# - tutorial-multicore-mt103_fillNtupleFromMultipleThreads -# - tutorial-multicore-mt201_parallelHistoFill -# - tutorial-multicore-mt304_fillHistos -# - tutorial-multicore-mtbb001_fillHistos -# - tutorial-multicore-mtbb101_fillNtuples -# - tutorial-multicore-mtbb201_parallelHistoFill -# - tutorial-rcanvas-* -# - tutorial-v7-concurrentfill.cxx -# - tutorial-v7-ntuple-ntpl001_staff -# - tutorial-v7-ntuple-ntpl002_vector -# - tutorial-v7-ntuple-ntpl005_introspection -# - tutorial-v7-ntuple-ntpl006_friends -# - tutorial-v7-ntuple-ntpl007_mtFill -# - tutorial-v7-simple.cxx -excluded="${excluded}|\ -pyunittests-pyroot-import-load-libs|\ -tutorial-fit-combinedFit|\ -tutorial-fit-fit2dHist|\ -tutorial-fit-fitCircle|\ -tutorial-fit-line3Dfit|\ -tutorial-math-exampleFunction-py|\ -tutorial-multicore-mt103_fillNtupleFromMultipleThreads|\ -tutorial-multicore-mt201_parallelHistoFill|\ -tutorial-multicore-mt304_fillHistos|\ -tutorial-multicore-mtbb001_fillHistos|\ -tutorial-multicore-mtbb101_fillNtuples|\ -tutorial-multicore-mtbb201_parallelHistoFill|\ -tutorial-rcanvas|\ -tutorial-v7-concurrentfill.cxx|\ -tutorial-v7-ntuple-ntpl001_staff|\ -tutorial-v7-ntuple-ntpl002_vector|\ -tutorial-v7-ntuple-ntpl005_introspection|\ -tutorial-v7-ntuple-ntpl006_friends|\ -tutorial-v7-ntuple-ntpl007_mtFill|\ -tutorial-v7-simple.cxx" +gtest-tree-ntuple-ntuple-emulated|\ +gtest-tree-ntuple-ntuple-evolution-shape" %endif %endif %ifarch s390x -# - gtest-roofit-roofitcore-test-testNaNPacker +# - gtest-roofit-roofitcore-testNaNPacker +# - gtest-roofit-roofitcore-testLikelihoodGradientJob # Uses "Packed NaN" feature, not implemented for big endian. excluded="${excluded}|\ -gtest-roofit-roofitcore-test-testNaNPacker" +gtest-roofit-roofitcore-testNaNPacker|\ +gtest-roofit-roofitcore-testLikelihoodGradientJob" -# - gtest-core-base-test-CoreBaseTests -# - gtest-core-dictgen-test-dictgen-base -# - gtest-core-meta-test-testTDataType -# -# - gtest-tree-dataframe-test-datasource-ntuple -# - gtest-tree-ntuple-v7-test-ntuple-basics -# - gtest-tree-ntuple-v7-test-ntuple-bulk -# - gtest-tree-ntuple-v7-test-ntuple-endian -# - gtest-tree-ntuple-v7-test-ntuple-extended -# - gtest-tree-ntuple-v7-test-ntuple-friends -# - gtest-tree-ntuple-v7-test-ntuple-minifile -# - gtest-tree-ntuple-v7-test-ntuple-modelext -# - gtest-tree-ntuple-v7-test-ntuple-packing -# - gtest-tree-ntuple-v7-test-ntuple-project -# - gtest-tree-ntuple-v7-test-ntuple-serialize -# - gtest-tree-ntuple-v7-test-ntuple-show -# - gtest-tree-ntuple-v7-test-ntuple-storage -# - gtest-tree-ntuple-v7-test-ntuple-storage-daos -# - gtest-tree-ntuple-v7-test-ntuple-types -# - gtest-tree-ntuple-v7-test-ntuple-view -# - gtest-tree-ntuple-v7-test-rfield-vector -# - gtest-tree-ntupleutil-v7-test-ntuple-importer -# - gtest-tree-ntupleutil-v7-test-ntuple-inspector +# - 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-distrdf-unit-backend-test-graph-caching -# - pyunittests-pyroot-pyz-rtensor -# - pyunittests-pyroot-pyz-stl-vector -# - tutorial-dataframe-df006_ranges-py -# - tutorial-fit-combinedFit-py -# - tutorial-fit-fitcont -# - tutorial-fit-NumericalMinimization-py +# - pyunittests-bindings-distrdf-backend-distrdf-unit-backend-graph-caching +# - pyunittests-bindings-pyroot-pythonizations-pyroot-pyz-rtensor +# - pyunittests-bindings-pyroot-pythonizations-pyroot-pyz-stl-vector +# - pyunittests-io-io-rfile-py +# - tmva-sofie-test-TestCustomModelsFromONNX +# - tutorial-analysis-dataframe-df006_ranges-py +# - tutorial-hist-hist007_TH1_liveupdate-py # - tutorial-math-exampleFunction-py -# - tutorial-rcanvas-rbox-py -# - tutorial-roofit-rf108_plotbinning-py -# - tutorial-roofit-rf306_condpereventerrors-py -# - tutorial-roofit-rf307_fullpereventerrors-py -# - tutorial-roofit-rf310_sliceplot-py -# - tutorial-roofit-rf708_bphysics-py -# - tutorial-tmva-TMVA_CNN_Classification-py -# - tutorial-tmva-TMVA_Higgs_Classification-py -# - tutorial-tmva-TMVA_RNN_Classification-py +# - tutorial-math-fit-combinedFit-py +# - tutorial-math-fit-NumericalMinimization-py +# - tutorial-visualisation-rcanvas-rbox-py # https://github.com/root-project/root/issues/12429 # -# - tutorial-tree-drawsparse -# https://github.com/root-project/root/issues/12431 -# # - test-stresshistofit # - test-stresshistofit-interpreted # - test-stresshistogram # - test-stresshistogram-interpreted excluded="${excluded}|\ -gtest-core-base-test-CoreBaseTests|\ -gtest-core-dictgen-test-dictgen-base|\ -gtest-core-meta-test-testTDataType|\ -gtest-tree-dataframe-test-datasource-ntuple|\ -gtest-tree-ntuple-v7-test-ntuple-basics|\ -gtest-tree-ntuple-v7-test-ntuple-bulk|\ -gtest-tree-ntuple-v7-test-ntuple-endian|\ -gtest-tree-ntuple-v7-test-ntuple-extended|\ -gtest-tree-ntuple-v7-test-ntuple-friends|\ -gtest-tree-ntuple-v7-test-ntuple-minifile|\ -gtest-tree-ntuple-v7-test-ntuple-modelext|\ -gtest-tree-ntuple-v7-test-ntuple-packing|\ -gtest-tree-ntuple-v7-test-ntuple-project|\ -gtest-tree-ntuple-v7-test-ntuple-serialize|\ -gtest-tree-ntuple-v7-test-ntuple-show|\ -gtest-tree-ntuple-v7-test-ntuple-storage|\ -gtest-tree-ntuple-v7-test-ntuple-storage-daos|\ -gtest-tree-ntuple-v7-test-ntuple-types|\ -gtest-tree-ntuple-v7-test-ntuple-view|\ -gtest-tree-ntuple-v7-test-rfield-vector|\ -gtest-tree-ntupleutil-v7-test-ntuple-importer|\ -gtest-tree-ntupleutil-v7-test-ntuple-inspector|\ -pyunittests-distrdf-unit-backend-test-graph-caching|\ -pyunittests-pyroot-pyz-rtensor|\ -pyunittests-pyroot-pyz-stl-vector|\ -tutorial-dataframe-df006_ranges-py|\ -tutorial-fit-combinedFit-py|\ -tutorial-fit-fitcont|\ -tutorial-fit-NumericalMinimization-py|\ +gtest-core-dictgen-dictgen-base|\ +gtest-tree-dataframe-dataframe-concurrency|\ +gtest-tree-dataframe-dataframe-snapshot-ntuple|\ +gtest-tree-dataframe-dataframe-unified-constructor|\ +gtest-tree-dataframe-dataframe-vary|\ +gtest-tree-dataframe-datasource-ntuple|\ +gtest-tree-ntuple-ntuple-basics|\ +gtest-tree-ntuple-ntuple-bulk|\ +gtest-tree-ntuple-ntuple-cast|\ +gtest-tree-ntuple-ntuple-compat|\ +gtest-tree-ntuple-ntuple-evolution-type|\ +gtest-tree-ntuple-ntuple-extended|\ +gtest-tree-ntuple-ntuple-join-table|\ +gtest-tree-ntuple-ntuple-largefile2|\ +gtest-tree-ntuple-ntuple-merger|\ +gtest-tree-ntuple-ntuple-metrics|\ +gtest-tree-ntuple-ntuple-model\$\$|\ +gtest-tree-ntuple-ntuple-modelext|\ +gtest-tree-ntuple-ntuple-multi-column|\ +gtest-tree-ntuple-ntuple-packing|\ +gtest-tree-ntuple-ntuple-parallel-writer|\ +gtest-tree-ntuple-ntuple-processor\$\$|\ +gtest-tree-ntuple-ntuple-processor-chain|\ +gtest-tree-ntuple-ntuple-processor-join|\ +gtest-tree-ntuple-ntuple-project|\ +gtest-tree-ntuple-ntuple-show|\ +gtest-tree-ntuple-ntuple-storage\$\$|\ +gtest-tree-ntuple-ntuple-storage-daos|\ +gtest-tree-ntuple-ntuple-types|\ +gtest-tree-ntuple-ntuple-view|\ +gtest-tree-ntuple-rfield-class|\ +gtest-tree-ntuple-rfield-streamer|\ +gtest-tree-ntuple-rfield-variant|\ +gtest-tree-ntuple-rfield-vector|\ +gtest-tree-ntupleutil-ntuple-importer|\ +gtest-tree-ntupleutil-ntuple-inspector|\ +gtest-tree-tree-testTTreeRegressions|\ +pyunittests-bindings-distrdf-backend-distrdf-unit-backend-graph-caching|\ +pyunittests-bindings-pyroot-pythonizations-pyroot-pyz-rtensor|\ +pyunittests-bindings-pyroot-pythonizations-pyroot-pyz-stl-vector|\ +pyunittests-io-io-rfile-py|\ +tmva-sofie-test-TestCustomModelsFromONNX|\ +tutorial-analysis-dataframe-df006_ranges-py|\ +tutorial-hist-hist007_TH1_liveupdate-py|\ tutorial-math-exampleFunction-py|\ -tutorial-rcanvas-rbox-py|\ -tutorial-roofit-rf108_plotbinning-py|\ -tutorial-roofit-rf306_condpereventerrors-py|\ -tutorial-roofit-rf307_fullpereventerrors-py|\ -tutorial-roofit-rf310_sliceplot-py|\ -tutorial-roofit-rf708_bphysics-py|\ -tutorial-tmva-TMVA_CNN_Classification-py|\ -tutorial-tmva-TMVA_Higgs_Classification-py|\ -tutorial-tmva-TMVA_RNN_Classification-py|\ -tutorial-tree-drawsparse|\ +tutorial-math-fit-combinedFit-py|\ +tutorial-math-fit-NumericalMinimization-py|\ +tutorial-visualisation-rcanvas-rbox-py|\ test-stresshistofit\$\$|\ test-stresshistofit-interpreted|\ test-stresshistogram\$\$|\ test-stresshistogram-interpreted" -%if %{?rhel}%{!?rhel:0} == 8 -# Issues with file sizes on EPEL 8 s390x -# - gtest-tree-readspeed-test-readspeed-general -# - gtest-tree-tree-test-testTBranch +# The zlib-ng library is compiled with hardware acceleration support on s390x +# in Fedora 43 and later. +# This means that some tests that compare the size of compressed data fail. # - test-stress -# - test-stressgraphics(-interpreted) +# - gtest-tree-readspeed-readspeed-general +# - gtest-tree-tree-testTBranch +%if %{?fedora}%{!?fedora:0} >= 43 excluded="${excluded}|\ -gtest-tree-readspeed-test-readspeed-general|\ -gtest-tree-tree-test-testTBranch|\ test-stress\$\$|\ -test-stressgraphics" +gtest-tree-readspeed-readspeed-general|\ +gtest-tree-tree-testTBranch" %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 -# Fails with gcc 14 on aarch64, ppc64le and s390x -# https://github.com/root-project/root/issues/14446 -# - gtest-math-matrix-test-testMatrixTSparse excluded="${excluded}|\ -gtest-math-matrix-test-testMatrixTSparse" +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 -GTEST_FILTER=-\ +# 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 \ -%if ! ( %{?fedora}%{!?fedora:0} || %{?rhel}%{!?rhel:0} == 8 ) -ROOTTEST_IGNORE_PANDAS_PY3=1 \ -%endif -ROOTTEST_IGNORE_NUMBA_PY3=1 \ -ROOTTEST_IGNORE_JUPYTER_PY3=1 \ -make test ARGS="%{?_smp_mflags} --output-on-failure -E \"${excluded}\"" - -popd +TFile.ReadWithoutGlobalRegistrationWeb:\ +TTreeRegressions.PrintClustersRounding +%ctest -- -E "${excluded}" %pretrans net-http -p path = "%{_datadir}/%{name}/js" @@ -2849,38 +2661,36 @@ if [ -r /var/lib/alternatives/libPyROOT.so ] ; then done fi -%post notebook +%post -n python%{python3_pkgversion}-jupyroot mkdir -p /etc/jupyter if [ -e /etc/jupyter/jupyter_notebook_config.py ] ; then - sed '/Extra static path for JupyROOT - start/','/Extra static path for JupyROOT - end/'d -i /etc/jupyter/jupyter_notebook_config.py + sed '/Extra static paths for JupyROOT - start/','/Extra static paths for JupyROOT - end/'d -i /etc/jupyter/jupyter_notebook_config.py fi cat << EOF >> /etc/jupyter/jupyter_notebook_config.py -# Extra static path for JupyROOT - start - do not remove this line +# Extra static paths for JupyROOT - start - do not remove this line c.NotebookApp.extra_static_paths.append('%{_jsdir}/jsroot') -c.NotebookApp.extra_static_paths.append('%{_datadir}/%{name}/notebook') -# Extra static path for JupyROOT - end - do not remove this line +# Extra static paths for JupyROOT - end - do not remove this line EOF if [ -e /etc/jupyter/jupyter_server_config.py ] ; then - sed '/Extra static path for JupyROOT - start/','/Extra static path for JupyROOT - end/'d -i /etc/jupyter/jupyter_server_config.py + sed '/Extra static paths for JupyROOT - start/','/Extra static paths for JupyROOT - end/'d -i /etc/jupyter/jupyter_server_config.py fi cat << EOF >> /etc/jupyter/jupyter_server_config.py -# Extra static path for JupyROOT - start - do not remove this line +# Extra static paths for JupyROOT - start - do not remove this line c.ServerApp.extra_static_paths.append('%{_jsdir}/jsroot') -c.ServerApp.extra_static_paths.append('%{_datadir}/%{name}/notebook') -# Extra static path for JupyROOT - end - do not remove this line +# Extra static paths for JupyROOT - end - do not remove this line EOF -%postun notebook +%postun -n python%{python3_pkgversion}-jupyroot if [ $1 -eq 0 ] ; then if [ -e /etc/jupyter/jupyter_notebook_config.py ] ; then - sed '/Extra static path for JupyROOT - start/','/Extra static path for JupyROOT - end/'d -i /etc/jupyter/jupyter_notebook_config.py + sed '/Extra static paths for JupyROOT - start/','/Extra static paths for JupyROOT - end/'d -i /etc/jupyter/jupyter_notebook_config.py if [ ! -s /etc/jupyter/jupyter_notebook_config.py ] ; then rm /etc/jupyter/jupyter_notebook_config.py rmdir /etc/jupyter 2>/dev/null || : fi fi if [ -e /etc/jupyter/jupyter_server_config.py ] ; then - sed '/Extra static path for JupyROOT - start/','/Extra static path for JupyROOT - end/'d -i /etc/jupyter/jupyter_server_config.py + sed '/Extra static paths for JupyROOT - start/','/Extra static paths for JupyROOT - end/'d -i /etc/jupyter/jupyter_server_config.py if [ ! -s /etc/jupyter/jupyter_server_config.py ] ; then rm /etc/jupyter/jupyter_server_config.py rmdir /etc/jupyter 2>/dev/null || : @@ -2895,6 +2705,8 @@ fi %{_bindir}/hadd %{_bindir}/root %{_bindir}/root.exe +%{_bindir}/rootbrowse +%{_bindir}/rootls %{_bindir}/rootn.exe %{_bindir}/rootreadspeed %{_bindir}/roots @@ -2913,7 +2725,7 @@ fi %files icons %{_datadir}/%{name}/icons -%files fonts +%files font-files %{_datadir}/%{name}/fonts %files tutorial @@ -2947,6 +2759,7 @@ 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 @@ -2976,6 +2789,7 @@ fi %{_pkgdocdir}/LICENSE %doc %{_pkgdocdir}/DEVELOPMENT.md %doc %{_pkgdocdir}/ReleaseNotes +%doc %{_pkgdocdir}/root_citation.bib %license LICENSE LGPL2_1.txt %files multiproc -f includelist-core-multiproc @@ -3004,33 +2818,26 @@ fi %files -n python%{python3_pkgversion}-%{name} -f includelist-bindings-pyroot %{python3_sitearch}/cppyy -%{python3_sitearch}/cppyy_backend %{python3_sitearch}/ROOT -%{python3_sitearch}/ROOT-*.egg-info -%{python3_sitearch}/libcppyy%{python3_version_uscore}.so -%{python3_sitearch}/libcppyy_backend%{python3_version_uscore}.so -%{python3_sitearch}/libROOTPythonizations%{python3_version_uscore}%{python3_ext_suffix} -%{_libdir}/%{name}/libcppyy%{python3_version_uscore}.* -%{_libdir}/%{name}/libcppyy_backend%{python3_version_uscore}.* +%{python3_sitearch}/ROOT-*.dist-info +%{_libdir}/%{name}/libCPyCppyy.* %dir %{_includedir}/%{name}/CPyCppyy %files -n python%{python3_pkgversion}-jupyroot -%{python3_sitearch}/JupyROOT -%{python3_sitearch}/JupyROOT-*.egg-info -%{python3_sitearch}/libJupyROOT%{python3_version_uscore}%{python3_ext_suffix} +%{python3_sitelib}/JupyROOT +%{python3_sitelib}/JupyROOT-*.dist-info %{_datadir}/jupyter/kernels/python%{python3_pkgversion}-jupyroot +%{_bindir}/rootnb.exe %doc bindings/jupyroot/README.md - -%files -n python%{python3_pkgversion}-jsmva -%{python3_sitelib}/JsMVA -%{python3_sitelib}/JsMVA-*.egg-info +%doc bindings/jupyroot/JupyROOT-on-EPEL %if %{distrdf} %files -n python%{python3_pkgversion}-distrdf %{python3_sitelib}/DistRDF -%{python3_sitelib}/DistRDF-*.egg-info +%{python3_sitelib}/DistRDF-*.dist-info %endif +%if %{rrr} %files r -f includelist-bindings-r %{_libdir}/%{name}/libRInterface.* %{_libdir}/%{name}/libRInterface_rdict.pcm @@ -3040,6 +2847,7 @@ 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.* @@ -3174,6 +2982,10 @@ fi %{_libdir}/%{name}/libRecorder.* %{_libdir}/%{name}/libRecorder_rdict.pcm +%files gui-treemap -f includelist-gui-treemap +%{_libdir}/%{name}/libROOTTreeMap.* +%{_libdir}/%{name}/libROOTTreeMap_rdict.pcm + %files hbook -f includelist-hist-hbook %{_bindir}/g2root %{_bindir}/h2root @@ -3201,11 +3013,6 @@ fi %{_libdir}/%{name}/libSpectrumPainter.* %{_libdir}/%{name}/libSpectrumPainter_rdict.pcm -%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 @@ -3220,7 +3027,6 @@ fi %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.* @@ -3293,8 +3099,6 @@ fi %{_libdir}/%{name}/libMinuit2_rdict.pcm %dir %{_includedir}/%{name}/Minuit2 %{_datadir}/%{name}/plugins/ROOT@@Math@@Minimizer/P010_Minuit2Minimizer.C -%{_datadir}/%{name}/plugins/TVirtualFitter/P030_TFitterMinuit.C -%{_datadir}/%{name}/plugins/TVirtualFitter/P040_TFitterFumili.C %files mlp -f includelist-math-mlp %{_libdir}/%{name}/libMLP.* @@ -3397,48 +3201,6 @@ fi %{_datadir}/%{name}/plugins/TSystem/P040_TXNetSystem.C %{_datadir}/%{name}/plugins/ROOT@@Internal@@RRawFile/P020_RRawFileNetXNG.C -%files proof -f includelist-proof-proof -%{_bindir}/proofserv -%{_bindir}/proofserv.exe -%{_bindir}/xpdtest -%{_mandir}/man1/proofserv.1* -%{_mandir}/man1/xpdtest.1* -%{_libdir}/%{name}/libProof.* -%{_libdir}/%{name}/libProof_rdict.pcm -%{_datadir}/%{name}/plugins/TChain/P010_TProofChain.C -%{_datadir}/%{name}/plugins/TDataSetManager/P010_TDataSetManagerFile.C -%{_datadir}/%{name}/plugins/TProof/P010_TProofCondor.C -%{_datadir}/%{name}/plugins/TProof/P020_TProofSuperMaster.C -%{_datadir}/%{name}/plugins/TProof/P030_TProofLite.C -%{_datadir}/%{name}/plugins/TProof/P040_TProof.C -%{_datadir}/%{name}/valgrind-root.supp - -%files proof-bench -f includelist-proof-proofbench -%{_libdir}/%{name}/libProofBench.* -%{_libdir}/%{name}/libProofBench_rdict.pcm -%{_datadir}/%{name}/proof - -%files proof-player -f includelist-proof-proofplayer -%{_libdir}/%{name}/libProofDraw.* -%{_libdir}/%{name}/libProofDraw_rdict.pcm -%{_libdir}/%{name}/libProofPlayer.* -%{_libdir}/%{name}/libProofPlayer_rdict.pcm -%{_datadir}/%{name}/plugins/TProofMonSender/P010_TProofMonSenderML.C -%{_datadir}/%{name}/plugins/TProofMonSender/P020_TProofMonSenderSQL.C -%{_datadir}/%{name}/plugins/TVirtualProofPlayer/P010_TProofPlayer.C -%{_datadir}/%{name}/plugins/TVirtualProofPlayer/P020_TProofPlayerRemote.C -%{_datadir}/%{name}/plugins/TVirtualProofPlayer/P030_TProofPlayerLocal.C -%{_datadir}/%{name}/plugins/TVirtualProofPlayer/P040_TProofPlayerSlave.C -%{_datadir}/%{name}/plugins/TVirtualProofPlayer/P050_TProofPlayerSuperMaster.C -%{_datadir}/%{name}/plugins/TVirtualProofPlayer/P060_TProofPlayerLite.C - -%files proof-sessionviewer -f includelist-gui-sessionviewer -%{_libdir}/%{name}/libSessionViewer.* -%{_libdir}/%{name}/libSessionViewer_rdict.pcm -%{_datadir}/%{name}/plugins/TProofProgressDialog/P010_TProofProgressDialog.C -%{_datadir}/%{name}/plugins/TProofProgressLog/P010_TProofProgressLog.C -%{_datadir}/%{name}/plugins/TSessionViewer/P010_TSessionViewer.C - %if %{roofit} %files roofit -f includelist-roofit-roofit %{_libdir}/%{name}/libRooFit.* @@ -3462,25 +3224,21 @@ fi %{_libdir}/%{name}/libRooBatchCompute.* %{_libdir}/%{name}/libRooBatchCompute_* -%if %{dataframe} -%files roofit-dataframe-helpers -f includelist-roofit-RDataFrameHelpers -%{_libdir}/%{name}/libRooFitRDataFrameHelpers.* -%{_libdir}/%{name}/libRooFitRDataFrameHelpers_rdict.pcm -%endif - %files roofit-hs3 -f includelist-roofit-hs3 %{_libdir}/%{name}/libRooFitHS3.* %{_libdir}/%{name}/libRooFitHS3_rdict.pcm %dir %{_includedir}/%{name}/RooFitHS3 -%{_datadir}/%{name}/RooFitHS3_wsexportkeys.json -%{_datadir}/%{name}/RooFitHS3_wsfactoryexpressions.json %files roofit-jsoninterface -f includelist-roofit-jsoninterface %{_libdir}/%{name}/libRooFitJSONInterface.* %{_libdir}/%{name}/libRooFitJSONInterface_rdict.pcm %dir %{_includedir}/%{name}/RooFit -%if %{?fedora}%{!?fedora:0} >= 40 +%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 @@ -3513,26 +3271,11 @@ fi %dir %{_includedir}/%{name}/RooFit/xRooFit %endif -%files sql-mysql -f includelist-sql-mysql -%{_libdir}/%{name}/libRMySQL.* -%{_libdir}/%{name}/libRMySQL_rdict.pcm -%{_datadir}/%{name}/plugins/TSQLServer/P010_TMySQLServer.C - -%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 @@ -3550,36 +3293,38 @@ fi %exclude %{_includedir}/%{name}/TMVA/RSofieReader.hxx %exclude %{_includedir}/%{name}/TMVA/RStandardScaler.hxx %exclude %{_includedir}/%{name}/TMVA/RTensorUtils.hxx -%exclude %{_includedir}/%{name}/TMVA/TreeInference/BranchlessTree.hxx -%exclude %{_includedir}/%{name}/TMVA/TreeInference/Forest.hxx -%exclude %{_includedir}/%{name}/TMVA/TreeInference/Objectives.hxx -%exclude %{_includedir}/%{name}/TMVA/TreeInference/PythonHelpers.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 -%dir %{_includedir}/%{name}/TMVA/TreeInference %{_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 -%{_includedir}/%{name}/TMVA/TreeInference/BranchlessTree.hxx -%{_includedir}/%{name}/TMVA/TreeInference/Forest.hxx -%{_includedir}/%{name}/TMVA/TreeInference/Objectives.hxx -%{_includedir}/%{name}/TMVA/TreeInference/PythonHelpers.hxx +%dir %{_includedir}/%{name}/TMVA/BatchGenerator +%{_includedir}/%{name}/TMVA/BatchGenerator/RBatchGenerator.hxx +%{_includedir}/%{name}/TMVA/BatchGenerator/RBatchLoader.hxx +%{_includedir}/%{name}/TMVA/BatchGenerator/RChunkConstructor.hxx +%{_includedir}/%{name}/TMVA/BatchGenerator/RChunkLoader.hxx %endif %files tmva-python -f includelist-tmva-pymva %{_libdir}/%{name}/libPyMVA.* %{_libdir}/%{name}/libPyMVA_rdict.pcm +%if %{rrr} %files tmva-r -f includelist-tmva-rmva %{_libdir}/%{name}/libRMVA.* %{_libdir}/%{name}/libRMVA_rdict.pcm +%endif %files tmva-sofie -f includelist-tmva-sofie %{_libdir}/%{name}/libROOTTMVASofie.* @@ -3628,11 +3373,9 @@ fi %{_libdir}/%{name}/libUnfold_rdict.pcm %files cli -%{_bindir}/rootbrowse %{_bindir}/rootcp %{_bindir}/rootdrawtree %{_bindir}/rooteventselector -%{_bindir}/rootls %{_bindir}/rootmkdir %{_bindir}/rootmv %{_bindir}/rootprint @@ -3640,21 +3383,12 @@ fi %{_bindir}/rootslimtree %{_datadir}/%{name}/cli -%files notebook -%{_bindir}/rootnb.exe -%{_datadir}/%{name}/notebook -%doc %{_pkgdocdir}/JupyROOT-on-EPEL - %files gui-webdisplay -f includelist-gui-webdisplay %{_libdir}/%{name}/libROOTWebDisplay.* %{_libdir}/%{name}/libROOTWebDisplay_rdict.pcm +%{_datadir}/%{name}/runfirefox.sh %{_datadir}/%{name}/ui5 -%ifarch %{qt5_qtwebengine_arches} -%files gui-qt5webdisplay -%{_libdir}/%{name}/libROOTQt5WebDisplay.* -%endif - %ifarch %{qt6_qtwebengine_arches} %files gui-qt6webdisplay %{_libdir}/%{name}/libROOTQt6WebDisplay.* @@ -3666,12 +3400,49 @@ fi %{_datadir}/%{name}/plugins/TCanvasImp/P010_TWebCanvas.C %{_datadir}/%{name}/plugins/TControlBarImp/P010_TWebControlBar.C -%if %{root7} +%files gui-browsable -f includelist-gui-browsable +%{_libdir}/%{name}/libROOTBrowsable.* +%{_libdir}/%{name}/libROOTBrowsable_rdict.pcm +%{_libdir}/%{name}/libROOTBranchBrowseProvider.* +%{_libdir}/%{name}/libROOTGeoBrowseProvider.* +%{_libdir}/%{name}/libROOTLeafDraw6Provider.* +%{_libdir}/%{name}/libROOTNTupleBrowseProvider.* +%{_libdir}/%{name}/libROOTNTupleDraw6Provider.* +%{_libdir}/%{name}/libROOTObjectDraw6Provider.* + +%files gui-browserv7 -f includelist-gui-browserv7 +%{_libdir}/%{name}/libROOTBrowserv7.* +%{_libdir}/%{name}/libROOTBrowserv7_rdict.pcm +%{_libdir}/%{name}/libROOTBrowserGeomWidget.* +%{_libdir}/%{name}/libROOTBrowserTCanvasWidget.* +%{_libdir}/%{name}/libROOTBrowserTreeWidget.* +%{_libdir}/%{name}/libROOTBrowserWidgets.* +%{_datadir}/%{name}/plugins/TBrowserImp/P030_RWebBrowserImp.C + +%files geom-checker -f includelist-geom-geomchecker +%{_libdir}/%{name}/libGeomChecker.* +%{_libdir}/%{name}/libGeomChecker_rdict.pcm +%{_datadir}/%{name}/plugins/TVirtualGeoChecker/P010_TGeoChecker.C + %files geom-webviewer -f includelist-geom-webviewer %{_libdir}/%{name}/libROOTGeomViewer.* %{_libdir}/%{name}/libROOTGeomViewer_rdict.pcm %{_datadir}/%{name}/plugins/TVirtualGeoPainter/P020_RGeoPainter.C +%files tree-ntuple -f includelist-tree-ntuple +%{_libdir}/%{name}/libROOTNTuple.* +%{_libdir}/%{name}/libROOTNTuple_rdict.pcm +%dir %{_includedir}/%{name}/ROOT/libdaos_mock + +%files tree-ntuple-browse -f includelist-tree-ntuplebrowse +%{_libdir}/%{name}/libROOTNTupleBrowse.* +%{_libdir}/%{name}/libROOTNTupleBrowse_rdict.pcm + +%files tree-ntuple-utils -f includelist-tree-ntupleutil +%{_libdir}/%{name}/libROOTNTupleUtil.* +%{_libdir}/%{name}/libROOTNTupleUtil_rdict.pcm + +%if %{root7} %files graf-gpadv7 -f includelist-graf2d-gpadv7 %{_libdir}/%{name}/libROOTGpadv7.* %{_libdir}/%{name}/libROOTGpadv7_rdict.pcm @@ -3684,29 +3455,13 @@ fi %{_libdir}/%{name}/libROOTEve.* %{_libdir}/%{name}/libROOTEve_rdict.pcm -%files gui-browsable -f includelist-gui-browsable -%{_libdir}/%{name}/libROOTBrowsable.* -%{_libdir}/%{name}/libROOTBrowsable_rdict.pcm -%{_libdir}/%{name}/libROOTBranchBrowseProvider.* -%{_libdir}/%{name}/libROOTGeoBrowseProvider.* -%{_libdir}/%{name}/libROOTHistDrawProvider.* -%{_libdir}/%{name}/libROOTLeafDraw6Provider.* +%files gui-browsable-v7 %{_libdir}/%{name}/libROOTLeafDraw7Provider.* -%{_libdir}/%{name}/libROOTNTupleBrowseProvider.* -%{_libdir}/%{name}/libROOTNTupleDraw6Provider.* %{_libdir}/%{name}/libROOTNTupleDraw7Provider.* -%{_libdir}/%{name}/libROOTObjectDraw6Provider.* %{_libdir}/%{name}/libROOTObjectDraw7Provider.* -%files gui-browserv7 -f includelist-gui-browserv7 -%{_libdir}/%{name}/libROOTBrowserv7.* -%{_libdir}/%{name}/libROOTBrowserv7_rdict.pcm -%{_libdir}/%{name}/libROOTBrowserGeomWidget.* +%files gui-browserv7-v7 %{_libdir}/%{name}/libROOTBrowserRCanvasWidget.* -%{_libdir}/%{name}/libROOTBrowserTCanvasWidget.* -%{_libdir}/%{name}/libROOTBrowserTreeWidget.* -%{_libdir}/%{name}/libROOTBrowserWidgets.* -%{_datadir}/%{name}/plugins/TBrowserImp/P030_RWebBrowserImp.C %files gui-canvaspainter %{_libdir}/%{name}/libROOTCanvasPainter.* @@ -3718,29 +3473,224 @@ fi %files histv7 -f includelist-hist-histv7 %{_libdir}/%{name}/libROOTHist.* %{_libdir}/%{name}/libROOTHist_rdict.pcm - -%files hist-draw -f includelist-hist-histdrawv7 -%{_libdir}/%{name}/libROOTHistDraw.* -%{_libdir}/%{name}/libROOTHistDraw_rdict.pcm - -%files tree-ntuple -f includelist-tree-ntuple -%{_libdir}/%{name}/libROOTNTuple.* -%{_libdir}/%{name}/libROOTNTuple_rdict.pcm -%dir %{_includedir}/%{name}/ROOT/libdaos_mock - -%files tree-ntuple-utils -f includelist-tree-ntupleutil -%{_libdir}/%{name}/libROOTNTupleUtil.* -%{_libdir}/%{name}/libROOTNTupleUtil_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 +* 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) diff --git a/sources b/sources index 755c137..98e90e5 100644 --- a/sources +++ b/sources @@ -1,2 +1,3 @@ -SHA512 (root-6.30.06.tar.xz) = 10309321a8e803f1ea2019a4d8ddde6220b052ddfa1ed7dedd432201db5917da748e944b2323794317251fd0d70048b276ad7bed6e3fcd84835de7be88b4c420 -SHA512 (root-testfiles.tar.xz) = 945aef1a0cf5af672d4ab84b0ac00b76118e93008ff72447658ee82d9e955a1540af3ff7126e701418872f1d91b92ee96d4985840a519036c42732023a13f00f +SHA512 (root-6.38.00.tar.xz) = 7c452b509e8171a0cbb7c102a3d4c07333fc8535f1b2c2ab0b9f7434604f098989a78bb71c41039dd41dbbd3438ea8703939826092f075d9d730b6b53c84ac55 +SHA512 (root-testfiles.tar.xz) = 4bb7f8ca00b1427ba49f6428e9cfe5908a2ffdd2ce4134d3bc169a0629198352b5500fe0cf92c121d148e5af41f7016c96038a77794a4d37d94e6ec0a9d75670 +SHA512 (clad-2.2.tar.gz) = 6f76d706a829901fc0fcdb38b5ddad6ea8ad9186ea48a4b6b585fc62974a2cda11b96a448c25daaba0586962d6428773e7ab751236c6afa72a91d12f30f2d05e