kiwix/kiwix-desktop

Version 2.3.1 build failure against modern libs

xvitaly opened this issue · 3 comments

Libraries

libzim: 9.2.1
libkiwix: 13.1.0
kiwix-desktop: 2.3.1

Compiler and OS

OS: Fedora Linux 39
Compiler: GCC 13.2.1

Log

../src/library.cpp: In constructor ‘LibraryManipulator::LibraryManipulator(Library*)’:
../src/library.cpp:15:31: error: no matching function for call to ‘kiwix::LibraryManipulator::LibraryManipulator(kiwix::Library*)’
   15 |         , mp_library(p_library)
      |                               ^
In file included from ../src/opdsrequestmanager.h:7,
                 from ../src/contentmanager.h:9,
                 from ../src/kiwixapp.h:5,
                 from ../src/library.cpp:2:
/usr/include/kiwix/manager.h:40:12: note: candidate: ‘kiwix::LibraryManipulator::LibraryManipulator(kiwix::LibraryPtr)’
   40 |   explicit LibraryManipulator(LibraryPtr library);
      |            ^~~~~~~~~~~~~~~~~~
/usr/include/kiwix/manager.h:40:42: note:   no known conversion for argument 1 from ‘kiwix::Library*’ to ‘kiwix::LibraryPtr’ {aka ‘std::shared_ptr<kiwix::Library>’}
   40 |   explicit LibraryManipulator(LibraryPtr library);
      |                               ~~~~~~~~~~~^~~~~~~
/usr/include/kiwix/manager.h:37:7: note: candidate: ‘kiwix::LibraryManipulator::LibraryManipulator(const kiwix::LibraryManipulator&)’
   37 | class LibraryManipulator
      |       ^~~~~~~~~~~~~~~~~~
/usr/include/kiwix/manager.h:37:7: note:   no known conversion for argument 1 from ‘kiwix::Library*’ to ‘const kiwix::LibraryManipulator&’
../src/library.cpp: In constructor ‘Library::Library(const QString&)’:
../src/library.cpp:30:40: error: ‘kiwix::Library::Library()’ is private within this context
   30 |   : m_libraryDirectory(libraryDirectory)
      |                                        ^
In file included from ../src/library.h:5,
                 from ../src/library.cpp:1:
/usr/include/kiwix/library.h:233:3: note: declared private here
  233 |   Library();
      |   ^~~~~~~
../src/library.cpp:33:47: error: no matching function for call to ‘kiwix::Manager::Manager(LibraryManipulator*)’
   33 |     auto manager = kiwix::Manager(&manipulator);
      |                                               ^
/usr/include/kiwix/manager.h:68:12: note: candidate: ‘kiwix::Manager::Manager(kiwix::LibraryPtr)’
   68 |   explicit Manager(LibraryPtr library);
      |            ^~~~~~~
/usr/include/kiwix/manager.h:68:31: note:   no known conversion for argument 1 from ‘LibraryManipulator*’ to ‘kiwix::LibraryPtr’ {aka ‘std::shared_ptr<kiwix::Library>’}
   68 |   explicit Manager(LibraryPtr library);
      |                    ~~~~~~~~~~~^~~~~~~
/usr/include/kiwix/manager.h:67:12: note: candidate: ‘kiwix::Manager::Manager(kiwix::LibraryManipulator)’
   67 |   explicit Manager(LibraryManipulator manipulator);
      |            ^~~~~~~
/usr/include/kiwix/manager.h:67:39: note:   no known conversion for argument 1 from ‘LibraryManipulator*’ to ‘kiwix::LibraryManipulator’
   67 |   explicit Manager(LibraryManipulator manipulator);
      |                    ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~
/usr/include/kiwix/manager.h:61:7: note: candidate: ‘kiwix::Manager::Manager(const kiwix::Manager&)’
   61 | class Manager
      |       ^~~~~~~
/usr/include/kiwix/manager.h:61:7: note:   no known conversion for argument 1 from ‘LibraryManipulator*’ to ‘const kiwix::Manager&’
/usr/include/kiwix/manager.h:61:7: note: candidate: ‘kiwix::Manager::Manager(kiwix::Manager&&)’
/usr/include/kiwix/manager.h:61:7: note:   no known conversion for argument 1 from ‘LibraryManipulator*’ to ‘kiwix::Manager&&’
../src/library.cpp: In member function ‘QString Library::openBookFromPath(const QString&)’:
../src/library.cpp:51:38: error: no matching function for call to ‘kiwix::Manager::Manager(kiwix::Library*)’
   51 |     kiwix::Manager manager(&m_library);
      |                                      ^
/usr/include/kiwix/manager.h:68:12: note: candidate: ‘kiwix::Manager::Manager(kiwix::LibraryPtr)’
   68 |   explicit Manager(LibraryPtr library);
      |            ^~~~~~~
/usr/include/kiwix/manager.h:68:31: note:   no known conversion for argument 1 from ‘kiwix::Library*’ to ‘kiwix::LibraryPtr’ {aka ‘std::shared_ptr<kiwix::Library>’}
   68 |   explicit Manager(LibraryPtr library);
      |                    ~~~~~~~~~~~^~~~~~~
