summaryrefslogtreecommitdiff
path: root/office/mupdf/README_shared.txt
diff options
context:
space:
mode:
Diffstat (limited to 'office/mupdf/README_shared.txt')
-rw-r--r--office/mupdf/README_shared.txt56
1 files changed, 56 insertions, 0 deletions
diff --git a/office/mupdf/README_shared.txt b/office/mupdf/README_shared.txt
new file mode 100644
index 0000000000..227928d253
--- /dev/null
+++ b/office/mupdf/README_shared.txt
@@ -0,0 +1,56 @@
+
+Here is a hopefully informative mini-rant about shared library support
+for mupdf.
+
+Upstream doesn't do shared libraries and doesn't recommend distro
+packages use them. This build used to follow that advice. However,
+mupdf is just too large to use as a static library. We end up with a
+47MB libmupdf.a, plus 7 33MB binaries. *Every* distro I've looked at
+ships mupdf as shared libs, despite upstream's policy.
+
+A long time ago (in 2013), I used to patch mupdf for shared lib support,
+but I removed it when it stopped applying cleanly. Thomas Morper on the
+slackbuilds-users mailing list recently (2018) asked if I could include
+a patch (from LFS) that adds shared library support, so starting with
+mupdf 1.13.0, BUILD 2, we have shared libraries again.
+
+In case someone *really* disagrees with this change, I added a STATIC=yes
+environment setting. If you use this, you get static libs and no
+shared ones, per upstream's policy. This has been tested and works for
+1.13.0-2, but be aware that I probably won't be testing static builds
+for every mupdf release. If you run into trouble, email me and/or the
+slackbuilds-users list.
+
+The library versioning scheme I had to use is unfortunate. The major
+soname version is supposed to only change when there's an incompatible ABI
+change. The way I'm doing it, it changes for every mupdf release [*]. This
+is because upstream doesn't tell us when the ABI changes, because it's
+not relevant for them. They support only static libs specifically to
+avoid the headache of having to track and minimize ABI changes. Whenever
+they want to change the ABI, they just do it. Anything built against the
+old version will keep working fine, because it's statically linked. With
+shared libs, I have to invent my own library versioning scheme.
+
+The end result of this is, I (humble packager) can't easily tell when
+the ABI has changed, so I treat every release [*] as an ABI change. Means
+anything linked with libmupdf will fail with 'cannot open shared object
+file' after a mupdf upgrade, so it'll have to be rebuilt. The alternative
+would be to use unversioned shared libs, which would (seem to) avoid
+the need to rebuild... but whenever the undocumented ABI changed, we'd
+get weird behaviour and segfaults instead of a clean error message.
+
+The shared library patch used here is by me (B. Watson), based on a
+patch from Linux From Scratch. The original LFS patch doesn't include
+versioned libs, I suspect becase in LFS you tend to upgrade the entire
+OS by rebuilding it, instead of upgrading just one library.
+
+Right now, the only SBo builds affected by mupdf upgrades will be
+zathura-pdf-mupdf and possibly fbpdf (if built with optional mupdf
+support). Both have been tested with shared mupdf, and both compile and
+run cleanly.
+
+[*] Actually, not micro-version point releases (e.g. 1.13.0 => 1.13.1).
+ Hopefully this doesn't cause a problem later. Upstream has just
+ switched to a major.minor.micro version scheme starting with 1.13.0,
+ so I don't know how often there will be micro-version bumps, and
+ whether or not they'll have ABI changes.