From 03696fac625669ed83a501c9859bb7d1d78a7d6f Mon Sep 17 00:00:00 2001 From: Mattias Ellert Date: Tue, 23 Jul 2024 01:46:15 +0200 Subject: [PATCH 1/2] Update to 6.30.08 Fixes for TUri class (PCRE2 compatibility) Update ROOT's R interface for Rcpp 1.0.13 --- ...-regular-expression-for-the-scheme-p.patch | 42 ++++++ root-Fix-writing-long-strings.patch | 68 +++++++++ root-Make-TUri-class-PCRE2-compatible.patch | 56 ++++++++ ...-libtbbmalloc-in-library-import-test.patch | 40 ++++++ ...-allow-any-openssl-3.x-with-civetweb.patch | 30 ++++ root-fix-typo.patch | 133 ++++++++++++++++++ root-format-warnings-32-bit.patch | 73 ++++++++++ root-pyroot-add-python-3.13-attributes.patch | 62 ++++++++ root-r.patch | 32 +++++ root-write-array.patch | 125 ++++++++++++++++ root.spec | 110 +++++++++++---- sources | 2 +- 12 files changed, 748 insertions(+), 25 deletions(-) create mode 100644 root-Correct-the-regular-expression-for-the-scheme-p.patch create mode 100644 root-Fix-writing-long-strings.patch create mode 100644 root-Make-TUri-class-PCRE2-compatible.patch create mode 100644 root-Whitelist-libtbbmalloc-in-library-import-test.patch create mode 100644 root-allow-any-openssl-3.x-with-civetweb.patch create mode 100644 root-fix-typo.patch create mode 100644 root-format-warnings-32-bit.patch create mode 100644 root-pyroot-add-python-3.13-attributes.patch create mode 100644 root-r.patch create mode 100644 root-write-array.patch diff --git a/root-Correct-the-regular-expression-for-the-scheme-p.patch b/root-Correct-the-regular-expression-for-the-scheme-p.patch new file mode 100644 index 0000000..25999ea --- /dev/null +++ b/root-Correct-the-regular-expression-for-the-scheme-p.patch @@ -0,0 +1,42 @@ +From defef44f15aebc5eca9e34df767f3f92688d594c Mon Sep 17 00:00:00 2001 +From: Mattias Ellert +Date: Thu, 4 Jul 2024 18:21:06 +0200 +Subject: [PATCH 2/2] [core] Correct the regular expression for the scheme part + in TUri class + +RFC 3986 (https://datatracker.ietf.org/doc/html/rfc3986) defines the +scheme part of a URI as: + + scheme = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." ) + +The regular expression for finding the scheme part in the TUri class +was defined as + + ^[[:alpha:]][[:alpha:][:digit:]+-.]*$ + +This does not match the definition in the RFC, since +-. in regular +expression syntax is the range of ascii codes from '+' to '.', which +means '+', ',', '-' and '.'. I.e. the ',' is included in the regular +expression in error. This commit adds a backslash escape to the '-' so +that it is interpreted as a literal '-' sign instead of indicating a +range in the regular expression. +--- + core/base/src/TUri.cxx | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/core/base/src/TUri.cxx b/core/base/src/TUri.cxx +index 9660470556..b324d0ffea 100644 +--- a/core/base/src/TUri.cxx ++++ b/core/base/src/TUri.cxx +@@ -270,7 +270,7 @@ Bool_t TUri::SetScheme(const TString &scheme) + Bool_t TUri::IsScheme(const TString &string) + { + return TPRegexp( +- "^[[:alpha:]][[:alpha:][:digit:]+-.]*$" ++ "^[[:alpha:]][[:alpha:][:digit:]+\\-.]*$" + ).Match(string); + } + +-- +2.45.2 + diff --git a/root-Fix-writing-long-strings.patch b/root-Fix-writing-long-strings.patch new file mode 100644 index 0000000..e84c2e6 --- /dev/null +++ b/root-Fix-writing-long-strings.patch @@ -0,0 +1,68 @@ +From 638593e77b76895db85470a3303d5fe0366e8ec4 Mon Sep 17 00:00:00 2001 +From: scott snyder +Date: Wed, 6 Mar 2024 04:06:50 +0100 +Subject: [PATCH] Fix writing long strings. + +In TBufferFile::WriteFastArrayString, we had + +``` + if (n < 255) { + *this << (UChar_t)n; + } else { + *this << (UChar_t)255; + *this << n; + } +``` + +A recent commit changed the type of the n parameter from Int_t to Long64_t. +This is effectively an incompatible change in the on-disk format, but only for strings +which are at least 255 characters long. + +Further, ReadFastArrayString is still reading an Int_t, so this version of ROOT cannot +read files that it writes. + +Resolve by changing WriteFastArrayString to explicitly write an Int_t. + +Also move the bounds check on the length to before writing anything into the buffer. + +Fixes a failure seen in the unit tests of the ATLAS EventInfo package +in the dev3LCG build. +--- + io/io/src/TBufferFile.cxx | 14 +++++++------- + 1 file changed, 7 insertions(+), 7 deletions(-) + +diff --git a/io/io/src/TBufferFile.cxx b/io/io/src/TBufferFile.cxx +index 7b1fe370bb..81e0f95e02 100644 +--- a/io/io/src/TBufferFile.cxx ++++ b/io/io/src/TBufferFile.cxx +@@ -1995,13 +1995,6 @@ void TBufferFile::WriteFastArray(const Char_t *c, Long64_t n) + + void TBufferFile::WriteFastArrayString(const Char_t *c, Long64_t n) + { +- if (n < 255) { +- *this << (UChar_t)n; +- } else { +- *this << (UChar_t)255; +- *this << n; +- } +- + constexpr Int_t dataWidth = static_cast(sizeof(Char_t)); + const Int_t maxElements = (std::numeric_limits::max() - Length())/dataWidth; + if (n < 0 || n > maxElements) +@@ -2010,6 +2003,13 @@ void TBufferFile::WriteFastArrayString(const Char_t *c, Long64_t n) + return; // In case the user re-routes the error handler to not die when Fatal is called + } + ++ if (n < 255) { ++ *this << (UChar_t)n; ++ } else { ++ *this << (UChar_t)255; ++ *this << (Int_t)n; ++ } ++ + Int_t l = sizeof(Char_t)*n; + if (fBufCur + l > fBufMax) AutoExpand(fBufSize+l); + +-- +2.45.2 + diff --git a/root-Make-TUri-class-PCRE2-compatible.patch b/root-Make-TUri-class-PCRE2-compatible.patch new file mode 100644 index 0000000..e21501c --- /dev/null +++ b/root-Make-TUri-class-PCRE2-compatible.patch @@ -0,0 +1,56 @@ +From 9f696986449451d9df951891eb930231e718989b Mon Sep 17 00:00:00 2001 +From: Mattias Ellert +Date: Thu, 4 Jul 2024 18:08:32 +0200 +Subject: [PATCH 1/2] [core] Make TUri class PCRE2 compatible + +PCRE2 has a stricter regular expression syntax parsing than PCRE. +Some non-conforming regular expressions that were accepted by PCRE are +correcrly rejected by PCRE2. + +Some of the regular expressions used by the TUri class do not follow +the syntax rules and were relying on them being acceped by PCRE +anyway. This commit corrects the syntax of these expressions so that +they are now accepted by PCRE2. The corrected expressions still work +correctly with the old PCRE. +--- + core/base/src/TUri.cxx | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/core/base/src/TUri.cxx b/core/base/src/TUri.cxx +index 04aab1edb3..9660470556 100644 +--- a/core/base/src/TUri.cxx ++++ b/core/base/src/TUri.cxx +@@ -27,10 +27,10 @@ a validating parser. + + //RFC3986: + // pchar = unreserved / pct-encoded / sub-delims / ":" / "@" +-const char* const kURI_pchar = "(?:[[:alpha:][:digit:]-._~!$&'()*+,;=:@]|%[0-9A-Fa-f][0-9A-Fa-f])"; ++const char* const kURI_pchar = "(?:[[:alpha:][:digit:]\\-._~!$&'()*+,;=:@]|%[0-9A-Fa-f][0-9A-Fa-f])"; + + //unreserved characters, see chapter 2.3 +-const char* const kURI_unreserved = "[[:alpha:][:digit:]-._~]"; ++const char* const kURI_unreserved = "[[:alpha:][:digit:]\\-._~]"; + + // reserved characters, see chapter + // reserved = gen-delims / sub-delims +@@ -900,7 +900,7 @@ Bool_t TUri::IsPathAbsolute(const TString &string) + Bool_t TUri::IsPathNoscheme(const TString &string) + { + return (TPRegexp( +- TString("^(([[:alpha:][:digit:]-._~!$&'()*+,;=@]|%[0-9A-Fa-f][0-9A-Fa-f])+)(/") + TString(kURI_pchar) + "*)*$" ++ TString("^(([[:alpha:][:digit:]\\-._~!$&'()*+,;=@]|%[0-9A-Fa-f][0-9A-Fa-f])+)(/") + TString(kURI_pchar) + "*)*$" + ).Match(string) > 0); + } + +@@ -950,7 +950,7 @@ Bool_t TUri::IsPort(const TString &string) + Bool_t TUri::IsRegName(const TString &string) + { + return (TPRegexp( +- "^([[:alpha:][:digit:]-._~!$&'()*+,;=]|%[0-9A-Fa-f][0-9A-Fa-f])*$").Match(string) > 0); ++ "^([[:alpha:][:digit:]\\-._~!$&'()*+,;=]|%[0-9A-Fa-f][0-9A-Fa-f])*$").Match(string) > 0); + } + + //////////////////////////////////////////////////////////////////////////////// +-- +2.45.2 + diff --git a/root-Whitelist-libtbbmalloc-in-library-import-test.patch b/root-Whitelist-libtbbmalloc-in-library-import-test.patch new file mode 100644 index 0000000..a01c4cf --- /dev/null +++ b/root-Whitelist-libtbbmalloc-in-library-import-test.patch @@ -0,0 +1,40 @@ +From 8dc4654de6d569e5040313065fd5cd04d651fb92 Mon Sep 17 00:00:00 2001 +From: Mattias Ellert +Date: Fri, 12 Jul 2024 00:20:04 +0200 +Subject: [PATCH] [pyroot] Whitelist libtbbmalloc in library import test + + 6/1344 Test #12: pyunittests-pyroot-import-load-libs .......................................***Failed 1.35 sec +test_import (import_load_libs.ImportLoadLibs.test_import) +Test libraries loaded after importing ROOT ... ERROR +====================================================================== +ERROR: test_import (import_load_libs.ImportLoadLibs.test_import) +Test libraries loaded after importing ROOT +---------------------------------------------------------------------- +Exception: Found not whitelisted libraries after importing ROOT: + - libtbbmalloc +If the test fails with a library that is loaded on purpose, please add it to the whitelist. +---------------------------------------------------------------------- +Ran 1 test in 1.186s +FAILED (errors=1) + +This failure is seen in Fedora 41 after tbb was updated from version +2021.11.0 to version 2021.13.0 in the distribution. +--- + bindings/pyroot/pythonizations/test/import_load_libs.py | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/bindings/pyroot/pythonizations/test/import_load_libs.py b/bindings/pyroot/pythonizations/test/import_load_libs.py +index 179c76f6fd..c370a3cd42 100644 +--- a/bindings/pyroot/pythonizations/test/import_load_libs.py ++++ b/bindings/pyroot/pythonizations/test/import_load_libs.py +@@ -40,6 +40,7 @@ class ImportLoadLibs(unittest.TestCase): + 'libssl', + 'libcrypt.*', # by libssl + 'libtbb', ++ 'libtbbmalloc', + 'liburing', # by libRIO if uring option is enabled + # On centos7 libssl links against kerberos pulling in all dependencies below, removed with libssl1.1.0 + 'libgssapi_krb5', +-- +2.45.2 + diff --git a/root-allow-any-openssl-3.x-with-civetweb.patch b/root-allow-any-openssl-3.x-with-civetweb.patch new file mode 100644 index 0000000..05e2a64 --- /dev/null +++ b/root-allow-any-openssl-3.x-with-civetweb.patch @@ -0,0 +1,30 @@ +From 6952dd5ca51e7be8a8ae74b446ac268949f5f383 Mon Sep 17 00:00:00 2001 +From: Sergey Linev +Date: Mon, 10 Jun 2024 09:19:47 +0200 +Subject: [PATCH] [http] Allow to use any of openssl 3.x with civetweb + +civetweb was designed when only openssl 3.0 was existing. +Therefore name of define is `OPENSSL_API_3_0` +Meanwhile there is openssl 3.1 and 3.2. +While seems to be there is no changes in API both can +be used with civetweb. +--- + net/http/CMakeLists.txt | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/net/http/CMakeLists.txt b/net/http/CMakeLists.txt +index 02d7514400..6ef98a604b 100644 +--- a/net/http/CMakeLists.txt ++++ b/net/http/CMakeLists.txt +@@ -78,7 +78,7 @@ if(ssl) + MESSAGE(STATUS "Use SSL API VERSION 1.1 for civetweb") + target_compile_definitions(RHTTP PUBLIC -DOPENSSL_API_1_1) + set(link_ssl ON) +- elseif((${ssl_major} EQUAL "3") AND ((${ssl_minor} EQUAL "0") OR (${ssl_minor} EQUAL "1"))) ++ elseif(${ssl_major} EQUAL "3") + MESSAGE(STATUS "Use SSL API VERSION 3.${ssl_minor} for civetweb") + target_compile_definitions(RHTTP PUBLIC -DOPENSSL_API_3_0) + set(link_ssl ON) +-- +2.45.2 + diff --git a/root-fix-typo.patch b/root-fix-typo.patch new file mode 100644 index 0000000..79f906a --- /dev/null +++ b/root-fix-typo.patch @@ -0,0 +1,133 @@ +From 1df0dc67beb8053926f39b69e4a4393322de63ed Mon Sep 17 00:00:00 2001 +From: ferdymercury +Date: Sun, 25 Feb 2024 18:36:40 +0100 +Subject: [PATCH] [skip-ci] fix typo + +--- + io/io/src/TBufferFile.cxx | 26 +++++++++++++------------- + 1 file changed, 13 insertions(+), 13 deletions(-) + +diff --git a/io/io/src/TBufferFile.cxx b/io/io/src/TBufferFile.cxx +index 8d2f36cfc9..7b1fe370bb 100644 +--- a/io/io/src/TBufferFile.cxx ++++ b/io/io/src/TBufferFile.cxx +@@ -1953,7 +1953,7 @@ void TBufferFile::WriteFastArray(const Bool_t *b, Long64_t n) + if (n < 0 || n > maxElements) + { + Fatal("WriteFastArray", "Not enough space left in the buffer (1GB limit). %lld elements is greater than the max left of %d", n, maxElements); +- return; // In case the user re-route the error handler to not die when Fatal is called ++ return; // In case the user re-routes the error handler to not die when Fatal is called + } + + Int_t l = sizeof(UChar_t)*n; +@@ -1979,7 +1979,7 @@ void TBufferFile::WriteFastArray(const Char_t *c, Long64_t n) + if (n < 0 || n > maxElements) + { + Fatal("WriteFastArray", "Not enough space left in the buffer (1GB limit). %lld elements is greater than the max left of %d", n, maxElements); +- return; // In case the user re-route the error handler to not die when Fatal is called ++ return; // In case the user re-routes the error handler to not die when Fatal is called + } + + Int_t l = sizeof(Char_t)*n; +@@ -2007,7 +2007,7 @@ void TBufferFile::WriteFastArrayString(const Char_t *c, Long64_t n) + if (n < 0 || n > maxElements) + { + Fatal("WriteFastArray", "Not enough space left in the buffer (1GB limit). %lld elements is greater than the max left of %d", n, maxElements); +- return; // In case the user re-route the error handler to not die when Fatal is called ++ return; // In case the user re-routes the error handler to not die when Fatal is called + } + + Int_t l = sizeof(Char_t)*n; +@@ -2028,7 +2028,7 @@ void TBufferFile::WriteFastArray(const Short_t *h, Long64_t n) + if (n < 0 || n > maxElements) + { + Fatal("WriteFastArray", "Not enough space left in the buffer (1GB limit). %lld elements is greater than the max left of %d", n, maxElements); +- return; // In case the user re-route the error handler to not die when Fatal is called ++ return; // In case the user re-routes the error handler to not die when Fatal is called + } + + Int_t l = sizeof(Short_t)*n; +@@ -2060,7 +2060,7 @@ void TBufferFile::WriteFastArray(const Int_t *ii, Long64_t n) + if (n < 0 || n > maxElements) + { + Fatal("WriteFastArray", "Not enough space left in the buffer (1GB limit). %lld elements is greater than the max left of %d", n, maxElements); +- return; // In case the user re-route the error handler to not die when Fatal is called ++ return; // In case the user re-routes the error handler to not die when Fatal is called + } + + Int_t l = sizeof(Int_t)*n; +@@ -2091,7 +2091,7 @@ void TBufferFile::WriteFastArray(const Long_t *ll, Long64_t n) + if (n < 0 || n > maxElements) + { + Fatal("WriteFastArray", "Not enough space left in the buffer (1GB limit). %lld elements is greater than the max left of %d", n, maxElements); +- return; // In case the user re-route the error handler to not die when Fatal is called ++ return; // In case the user re-routes the error handler to not die when Fatal is called + } + + Int_t l = 8*n; +@@ -2113,7 +2113,7 @@ void TBufferFile::WriteFastArray(const ULong_t *ll, Long64_t n) + if (n < 0 || n > maxElements) + { + Fatal("WriteFastArray", "Not enough space left in the buffer (1GB limit). %lld elements is greater than the max left of %d", n, maxElements); +- return; // In case the user re-route the error handler to not die when Fatal is called ++ return; // In case the user re-routes the error handler to not die when Fatal is called + } + + Int_t l = 8*n; +@@ -2133,7 +2133,7 @@ void TBufferFile::WriteFastArray(const Long64_t *ll, Long64_t n) + if (n < 0 || n > maxElements) + { + Fatal("WriteFastArray", "Not enough space left in the buffer (1GB limit). %lld elements is greater than the max left of %d", n, maxElements); +- return; // In case the user re-route the error handler to not die when Fatal is called ++ return; // In case the user re-routes the error handler to not die when Fatal is called + } + + Int_t l = sizeof(Long64_t)*n; +@@ -2159,7 +2159,7 @@ void TBufferFile::WriteFastArray(const Float_t *f, Long64_t n) + if (n < 0 || n > maxElements) + { + Fatal("WriteFastArray", "Not enough space left in the buffer (1GB limit). %lld elements is greater than the max left of %d", n, maxElements); +- return; // In case the user re-route the error handler to not die when Fatal is called ++ return; // In case the user re-routes the error handler to not die when Fatal is called + } + + Int_t l = sizeof(Float_t)*n; +@@ -2190,7 +2190,7 @@ void TBufferFile::WriteFastArray(const Double_t *d, Long64_t n) + if (n < 0 || n > maxElements) + { + Fatal("WriteFastArray", "Not enough space left in the buffer (1GB limit). %lld elements is greater than the max left of %d", n, maxElements); +- return; // In case the user re-route the error handler to not die when Fatal is called ++ return; // In case the user re-routes the error handler to not die when Fatal is called + } + + Int_t l = sizeof(Double_t)*n; +@@ -2217,7 +2217,7 @@ void TBufferFile::WriteFastArrayFloat16(const Float_t *f, Long64_t n, TStreamerE + if (n < 0 || n > maxElements) + { + Fatal("WriteFastArray", "Not enough space left in the buffer (1GB limit). %lld elements is greater than the max left of %d", n, maxElements); +- return; // In case the user re-route the error handler to not die when Fatal is called ++ return; // In case the user re-routes the error handler to not die when Fatal is called + } + + Int_t l = sizeof(Float_t)*n; +@@ -2275,7 +2275,7 @@ void TBufferFile::WriteFastArrayDouble32(const Double_t *d, Long64_t n, TStreame + if (n < 0 || n > maxElements) + { + Fatal("WriteFastArray", "Not enough space left in the buffer (1GB limit). %lld elements is greater than the max left of %d", n, maxElements); +- return; // In case the user re-route the error handler to not die when Fatal is called ++ return; // In case the user re-routes the error handler to not die when Fatal is called + } + + Int_t l = sizeof(Float_t)*n; +@@ -2346,7 +2346,7 @@ void TBufferFile::WriteFastArray(void *start, const TClass *cl, Long64_t n, + else if (n < 0) + { + Fatal("WriteFastArray", "Negative number of elements %lld", n); +- return; // In case the user re-route the error handler to not die when Fatal is called ++ return; // In case the user re-routes the error handler to not die when Fatal is called + } + int size = cl->Size(); + +-- +2.45.2 + diff --git a/root-format-warnings-32-bit.patch b/root-format-warnings-32-bit.patch new file mode 100644 index 0000000..0cb2d62 --- /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 +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) + if(!out.empty()) out += ","; else 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 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-pyroot-add-python-3.13-attributes.patch b/root-pyroot-add-python-3.13-attributes.patch new file mode 100644 index 0000000..9ba3149 --- /dev/null +++ b/root-pyroot-add-python-3.13-attributes.patch @@ -0,0 +1,62 @@ +From 4d1486b95cd8c7850b12bd1777ea4463529f0b96 Mon Sep 17 00:00:00 2001 +From: Mattias Ellert +Date: Sat, 8 Jun 2024 17:08:48 +0200 +Subject: [PATCH] [pyroot] Add __firstlineno__ and __static_attributes__ to + blacklist + +For compatibility with Python 3.13 + +See: https://docs.python.org/3.13/whatsnew/3.13.html + +From the above page: + +* Classes have a new __firstlineno__ attribute, populated by the + compiler, with the line number of the first line of the class + definition. (Contributed by Serhiy Storchaka in gh-118465.) + +* Classes have a new __static_attributes__ attribute, populated by the + compiler, with a tuple of names of attributes of this class which + are accessed through self.X from any function in its + body. (Contributed by Irit Katriel in gh-115775.) + +Without adding the new attributes to the blacklist there are errors: + +AttributeError: 'int' object attribute 'doc' is read-only +from the __firstlineno__ attribute. + +AttributeError: 'tuple' object attribute 'doc' is read-only +from the __static_attributes__ attribute. +--- + .../python/ROOT/_pythonization/_roofit/__init__.py | 2 +- + .../pythonizations/python/ROOT/_pythonization/_tmva/__init__.py | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/bindings/pyroot/pythonizations/python/ROOT/_pythonization/_roofit/__init__.py b/bindings/pyroot/pythonizations/python/ROOT/_pythonization/_roofit/__init__.py +index 83b3b69e3b..4ebd53736d 100644 +--- a/bindings/pyroot/pythonizations/python/ROOT/_pythonization/_roofit/__init__.py ++++ b/bindings/pyroot/pythonizations/python/ROOT/_pythonization/_roofit/__init__.py +@@ -122,7 +122,7 @@ def get_defined_attributes(klass, consider_base_classes=False): + any of its base classes (except for `object`). + """ + +- blacklist = ["__dict__", "__doc__", "__hash__", "__module__", "__weakref__"] ++ blacklist = ["__dict__", "__doc__", "__hash__", "__module__", "__weakref__", "__firstlineno__", "__static_attributes__"] + + if not consider_base_classes: + return sorted([attr for attr in klass.__dict__.keys() if attr not in blacklist]) +diff --git a/bindings/pyroot/pythonizations/python/ROOT/_pythonization/_tmva/__init__.py b/bindings/pyroot/pythonizations/python/ROOT/_pythonization/_tmva/__init__.py +index b2dea5b541..72c210663d 100644 +--- a/bindings/pyroot/pythonizations/python/ROOT/_pythonization/_tmva/__init__.py ++++ b/bindings/pyroot/pythonizations/python/ROOT/_pythonization/_tmva/__init__.py +@@ -69,7 +69,7 @@ def get_defined_attributes(klass, consider_base_classes=False): + any of its base classes (except for `object`). + """ + +- blacklist = ["__dict__", "__doc__", "__hash__", "__module__", "__weakref__"] ++ blacklist = ["__dict__", "__doc__", "__hash__", "__module__", "__weakref__", "__firstlineno__", "__static_attributes__"] + + if not consider_base_classes: + return sorted([attr for attr in klass.__dict__.keys() if attr not in blacklist]) +-- +2.45.2 + diff --git a/root-r.patch b/root-r.patch new file mode 100644 index 0000000..8be2617 --- /dev/null +++ b/root-r.patch @@ -0,0 +1,32 @@ +From 141f62e800bfc54d2fdf76c0750dc6082d00910d Mon Sep 17 00:00:00 2001 +From: Mattias Ellert +Date: Sun, 21 Jul 2024 23:09:54 +0200 +Subject: [PATCH] Update ROOT's R interface for Rcpp 1.0.13 + +--- + bindings/r/inc/TRInternalFunction.h | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/bindings/r/inc/TRInternalFunction.h b/bindings/r/inc/TRInternalFunction.h +index d9bf532205..fa77cbddbc 100644 +--- a/bindings/r/inc/TRInternalFunction.h ++++ b/bindings/r/inc/TRInternalFunction.h +@@ -31,7 +31,15 @@ public: + + RCPP_GENERATE_CTOR_ASSIGN(TRInternalFunction_Impl) + ++#if RCPP_VERSION >= Rcpp_Version(1,0,13) ++ template ++ TRInternalFunction_Impl(OUT(*fun)(T...)) ++ { ++ set(Rcpp::XPtr< Rcpp::CppFunctionN >(new Rcpp::CppFunctionN(fun), false)); ++ } ++#else + #include ++#endif + void update(SEXP) {} + private: + +-- +2.45.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 +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(sizeof(UChar_t)); + const Int_t maxElements = (std::numeric_limits::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(sizeof(Char_t)); + const Int_t maxElements = (std::numeric_limits::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(sizeof(Char_t)); + const Int_t maxElements = (std::numeric_limits::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(sizeof(Short_t)); + const Int_t maxElements = (std::numeric_limits::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::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::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::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(sizeof(Long64_t)); + const Int_t maxElements = (std::numeric_limits::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(sizeof(Float_t)); + const Int_t maxElements = (std::numeric_limits::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(sizeof(Double_t)); + const Int_t maxElements = (std::numeric_limits::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(sizeof(Float_t)); + const Int_t maxElements = (std::numeric_limits::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(sizeof(Float_t)); + const Int_t maxElements = (std::numeric_limits::max() - Length())/dataWidth; + if (n < 0 || n > maxElements) +-- +2.45.2 + diff --git a/root.spec b/root.spec index bfe8824..987a737 100644 --- a/root.spec +++ b/root.spec @@ -55,9 +55,9 @@ %global __provides_exclude_from ^%{python3_sitearch}/lib.*\\.so$ Name: root -Version: 6.30.06 +Version: 6.30.08 %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 @@ -120,6 +120,32 @@ Patch14: %{name}-np32.patch Patch15: %{name}-new-zlib.patch # Only for EPEL 8 - disable tests not working with old gtest Patch16: %{name}-old-gtest.patch +# Backport from upstream +Patch17: %{name}-fix-typo.patch +Patch18: %{name}-Fix-writing-long-strings.patch +# Avoid segmentation fault on ix86 +# https://github.com/root-project/root/issues/15738 +# https://github.com/root-project/root/pull/15780 +Patch19: %{name}-write-array.patch +# Correct format warnings seen on 32 bit architectures +# https://github.com/root-project/root/pull/15732 +Patch20: %{name}-format-warnings-32-bit.patch +# Python 3.13 compatibility +# https://github.com/root-project/root/issues/15430 +# https://github.com/root-project/root/pull/15798 +Patch21: %{name}-pyroot-add-python-3.13-attributes.patch +# Backport build fix from upstream +Patch22: %{name}-allow-any-openssl-3.x-with-civetweb.patch +# Fixes for TUri class +# https://github.com/root-project/root/pull/15988 +Patch23: root-Make-TUri-class-PCRE2-compatible.patch +Patch24: root-Correct-the-regular-expression-for-the-scheme-p.patch +# Fix test failure with tbb 2021.13.0 +# https://github.com/root-project/root/pull/16016 +Patch25: root-Whitelist-libtbbmalloc-in-library-import-test.patch +# Update ROOT's R interface for Rcpp 1.0.13 +# https://github.com/root-project/root/pull/16075 +Patch26: root-r.patch BuildRequires: gcc-c++ BuildRequires: gcc-gfortran @@ -167,12 +193,17 @@ BuildRequires: qt6-qtbase-devel BuildRequires: qt6-qtwebengine-devel %endif BuildRequires: openssl-devel +%if %{?fedora}%{!?fedora:0} >= 41 +# Needed by civetweb.c in root-net-http +BuildRequires: openssl-devel-engine +%endif BuildRequires: libtool-ltdl-devel 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 @@ -891,6 +922,9 @@ from marked up sources. %package io Summary: Input/output of ROOT objects Requires: %{name}-core%{?_isa} = %{version}-%{release} +%if %{?fedora}%{!?fedora:0} +Requires: liburing-devel +%endif %description io This package provides I/O routines for ROOT objects. @@ -1151,7 +1185,7 @@ Requires: %{name}-montecarlo-eg%{?_isa} = %{version}-%{release} %description montecarlo-pythia8 This package contains the Pythia version 8 plug-in for ROOT. This -package provide the ROOT user with transparent interface to the Pythia +package provides the ROOT user with transparent interface to the Pythia (version 8) event generators for hadronic interactions. If the term "hadronic" does not ring any bells, this package is not for you. @@ -2013,6 +2047,16 @@ This package contains utility functions for ntuples. %if %{?rhel}%{!?rhel:0} == 8 %patch -P 16 -p1 %endif +%patch -P 17 -p1 +%patch -P 18 -p1 +%patch -P 19 -p1 +%patch -P 20 -p1 +%patch -P 21 -p1 +%patch -P 22 -p1 +%patch -P 23 -p1 +%patch -P 24 -p1 +%patch -P 25 -p1 +%patch -P 26 -p1 # Remove bundled sources in order to be sure they are not used # * afterimage @@ -2021,19 +2065,14 @@ rm -rf graf2d/asimage/src/libAfterImage 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 @@ -2293,24 +2332,28 @@ 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_sitearch}/JupyROOT-%{version}.dist-info echo 'Name: JupyROOT' > \ - %{buildroot}%{python3_sitearch}/JupyROOT-%{version}.egg-info + %{buildroot}%{python3_sitearch}/JupyROOT-%{version}.dist-info/METADATA echo 'Version: %{version}' >> \ - %{buildroot}%{python3_sitearch}/JupyROOT-%{version}.egg-info + %{buildroot}%{python3_sitearch}/JupyROOT-%{version}.dist-info/METADATA +mkdir %{buildroot}%{python3_sitelib}/JsMVA-%{version}.dist-info echo 'Name: JsMVA' > \ - %{buildroot}%{python3_sitelib}/JsMVA-%{version}.egg-info + %{buildroot}%{python3_sitelib}/JsMVA-%{version}.dist-info/METADATA echo 'Version: %{version}' >> \ - %{buildroot}%{python3_sitelib}/JsMVA-%{version}.egg-info + %{buildroot}%{python3_sitelib}/JsMVA-%{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 @@ -2395,6 +2438,7 @@ 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 @@ -2604,6 +2648,14 @@ tutorial-pyroot-pyroot004_NumbaDeclare-py|\ pyunittests-pyroot-numbadeclare|\ test-webgui-ping" +%if %{?fedora}%{!?fedora:0} >= 41 +# - pyunittests-pyroot-pyz-ttree-setbranchaddress +# Segfault with Python 3.13: +# https://github.com/root-project/root/issues/15799 +excluded="${excluded}|\ +pyunittests-pyroot-pyz-ttree-setbranchaddress" +%endif + %if ! %{pandas} # - test-import-pandas # - tutorial-dataframe-df026_AsNumpyArrays-py @@ -3016,7 +3068,7 @@ fi %{python3_sitearch}/cppyy %{python3_sitearch}/cppyy_backend %{python3_sitearch}/ROOT -%{python3_sitearch}/ROOT-*.egg-info +%{python3_sitearch}/ROOT-*.dist-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} @@ -3026,19 +3078,19 @@ fi %files -n python%{python3_pkgversion}-jupyroot %{python3_sitearch}/JupyROOT -%{python3_sitearch}/JupyROOT-*.egg-info +%{python3_sitearch}/JupyROOT-*.dist-info %{python3_sitearch}/libJupyROOT%{python3_version_uscore}%{python3_ext_suffix} %{_datadir}/jupyter/kernels/python%{python3_pkgversion}-jupyroot %doc bindings/jupyroot/README.md %files -n python%{python3_pkgversion}-jsmva %{python3_sitelib}/JsMVA -%{python3_sitelib}/JsMVA-*.egg-info +%{python3_sitelib}/JsMVA-*.dist-info %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 +3485,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,7 +3605,10 @@ 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 @@ -3571,7 +3625,10 @@ fi %{_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 @@ -3744,6 +3801,11 @@ fi %endif %changelog +* Mon Jul 22 2024 Mattias Ellert - 6.30.08-1 +- Update to 6.30.08 +- Fixes for TUri class (PCRE2 compatibility) +- Update ROOT's R interface for Rcpp 1.0.13 + * Wed May 15 2024 Mattias Ellert - 6.30.06-5 - Rebuilt for libarrow.so.1601 - Improved fontconfig support diff --git a/sources b/sources index 755c137..302865a 100644 --- a/sources +++ b/sources @@ -1,2 +1,2 @@ -SHA512 (root-6.30.06.tar.xz) = 10309321a8e803f1ea2019a4d8ddde6220b052ddfa1ed7dedd432201db5917da748e944b2323794317251fd0d70048b276ad7bed6e3fcd84835de7be88b4c420 +SHA512 (root-6.30.08.tar.xz) = a0cded2407c84553b5226cc3032a3e6c6aad1db4cb543c22c4e6f129632047e6edee78bd9fd03835ff6801b1e2c0d109d45a2af4884e48d95d1669915baf4aa2 SHA512 (root-testfiles.tar.xz) = 945aef1a0cf5af672d4ab84b0ac00b76118e93008ff72447658ee82d9e955a1540af3ff7126e701418872f1d91b92ee96d4985840a519036c42732023a13f00f From 108e712edc970a60c47c124cf62e1cf0695c1f5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?I=C3=B1aki=20=C3=9Acar?= Date: Sat, 19 Apr 2025 18:53:41 +0200 Subject: [PATCH 2/2] R-maint-sig mass rebuild --- root.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/root.spec b/root.spec index 987a737..3918122 100644 --- a/root.spec +++ b/root.spec @@ -57,7 +57,7 @@ Name: root Version: 6.30.08 %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 @@ -3801,6 +3801,9 @@ fi %endif %changelog +* Sat Apr 19 2025 Iñaki Úcar - 6.30.08-2 +- R-maint-sig mass rebuild + * Mon Jul 22 2024 Mattias Ellert - 6.30.08-1 - Update to 6.30.08 - Fixes for TUri class (PCRE2 compatibility)