/usr/include/kiwix/manager.h:67:12: note: candidate: ‘kiwix::Manager::Manager(kiwix::LibraryManipulator)’
   67 |   explicit Manager(LibraryManipulator manipulator);
      |            ^~~~~~~
/usr/include/kiwix/manager.h:67:39: note:   no known conversion for argument 1 from ‘kiwix::Library*’ to ‘kiwix::LibraryManipulator’
   67 |   explicit Manager(LibraryManipulator manipulator);
      |                    ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~
/usr/include/kiwix/manager.h:61:7: note: candidate: ‘kiwix::Manager::Manager(const kiwix::Manager&)’
   61 | class Manager
      |       ^~~~~~~
/usr/include/kiwix/manager.h:61:7: note:   no known conversion for argument 1 from ‘kiwix::Library*’ to ‘const kiwix::Manager&’
/usr/include/kiwix/manager.h:61:7: note: candidate: ‘kiwix::Manager::Manager(kiwix::Manager&&)’
/usr/include/kiwix/manager.h:61:7: note:   no known conversion for argument 1 from ‘kiwix::Library*’ to ‘kiwix::Manager&&’
../src/library.cpp: In member function ‘void Library::loadMonitorDir(QString)’:
../src/library.cpp:157:47: error: no matching function for call to ‘kiwix::Manager::Manager(LibraryManipulator*)’
  157 |     auto manager = kiwix::Manager(&manipulator);
      |                                               ^
/usr/include/kiwix/manager.h:68:12: note: candidate: ‘kiwix::Manager::Manager(kiwix::LibraryPtr)’
   68 |   explicit Manager(LibraryPtr library);
      |            ^~~~~~~
/usr/include/kiwix/manager.h:68:31: note:   no known conversion for argument 1 from ‘LibraryManipulator*’ to ‘kiwix::LibraryPtr’ {aka ‘std::shared_ptr<kiwix::Library>’}
   68 |   explicit Manager(LibraryPtr library);
      |                    ~~~~~~~~~~~^~~~~~~
/usr/include/kiwix/manager.h:67:12: note: candidate: ‘kiwix::Manager::Manager(kiwix::LibraryManipulator)’
   67 |   explicit Manager(LibraryManipulator manipulator);
      |            ^~~~~~~
/usr/include/kiwix/manager.h:67:39: note:   no known conversion for argument 1 from ‘LibraryManipulator*’ to ‘kiwix::LibraryManipulator’
   67 |   explicit Manager(LibraryManipulator manipulator);
      |                    ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~
/usr/include/kiwix/manager.h:61:7: note: candidate: ‘kiwix::Manager::Manager(const kiwix::Manager&)’
   61 | class Manager
      |       ^~~~~~~
/usr/include/kiwix/manager.h:61:7: note:   no known conversion for argument 1 from ‘LibraryManipulator*’ to ‘const kiwix::Manager&’
/usr/include/kiwix/manager.h:61:7: note: candidate: ‘kiwix::Manager::Manager(kiwix::Manager&&)’
/usr/include/kiwix/manager.h:61:7: note:   no known conversion for argument 1 from ‘LibraryManipulator*’ to ‘kiwix::Manager&&’

Please tag a new version compatible with libkiwix 13.

@xvitaly This kind of ticket popup each time we make new releases and there is nothing much we can do about it because this is ultimatively the responsability of the packager to handle dependences between softwares.

The key point is that Kiwix, like many other software publishers, follow sementic versioning. That means that each time we release a major veraion, you can assume there is a breakong change. This has to be taken in account as packager of software which relies on libraries and you have to forbids linking and compiling against random versions of libzim, libkiwix, ...

On our side, to stop as early and as cleanly as possible, we have also implemented something like this, see https://github.com/kiwix/kiwix-desktop/pull/1044/files

This kind of ticket popup each time we make new releases and there is nothing much we can do about it because this is ultimatively the responsability of the packager to handle dependences between softwares.

kiwix-desktop has not been updated for a year. Version 2.3.1 was tagged on Apr 14, 2023.

So should we skip updating the libkiwix/libzim in Fedora for now?

This has to be taken in account as packager of software which relies on libraries and you have to forbids linking and compiling against random versions of libzim, libkiwix

We rebase the entire Kiwix stack once for each Fedora release. libkiwix/libzim is not updated yet. We only conduct internal tests.

This kind of ticket popup each time we make new releases and there is nothing much we can do about it because this is ultimatively the responsability of the packager to handle dependences between softwares.

kiwix-desktop has not been updated for a year. Version 2.3.1 was tagged on Apr 14, 2023.

True, but unrelated topic. Only related because I suspect you don't manage versions properly.

So should we skip updating the libkiwix/libzim in Fedora for now?

This is a packager dutie, I can not decide this for you. On Debian many other packages rely on libzim package for example.

This has to be taken in account as packager of software which relies on libraries and you have to forbids linking and compiling against random versions of libzim, libkiwix

We rebase the entire Kiwix stack once for each Fedora release. libkiwix/libzim is not updated yet. We only conduct internal tests.

I can only tell you that we are fixing the last bugs to release 2.4.0, but this might take many additional weeks.