diff --git a/.gitignore b/.gitignore index 8d4084e..5556c22 100644 --- a/.gitignore +++ b/.gitignore @@ -1,26 +1 @@ -/clover2-3.5.6-git93d24a6.tar.gz -/clover2-20180207T1846.tar.gz -/clover2-20180212T1626.tar.gz -/clover2-20180216T2328.tar.gz -/clover2-20180220T0000.tar.gz -/clover2-20180225T0100.tar.gz -/clover2-20180227T2336.tar.gz -/clover2-20180304T0007.tar.gz -/clover2-20180305T2310.tar.gz -/clover2-20180308T1828.tar.gz -/clover2-20180318T1551.tar.gz -/clover2-20180401T1347.tar.gz -/clover2-20180626T1406.tar.gz -/clover2-20180713T2226.tar.gz -/clover2-20180723T1315.tar.gz -/clover2-20180801T1559.tar.gz -/clover2-20180812T1816.tar.gz -/clover2-20180824T1042.tar.gz -/clover2-20180905T1542.tar.gz -/clover2-20181112T1512.tar.gz -/clover2-20181208T2032.tar.gz -/clover2-20181230T1556.tar.gz -/clover2-20190130T1516.tar.gz -/clover2-20190321T1620.tar.gz -/clover2-20190430T1635.tar.gz -/clover2-20191231T1510.tar.gz +/clover2-*.tar.gz diff --git a/clover2-10.4.6-0001-parser.c-fix-memset-size.patch b/clover2-10.4.6-0001-parser.c-fix-memset-size.patch deleted file mode 100644 index 29e3cd0..0000000 --- a/clover2-10.4.6-0001-parser.c-fix-memset-size.patch +++ /dev/null @@ -1,45 +0,0 @@ -From 05a606b84994a94e84c6e9137ee94b961d241242 Mon Sep 17 00:00:00 2001 -From: Mamoru TASAKA -Date: Fri, 7 Aug 2020 17:31:54 +0900 -Subject: [PATCH] parser.c: fix memset size - -When compiled with clang-10.0.1, building clover2 makes cclover2 abort like: - -PWD=`pwd`; ./cclover2 -core Reflection.clcl -*** buffer overflow detected ***: terminated - -gdb log shows: - -(gdb) bt -#0 0x00007ffff7b809e5 in raise () from /lib64/libc.so.6 -#1 0x00007ffff7b69895 in abort () from /lib64/libc.so.6 -#2 0x00007ffff7bc4857 in __libc_message () from /lib64/libc.so.6 -#3 0x00007ffff7c5577a in __fortify_fail () from /lib64/libc.so.6 -#4 0x00007ffff7c54006 in __chk_fail () from /lib64/libc.so.6 -#5 0x0000000000426dfb in memset (__dest=0x7ffffffef590, __ch=0, __len=256) at /usr/include/bits/string_fortified.h:71 -#6 when_expression (node=0x7fffffff116c, info=0x7fffffff8000) at src/parser.c:1489 -#7 0x0000000000421161 in expression_node (node=0x7fffffff116c, info=0x7fffffff8000) at src/parser.c:4678 -#8 0x000000000041e99e in expression_monadic_operator (node=0x7fffffff116c, info=0x7fffffff8000) at src/parser.c:6139 -... - -This abort on memset() is caused by mistake of memset() size. ---- - src/parser.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/parser.c b/src/parser.c -index 073ea1a..20dc1ee 100644 ---- a/src/parser.c -+++ b/src/parser.c -@@ -1486,7 +1486,7 @@ static BOOL when_expression(unsigned int* node, sParserInfo* info) - - memset(when_types, 0, sizeof(sNodeType*)*WHEN_BLOCK_MAX); - memset(when_types2, 0, sizeof(sNodeType*)*WHEN_BLOCK_MAX); -- memset(when_match, 0, sizeof(BOOL*)*WHEN_BLOCK_MAX); -+ memset(when_match, 0, sizeof(BOOL)*WHEN_BLOCK_MAX); - - /// value1 /// - while(1) { --- -2.26.2 - diff --git a/clover2-11.0.0-0001-port-to-pcre2.patch b/clover2-11.0.0-0001-port-to-pcre2.patch new file mode 100644 index 0000000..4fc6033 --- /dev/null +++ b/clover2-11.0.0-0001-port-to-pcre2.patch @@ -0,0 +1,192 @@ +From 4b2ce8ab238fb961c07cf6d87b771ad5eef1b141 Mon Sep 17 00:00:00 2001 +From: clover2 Fedora maintainer +Date: Fri, 16 Aug 2024 21:23:04 +0900 +Subject: [PATCH] port to pcre2 + +--- + configure | 15 ++++++++++----- + configure.in | 9 +++++++-- + src/class_system.c | 13 +++++++------ + src/common.h | 5 +++-- + src/regex.c | 16 ++++++++++------ + 5 files changed, 37 insertions(+), 21 deletions(-) + +diff --git a/configure b/configure +index b1bfbdf..f1fc2a4 100755 +--- a/configure ++++ b/configure +@@ -4419,21 +4419,26 @@ then + LIBS="$LIBS -liconv" + fi + +-ac_fn_c_check_header_compile "$LINENO" "pcre.h" "ac_cv_header_pcre_h" "$ac_includes_default" ++CFLAGS_ORIG="$CFLAGS" ++CFLAGS="$CFLAGS_ORIG -DPCRE2_CODE_UNIT_WIDTH=8" ++export CFLAGS ++ac_fn_c_check_header_compile "$LINENO" "pcre2.h" "ac_cv_header_pcre_h" "$ac_includes_default" + if test "x$ac_cv_header_pcre_h" = xyes + then : + printf "%s\n" "#define HAVE_PCRE_H 1" >>confdefs.h + + fi ++CFLAGS="$CFLAGS_ORIG" ++export CFLAGS + +-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for main in -lpcre" >&5 +-printf %s "checking for main in -lpcre... " >&6; } ++{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for main in -lpcre2-8" >&5 ++printf %s "checking for main in -lpcre2-8... " >&6; } + if test ${ac_cv_lib_pcre_main+y} + then : + printf %s "(cached) " >&6 + else $as_nop + ac_check_lib_save_LIBS=$LIBS +-LIBS="-lpcre $LIBS" ++LIBS="-lpcre2-8 $LIBS" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext + /* end confdefs.h. */ + +@@ -4460,7 +4465,7 @@ fi + printf "%s\n" "$ac_cv_lib_pcre_main" >&6; } + if test "x$ac_cv_lib_pcre_main" = xyes + then : +- LIBS="$LIBS -lpcre"; ++ LIBS="$LIBS -lpcre2-8"; + else $as_nop + eixt + fi +diff --git a/configure.in b/configure.in +index 335c1d7..d54d2a2 100644 +--- a/configure.in ++++ b/configure.in +@@ -242,8 +242,13 @@ then + LIBS="$LIBS -liconv" + fi + +-AC_CHECK_HEADER(pcre.h, [AC_DEFINE(HAVE_PCRE_H,1)], []) +-AC_HAVE_LIBRARY(pcre, [ LIBS="$LIBS -lpcre"; ], [ eixt ]) ++CFLAGS_ORIG="$CFLAGS" ++CFLAGS="$CFLAGS_ORIG -DPCRE2_CODE_UNIT_WIDTH=8" ++export CFLAGS ++AC_CHECK_HEADER(pcre2.h, [AC_DEFINE(HAVE_PCRE_H,1)], []) ++CFLAGS="$CFLAGS_ORIG" ++export CFLAGS ++AC_HAVE_LIBRARY(pcre2-8, [ LIBS="$LIBS -lpcre2-8"; ], [ eixt ]) + + AC_HAVE_LIBRARY(rt, [ LIBS="$LIBS -lrt"; ], []) + +diff --git a/src/class_system.c b/src/class_system.c +index 907b41a..3fd5c33 100644 +--- a/src/class_system.c ++++ b/src/class_system.c +@@ -902,7 +902,7 @@ BOOL System_pcre_exec(CLVALUE** stack_ptr, CLVALUE* lvar, sVMInfo* info) + /// convert Clover value to C value /// + sRegexObject* regex_object_data = CLREGEX(regex->mObjectValue); + +- pcre* regex_value = regex_object_data->mRegex; ++ pcre2_code* regex_value = regex_object_data->mRegex; + + sCLObject* object_data = CLOBJECT(str->mObjectValue); + +@@ -910,13 +910,14 @@ BOOL System_pcre_exec(CLVALUE** stack_ptr, CLVALUE* lvar, sVMInfo* info) + int len = object_data->mFields[1].mULongValue; + + int ovec_max_value = ovec_max->mIntValue; +- int* ovec_value = MCALLOC(1, sizeof(int)*ovec_max_value * 3); ++ PCRE2_SIZE* ovec_value = NULL; + + int offset_value = offset->mIntValue; + + /// go /// +- int options = PCRE_NEWLINE_LF; +- int result = pcre_exec(regex_value, 0, str_value, len, offset_value, options, ovec_value, ovec_max_value*3); ++ pcre2_match_data *match_data = pcre2_match_data_create_from_pattern(regex_value, NULL); ++ int result = pcre2_match(regex_value, (PCRE2_SPTR)str_value, len, offset_value, 0, match_data, NULL); ++ ovec_value = pcre2_get_ovector_pointer(match_data); + + /// set result data on ovec object /// + CLObject pcre_ovec_object = pcre_ovec->mObjectValue; +@@ -938,7 +939,7 @@ BOOL System_pcre_exec(CLVALUE** stack_ptr, CLVALUE* lvar, sVMInfo* info) + sCLObject* pcre_ovec_end_array_data = CLOBJECT(pcre_ovec_end_array); + + int i; +- for(i=0; imArrayNum) { + pcre_ovec_start_array_data->mFields[i].mIntValue = ovec_value[i*2]; + } +@@ -950,7 +951,7 @@ BOOL System_pcre_exec(CLVALUE** stack_ptr, CLVALUE* lvar, sVMInfo* info) + (*stack_ptr)->mIntValue = result; + (*stack_ptr)++; + +- MFREE(ovec_value); ++ pcre2_match_data_free(match_data); + + return TRUE; + } +diff --git a/src/common.h b/src/common.h +index cd3ef23..bf457a5 100644 +--- a/src/common.h ++++ b/src/common.h +@@ -18,7 +18,8 @@ + #include + #include + #include +-#include ++#define PCRE2_CODE_UNIT_WIDTH 8 ++#include + #include + #ifndef __USE_XOPEN + #define __USE_XOPEN +@@ -2209,7 +2210,7 @@ struct sRegexObjectStruct + char* mType; + int mSize; + int mArrayNum; +- pcre* mRegex; ++ pcre2_code* mRegex; + char* mRegexString; + BOOL mGlobal; + BOOL mIgnoreCase; +diff --git a/src/regex.c b/src/regex.c +index 135d142..26b6a56 100644 +--- a/src/regex.c ++++ b/src/regex.c +@@ -16,7 +16,7 @@ void regex_free_fun(CLObject obj) + { + sRegexObject* object_data = CLREGEX(obj); + +- pcre_free(object_data->mRegex); ++ pcre2_code_free(object_data->mRegex); + MFREE(object_data->mRegexString); + } + +@@ -32,17 +32,21 @@ CLObject create_regex_object(char* regex, BOOL global, BOOL ignore_case, BOOL mu + + sRegexObject* object_data = CLREGEX(obj); + +- int option = ignore_case ? PCRE_CASELESS:0; ++ int option = ignore_case ? PCRE2_CASELESS:0; + +- const char* err; +- int erro_ofs; ++ int err; ++ PCRE2_SIZE erro_ofs; + +- int options = PCRE_UTF8 | (ignore_case ? PCRE_CASELESS:0) | (multiline ? PCRE_MULTILINE : 0) | (extended ? PCRE_EXTENDED :0) | (dotall ? PCRE_DOTALL :0) | (dollar_endonly ? PCRE_DOLLAR_ENDONLY:0) | (ungreedy ? PCRE_UNGREEDY:0); ++ int options = PCRE2_UTF | (ignore_case ? PCRE2_CASELESS:0) | (multiline ? PCRE2_MULTILINE : 0) | (extended ? PCRE2_EXTENDED :0) | (dotall ? PCRE2_DOTALL :0) | (dollar_endonly ? PCRE2_DOLLAR_ENDONLY:0) | (ungreedy ? PCRE2_UNGREEDY:0); + //int options = PCRE_UTF8 | (ignore_case ? PCRE_CASELESS:0) | (multiline ? PCRE_MULTILINE : 0) | (extended ? PCRE_EXTENDED :0) | (dotall ? PCRE_DOTALL :0) | (anchored ? PCRE_ANCHORED : 0) | (dollar_endonly ? PCRE_DOLLAR_ENDONLY) | (ungreedy ? PCRE_UNGREEDY); + + object_data->mRegexString = MSTRDUP(regex); + +- object_data->mRegex = pcre_compile(regex, options,&err, &erro_ofs, NULL); ++ pcre2_compile_context *context = pcre2_compile_context_create(NULL); ++ pcre2_set_newline(context, PCRE2_NEWLINE_LF); ++ object_data->mRegex = pcre2_compile((PCRE2_SPTR)regex, PCRE2_ZERO_TERMINATED ,options,&err, &erro_ofs, context); ++ pcre2_compile_context_free(context); ++ + object_data->mGlobal = global; + object_data->mIgnoreCase = ignore_case; + object_data->mMultiline = multiline; +-- +2.46.0 + diff --git a/clover2-11.0.0-0002-block-TCGETA-usage-on-ppc64le.patch b/clover2-11.0.0-0002-block-TCGETA-usage-on-ppc64le.patch new file mode 100644 index 0000000..1548e43 --- /dev/null +++ b/clover2-11.0.0-0002-block-TCGETA-usage-on-ppc64le.patch @@ -0,0 +1,32 @@ +From 420d0a508202a31cef8ae052f6b144ebea0d7804 Mon Sep 17 00:00:00 2001 +From: clover2 Fedora maintainer +Date: Thu, 8 May 2025 16:29:54 +0900 +Subject: [PATCH] block TCGETA usage on ppc64le + +--- + src/class_system.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/src/class_system.c b/src/class_system.c +index 3fd5c33..9eb6bea 100644 +--- a/src/class_system.c ++++ b/src/class_system.c +@@ -5203,6 +5203,7 @@ BOOL System_initialize_system_calls_system(CLVALUE** stack_ptr, CLVALUE* lvar, s + #ifdef TCSETSF + system->mClassFields[LAST_INITIALIZE_FIELD_NUM_ON_COMMAND_SYSTEM+125].mValue.mIntValue = TCSETSF; + #endif ++#ifndef __powerpc64__ + #ifdef TCGETA + system->mClassFields[LAST_INITIALIZE_FIELD_NUM_ON_COMMAND_SYSTEM+126].mValue.mIntValue = TCGETA; + #endif +@@ -5215,6 +5216,7 @@ BOOL System_initialize_system_calls_system(CLVALUE** stack_ptr, CLVALUE* lvar, s + #ifdef TCSETAF + system->mClassFields[LAST_INITIALIZE_FIELD_NUM_ON_COMMAND_SYSTEM+129].mValue.mIntValue = TCSETAF; + #endif ++#endif + #ifdef TCSBRK + system->mClassFields[LAST_INITIALIZE_FIELD_NUM_ON_COMMAND_SYSTEM+130].mValue.mIntValue = TCSBRK; + #endif +-- +2.49.0 + diff --git a/clover2-11.0.0-0003-Fix-Wincompatible-pointer-types-warning.patch b/clover2-11.0.0-0003-Fix-Wincompatible-pointer-types-warning.patch new file mode 100644 index 0000000..5de3849 --- /dev/null +++ b/clover2-11.0.0-0003-Fix-Wincompatible-pointer-types-warning.patch @@ -0,0 +1,27 @@ +From 73f9fe3d40d3881223f3a9776732e31bdc8a459f Mon Sep 17 00:00:00 2001 +From: Tom Stellard +Date: Sat, 8 Nov 2025 15:45:20 +0000 +Subject: [PATCH] Fix [-Wincompatible-pointer-types] warning + +This fixes the build with clang >= 22 which has this warning as an +error by default. +--- + src/interpreter.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/interpreter.c b/src/interpreter.c +index 44dfaa6..4708e7c 100644 +--- a/src/interpreter.c ++++ b/src/interpreter.c +@@ -945,7 +945,7 @@ void command_completion() + struct stat stat_; + if(stat(path2, &stat_) == 0) { + if(stat_.st_mode & S_IXUSR) { +- char* entry_d_name[PATH_MAX]; ++ char entry_d_name[PATH_MAX]; + + char* p = entry->d_name; + char* p2 = entry_d_name; +-- +2.50.1 + diff --git a/clover2.spec b/clover2.spec index 140bf16..1cc01d6 100644 --- a/clover2.spec +++ b/clover2.spec @@ -1,40 +1,46 @@ %if 1 -%global mainver 10.4.6 -%global gitdate 20190613 -%global gitcommit 6f483b4e3e1ca135a3119629274f0a748f18d259 +%global mainver 11.0.0 +%global gitdate 20211017 +%global gitcommit 1e6a0256612c8f8b6b1d42bd75778b15c8c5ff67 %else %endif %global shortcommit %(c=%{gitcommit}; echo ${c:0:7}) -%global tarballdate 20191231 -%global tarballtime 1510 +%global tarballdate 20221008 +%global tarballtime 2308 -%undefine _changelog_trimtime +%global toolchain clang Name: clover2 # For Version, see README.md and so on Version: %{mainver} -Release: 7.D%{gitdate}git%{shortcommit}%{?dist} +Release: 13%{?dist} Summary: Yet another compiler language -License: GPLv2 +# app-sample/ unused +# SPDX confirmed +License: GPL-2.0-only URL: https://github.com/ab25cq/clover2/wiki #Source0: https://github.com/ab25cq/%{name}/archive/%{gitcommit}/%{name}-%{version}-git%{shortcommit}.tar.gz Source0: %{name}-%{tarballdate}T%{tarballtime}.tar.gz Source1: create-clover-git-bare-tarball.sh -# parser.c: fix memset size -Patch1: clover2-10.4.6-0001-parser.c-fix-memset-size.patch +# Port to pcre2 (bug 2128279) +Patch1: clover2-11.0.0-0001-port-to-pcre2.patch +# block TCGETA usage on ppc64le for now on 2.42 +Patch2: clover2-11.0.0-0002-block-TCGETA-usage-on-ppc64le.patch +# Fix build with clang >= 22. +Patch3: clover2-11.0.0-0003-Fix-Wincompatible-pointer-types-warning.patch # Upstream suggests to use clang BuildRequires: clang BuildRequires: readline-devel -BuildRequires: pcre-devel +BuildRequires: pcre2-devel BuildRequires: gc-devel BuildRequires: git BuildRequires: %{_bindir}/time -BuildRequires: make +BuildRequires: make Requires: %{name}-libs%{?_isa} = %{version}-%{release} # Currently test fails on s390x @@ -54,14 +60,12 @@ Regular expressions, lambda, closure etc are first class objects. %package libs Summary: Library package needed for %{name} -License: GPLv2 %description libs This package contains libraries needed for clover2. %package devel Summary: Development files for %{name} -License: GPLv2 Requires: %{name}-libs%{?_isa} = %{version}-%{release} %description devel @@ -69,9 +73,6 @@ This package contains libraries and header files for developing applications that use %{name}. %prep -# Disable lfto, clang compiler option does not support these -%define _lto_cflags -flto - %setup -q -c -T -a 0 git clone ./clover2.git cd clover2 @@ -83,26 +84,23 @@ git checkout -b %{version}-fedora %{gitcommit} cp -a [A-Z]* .. -# Using clang, some compiler flags are not recognized -%global optflags_0 %optflags -%global optflags_1 %(echo "%optflags_0" | sed -e 's|-mcet||') -%global optflags_2 %(echo "%optflags_1" | sed -e 's|-fcf-protection||') -%global optflags_3 %(echo "%optflags_2" | sed -e 's|-fstack-clash-protection||') -%global optflags_4 %optflags_3 -fsanitize=address -fsanitize=undefined -%global optflags %optflags_3 +# honor cflags, toolchain +git rm --cached configure~ +git commit -m "untrack configure~" -a -# honor cflags sed -i.cflags configure.in configure \ - -e '\@CFLAGS=.*-DPREFIX=@s|-DPREFIX=|%optflags -DPREFIX=|' \ + -e '\@CFLAGS=.*-DPREFIX=@s|-DPREFIX=|%build_cflags -DPREFIX=|' \ -e 's|-O3|-O2|' \ + -e's|^CC=gcc|CC=%{toolchain}|' \ %{nil} # honor libdir sed -i.lib configure.in configure -e 's|/lib |/%{_lib} |' sed -i.lib Makefile.in -e 's|/lib$|/%{_lib}|' git commit -m "Apply Fedora specific configuration" -a - cat %PATCH1 | git am +cat %PATCH2 | git am +cat %PATCH3 | git am %build cd clover2 @@ -112,9 +110,6 @@ cd clover2 %{nil} # --with-jit -# Apply shebang -sed -i.sh bclover2 -e '1i #!/bin/bash' - # parallel make fails %make_build -j1 @@ -160,6 +155,54 @@ LANG=C.utf8 make -C clover2 test %{_includedir}/clover2/ %changelog +* Sat Nov 08 2025 Tom Stellard - 11.0.0-13 +- Fix build with clang >=22 + +* Wed Jul 23 2025 Fedora Release Engineering - 11.0.0-12 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild + +* Thu May 08 2025 Mamoru TASAKA - 11.0.0-11 +- block TCGETA usage on ppc64le for now on 2.42 + +* Thu Jan 16 2025 Fedora Release Engineering - 11.0.0-10 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild + +* Fri Aug 16 2024 Mamoru TASAKA - 11.0.0-9 +- Port to pcre2 (bug 2128279) + +* Wed Jul 17 2024 Fedora Release Engineering - 11.0.0-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild + +* Wed Mar 27 2024 Mamoru TASAKA - 11.0.0-7 +- Remove unneeded subpackge License tag + +* Thu Feb 29 2024 Mamoru TASAKA - 11.0.0-6 +- SPDX migration + +* Wed Jan 24 2024 Fedora Release Engineering - 11.0.0-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Fri Jan 19 2024 Fedora Release Engineering - 11.0.0-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Wed Jul 19 2023 Fedora Release Engineering - 11.0.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + +* Thu Jan 19 2023 Fedora Release Engineering - 11.0.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + +* Sat Oct 8 2022 Mamoru TASAKA - 11.0.0-1 +- Update to 11.0.0 + +* Wed Jul 20 2022 Fedora Release Engineering - 10.4.6-10.D20190613git6f483b4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + +* Wed Jan 19 2022 Fedora Release Engineering - 10.4.6-9.D20190613git6f483b4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + +* Wed Jul 21 2021 Fedora Release Engineering - 10.4.6-8.D20190613git6f483b4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + * Tue Jan 26 2021 Fedora Release Engineering - 10.4.6-7.D20190613git6f483b4 - Exclude armv7hl for now (for clang++-11) diff --git a/sources b/sources index 3980f0c..be3c57e 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (clover2-20191231T1510.tar.gz) = 3a0771c663525226e281b8a70e1eae2756730335237f3faa2296ee44be7cae4cf1d9df6bdeb6edf556e2ec270f1394294d2942c2bef2beda4fb77a9c6d03a647 +SHA512 (clover2-20221008T2308.tar.gz) = 9d6bea63765af55b94a159a9153459ad2d4a214ad392afe804099a9169e918ca61ee08e502d45843a8e5188fcd45fea1a69c85d45a45a33abe93e0f190984a50