[opensuse-packaging] Best practices for a library with backends?
Hi, I am getting involved with https://github.com/libyui , the UI library powering YaST. The basic design is a core library, libyui, which provides the API but has no actual UI. One of the 3 backends, libyui-{ncurses,gtk,qt}, is needed. I am looking for examples of best practices of versioning the shared libraries and setting up the dependencies among the parts of the framework. Current problems of libyui in this area: - not being careful about the so-versioning. That is a solved problem for a single(!) library, see https://github.com/openSUSE/libzypp/blob/a01b41c7dfe42a1fae9d9431fbad61997fb... - the user-facing ABI of libyui and the backend-facing ABI are not well separated. Is there any project which has figured this out? - expressing the dependency "the core lib needs at least one backend with a matching ABI" is done via the yui_backend symbol but that breaks bootstrapping the build (See Fedora 19 on https://build.opensuse.org/project/monitor/devel:libraries:libyui ) Can you point me to any projects that handle this situation (common api + backends), however well? -- Martin Vidner, Cloud & Systems Management Team http://en.opensuse.org/User:Mvidner Kuracke oddeleni v restauraci je jako fekalni oddeleni v bazenu
On Thursday 2013-12-05 18:11, Martin Vidner wrote:
I am getting involved with https://github.com/libyui , the UI library powering YaST. The basic design is a core library, libyui, which provides the API but has no actual UI. One of the 3 backends, libyui-{ncurses,gtk,qt}, is needed. [...] Current problems of libyui in this area:
- not being careful about the so-versioning. That is a solved problem for a single(!) library, see https://github.com/openSUSE/libzypp/blob/a01b41c7dfe42a1fae9d9431fbad61997fb...
Given that the libzypp RPM in openSUSE does not really support the parallel installation of multiple versions, the amount of LOC spent in libzypp source code makes this "solution" somewhat overengineered.
- the user-facing ABI of libyui and the backend-facing ABI are not well separated. Is there any project which has figured this out?
Figured out in what way - what would you like to see? libdbi for example uses just different prefixes; dbi_ for user-facing, dbd_ for backend-facing, and otherwise does not make an attempt for any other separation.
- expressing the dependency "the core lib needs at least one backend with a matching ABI" is done via the yui_backend symbol but that breaks bootstrapping the build (See Fedora 19 on https://build.opensuse.org/project/monitor/devel:libraries:libyui )
Requires: ought not to be used for libraries that get dlopened (such as backends), because dlopened libraries are not essential to start a program. What should probably be written is Recommends: yui_backend = 6 (in libyui.spec) To make sure that libyui6 only loads v6 backends, there ought to also be a runtime "barrier". For example, backends ought to be placed in a versioned directory like /usr/lib64/libyui6/ as well.
Can you point me to any projects that handle this situation (common api + backends), however well?
libmirage is another one that comes to mind. -- To unsubscribe, e-mail: opensuse-packaging+unsubscribe@opensuse.org To contact the owner, e-mail: opensuse-packaging+owner@opensuse.org
participants (2)
-
Jan Engelhardt
-
Martin Vidner