[mythtv] Updates to mythtv/external and required system libraries

Ian Campbell ijc at hellion.org.uk
Mon Aug 6 16:16:58 UTC 2018


On Mon, 2018-08-06 at 13:50 +0000, Silicondust/HDHomeRun wrote:
> If someone with experience in maintaining libs can point me in the right 
> direction, I am happy to make changes to help with 
> versioning/compatibility.

In essence you simply need to change the SONAME of the library whenever
you make a binary incompatible change to the library ABI (e.g. adding a
field to an exported struct, changing the size of a struct member,
removing or adding an argument to a function's prototype etc).

The SONAME can be seen with objdump:

    $ objdump -p /usr/lib/i386-linux-gnu/libhdhomerun.so.4| grep SONAME
      SONAME               libhdhomerun.so.4

It effectively defines the ABI of the library.

Many libraries have version additional numbers which are not present in
the SONAME, which are bumped for various kinds of binary-compatible
changes such as adding a completely new function call, you can see
these in the actual filename, to which the SONAME is usually a link:

    $ ls -l /usr/lib/i386-linux-gnu/libhdhomerun.so*
    lrwxrwxrwx 1 root root    21 Apr  2 20:26 /usr/lib/i386-linux-gnu/libhdhomerun.so.4 -> libhdhomerun.so.4.0.0
    -rw-r--r-- 1 root root 87348 Apr  2 20:26 /usr/lib/i386-linux-gnu/libhdhomerun.so.4.0.0

There are various schemes which library authors use to manage those
numbers. The libtool one [1] is convenient if you are already using
libtool. Otherwise another popular one is http://semver.org (remember
only the first digit, called MAJOR in semver, becomes part of the
SONAME).

Of course all this assumes you can reliably determine when you are
changing the ABI (which can happen in unexpected ways). I don't have
good advice here, but being aware of the need to think about it at all
is a good first stepo. 

https://lvc.github.io/abi-compliance-checker/ looks like it might be
useful but I've not used it myself.

HTH,
Ian.

[1] https://www.gnu.org/software/libtool/manual/libtool.html#Versioning


More information about the mythtv-dev mailing list