[csw-maintainers] When a shared library needs a data file

Maciej (Matchek) Blizinski maciej at opencsw.org
Tue Jan 18 14:01:46 CET 2011


I'm working on an update to libmagic, and an interesting issue has
appeared.  The shared library is not enough to use libmagic; a data
file is required too (magic.mgc).  You could argue that it's not the
shared library per se that needs that file, but if you use the
libmagic API, you need to initialize your magic cookie with data, and
you assume that the data is already there.  Here's an example usage:

magic_cookie = magic.open()
magic_cookie.load()
magic_cookie.setflags(magic.MAGIC_MIME)
mime = magic_cookie.file(full_path)

In the packaging context, I would like to ensure that

Current layout:

CSWlibmagic: contains libmagic.so.1 and the magic.mgc file

How to split it up?

Version 1:

CSWlibmagic: Contains magic.mgc, depends on CSWlibmagic1
CSWlibmagic1: Contains libmagic.so.1

CSWlibmagic (data) --> CSWlibmagic1

Advantages: minimal changes to the catalog (new packages, renames, etc)
Disadvantages: Applications need to depend on both libmagic and
libmagic1 in order to achieve working setup.  Dependencies declared
don't match the actual dependencies.

Version 2:

CSWlibmagic: Empty transitional package, depends on CSWlibmagic1
CSWlibmagic1: Contains libmagic.so.1, depends on CSWlibmagic-common
CSWlibmagic-common: Contains magic.mgc

Here, CSWlibmagic1 always pulls in CSWlibmagic-common, and has the
database.  The downside is that there is one package more.

CSWlibmagic (legacy) --> CSWlibmagic1 (shared lib) --> CSWlibmagic-common (data)

Advantages: When CSWlibmagic2 comes along, we'll declare the
dependency CSWlibmagic-common, and CSWlibmagic1 will use the new
shared data.
Disadvantages: Now we have not two, but three packages (until
CSWlibmagic goes away).

Thoughts?


More information about the maintainers mailing list