The package rpms/root.git has added or updated architecture specific content in its spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s): https://src.fedoraproject.org/cgit/rpms/root.git/commit/?id=95f73fc33a01c2cb... https://src.fedoraproject.org/cgit/rpms/root.git/commit/?id=4d9bac38913ea0c7....
Change: +%ifarch %{ix86} +%ifarch %{ix86} %{arm}
Thanks.
Full change: ============
commit 95f73fc33a01c2cbdedf36cdb9e4fab77a7e6381 Author: Mattias Ellert ellert@ellert.se Date: Fri Jun 7 12:04:22 2024 +0200
Update to 6.32.00
Drop EPEL 8 build (now requires Python >= 3.7 ans 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
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 mattias.ellert@physics.uu.se 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<NG; i++) { diff --git a/tree/tree/test/CMakeLists.txt b/tree/tree/test/CMakeLists.txt -index 0c1a39d01e..3bafe47934 100644 +index 5bb222edc5..f29a17801d 100644 --- a/tree/tree/test/CMakeLists.txt +++ b/tree/tree/test/CMakeLists.txt -@@ -12,13 +12,9 @@ ROOT_ADD_GTEST(testTOffsetGeneration TOffsetGeneration.cxx ElementStruct.cxx Ele +@@ -17,13 +17,9 @@ endif() target_include_directories(testTOffsetGeneration PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) ROOT_STANDARD_LIBRARY_PACKAGE(SillyStruct NO_INSTALL_HEADERS HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/SillyStruct.h SOURCES SillyStruct.cxx LINKDEF SillyStructLinkDef.h DEPENDENCIES RIO) ROOT_ADD_GTEST(testBulkApi BulkApi.cxx LIBRARIES RIO Tree TreePlayer) -#FIXME: tests are having timeout on 32bit CERN VM (in docker container everything is fine), -# to be reverted after investigation. -if(NOT CMAKE_SIZEOF_VOID_P EQUAL 4) -- ROOT_ADD_GTEST(testBulkApiMultiple BulkApiMultiple.cxx LIBRARIES RIO Tree TreePlayer) +- ROOT_ADD_GTEST(testBulkApiMultiple BulkApiMultiple.cxx LIBRARIES RIO Tree TreePlayer TIMEOUT 3000) - ROOT_ADD_GTEST(testBulkApiVarLength BulkApiVarLength.cxx LIBRARIES RIO Tree TreePlayer) - ROOT_ADD_GTEST(testBulkApiSillyStruct BulkApiSillyStruct.cxx LIBRARIES RIO Tree TreePlayer SillyStruct) -endif() -+ROOT_ADD_GTEST(testBulkApiMultiple BulkApiMultiple.cxx LIBRARIES RIO Tree TreePlayer) ++ROOT_ADD_GTEST(testBulkApiMultiple BulkApiMultiple.cxx LIBRARIES RIO Tree TreePlayer TIMEOUT 3000) +ROOT_ADD_GTEST(testBulkApiVarLength BulkApiVarLength.cxx LIBRARIES RIO Tree TreePlayer) +ROOT_ADD_GTEST(testBulkApiSillyStruct BulkApiSillyStruct.cxx LIBRARIES RIO Tree TreePlayer SillyStruct) ROOT_ADD_GTEST(testTBasket TBasket.cxx LIBRARIES RIO Tree) ROOT_ADD_GTEST(testTBranch TBranch.cxx LIBRARIES RIO Tree MathCore) ROOT_ADD_GTEST(testTIOFeatures TIOFeatures.cxx LIBRARIES RIO Tree) -- -2.24.1 +2.45.1
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 mattias.ellert@physics.uu.se -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 - $<TARGET_OBJECTS:MetaCling> - 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 mattias.ellert@physics.uu.se -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<void> data(malloc(fLength * sizeof(float)), free); - -- if (tensorproto->raw_data().empty() == false) { -- auto raw_data_ptr = reinterpret_cast<float *>(const_cast<char *>(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<uint32_t *>(data.get()))[k] = -+ Rbswap_32((reinterpret_cast<const uint32_t *>(tensorproto->raw_data().c_str()))[k]); -+#endif - } else { - tensorproto->mutable_float_data()->ExtractSubrange(0, tensorproto->float_data_size(), - static_cast<float *>(data.get())); -@@ -350,9 +356,14 @@ RModel RModelParser_ONNX::Parse(std::string filename, bool verbose) - case ETensorType::INT64: { - std::shared_ptr<void> data(malloc(fLength * sizeof(int64_t)), free); - -- if (tensorproto->raw_data().empty() == false) { -- auto raw_data_ptr = reinterpret_cast<int64_t *>(const_cast<char *>(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<uint64_t *>(data.get()))[k] = -+ Rbswap_64((reinterpret_cast<const uint64_t *>(tensorproto->raw_data().c_str()))[k]); -+#endif - } else { - tensorproto->mutable_int64_data()->ExtractSubrange(0, tensorproto->int64_data_size(), - static_cast<int64_t *>(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 mattias.ellert@physics.uu.se -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-failure-on-ppc64le-and-s390x.patch b/root-failure-on-ppc64le-and-s390x.patch new file mode 100644 index 0000000..787eab5 --- /dev/null +++ b/root-failure-on-ppc64le-and-s390x.patch @@ -0,0 +1,35 @@ +From d3b5ef223500c69efadb9b8c4735247d9ba5c5ea Mon Sep 17 00:00:00 2001 +From: Mattias Ellert mattias.ellert@physics.uu.se +Date: Sun, 2 Jun 2024 07:03:42 +0200 +Subject: [PATCH] Fix test failure on ppc64le and s390x + +--- + hist/hist/test/test_tprofile2poly.cxx | 10 ++++++++-- + 1 file changed, 8 insertions(+), 2 deletions(-) + +diff --git a/hist/hist/test/test_tprofile2poly.cxx b/hist/hist/test/test_tprofile2poly.cxx +index 26b9801593..1dfa93259c 100644 +--- a/hist/hist/test/test_tprofile2poly.cxx ++++ b/hist/hist/test/test_tprofile2poly.cxx +@@ -25,10 +25,16 @@ void FillForTest(TProfile2D* tp2d, TProfile2Poly* tpp, TRandom& ran) { + } + + void globalStatsCompare(TProfile2D* tp2d, TProfile2Poly* tpp) { ++ const double relTol = 1e-12; ++ double cont1, cont2; + for(Int_t c=1; c<=3; ++c) { + ASSERT_DOUBLE_EQ(tp2d->GetMean(c), tpp->GetMean(c)); +- ASSERT_DOUBLE_EQ(tp2d->GetMeanError(c), tpp->GetMeanError(c)); +- ASSERT_DOUBLE_EQ(tp2d->GetStdDev(c), tpp->GetStdDev(c)); ++ cont1 = tp2d->GetMeanError(c); ++ cont2 = tpp->GetMeanError(c); ++ ASSERT_NEAR(cont1, cont2, relTol * cont2); ++ cont1 = tp2d->GetStdDev(c); ++ cont2 = tpp->GetStdDev(c); ++ ASSERT_NEAR(cont1, cont2, relTol * cont2); + } + } + +-- +2.45.1 + diff --git a/root-fix-one-more-broken-import-in-JsMVA.patch b/root-fix-one-more-broken-import-in-JsMVA.patch new file mode 100644 index 0000000..0393bdc --- /dev/null +++ b/root-fix-one-more-broken-import-in-JsMVA.patch @@ -0,0 +1,25 @@ +From de85dbd3344709d1c5ca87e93c87cdbce147ce5b Mon Sep 17 00:00:00 2001 +From: Mattias Ellert mattias.ellert@physics.uu.se +Date: Wed, 5 Jun 2024 08:49:14 +0200 +Subject: [PATCH] Fix one more broken import in JsMVA + +--- + bindings/pyroot/pythonizations/python/ROOT/JsMVA/JsMVAMagic.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/bindings/pyroot/pythonizations/python/ROOT/JsMVA/JsMVAMagic.py b/bindings/pyroot/pythonizations/python/ROOT/JsMVA/JsMVAMagic.py +index 57358765e4..7f56cd6dd5 100644 +--- a/bindings/pyroot/pythonizations/python/ROOT/JsMVA/JsMVAMagic.py ++++ b/bindings/pyroot/pythonizations/python/ROOT/JsMVA/JsMVAMagic.py +@@ -23,7 +23,7 @@ class JsMVAMagic(Magics): + @magic_arguments() + @argument("arg", nargs="?", default="on", help="Enable/Disable JavaScript visualisation for TMVA") + def jsmva(self, line): +- from JsMVA.JPyInterface import functions ++ from .JPyInterface import functions + + args = parse_argstring(self.jsmva, line) + if args.arg == "on": +-- +2.45.1 + diff --git a/root-fix-test-failure-on-ppc64le-and-aarch64-with-gcc-12.patch b/root-fix-test-failure-on-ppc64le-and-aarch64-with-gcc-12.patch deleted file mode 100644 index 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 mattias.ellert@physics.uu.se -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 d0f38b1..185b1c4 100644 --- a/root-fontconfig.patch +++ b/root-fontconfig.patch @@ -490,10 +490,10 @@ index ca38ed1f9c..8f1d62686b 100644 - { "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" }, diff --git a/root-format-warnings-32-bit.patch b/root-format-warnings-32-bit.patch new file mode 100644 index 0000000..3583398 --- /dev/null +++ b/root-format-warnings-32-bit.patch @@ -0,0 +1,73 @@ +From 8592c5e065b8cf46480f5a1efe0363fcf2150551 Mon Sep 17 00:00:00 2001 +From: Mattias Ellert mattias.ellert@physics.uu.se +Date: Tue, 4 Jun 2024 08:47:04 +0200 +Subject: [PATCH] Correct format - warnings seen on 32 bit architectures + +--- + core/clib/src/mmapsup.c | 2 +- + roofit/xroofit/src/xRooNode.cxx | 2 +- + tree/dataframe/src/RDFDisplay.cxx | 4 ++-- + tree/dataframe/src/RDFHelpers.cxx | 2 +- + 4 files changed, 5 insertions(+), 5 deletions(-) + +diff --git a/core/clib/src/mmapsup.c b/core/clib/src/mmapsup.c +index 81f68a2059..da46dc7ba5 100644 +--- a/core/clib/src/mmapsup.c ++++ b/core/clib/src/mmapsup.c +@@ -174,7 +174,7 @@ PTR __mmalloc_mmap_morecore(struct mdesc *mdp, int size) + if (mdp -> top != PAGE_ALIGN(mdp -> top)) { + fprintf(stderr, + "mmap_morecore error: base memory location (%p) is not aligned with %zu as required.\n", +- mdp -> top, (long)pagesize); ++ mdp -> top, pagesize); + return result; + } + mapto = mmap (mdp -> top, mapbytes, PROT_READ | PROT_WRITE, +diff --git a/roofit/xroofit/src/xRooNode.cxx b/roofit/xroofit/src/xRooNode.cxx +index f8c96fbf62..852e6997c0 100644 +--- a/roofit/xroofit/src/xRooNode.cxx ++++ b/roofit/xroofit/src/xRooNode.cxx +@@ -11075,7 +11075,7 @@ std::string cling::printValue(const xRooNode *v) + out += "{"; + out += n->GetName(); + if (out.length() > 100 && left > 0) { +- out += TString::Format(",... and %lu more", left); ++ out += TString::Format(",... and %zu more", left); + break; + } + } +diff --git a/tree/dataframe/src/RDFDisplay.cxx b/tree/dataframe/src/RDFDisplay.cxx +index 9dc555fc1d..2ef7de7ddc 100644 +--- a/tree/dataframe/src/RDFDisplay.cxx ++++ b/tree/dataframe/src/RDFDisplay.cxx +@@ -232,12 +232,12 @@ void RDisplay::Print() const + // Thus, the first column is only the Row column and the actual first column is printed + columnsToPrint = 2; + } +- Info("Print", "Only showing %lu columns out of %lu\n", columnsToPrint, fNColumns); ++ Info("Print", "Only showing %zu columns out of %zu\n", columnsToPrint, fNColumns); + allColumnsFit = false; + } + + if (fNMaxCollectionElements < 1) +- Info("Print", "No collections shown since fNMaxCollectionElements is %lu\n", fNMaxCollectionElements); ++ Info("Print", "No collections shown since fNMaxCollectionElements is %zu\n", fNMaxCollectionElements); + + auto nrRows = fTable.size(); + std::cout << DashesBetweenLines(columnsToPrint, allColumnsFit); // Print dashes in the top of the table +diff --git a/tree/dataframe/src/RDFHelpers.cxx b/tree/dataframe/src/RDFHelpers.cxx +index 4891454cc0..3490901b5d 100644 +--- a/tree/dataframe/src/RDFHelpers.cxx ++++ b/tree/dataframe/src/RDFHelpers.cxx +@@ -74,7 +74,7 @@ unsigned int ROOT::RDF::RunGraphs(std::vector<RResultHandle> handles) + const unsigned int nToRun = + std::count_if(handles.begin(), handles.end(), [](const auto &h) { return !h.IsReady(); }); + if (nToRun < handles.size()) { +- Warning("RunGraphs", "Got %lu handles from which %lu link to results which are already ready.", handles.size(), ++ Warning("RunGraphs", "Got %zu handles from which %zu link to results which are already ready.", handles.size(), + handles.size() - nToRun); + } + if (nToRun == 0u) +-- +2.45.1 + 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 mattias.ellert@physics.uu.se -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 mattias.ellert@physics.uu.se -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 mattias.ellert@physics.uu.se -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..be22620 100644 --- a/root-no-export-python-modules.patch +++ b/root-no-export-python-modules.patch @@ -1,30 +1,16 @@ -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() +--- root-6.32.00/bindings/pyroot/pythonizations/CMakeLists.txt 2024-05-28 06:06:46.000000000 +0200 ++++ root-6.32.00/bindings/pyroot/pythonizations/CMakeLists.txt 2024-05-29 09:47:08.960324940 +0200 +@@ -189,11 +189,10 @@ + # 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) ++target_link_libraries(PyROOT INTERFACE cppyy_backend cppyy)
- # Install library -- install(TARGETS ${libname} EXPORT ${CMAKE_PROJECT_NAME}Exports -- RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT libraries -+ install(TARGETS ${libname} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT libraries - LIBRARY DESTINATION ${CMAKE_INSTALL_PYTHONDIR} COMPONENT libraries - ARCHIVE DESTINATION ${CMAKE_INSTALL_PYTHONDIR} COMPONENT libraries) - -diff -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}) - - # Install library -- install(TARGETS ${libname} EXPORT ${CMAKE_PROJECT_NAME}Exports -- RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT libraries -+ install(TARGETS ${libname} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT libraries - LIBRARY DESTINATION ${CMAKE_INSTALL_PYTHONDIR} COMPONENT libraries - ARCHIVE DESTINATION ${CMAKE_INSTALL_PYTHONDIR} COMPONENT libraries) + # Install library +-install(TARGETS ${libname} EXPORT ${CMAKE_PROJECT_NAME}Exports +- RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT libraries ++install(TARGETS ${libname} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT libraries + LIBRARY DESTINATION ${CMAKE_INSTALL_PYTHONDIR} COMPONENT libraries + ARCHIVE DESTINATION ${CMAKE_INSTALL_PYTHONDIR} COMPONENT libraries)
diff --git a/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 mattias.ellert@physics.uu.se -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<Long64_t>: - ROOT::RDF::RResultPtr<vector<Long64_t> > ROOT::RDF::RInterfaceROOT::Detail::RDF::RLoopManager,void::Take(basic_string_view<char,char_traits<char> > 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<long,vector<long> >::RTensor<long,vector<long> >(TMVA::Experimental::RTensor<long,vector<long> >&&) => - TypeError: takes at most 1 arguments (3 given) - RTensor<long,vector<long> >::RTensor<long,vector<long> >(const TMVA::Experimental::RTensor<long,vector<long> >&) => - TypeError: takes at most 1 arguments (3 given) - RTensor<long,vector<long> >::RTensor<long,vector<long> >(shared_ptr<vector<long> > container, vector<unsigned int> shape, TMVA::Experimental::MemoryLayout layout = MemoryLayout::RowMajor) => - TypeError: could not convert argument 1 - RTensor<long,vector<long> >::RTensor<long,vector<long> >(vector<unsigned int> shape, TMVA::Experimental::MemoryLayout layout = MemoryLayout::RowMajor) => - TypeError: takes at most 2 arguments (3 given) - RTensor<long,vector<long> >::RTensor<long,vector<long> >(long* data, vector<unsigned int> shape, vector<unsigned int> strides, TMVA::Experimental::MemoryLayout layout = MemoryLayout::RowMajor) => - TypeError: could not convert argument 1 (could not convert argument to buffer or nullptr) - RTensor<long,vector<long> >::RTensor<long,vector<long> >(long* data, vector<unsigned int> 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 mattias.ellert@physics.uu.se -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::TestParamInfoHFFixture::ParamType 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-out-of-bounds.patch b/root-out-of-bounds.patch new file mode 100644 index 0000000..fbae2ea --- /dev/null +++ b/root-out-of-bounds.patch @@ -0,0 +1,26 @@ +From 069359fe9e6c36a4287a64d3356246d516409149 Mon Sep 17 00:00:00 2001 +From: Jonas Rembser jonas.rembser@cern.ch +Date: Tue, 4 Jun 2024 12:53:53 +0200 +Subject: [PATCH] [RF] Set size of offsets vector in LikelihoodJob correctly + +When `std::copy`ing into a vector, it needs to have the right size +before. Doing only `std::reserve` is not enough. + +Fixes #15730. +--- + roofit/roofitcore/src/TestStatistics/LikelihoodJob.cxx | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/roofit/roofitcore/src/TestStatistics/LikelihoodJob.cxx b/roofit/roofitcore/src/TestStatistics/LikelihoodJob.cxx +index 85c3d02c02ccf..42d191833d14c 100644 +--- a/roofit/roofitcore/src/TestStatistics/LikelihoodJob.cxx ++++ b/roofit/roofitcore/src/TestStatistics/LikelihoodJob.cxx +@@ -93,7 +93,7 @@ void LikelihoodJob::update_state() + assert(!more); + auto offsets_message_begin = offsets_message.data<ROOT::Math::KahanSum<double>>(); + std::size_t N_offsets = offsets_message.size() / sizeof(ROOT::Math::KahanSum<double>); +- shared_offset_.offsets().reserve(N_offsets); ++ shared_offset_.offsets().resize(N_offsets); + auto offsets_message_end = offsets_message_begin + N_offsets; + std::copy(offsets_message_begin, offsets_message_end, shared_offset_.offsets().begin()); + } 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 mattias.ellert@physics.uu.se -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 - $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/v7/inc> - ) - --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 <pcre2.h> -+#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 <pcre.h> -+#endif - - #include <vector> - #include <stdexcept> - - 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-stress.patch b/root-stress.patch new file mode 100644 index 0000000..bf7f468 --- /dev/null +++ b/root-stress.patch @@ -0,0 +1,32 @@ +From 706c94ca916387287f7459c984d61439e52c1aba Mon Sep 17 00:00:00 2001 +From: Mattias Ellert mattias.ellert@physics.uu.se +Date: Sun, 2 Jun 2024 06:19:43 +0200 +Subject: [PATCH] Adjust stressGraphics.ref + +--- + test/stressGraphics.ref | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/test/stressGraphics.ref b/test/stressGraphics.ref +index 37077a2fb9..9d5cd0352d 100644 +--- a/test/stressGraphics.ref ++++ b/test/stressGraphics.ref +@@ -7,13 +7,13 @@ Test# PS1Ref# PS1Err# PDFRef# PDFErr# JPGRef# JPGErr# PNGRef# PN + 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 100 19851 2400 12199 900 9283 100 ++ 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 14444 50 34063 2000 32033 1200 12864 150 + 12 7674 100 13533 50 83557 3000 38505 4000 7720 150 + 13 5600 400 13242 300 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 1000 10437 5000 ++ 15 15690 5000 17179 200 23076 9500 14232 1500 10437 5000 + 16 28072 400 23287 200 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 +-- +2.45.1 + 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 mattias.ellert@physics.uu.se -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<bool> 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-write-array.patch b/root-write-array.patch new file mode 100644 index 0000000..30b5945 --- /dev/null +++ b/root-write-array.patch @@ -0,0 +1,125 @@ +From a7be6f726b13a7ccf1c46dec35f53520781159df Mon Sep 17 00:00:00 2001 +From: Mattias Ellert mattias.ellert@physics.uu.se +Date: Fri, 7 Jun 2024 06:49:39 +0200 +Subject: [PATCH] Put back check for n = 0 + +--- + io/io/src/TBufferFile.cxx | 25 ++++++++++++++++++++++++- + 1 file changed, 24 insertions(+), 1 deletion(-) + +diff --git a/io/io/src/TBufferFile.cxx b/io/io/src/TBufferFile.cxx +index 81e0f95e02..b5b7ef9831 100644 +--- a/io/io/src/TBufferFile.cxx ++++ b/io/io/src/TBufferFile.cxx +@@ -1948,6 +1948,8 @@ void TBufferFile::WriteArrayDouble32(const Double_t *d, Int_t n, TStreamerElemen + + void TBufferFile::WriteFastArray(const Bool_t *b, Long64_t n) + { ++ if (n == 0) return; ++ + constexpr Int_t dataWidth = static_cast<Int_t>(sizeof(UChar_t)); + const Int_t maxElements = (std::numeric_limits<Int_t>::max() - Length())/dataWidth; + if (n < 0 || n > maxElements) +@@ -1974,6 +1976,8 @@ void TBufferFile::WriteFastArray(const Bool_t *b, Long64_t n) + + void TBufferFile::WriteFastArray(const Char_t *c, Long64_t n) + { ++ if (n == 0) return; ++ + constexpr Int_t dataWidth = static_cast<Int_t>(sizeof(Char_t)); + const Int_t maxElements = (std::numeric_limits<Int_t>::max() - Length())/dataWidth; + if (n < 0 || n > maxElements) +@@ -1995,6 +1999,8 @@ void TBufferFile::WriteFastArray(const Char_t *c, Long64_t n) + + void TBufferFile::WriteFastArrayString(const Char_t *c, Long64_t n) + { ++ if (n == 0) return; ++ + constexpr Int_t dataWidth = static_cast<Int_t>(sizeof(Char_t)); + const Int_t maxElements = (std::numeric_limits<Int_t>::max() - Length())/dataWidth; + if (n < 0 || n > maxElements) +@@ -2023,6 +2029,8 @@ void TBufferFile::WriteFastArrayString(const Char_t *c, Long64_t n) + + void TBufferFile::WriteFastArray(const Short_t *h, Long64_t n) + { ++ if (n == 0) return; ++ + constexpr Int_t dataWidth = static_cast<Int_t>(sizeof(Short_t)); + const Int_t maxElements = (std::numeric_limits<Int_t>::max() - Length())/dataWidth; + if (n < 0 || n > maxElements) +@@ -2054,7 +2062,8 @@ void TBufferFile::WriteFastArray(const Short_t *h, Long64_t n) + + void TBufferFile::WriteFastArray(const Int_t *ii, Long64_t n) + { +- ++ if (n == 0) return; ++ + constexpr Int_t dataWidth = 4; + const Int_t maxElements = (std::numeric_limits<Int_t>::max() - Length())/dataWidth; + if (n < 0 || n > maxElements) +@@ -2086,6 +2095,8 @@ void TBufferFile::WriteFastArray(const Int_t *ii, Long64_t n) + + void TBufferFile::WriteFastArray(const Long_t *ll, Long64_t n) + { ++ if (n == 0) return; ++ + constexpr Int_t dataWidth = 8; + const Int_t maxElements = (std::numeric_limits<Int_t>::max() - Length())/dataWidth; + if (n < 0 || n > maxElements) +@@ -2108,6 +2119,8 @@ void TBufferFile::WriteFastArray(const Long_t *ll, Long64_t n) + + void TBufferFile::WriteFastArray(const ULong_t *ll, Long64_t n) + { ++ if (n == 0) return; ++ + constexpr Int_t dataWidth = 8; + const Int_t maxElements = (std::numeric_limits<Int_t>::max() - Length())/dataWidth; + if (n < 0 || n > maxElements) +@@ -2128,6 +2141,8 @@ void TBufferFile::WriteFastArray(const ULong_t *ll, Long64_t n) + + void TBufferFile::WriteFastArray(const Long64_t *ll, Long64_t n) + { ++ if (n == 0) return; ++ + constexpr Int_t dataWidth = static_cast<Int_t>(sizeof(Long64_t)); + const Int_t maxElements = (std::numeric_limits<Int_t>::max() - Length())/dataWidth; + if (n < 0 || n > maxElements) +@@ -2154,6 +2169,8 @@ void TBufferFile::WriteFastArray(const Long64_t *ll, Long64_t n) + + void TBufferFile::WriteFastArray(const Float_t *f, Long64_t n) + { ++ if (n == 0) return; ++ + constexpr Int_t dataWidth = static_cast<Int_t>(sizeof(Float_t)); + const Int_t maxElements = (std::numeric_limits<Int_t>::max() - Length())/dataWidth; + if (n < 0 || n > maxElements) +@@ -2185,6 +2202,8 @@ void TBufferFile::WriteFastArray(const Float_t *f, Long64_t n) + + void TBufferFile::WriteFastArray(const Double_t *d, Long64_t n) + { ++ if (n == 0) return; ++ + constexpr Int_t dataWidth = static_cast<Int_t>(sizeof(Double_t)); + const Int_t maxElements = (std::numeric_limits<Int_t>::max() - Length())/dataWidth; + if (n < 0 || n > maxElements) +@@ -2212,6 +2231,8 @@ void TBufferFile::WriteFastArray(const Double_t *d, Long64_t n) + + void TBufferFile::WriteFastArrayFloat16(const Float_t *f, Long64_t n, TStreamerElement *ele) + { ++ if (n == 0) return; ++ + constexpr Int_t dataWidth = static_cast<Int_t>(sizeof(Float_t)); + const Int_t maxElements = (std::numeric_limits<Int_t>::max() - Length())/dataWidth; + if (n < 0 || n > maxElements) +@@ -2270,6 +2291,8 @@ void TBufferFile::WriteFastArrayFloat16(const Float_t *f, Long64_t n, TStreamerE + + void TBufferFile::WriteFastArrayDouble32(const Double_t *d, Long64_t n, TStreamerElement *ele) + { ++ if (n == 0) return; ++ + constexpr Int_t dataWidth = static_cast<Int_t>(sizeof(Float_t)); + const Int_t maxElements = (std::numeric_limits<Int_t>::max() - Length())/dataWidth; + if (n < 0 || n > maxElements) +-- +2.45.2 + diff --git a/root.spec b/root.spec index bfe8824..c39adee 100644 --- a/root.spec +++ b/root.spec @@ -1,47 +1,16 @@ -# 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} -%endif
-%if %{?rhel}%{!?rhel:0} == 8 -# Requires nlohmann json version 3.9 or later, RHEL 8 has version 3.6 -%global bundlejson 1 -%else %global bundlejson 0 -%endif
-%if %{?fedora}%{!?fedora:0} || %{?rhel}%{!?rhel:0} == 8 +%if %{?fedora}%{!?fedora:0} %ifarch %{ix86} %{arm} %global pandas 0 %else @@ -55,9 +24,9 @@ %global __provides_exclude_from ^%{python3_sitearch}/lib.*\.so$
Name: root -Version: 6.30.06 +Version: 6.32.00 %global libversion %(cut -d. -f 1-2 <<< %{version}) -Release: 5%{?dist} +Release: 1%{?dist} Summary: Numerical data analysis framework
License: LGPL-2.1-or-later @@ -92,39 +61,33 @@ 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 stress graphics reference +# https://github.com/root-project/root/pull/15735 +Patch5: %{name}-stress.patch +# Avoid segmentation fault on ix86 +# https://github.com/root-project/root/issues/15738 +# https://github.com/root-project/root/pull/15780 +Patch6: %{name}-write-array.patch +# Adjust test limit +# https://github.com/root-project/root/pull/15734 +Patch7: %{name}-failure-on-ppc64le-and-s390x.patch +# Correct format warnings seen on 32 bit architectures +# https://github.com/root-project/root/pull/15732 +Patch8: %{name}-format-warnings-32-bit.patch +# Out-of-bounds vector access +# https://github.com/root-project/root/issues/15730 +# https://github.com/root-project/root/pull/15739 +Patch9: %{name}-out-of-bounds.patch +# Fix one more broken import in JsMVA +# https://github.com/root-project/root/pull/15752 +Patch10: %{name}-fix-one-more-broken-import-in-JsMVA.patch
BuildRequires: gcc-c++ BuildRequires: gcc-gfortran BuildRequires: make -BuildRequires: cmake >= 3.16 +# root on Linux requires cmake 3.16 +# but 3.19 is needed for flexiblas support +BuildRequires: cmake >= 3.19 BuildRequires: libX11-devel BuildRequires: libXpm-devel BuildRequires: libXft-devel @@ -141,9 +104,10 @@ 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 @@ -155,7 +119,7 @@ BuildRequires: unixODBC-devel BuildRequires: libGL-devel BuildRequires: libGLU-devel BuildRequires: libpq-devel -BuildRequires: python%{python3_pkgversion}-devel +BuildRequires: python%{python3_pkgversion}-devel >= 3.7 BuildRequires: python%{python3_pkgversion}-setuptools BuildRequires: python%{python3_pkgversion}-numpy %ifarch %{qt5_qtwebengine_arches} @@ -172,23 +136,17 @@ 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 BuildRequires: R-Rcpp-devel BuildRequires: R-RInside-devel 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 @@ -361,26 +319,6 @@ 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
%description core This package contains the core libraries used by ROOT: libCore, libNew, @@ -446,6 +384,9 @@ 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 +# JsMVA python module is now a submodule of ROOT python module +Provides: python%{python3_pkgversion}-jsmva = %{version}-%{release} +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 @@ -453,12 +394,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} +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.5 %if %{?fedora}%{!?fedora: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 @@ -469,15 +416,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 @@ -594,9 +532,6 @@ 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 @@ -1801,20 +1736,6 @@ 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} @@ -1994,46 +1915,34 @@ This package contains utility functions for ntuples. %prep %setup -q -a 1
-%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
# 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 @@ -2053,6 +1962,9 @@ rm -rf js/[^f]* js/files/draw.htm js/files/online.htm rm etc/notebook/JsMVA/js/*.min.js rm etc/notebook/JsMVA/css/*.min.css
+# Additional documentation +install -p -m 644 %{SOURCE7} bindings/jupyroot + %build # This package triggers a fault in LLVM when LTO is enabled. Until LLVM # is analyzed and fixed, disable LTO @@ -2070,20 +1982,15 @@ 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} \ + -DPython3_EXECUTABLE=%{__python3} \ -Dgnuinstall:BOOL=ON \ - -Dbuiltin_afterimage:BOOL=OFF \ + -Dbuiltin_afterimage:BOOL=ON \ -Dbuiltin_cfitsio:BOOL=OFF \ -Dbuiltin_clang:BOOL=ON \ -Dbuiltin_cling:BOOL=ON \ @@ -2129,6 +2036,7 @@ LDFLAGS="-Wl,--as-needed %{?__global_ldflags}" -Dclad:BOOL=OFF \ -Dcocoa:BOOL=OFF \ -Dcuda:BOOL=OFF \ + -Dcudnn:BOOL=OFF \ -Dcxxmodules:BOOL=OFF \ -Ddaos:BOOL=OFF \ %if %{dataframe} @@ -2139,7 +2047,6 @@ LDFLAGS="-Wl,--as-needed %{?__global_ldflags}" -Ddavix:BOOL=ON \ -Ddcache:BOOL=ON \ -Ddev:BOOL=OFF \ - -Dexceptions:BOOL=ON \ -Dfcgi:BOOL=ON \ -Dfftw3:BOOL=ON \ -DFIREFOX_EXECUTABLE:PATH=/usr/bin/firefox \ @@ -2152,20 +2059,15 @@ LDFLAGS="-Wl,--as-needed %{?__global_ldflags}" -Dlibcxx:BOOL=OFF \ -Dmathmore:BOOL=ON \ -Dmemory_termination:BOOL=OFF \ - -Dminuit2:BOOL=ON \ -Dminuit2_mpi:BOOL=OFF \ -Dminuit2_omp:BOOL=OFF \ - -Dmlp: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 \ @@ -2259,9 +2161,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 \ @@ -2274,43 +2173,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}/libROOTPythonizations.so.%{version} \ + %{buildroot}%{python3_sitearch}/libROOTPythonizations%{python3_ext_suffix} +rm %{buildroot}%{python3_sitearch}/libROOTPythonizations.so.%{libversion} +rm %{buildroot}%{python3_sitearch}/libROOTPythonizations.so
# 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 -echo 'Version: %{version}' >> \ - %{buildroot}%{python3_sitearch}/JupyROOT-%{version}.egg-info -echo 'Name: JsMVA' > \ - %{buildroot}%{python3_sitelib}/JsMVA-%{version}.egg-info + %{buildroot}%{python3_sitelib}/JupyROOT-%{version}.dist-info/METADATA 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 @@ -2322,7 +2215,7 @@ 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 @@ -2391,10 +2284,10 @@ pushd %{buildroot}%{_datadir}/%{name}/plugins %if ! %{root7} rm TBrowserImp/P030_RWebBrowserImp.C %endif -rm TFile/P050_TGFALFile.C rm TGLManager/P020_TGWin32GLManager.C rm TGLManager/P030_TGOSXGLManager.C rm TProofMgr/P010_TXProofMgr.C +rm TProofMonSender/P010_TProofMonSenderML.C rm TProofServ/P010_TXProofServ.C rm TSlave/P010_TXSlave.C rm TSQLServer/P040_TOracleServer.C @@ -2516,10 +2409,6 @@ popd # 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) @@ -2532,6 +2421,10 @@ popd # reads input data over network # http://root.cern.ch/files/HiggsTauTauReduced/GluGluToHToTauTau.root (20 MB) # +# - tutorial-v7-ntuple-ntpl011_global_temperatures +# reads input data over network +# http://root.cern.ch/files/tutorials/GlobalLandTemperaturesByCity.csv +# # - gtest-net-davix-test-RRawFileDavix # reads input file over network # http://root.cern.ch/files/davix.test @@ -2586,10 +2479,10 @@ 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|\ +tutorial-v7-ntuple-ntpl011_global_temperatures|\ gtest-net-davix-test-RRawFileDavix|\ gtest-net-netxng-test-RRawFileNetXNG|\ gtest-net-netxng-test-TNetXNGFileTest|\ @@ -2607,87 +2500,36 @@ test-webgui-ping" %if ! %{pandas} # - test-import-pandas # - tutorial-dataframe-df026_AsNumpyArrays-py +# - tutorial-dataframe-df035_RDFFromPandas-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-dataframe-df035_RDFFromPandas-py|\ tutorial-roofit-rf409_NumPyPandasToRooFit-py" %endif
%ifarch %{ix86} # - gtest-tree-dataframe-test-dataframe-concurrency # "There's already an active task arena." +# +# - gtest-tree-dataframe-test-dataframe-simple +# free(): invalid pointer excluded="${excluded}|\ -gtest-tree-dataframe-test-dataframe-concurrency" +gtest-tree-dataframe-test-dataframe-concurrency|\ +gtest-tree-dataframe-test-dataframe-simple" %endif
%ifarch %{power64} -# PPC64LE specific failures -# - test-stresshistofit-interpreted -# - test-stresshistogram-interpreted -# - test-stressmathcore-interpreted -# -# Always timeout (hang?) -# - test-stressinterpreter -# - tutorial-unuran-unuranFoamTest -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 +# - test-stressgraphics(-interpreted) +# *** stack smashing detected ***: terminated # -# - 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 +# - tutorial-roostats-IntervalExamples-py +# *** Break *** segmentation violation 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" -%endif +test-stressgraphics|\ +tutorial-roostats-IntervalExamples-py" %endif
%ifarch s390x @@ -2696,19 +2538,21 @@ tutorial-v7-simple.cxx" excluded="${excluded}|\ gtest-roofit-roofitcore-test-testNaNPacker"
-# - gtest-core-base-test-CoreBaseTests # - gtest-core-dictgen-test-dictgen-base -# - gtest-core-meta-test-testTDataType +# - gtest-tree-dataframe-test-dataframe-unified-constructor # # - 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-compat # - 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-merger # - 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-parallel-writer # - gtest-tree-ntuple-v7-test-ntuple-project # - gtest-tree-ntuple-v7-test-ntuple-serialize # - gtest-tree-ntuple-v7-test-ntuple-show @@ -2716,6 +2560,8 @@ gtest-roofit-roofitcore-test-testNaNPacker" # - 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-class +# - gtest-tree-ntuple-v7-test-rfield-variant # - gtest-tree-ntuple-v7-test-rfield-vector # - gtest-tree-ntupleutil-v7-test-ntuple-importer # - gtest-tree-ntupleutil-v7-test-ntuple-inspector @@ -2726,18 +2572,9 @@ gtest-roofit-roofitcore-test-testNaNPacker" # - pyunittests-pyroot-pyz-stl-vector # - tutorial-dataframe-df006_ranges-py # - tutorial-fit-combinedFit-py -# - tutorial-fit-fitcont # - tutorial-fit-NumericalMinimization-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 # https://github.com/root-project/root/issues/12429 # # - tutorial-tree-drawsparse @@ -2748,18 +2585,20 @@ gtest-roofit-roofitcore-test-testNaNPacker" # - 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-dataframe-unified-constructor|\ 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-compat|\ 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-merger|\ 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-parallel-writer|\ gtest-tree-ntuple-v7-test-ntuple-project|\ gtest-tree-ntuple-v7-test-ntuple-serialize|\ gtest-tree-ntuple-v7-test-ntuple-show|\ @@ -2767,6 +2606,8 @@ 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-class|\ +gtest-tree-ntuple-v7-test-rfield-variant|\ gtest-tree-ntuple-v7-test-rfield-vector|\ gtest-tree-ntupleutil-v7-test-ntuple-importer|\ gtest-tree-ntupleutil-v7-test-ntuple-inspector|\ @@ -2775,36 +2616,14 @@ 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|\ 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|\ 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 -# - test-stress -# - test-stressgraphics(-interpreted) -excluded="${excluded}|\ -gtest-tree-readspeed-test-readspeed-general|\ -gtest-tree-tree-test-testTBranch|\ -test-stress$$|\ -test-stressgraphics" -%endif %endif
%if %{?fedora}%{!?fedora:0} >= 40 @@ -2818,15 +2637,21 @@ gtest-math-matrix-test-testMatrixTSparse" %endif
# Filter out parts of tests that require remote network access +# RNTuple.StdAtomic fails on ix86 (different alignment 64 bit (non)atomic) # TClingDataMemberInfo.Offset fails on s390x # https://github.com/root-project/root/issues/14512 GTEST_FILTER=-\ +%ifarch %{ix86} +RNTuple.StdAtomic:\ +%endif %ifarch s390x TClingDataMemberInfo.Offset:\ %endif RCsvDS.Remote:\ +RNTuple.OpenHTTP:\ RRawFile.Remote:\ RSqliteDS.Davix:\ +TChainParsing.DoubleSlash:\ TChainParsing.RemoteGlob:\ TFile.ReadWithoutGlobalRegistrationNet:\ TFile.ReadWithoutGlobalRegistrationWeb \ @@ -2859,38 +2684,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 || : @@ -3016,29 +2839,27 @@ fi %{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 +%{python3_sitearch}/libcppyy.so +%{python3_sitearch}/libcppyy_backend.so +%{python3_sitearch}/libROOTPythonizations%{python3_ext_suffix} +%{_libdir}/%{name}/libcppyy.* +%{_libdir}/%{name}/libcppyy_backend.* %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 +%{_datadir}/%{name}/notebook %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
%files r -f includelist-bindings-r @@ -3433,7 +3254,6 @@ fi %{_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 @@ -3554,33 +3374,30 @@ fi %dir %{_includedir}/%{name}/TMVA/DNN/CNN %dir %{_includedir}/%{name}/TMVA/DNN/RNN %license tmva/doc/LICENSE +%exclude %{_includedir}/%{name}/TMVA/RBatchGenerator.hxx +%exclude %{_includedir}/%{name}/TMVA/RBatchLoader.hxx %exclude %{_includedir}/%{name}/TMVA/RBDT.hxx +%exclude %{_includedir}/%{name}/TMVA/RChunkLoader.hxx %exclude %{_includedir}/%{name}/TMVA/RInferenceUtils.hxx %exclude %{_includedir}/%{name}/TMVA/RReader.hxx %exclude %{_includedir}/%{name}/TMVA/RSofieReader.hxx %exclude %{_includedir}/%{name}/TMVA/RStandardScaler.hxx %exclude %{_includedir}/%{name}/TMVA/RTensorUtils.hxx -%exclude %{_includedir}/%{name}/TMVA/TreeInference/BranchlessTree.hxx -%exclude %{_includedir}/%{name}/TMVA/TreeInference/Forest.hxx -%exclude %{_includedir}/%{name}/TMVA/TreeInference/Objectives.hxx -%exclude %{_includedir}/%{name}/TMVA/TreeInference/PythonHelpers.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/RBatchGenerator.hxx +%{_includedir}/%{name}/TMVA/RBatchLoader.hxx %{_includedir}/%{name}/TMVA/RBDT.hxx +%{_includedir}/%{name}/TMVA/RChunkLoader.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 %endif
%files tmva-python -f includelist-tmva-pymva @@ -3650,14 +3467,10 @@ 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} @@ -3744,6 +3557,14 @@ fi %endif
%changelog +* Mon Jun 03 2024 Mattias Ellert ellert@ellert.se - 6.32.00-1 +- Update to 6.32.00 +- Drop EPEL 8 build (now requires Python >= 3.7 ans 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 mattias.ellert@physics.uu.se - 6.30.06-5 - Rebuilt for libarrow.so.1601 - Improved fontconfig support diff --git a/sources b/sources index 755c137..a8ec13f 100644 --- a/sources +++ b/sources @@ -1,2 +1,2 @@ -SHA512 (root-6.30.06.tar.xz) = 10309321a8e803f1ea2019a4d8ddde6220b052ddfa1ed7dedd432201db5917da748e944b2323794317251fd0d70048b276ad7bed6e3fcd84835de7be88b4c420 +SHA512 (root-6.32.00.tar.xz) = 4b1015684b79aa352edd42316a3a87ae48f4330a7566230349f0a5c4e3ff49cddca79b5171128300d88575dfe2503ab1357cb3bd99d2c2a78985cc9aabd742f6 SHA512 (root-testfiles.tar.xz) = 945aef1a0cf5af672d4ab84b0ac00b76118e93008ff72447658ee82d9e955a1540af3ff7126e701418872f1d91b92ee96d4985840a519036c42732023a13f00f
commit 4d9bac38913ea0c73ef57610b910aa09bd579004 Author: Mattias Ellert mattias.ellert@physics.uu.se Date: Wed May 15 12:58:24 2024 +0200
Rebuilt for libarrow.so.1601 Improved fontconfig support
diff --git a/root-fontconfig.patch b/root-fontconfig.patch index e8ad108..d0f38b1 100644 --- a/root-fontconfig.patch +++ b/root-fontconfig.patch @@ -1,7 +1,28 @@ -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 c5f13cb25c3b803346d1a6cac483badbcf2ced62 Mon Sep 17 00:00:00 2001 +From: Mattias Ellert mattias.ellert@physics.uu.se +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 | 291 +++++++++++++++++--------- + 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 +++-- + gui/gui/src/TGApplication.cxx | 10 +- + 12 files changed, 494 insertions(+), 201 deletions(-) + +diff --git a/core/base/src/TApplication.cxx b/core/base/src/TApplication.cxx +index 992713264a..32bfc0bbb9 100644 +--- a/core/base/src/TApplication.cxx ++++ b/core/base/src/TApplication.cxx +@@ -251,18 +251,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 +35,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 +43,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 @@ +@@ -276,7 +270,6 @@ void TApplication::InitializeGraphics(Bool_t only_web) } } #endif @@ -30,10 +51,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 31114ad45d..be95419491 100644 +--- a/graf2d/asimage/CMakeLists.txt ++++ b/graf2d/asimage/CMakeLists.txt +@@ -30,6 +30,7 @@ ROOT_STANDARD_LIBRARY_PACKAGE(ASImage ${FREETYPE_LIBRARIES} ${X11_LIBRARIES} ZLIB::ZLIB @@ -41,10 +63,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 7e046f4724..137265bd4a 100644 +--- a/graf2d/asimage/src/TASImage.cxx ++++ b/graf2d/asimage/src/TASImage.cxx +@@ -117,6 +117,8 @@ extern "C" { # include <draw.h> }
@@ -53,135 +76,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(); +@@ -2595,11 +2597,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);
-- // 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; + const char *basename = gSystem->BaseName(fn); + -+ char *ttfnt = nullptr; + int ttindex = 0; + -+ FcPattern *pat, *match; ++ FcPattern *pat = nullptr, *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); ++ pat = FcNameParse ((const FcChar8*) "freeserif: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); ++ pat = FcNameParse ((const FcChar8*) "freeserif:bold"); + } + 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); ++ pat = FcNameParse ((const FcChar8*) "freeserif:bold: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); ++ pat = FcNameParse ((const FcChar8*) "freesans"); + } + 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); ++ pat = FcNameParse ((const FcChar8*) "freesans: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); ++ pat = FcNameParse ((const FcChar8*) "freesans:bold"); + } + 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); ++ pat = FcNameParse ((const FcChar8*) "freesans:bold: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); ++ pat = FcNameParse ((const FcChar8*) "freemono"); + } + 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); ++ pat = FcNameParse ((const FcChar8*) "freemono: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); ++ pat = FcNameParse ((const FcChar8*) "freemono:bold"); + } + 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); ++ pat = FcNameParse ((const FcChar8*) "freemono:bold: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); ++ pat = FcNameParse ((const FcChar8*) "standardsymbolsps"); + } + 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); ++ pat = FcNameParse ((const FcChar8*) "freeserif"); + } + 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); ++ pat = FcNameParse ((const FcChar8*) "dingbats"); + } + 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); ++ pat = FcNameParse ((const FcChar8*) "urwchanceryl"); + } -+ 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); ++ else if (gSystem->AccessPathName(fn, kReadPermission) != 0) { ++ // Font name is not a file - usae as pattern ++ pat = FcNameParse ((const FcChar8*) fn.Data()); + } + -+ FcConfigSubstitute (nullptr, pat, FcMatchPattern); -+ FcDefaultSubstitute (pat); -+ match = FcFontMatch (nullptr, pat, &result); -+ FcPatternGetString (match, FC_FILE, 0, (FcChar8**)&ttfnt); -+ FcPatternGetInteger (match, FC_INDEX, 0, &ttindex); - -- const char *ttpath = gEnv->GetValue("Root.TTFontPath", -- TROOT::GetTTFFontDir()); -- char *tmpstr = gSystem->Which(ttpath, fn, kReadPermission); -- fn = tmpstr; -- delete [] tmpstr; -+ fn = ttfnt; -+ -+ FcPatternDestroy (match); -+ FcPatternDestroy (pat); ++ 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 @@ +@@ -2623,7 +2702,7 @@ void TASImage::DrawText(Int_t x, Int_t y, const char *text, Int_t size, return; }
@@ -189,20 +178,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 d7d1b77c21..c4ebb994a4 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 +191,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 0bef9dcb95..ea96fe47ce 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 ca38ed1f9c..8f1d62686b 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 +220,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 @@ +@@ -72,6 +75,11 @@ void TTF::Init() return; }
@@ -260,180 +245,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 @@ +@@ -109,12 +117,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; +@@ -387,21 +398,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); + } + -+ return 0; -+} -+ -+//______________________________________________________________________________ -+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 (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); ++ } + -+ if (!fgInit) Init(); ++ if (!ttfont) ttfont = StrDup(fontname); + -+ 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,30 +414,28 @@ 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)", +@@ -411,28 +546,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); - if (fgFontCount) { @@ -483,180 +445,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 +454,34 @@ 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; - } - +@@ -448,19 +568,20 @@ Int_t TTF::SetTextFont(const char *fontname, Int_t italic) delete [] ttfont;
-- fgFontName[fgFontCount] = StrDup(basename); -+ fgFontID[fgFontCount] = fontid; + 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 ); + } + + return 0; +@@ -489,70 +610,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. @@ -758,14 +518,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 +572,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 eb091bbb39..a05023a3f4 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 +599,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 09ea7ffa9c..180fd5e3c1 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 <cctype> #include <cwchar> #include <fstream> @@ -812,7 +611,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 @@ +@@ -1585,56 +1586,60 @@ Bool_t TPostScript::FontEmbedType42(const char *filename)
void TPostScript::FontEmbed(void) { @@ -849,8 +648,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 +694,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 @@ +@@ -1643,12 +1648,13 @@ void TPostScript::FontEmbed(void) } else if(FontEmbedType42(ttfont)) { // nothing } else { @@ -1047,9 +725,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@"); +@@ -2837,10 +2843,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 +747,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 a874da9e1d..5454469606 100644 +--- a/graf3d/gl/CMakeLists.txt ++++ b/graf3d/gl/CMakeLists.txt +@@ -208,6 +208,7 @@ ROOT_STANDARD_LIBRARY_PACKAGE(RGL ${GL2PS_LIBRARIES} ${X11_LIBRARIES} RGlew @@ -1074,9 +759,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 776e9d286f..c4134c5980 100644 +--- a/graf3d/gl/src/TGLFontManager.cxx ++++ b/graf3d/gl/src/TGLFontManager.cxx @@ -36,6 +36,7 @@ # include "FTGLBitmapFont.h" #endif @@ -1085,16 +771,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 @@ +@@ -450,16 +451,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 +784,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; -+ FcResult result; ++ TString fontname = fileID < fgExtendedFontStart ? ++ ((TObjString*)fgFontFileArray[fileID])->String() + ".ttf" : ++ ((TObjString*)fgFontFileArray[fileID])->String(); + -+ pat = FcPatternCreate (); ++ FcPattern *pat = nullptr, *match; ++ FcResult result; + -+ 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 f84f5193d2..8a672c787c 100644 +--- a/graf3d/gl/src/TGLText.cxx ++++ b/graf3d/gl/src/TGLText.cxx @@ -32,6 +32,8 @@ # include "FTGLBitmapFont.h" #endif @@ -1344,7 +914,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 @@ +@@ -176,27 +178,35 @@ void TGLText::SetGLTextFont(Font_t fontnumber) { int fontid = fontnumber / 10;
@@ -1369,96 +939,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); -+ FcPattern *pat, *match; -+ FcResult result; ++ 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; -+ int ttindex; + -+ pat = FcPatternCreate (); ++ FcPattern *pat, *match; ++ FcResult result; + -+ 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 @@ +@@ -204,7 +214,9 @@ void TGLText::SetGLTextFont(Font_t fontnumber)
fGLTextFont = new FTGLPolygonFont(ttfont);
@@ -1469,10 +982,11 @@ 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 @@ +diff --git a/gui/gui/src/TGApplication.cxx b/gui/gui/src/TGApplication.cxx +index 72d7dbbf95..73a44fdd7f 100644 +--- a/gui/gui/src/TGApplication.cxx ++++ b/gui/gui/src/TGApplication.cxx +@@ -81,20 +81,12 @@ TGApplication::TGApplication(const char *appClassName, gROOT->SetBatch(kFALSE);
if (strcmp(appClassName, "proofserv")) { @@ -1494,3 +1008,6 @@ diff -ur root-6.28.00.orig/gui/gui/src/TGApplication.cxx root-6.28.00/gui/gui/sr }
// Create the canvas colors early so they are allocated before +-- +2.45.0 + diff --git a/root.spec b/root.spec index 207b1f5..bfe8824 100644 --- a/root.spec +++ b/root.spec @@ -41,13 +41,23 @@ %global bundlejson 0 %endif
+%if %{?fedora}%{!?fedora:0} || %{?rhel}%{!?rhel:0} == 8 +%ifarch %{ix86} %{arm} +%global pandas 0 +%else +%global pandas 1 +%endif +%else +%global pandas 0 +%endif + # Do not generate autoprovides for Python modules %global __provides_exclude_from ^%{python3_sitearch}/lib.*\.so$
Name: root Version: 6.30.06 %global libversion %(cut -d. -f 1-2 <<< %{version}) -Release: 4%{?dist} +Release: 5%{?dist} Summary: Numerical data analysis framework
License: LGPL-2.1-or-later @@ -201,7 +211,7 @@ BuildRequires: zeromq-devel >= 4.3.5 BuildRequires: cppzmq-devel %endif %endif -%if (0%{?fedora} && 0%{?__isa_bits} == 64) || 0%{?rhel} == 8 +%if %{pandas} BuildRequires: python%{python3_pkgversion}-pandas %endif BuildRequires: python%{python3_pkgversion}-rcssmin @@ -2594,7 +2604,7 @@ tutorial-pyroot-pyroot004_NumbaDeclare-py|\ pyunittests-pyroot-numbadeclare|\ test-webgui-ping"
-%if (0%{?fedora} && 0%{?__isa_bits} != 64) || 0%{?rhel} == 8 +%if ! %{pandas} # - test-import-pandas # - tutorial-dataframe-df026_AsNumpyArrays-py # - tutorial-roofit-rf409_NumPyPandasToRooFit-py @@ -2820,7 +2830,7 @@ RSqliteDS.Davix:\ TChainParsing.RemoteGlob:\ TFile.ReadWithoutGlobalRegistrationNet:\ TFile.ReadWithoutGlobalRegistrationWeb \ -%if ! ( %{?fedora}%{!?fedora:0} || %{?rhel}%{!?rhel:0} == 8 ) +%if ! %{pandas} ROOTTEST_IGNORE_PANDAS_PY3=1 \ %endif ROOTTEST_IGNORE_NUMBA_PY3=1 \ @@ -3734,6 +3744,10 @@ fi %endif
%changelog +* Wed May 15 2024 Mattias Ellert mattias.ellert@physics.uu.se - 6.30.06-5 +- Rebuilt for libarrow.so.1601 +- Improved fontconfig support + * Sun Apr 28 2024 Benjamin A. Beasley code@musicinmybrain.net - 6.30.06-4 - Do not test with Pandas on 32-bit architectures
commit 0f2b684662cd83ea098314b4a50741ab93dc99b6 Author: Benjamin A. Beasley code@musicinmybrain.net Date: Mon Feb 19 13:49:35 2024 -0500
Do not test with Pandas on 32-bit architectures
https://bugzilla.redhat.com/show_bug.cgi?id=2263999
diff --git a/root.spec b/root.spec index 3aba984..207b1f5 100644 --- a/root.spec +++ b/root.spec @@ -47,7 +47,7 @@ Name: root Version: 6.30.06 %global libversion %(cut -d. -f 1-2 <<< %{version}) -Release: 3%{?dist} +Release: 4%{?dist} Summary: Numerical data analysis framework
License: LGPL-2.1-or-later @@ -201,7 +201,7 @@ BuildRequires: zeromq-devel >= 4.3.5 BuildRequires: cppzmq-devel %endif %endif -%if %{?fedora}%{!?fedora:0} || %{?rhel}%{!?rhel:0} == 8 +%if (0%{?fedora} && 0%{?__isa_bits} == 64) || 0%{?rhel} == 8 BuildRequires: python%{python3_pkgversion}-pandas %endif BuildRequires: python%{python3_pkgversion}-rcssmin @@ -2594,7 +2594,7 @@ tutorial-pyroot-pyroot004_NumbaDeclare-py|\ pyunittests-pyroot-numbadeclare|\ test-webgui-ping"
-%if ! ( %{?fedora}%{!?fedora:0} || %{?rhel}%{!?rhel:0} == 8 ) +%if (0%{?fedora} && 0%{?__isa_bits} != 64) || 0%{?rhel} == 8 # - test-import-pandas # - tutorial-dataframe-df026_AsNumpyArrays-py # - tutorial-roofit-rf409_NumPyPandasToRooFit-py @@ -3734,6 +3734,9 @@ fi %endif
%changelog +* Sun Apr 28 2024 Benjamin A. Beasley code@musicinmybrain.net - 6.30.06-4 +- Do not test with Pandas on 32-bit architectures + * Thu Apr 25 2024 Iñaki Úcar iucar@fedoraproject.org - 6.30.06-3 - R-maint-sig mass rebuild
commit 518c033b52372bc24f8c996740dc9f45e5217df6 Author: Iñaki Úcar iucar@fedoraproject.org Date: Thu Apr 25 16:16:49 2024 +0200
R-maint-sig mass rebuild
diff --git a/root.spec b/root.spec index e5fd7eb..3aba984 100644 --- a/root.spec +++ b/root.spec @@ -47,7 +47,7 @@ Name: root Version: 6.30.06 %global libversion %(cut -d. -f 1-2 <<< %{version}) -Release: 2%{?dist} +Release: 3%{?dist} Summary: Numerical data analysis framework
License: LGPL-2.1-or-later @@ -3734,6 +3734,9 @@ fi %endif
%changelog +* Thu Apr 25 2024 Iñaki Úcar iucar@fedoraproject.org - 6.30.06-3 +- R-maint-sig mass rebuild + * Tue Apr 23 2024 Mattias Ellert mattias.ellert@physics.uu.se - 6.30.06-2 - Rebuilt for libarrow.so.1600
commit fbaff99ab697b5c5d0db6a5bf87e6ca22fdf0fab Author: Mattias Ellert mattias.ellert@physics.uu.se Date: Tue Apr 23 09:53:13 2024 +0200
Rebuilt for libarrow.so.1600
diff --git a/root.spec b/root.spec index 9632e82..e5fd7eb 100644 --- a/root.spec +++ b/root.spec @@ -47,7 +47,7 @@ Name: root Version: 6.30.06 %global libversion %(cut -d. -f 1-2 <<< %{version}) -Release: 1%{?dist} +Release: 2%{?dist} Summary: Numerical data analysis framework
License: LGPL-2.1-or-later @@ -3734,6 +3734,9 @@ fi %endif
%changelog +* Tue Apr 23 2024 Mattias Ellert mattias.ellert@physics.uu.se - 6.30.06-2 +- Rebuilt for libarrow.so.1600 + * Fri Apr 05 2024 Mattias Ellert mattias.ellert@physics.uu.se - 6.30.06-1 - Update to 6.30.06
arch-excludes@lists.fedoraproject.org