Fedora 42 will update Tcl/Tk to version 9.0. It seems your package uses Tcl or Tk as a dependency. Please check that your package builds and works correctly with Tcl/Tk 9.0. The effort is tracked in the bug 2337584, there is system wide change proposal [1]. I also tried to rebuild the direct dependencies in Copr [2]. TL/DR: - there is side tag "f42-build-side-103615" - Tcl/Tk was bumped to version 9.0 in the side tag - there are compat packages tcl8/tk8 in the side tag for backward compatibility - if your package needs fixing, please fix it to build with the Tcl/Tk 9.0 or switch it to the compat tcl8/tk8 - build your package into the side tag "f42-build-side-103615" (if rebuild is not needed, e.g. the package just calls the Tcl shell and works with any Tcl version, ignore this step) - close this bug Full version: If your package works correctly and doesn't require rebuild, please close this bug as rawhide. If your package needs rebuild and correctly builds with the Tcl/Tk 9.0, please rebuild it with the side-tag "f42-build-side-103615": $ fedpkg build --target=f42-build-side-103615 Optionally, you can regenerate the repo for others to be able to build with your package in the side-tag (example YOUR_PKG_NVR="brltty-6.7-3"): $ koji wait-repo --build=$YOUR_PKG_NVR.fc42 f42-build-side-103615 --request Close this bug as rawhide. If your package doesn't build with the Tcl/Tk 9.0, please fix/port it. There is a Tcl/Tk 9.0 porting guide [3]. Then build it with the side-tag "f42-build-side-103615": $ fedpkg build --target=f42-build-side-103615 Optionally, you can regenerate the repo for others to be able to build with your package in the side-tag, (example YOUR_PKG_NVR="brltty-6.7-3"): $ koji wait-repo --build=$YOUR_PKG_NVR.fc42 f42-build-side-103615 --request Close this bug as rawhide. If your package cannot be ported or it's unrealistic to do it in the short time, please switch to the compat Tcl/Tk 8 packages. In the spec file change the BuildRequires from the "tcl-devel"/"tk-devel" to "tcl8-devel"/"tk8-devel". If your package needs explicit "Requires: tcl", you can use "Requires: tcl8". Then build your package with the side-tag "f42-build-side-103615": $ fedpkg build --target=f42-build-side-103615 Optionally, you can regenerate the repo for others to be able to build with your package in the side-tag, (example YOUR_PKG_NVR="brltty-6.7-3"): $ koji wait-repo --build=$YOUR_PKG_NVR.fc42 f42-build-side-103615 --request Close this bug as rawhide. If you update your package after resolving this bug (and before 2025-02-04), please build to the side-tag. Components which bugzillas won't be resolved till 2025-01-31 will be switched to the compat tcl8/tk8 packages by proven packager and rebuilt into the side-tag. Then at the turning point (2025-02-03) the side-tag will be pushed by me as an Bodhi update. Thanks for your cooperation. [1] https://fedoraproject.org/wiki/Changes/TclTk9.0 [2] https://copr.fedorainfracloud.org/coprs/jskarvad/TclTK9.0.0/ [3] https://www.tcl-lang.org/software/tcltk/9.0.html
Given that the Mass Rebuild starts later today - it would be good to update the scope of the Change to explain how you plan to land this after the Mass Rebuild. (It doesn't make sense to rebuild today in a sidetag, only to be rebuilt the next day in f42-rebuild.)
Hmm, I just updated emacspeak yesterday, but today: util.py:459: Problem: conflicting requests util.py:459: - nothing provides libtree-sitter.so.0.23()(64bit) needed by emacs-1:29.4-46.fc42.x86_64 from build
(https://kojipkgs.fedoraproject.org/work/tasks/7919/127877919/root.log)
Update: There is a better way how to handle switch to compat packages, instead of build requiring tcl8-devel/tk8-devel, the following is better and backward compatible approach: BuildRequires: tcl-devel < 9 BuildRequires: tk-devel < 9 The correct provides are already included in the tcl8/tk8 packages. And in a such way the package needn't be built into the side tag. For updates please check the tracking bug 2337584.
Thanks - I can try that... I did try first actually after rebuilding emacs, but hit surprisingly (to me): tcl8.6 -c -o tclespeak.o tclespeak.cpp tclespeak.cpp: In function ‘int Tclespeak_Init(Tcl_Interp*)’: tclespeak.cpp:105:43: error: invalid conversion from ‘int (*)(ClientData, Tcl_Interp*, int, Tcl_Obj**)’ {aka ‘int (*)(void*, Tcl_Interp*, int, Tcl_Obj**)’} to ‘int (*)(void*, Tcl_Interp*, int, Tcl_Obj* const*)’ [-fpermissive] 105 | Tcl_CreateObjCommand(interp, "setRate", SetRate, (ClientData)handle, | ^~~~~~~ | | | int (*)(ClientData, Tcl_Interp*, int, Tcl_Obj**) {aka int (*)(void*, Tcl_Interp*, int, Tcl_Obj**)} In file included from /usr/include/tcl.h:2439, from tclespeak.cpp:47: /usr/include/tclDecls.h:299:70: note: initializing argument 3 of ‘Tcl_Command_* Tcl_CreateObjCommand(Tcl_Interp*, const char*, int (*)(void*, Tcl_Interp*, int, Tcl_Obj* const*), void*, void (*)(void*))’ 299 | const char *cmdName, Tcl_ObjCmdProc *proc, | ~~~~~~~~~~~~~~~~^~~~ tclespeak.cpp:107:43: error: invalid conversion from ‘int (*)(ClientData, Tcl_Interp*, int, Tcl_Obj**)’ {aka ‘int (*)(void*, Tcl_Interp*, int, Tcl_Obj**)’} to ‘int (*)(void*, Tcl_Interp*, int, Tcl_Obj* const*)’ [-fpermissive] 107 | Tcl_CreateObjCommand(interp, "getRate", GetRate, (ClientData)handle, | ^~~~~~~ | | | int (*)(ClientData, Tcl_Interp*, int, Tcl_Obj**) {aka int (*)(void*, Tcl_Interp*, int, Tcl_Obj**)} /usr/include/tclDecls.h:299:70: note: initializing argument 3 of ‘Tcl_Command_* Tcl_CreateObjCommand(Tcl_Interp*, const char*, int (*)(void*, Tcl_Interp*, int, Tcl_Obj* const*), void*, void (*)(void*))’ 299 | const char *cmdName, Tcl_ObjCmdProc *proc, | ~~~~~~~~~~~~~~~~^~~~ tclespeak.cpp:109:46: error: invalid conversion from ‘int (*)(ClientData, Tcl_Interp*, int, Tcl_Obj**)’ {aka ‘int (*)(void*, Tcl_Interp*, int, Tcl_Obj**)’} to ‘int (*)(void*, Tcl_Interp*, int, Tcl_Obj* const*)’ [-fpermissive] 109 | Tcl_CreateObjCommand(interp, "ttsVersion", getTTSVersion, (ClientData)handle, | ^~~~~~~~~~~~~ | | | int (*)(ClientData, Tcl_Interp*, int, Tcl_Obj**) {aka int (*)(void*, Tcl_Interp*, int, Tcl_Obj**)} /usr/include/tclDecls.h:299:70: note: initializing argument 3 of ‘Tcl_Command_* Tcl_CreateObjCommand(Tcl_Interp*, const char*, int (*)(void*, Tcl_Interp*, int, Tcl_Obj* const*), void*, void (*)(void*))’ 299 | const char *cmdName, Tcl_ObjCmdProc *proc, | ~~~~~~~~~~~~~~~~^~~~ tclespeak.cpp:111:47: error: invalid conversion from ‘int (*)(ClientData, Tcl_Interp*, int, Tcl_Obj**)’ {aka ‘int (*)(void*, Tcl_Interp*, int, Tcl_Obj**)’} to ‘int (*)(void*, Tcl_Interp*, int, Tcl_Obj* const*)’ [-fpermissive] 111 | Tcl_CreateObjCommand(interp, "ttsDataPath", getTTSDataPath, | ^~~~~~~~~~~~~~ | | | int (*)(ClientData, Tcl_Interp*, int, Tcl_Obj**) {aka int (*)(void*, Tcl_Interp*, int, Tcl_Obj**)} /usr/include/tclDecls.h:299:70: note: initializing argument 3 of ‘Tcl_Command_* Tcl_CreateObjCommand(Tcl_Interp*, const char*, int (*)(void*, Tcl_Interp*, int, Tcl_Obj* const*), void*, void (*)(void*))’ 299 | const char *cmdName, Tcl_ObjCmdProc *proc, | ~~~~~~~~~~~~~~~~^~~~ tclespeak.cpp:113:41: error: invalid conversion from ‘int (*)(ClientData, Tcl_Interp*, int, Tcl_Obj**)’ {aka ‘int (*)(void*, Tcl_Interp*, int, Tcl_Obj**)’} to ‘int (*)(void*, Tcl_Interp*, int, Tcl_Obj* const*)’ [-fpermissive] 113 | Tcl_CreateObjCommand(interp, "punct", Punct, (ClientData)handle, NULL); | ^~~~~ | | | int (*)(ClientData, Tcl_Interp*, int, Tcl_Obj**) {aka int (*)(void*, Tcl_Interp*, int, Tcl_Obj**)} /usr/include/tclDecls.h:299:70: note: initializing argument 3 of ‘Tcl_Command_* Tcl_CreateObjCommand(Tcl_Interp*, const char*, int (*)(void*, Tcl_Interp*, int, Tcl_Obj* const*), void*, void (*)(void*))’ 299 | const char *cmdName, Tcl_ObjCmdProc *proc, | ~~~~~~~~~~~~~~~~^~~~ tclespeak.cpp:114:39: error: invalid conversion from ‘int (*)(ClientData, Tcl_Interp*, int, Tcl_Obj**)’ {aka ‘int (*)(void*, Tcl_Interp*, int, Tcl_Obj**)’} to ‘int (*)(void*, Tcl_Interp*, int, Tcl_Obj* const*)’ [-fpermissive] 114 | Tcl_CreateObjCommand(interp, "say", Say, (ClientData)handle, TclEspeakFree); | ^~~ | | | int (*)(ClientData, Tcl_Interp*, int, Tcl_Obj**) {aka int (*)(void*, Tcl_Interp*, int, Tcl_Obj**)} /usr/include/tclDecls.h:299:70: note: initializing argument 3 of ‘Tcl_Command_* Tcl_CreateObjCommand(Tcl_Interp*, const char*, int (*)(void*, Tcl_Interp*, int, Tcl_Obj* const*), void*, void (*)(void*))’ 299 | const char *cmdName, Tcl_ObjCmdProc *proc, | ~~~~~~~~~~~~~~~~^~~~ tclespeak.cpp:115:41: error: invalid conversion from ‘int (*)(ClientData, Tcl_Interp*, int, Tcl_Obj**)’ {aka ‘int (*)(void*, Tcl_Interp*, int, Tcl_Obj**)’} to ‘int (*)(void*, Tcl_Interp*, int, Tcl_Obj* const*)’ [-fpermissive] 115 | Tcl_CreateObjCommand(interp, "synth", Say, (ClientData)handle, NULL); | ^~~ | | | int (*)(ClientData, Tcl_Interp*, int, Tcl_Obj**) {aka int (*)(void*, Tcl_Interp*, int, Tcl_Obj**)} /usr/include/tclDecls.h:299:70: note: initializing argument 3 of ‘Tcl_Command_* Tcl_CreateObjCommand(Tcl_Interp*, const char*, int (*)(void*, Tcl_Interp*, int, Tcl_Obj* const*), void*, void (*)(void*))’ 299 | const char *cmdName, Tcl_ObjCmdProc *proc, | ~~~~~~~~~~~~~~~~^~~~ tclespeak.cpp:116:47: error: invalid conversion from ‘int (*)(ClientData, Tcl_Interp*, int, Tcl_Obj**)’ {aka ‘int (*)(void*, Tcl_Interp*, int, Tcl_Obj**)’} to ‘int (*)(void*, Tcl_Interp*, int, Tcl_Obj* const*)’ [-fpermissive] 116 | Tcl_CreateObjCommand(interp, "synchronize", Synchronize, (ClientData)handle, | ^~~~~~~~~~~ | | | int (*)(ClientData, Tcl_Interp*, int, Tcl_Obj**) {aka int (*)(void*, Tcl_Interp*, int, Tcl_Obj**)} /usr/include/tclDecls.h:299:70: note: initializing argument 3 of ‘Tcl_Command_* Tcl_CreateObjCommand(Tcl_Interp*, const char*, int (*)(void*, Tcl_Interp*, int, Tcl_Obj* const*), void*, void (*)(void*))’ 299 | const char *cmdName, Tcl_ObjCmdProc *proc, | ~~~~~~~~~~~~~~~~^~~~ tclespeak.cpp:118:40: error: invalid conversion from ‘int (*)(ClientData, Tcl_Interp*, int, Tcl_Obj**)’ {aka ‘int (*)(void*, Tcl_Interp*, int, Tcl_Obj**)’} to ‘int (*)(void*, Tcl_Interp*, int, Tcl_Obj* const*)’ [-fpermissive] 118 | Tcl_CreateObjCommand(interp, "stop", Stop, (ClientData)handle, TclEspeakFree); | ^~~~ | | | int (*)(ClientData, Tcl_Interp*, int, Tcl_Obj**) {aka int (*)(void*, Tcl_Interp*, int, Tcl_Obj**)} /usr/include/tclDecls.h:299:70: note: initializing argument 3 of ‘Tcl_Command_* Tcl_CreateObjCommand(Tcl_Interp*, const char*, int (*)(void*, Tcl_Interp*, int, Tcl_Obj* const*), void*, void (*)(void*))’ 299 | const char *cmdName, Tcl_ObjCmdProc *proc, | ~~~~~~~~~~~~~~~~^~~~ tclespeak.cpp:119:45: error: invalid conversion from ‘int (*)(ClientData, Tcl_Interp*, int, Tcl_Obj**)’ {aka ‘int (*)(void*, Tcl_Interp*, int, Tcl_Obj**)’} to ‘int (*)(void*, Tcl_Interp*, int, Tcl_Obj* const*)’ [-fpermissive] 119 | Tcl_CreateObjCommand(interp, "speakingP", SpeakingP, (ClientData)handle, | ^~~~~~~~~ | | | int (*)(ClientData, Tcl_Interp*, int, Tcl_Obj**) {aka int (*)(void*, Tcl_Interp*, int, Tcl_Obj**)} /usr/include/tclDecls.h:299:70: note: initializing argument 3 of ‘Tcl_Command_* Tcl_CreateObjCommand(Tcl_Interp*, const char*, int (*)(void*, Tcl_Interp*, int, Tcl_Obj* const*), void*, void (*)(void*))’ 299 | const char *cmdName, Tcl_ObjCmdProc *proc, | ~~~~~~~~~~~~~~~~^~~~ tclespeak.cpp:121:41: error: invalid conversion from ‘int (*)(ClientData, Tcl_Interp*, int, Tcl_Obj**)’ {aka ‘int (*)(void*, Tcl_Interp*, int, Tcl_Obj**)’} to ‘int (*)(void*, Tcl_Interp*, int, Tcl_Obj* const*)’ [-fpermissive] 121 | Tcl_CreateObjCommand(interp, "pause", Pause, (ClientData)handle, | ^~~~~ | | | int (*)(ClientData, Tcl_Interp*, int, Tcl_Obj**) {aka int (*)(void*, Tcl_Interp*, int, Tcl_Obj**)} /usr/include/tclDecls.h:299:70: note: initializing argument 3 of ‘Tcl_Command_* Tcl_CreateObjCommand(Tcl_Interp*, const char*, int (*)(void*, Tcl_Interp*, int, Tcl_Obj* const*), void*, void (*)(void*))’ 299 | const char *cmdName, Tcl_ObjCmdProc *proc, | ~~~~~~~~~~~~~~~~^~~~ tclespeak.cpp:123:42: error: invalid conversion from ‘int (*)(ClientData, Tcl_Interp*, int, Tcl_Obj**)’ {aka ‘int (*)(void*, Tcl_Interp*, int, Tcl_Obj**)’} to ‘int (*)(void*, Tcl_Interp*, int, Tcl_Obj* const*)’ [-fpermissive] 123 | Tcl_CreateObjCommand(interp, "resume", Resume, (ClientData)handle, | ^~~~~~ | | | int (*)(ClientData, Tcl_Interp*, int, Tcl_Obj**) {aka int (*)(void*, Tcl_Interp*, int, Tcl_Obj**)} /usr/include/tclDecls.h:299:70: note: initializing argument 3 of ‘Tcl_Command_* Tcl_CreateObjCommand(Tcl_Interp*, const char*, int (*)(void*, Tcl_Interp*, int, Tcl_Obj* const*), void*, void (*)(void*))’ 299 | const char *cmdName, Tcl_ObjCmdProc *proc, | ~~~~~~~~~~~~~~~~^~~~ tclespeak.cpp:125:47: error: invalid conversion from ‘int (*)(ClientData, Tcl_Interp*, int, Tcl_Obj**)’ {aka ‘int (*)(void*, Tcl_Interp*, int, Tcl_Obj**)’} to ‘int (*)(void*, Tcl_Interp*, int, Tcl_Obj* const*)’ [-fpermissive] 125 | Tcl_CreateObjCommand(interp, "setLanguage", SetLanguage, (ClientData)handle, | ^~~~~~~~~~~ | | | int (*)(ClientData, Tcl_Interp*, int, Tcl_Obj**) {aka int (*)(void*, Tcl_Interp*, int, Tcl_Obj**)} /usr/include/tclDecls.h:299:70: note: initializing argument 3 of ‘Tcl_Command_* Tcl_CreateObjCommand(Tcl_Interp*, const char*, int (*)(void*, Tcl_Interp*, int, Tcl_Obj* const*), void*, void (*)(void*))’ 299 | const char *cmdName, Tcl_ObjCmdProc *proc, | ~~~~~~~~~~~~~~~~^~~~ tclespeak.cpp: At global scope: tclespeak.cpp:133:28: error: expected ‘,’ or ‘...’ before ‘objv’ 133 | Tcl_Obj *CONST objv[]) { | ^~~~ tclespeak.cpp: In function ‘int GetRate(ClientData, Tcl_Interp*, int, Tcl_Obj*)’: tclespeak.cpp:139:34: error: ‘objv’ was not declared in this scope; did you mean ‘objc’? 139 | rc = Tcl_GetIntFromObj(interp, objv[1], &voice); | ^~~~ | objc tclespeak.cpp: At global scope: tclespeak.cpp:150:28: error: expected ‘,’ or ‘...’ before ‘objv’ 150 | Tcl_Obj *CONST objv[]) { | ^~~~ tclespeak.cpp: In function ‘int SetRate(ClientData, Tcl_Interp*, int, Tcl_Obj*)’: tclespeak.cpp:159:34: error: ‘objv’ was not declared in this scope; did you mean ‘objc’? 159 | rc = Tcl_GetIntFromObj(interp, objv[1], &voice); | ^~~~ | objc tclespeak.cpp: At global scope: tclespeak.cpp:241:24: error: expected ‘,’ or ‘...’ before ‘objv’ 241 | Tcl_Obj *CONST objv[]) { | ^~~~ tclespeak.cpp: In function ‘int Say(ClientData, Tcl_Interp*, int, Tcl_Obj*)’: tclespeak.cpp:244:49: error: ‘objv’ was not declared in this scope; did you mean ‘objc’? 244 | char *a_text = (char *)Tcl_GetStringFromObj(objv[i], NULL); | ^~~~ | objc tclespeak.cpp: At global scope: tclespeak.cpp:269:32: error: expected ‘,’ or ‘...’ before ‘objv’ 269 | Tcl_Obj *CONST objv[]) { | ^~~~ tclespeak.cpp:276:25: error: expected ‘,’ or ‘...’ before ‘objv’ 276 | Tcl_Obj *CONST objv[]) { | ^~~~ tclespeak.cpp:284:30: error: expected ‘,’ or ‘...’ before ‘objv’ 284 | Tcl_Obj *CONST objv[]) { | ^~~~ tclespeak.cpp:294:26: error: expected ‘,’ or ‘...’ before ‘objv’ 294 | Tcl_Obj *CONST objv[]) { | ^~~~ tclespeak.cpp:300:27: error: expected ‘,’ or ‘...’ before ‘objv’ 300 | Tcl_Obj *CONST objv[]) { | ^~~~ tclespeak.cpp:309:30: error: expected ‘,’ or ‘...’ before ‘objv’ 309 | Tcl_Obj *CONST objv[]) { | ^~~~ tclespeak.cpp:317:26: error: expected ‘,’ or ‘...’ before ‘objv’ 317 | Tcl_Obj *CONST objv[]) { | ^~~~ tclespeak.cpp: In function ‘int Punct(ClientData, Tcl_Interp*, int, Tcl_Obj*)’: tclespeak.cpp:318:47: error: ‘objv’ was not declared in this scope; did you mean ‘objc’? 318 | char *a_mode = (char *)Tcl_GetStringFromObj(objv[1], NULL); | ^~~~ | objc tclespeak.cpp: At global scope: tclespeak.cpp:343:34: error: expected ‘,’ or ‘...’ before ‘objv’ 343 | Tcl_Obj *CONST objv[]) { | ^~~~ tclespeak.cpp:359:35: error: expected ‘,’ or ‘...’ before ‘objv’ 359 | Tcl_Obj *CONST objv[]) { | ^~~~ tclespeak.cpp: In function ‘int getTTSDataPath(ClientData, Tcl_Interp*, int, Tcl_Obj*)’: tclespeak.cpp:370:29: error: invalid conversion from ‘void*’ to ‘char*’ [-fpermissive] 370 | char *pathCopy = Tcl_Alloc(pathLen); | ~~~~~~~~~^~~~~~~~~ | | | void* tclespeak.cpp: At global scope: tclespeak.cpp:404:32: error: expected ‘,’ or ‘...’ before ‘objv’ 404 | Tcl_Obj *CONST objv[]) { | ^~~~ tclespeak.cpp: In function ‘int SetLanguage(ClientData, Tcl_Interp*, int, Tcl_Obj*)’: tclespeak.cpp:407:43: error: ‘objv’ was not declared in this scope; did you mean ‘objc’? 407 | const char *voiceName = Tcl_GetString(objv[2]); | ^~~~ make: *** [<builtin>: tclespeak.o] Error 1 make: Leaving directory '/builddir/build/BUILD/emacspeak-60.0-build/emacspeak-60.0/servers/native-espeak' error: Bad exit status from /var/tmp/rpm-tmp.52QLcZ (%install)
To ask explicitly/curiously: why is /use/bin/tcl8.6 provided by tcl-9 ?
Update (auto comment): > BuildRequires: tcl-devel < 9 > BuildRequires: tk-devel < 9 There is epoch, so the correct variant is: BuildRequires: tcl-devel < 1:9 BuildRequires: tk-devel < 1:9 Sorry for confusion.
(In reply to Jens Petersen from comment #6) > To ask explicitly/curiously: why is /use/bin/tcl8.6 provided by tcl-9 ? It shouldn't be provided, I cannot see it: $ rpm -q -l tcl | grep tcl8.6 $ rpm -q -l tcl-devel | grep tcl8.6 $ rpm -q tcl tcl-9.0.0-6.fc42.x86_64
(In reply to Jens Petersen from comment #1) > Given that the Mass Rebuild starts later today - it would be good to update > the scope of the Change to explain how you plan to land this after the Mass > Rebuild. > > (It doesn't make sense to rebuild today in a sidetag, only to be rebuilt the > next day in f42-rebuild.) Yes, I noticed this and this complicates things a bit. The current plan: for the packages switched to compat, we will not rebuild them, because the ABI shouldn't break. For the packages in the side-tag, I will rebuild them before pushing the bodhi update.
(In reply to Jaroslav Škarvada from comment #8) > (In reply to Jens Petersen from comment #6) > > To ask explicitly/curiously: why is /use/bin/tcl8.6 provided by tcl-9 ? > > It shouldn't be provided, I cannot see it: > $ rpm -q -l tcl | grep tcl8.6 > $ rpm -q -l tcl-devel | grep tcl8.6 > $ rpm -q tcl > tcl-9.0.0-6.fc42.x86_64 Yeah I don't understand either but as you can above somehow /usr/bin/tcl8.6 was used in my scratch build despite tcl-9 being installed. Mysterious. But indeed with "tcl-devel < 1:9" it succeeds. I would probably feel safer just using "BR: tcl8-devel" TBH anyway, given that emacspeak currently fails with tcl-9 apparently?
> I would probably feel safer just using "BR: tcl8-devel" TBH anyway, given > that emacspeak currently fails with tcl-9 apparently? Nvm: it is quite true that tcl-devel is backward compatible so it does make more sense.
I pushed a commit with "BuildRequires: tcl-devel < 1:9" 👍
Update (auto comment): Tcl/Tk 9.0 update was pushed as fedora 42 update together with the tcl8/tk8 compat packages. If your package is Tcl/Tk 9.0 compatible, build it with the tcl-devel or tk-devel build requirements (no side tag build now). If your package isn't Tcl/Tk 9.0 compatible, the implicit dependencies should be automatically satisfied now by the compat tcl8/tk8 packages, but the package may later fail to build (FTBFS). In such case, change the build requirement to tcl8-devel or tk8-devel. It turned out that some packages may also require patching to use the tclsh8/wish8 instead of the tclsh/wish. This should be trivial change. If you already handled it, thank you and please ignore this message.
I think I used the virtual provides, though I actually wanted to use the versioned ones.