path: root/office
diff options
author B. Watson <>2020-10-24 00:50:44 -0400
committer Willy Sudiarto Raharjo <>2020-10-31 11:15:34 +0700
commit1a4ddcd236d7813a9dca0fdf48b1fa4145d62b2d (patch)
treea4cd0b9ab98b5599ee939cc96e699a1ceb772698 /office
parentf1d5293688d82b021865922e2e27f00c22fadad8 (diff)
office/mupdf: Updated for version 1.18.0.
Signed-off-by: B. Watson <> Signed-off-by: Willy Sudiarto Raharjo <>
Diffstat (limited to 'office')
-rw-r--r--office/mupdf/mupdf.pngbin3285 -> 0 bytes
8 files changed, 119 insertions, 165 deletions
diff --git a/office/mupdf/README b/office/mupdf/README
index c67d450b06..4d84fe11bb 100644
--- a/office/mupdf/README
+++ b/office/mupdf/README
@@ -19,6 +19,6 @@ regular PDF viewer, and mupdf-x11-curl has support for fetching remote
resources from the network (which may be considered a security risk).
mupdf-gl uses OpenGL for rendering (and doesn't support curl).
-3. By default, mupdf is now built as shared libraries. If for some
-reason you need static libs instead, build with STATIC=yes in the
-script's environment. See README_shared.txt for more information.
+3. mupdf's PDF digital signature verification and signing support is
+disabled in this build, because Slackware 14.2's openssl is too old.
+For most users, this is a rarely- or never-used feature anyway.
diff --git a/office/mupdf/README_shared.txt b/office/mupdf/README_shared.txt
deleted file mode 100644
index 227928d253..0000000000
--- a/office/mupdf/README_shared.txt
+++ /dev/null
@@ -1,56 +0,0 @@
-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.
diff --git a/office/mupdf/ b/office/mupdf/
new file mode 100644
index 0000000000..9424ce43ff
--- /dev/null
+++ b/office/mupdf/
@@ -0,0 +1,13 @@
+if [ -x /usr/bin/update-desktop-database ]; then
+ /usr/bin/update-desktop-database -q usr/share/applications >/dev/null 2>&1
+if [ -x /usr/bin/update-mime-database ]; then
+ /usr/bin/update-mime-database usr/share/mime >/dev/null 2>&1
+if [ -e usr/share/icons/hicolor/icon-theme.cache ]; then
+ if [ -x /usr/bin/gtk-update-icon-cache ]; then
+ /usr/bin/gtk-update-icon-cache usr/share/icons/hicolor >/dev/null 2>&1
+ fi
diff --git a/office/mupdf/mupdf.SlackBuild b/office/mupdf/mupdf.SlackBuild
index cf8e18afdc..bd6aad3948 100644
--- a/office/mupdf/mupdf.SlackBuild
+++ b/office/mupdf/mupdf.SlackBuild
@@ -7,6 +7,7 @@
# Licensed under the WTFPL. See for details.
+# 20201020 bkw: update for 1.18.0. See notes, below.
# 20200217 bkw: update for 1.16.1.
# 20180623 bkw: BUILD=2, add patch for dynamic linking. Thanks
# to Thomas Morper for pointing me in the right direction.
@@ -16,8 +17,42 @@
# 20170621 bkw: fix build with -current's newer openjpeg, BUILD=2.
# 20170122 bkw: update for 1.10a.
+# Notes for 1.18.0:
+# - This script can no longer build older versions, too many changes.
+# - Upstream *finally* supports building as a shared library, so I and
+# all other distro packagers can stop patching it... except the
+# shared lib is unversioned, which means upgrades would cause more
+# breakage than they should. So there's still some trickery here to
+# build a versioned solib.
+# - I've got rid of the STATIC=yes option and now only build shared libs.
+# As a side effect, libmupdf-third is gone, but I've included a
+# placeholder so stuff that links with it, will work without patching.
+# - gumbo (HTML parser) is now a hard dep. The source is bundled, so
+# there's no need to create a new gumbo SlackBuild, but it does mean
+# the mupdf shared lib has grown in size.
+# - mupdf-gl uses freeglut. The version we have in 14.2 is new enough to
+# build with, but old enough that you can't copy text from mupdf-gl.
+# So we build the bundled version here.
+# - API docs are now included in the package.
+# - Now using upstream's icons, including scalable SVG.
+# - Add missing
+# - There's now the option to build with tesseract and leptonica,
+# but it's disabled in this script. I have yet to get it to
+# actually *do* anything other than fail to build (when using
+# upstream's tesseract/leptonica forks) or complain about being
+# unable to load eng.traineddata (using SBo tesseract/leptonica,
+# and yes eng.traineddata is fine). Until I work out what's wrong,
+# or upstream releases a new version, this script doesn't support
+# building with tesseract. Don't contact me about this before March
+# 1, 2021, unless you actually have a patch that fixes it. After
+# that, if this message is still here, feel free to remind me to
+# revisit it.
+# - Slackware 14.2's libcrypto (from openssl) is too old for mupdf,
+# and there's no bundled souce for it. So currently mupdf is being
+# built without libcrypto. Hope that's OK.
@@ -49,6 +84,22 @@ else
set -e
+# Tesseract code left here for future reference. At some point upstream
+# (or maybe I) will fix it.
+if [ "${TESSERACT:-no}" = "yes" ]; then
+ cat <<EOF
+*** 20201023 bkw: Tesseract support in mupdf is currently broken. If
+*** you want to forcibly build with it, edit the SlackBuild. Aborting.
+ exit 1
rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
@@ -60,28 +111,37 @@ chown -R root:root .
find -L . -perm /111 -a \! -perm 755 -a -exec chmod 755 {} \+ -o \
\! -perm /111 -a \! -perm 644 -a -exec chmod 644 {} \+
# Hard-code the version number so it'll stop trying to use git to retrieve
# it and spewing harmless but scary 'fatal: Not a git repository' errors.
sed -i "/^VERSION/s,=.*,= $VERSION," Makefile
-# 20180623 bkw: Finally, dynamic linking again. Patch is based on
-# but I added versioned sonames. See README_shared.txt for the gory details.
+# As of 1.18.0, we don't actually have to patch the Makefile
+# to do a versioned shared lib, but we do have to override some
+# variables. SOMAJOR is the mupdf major and zero-padded minor version
+# jammed together (e.g. 113 for 1.13.0, 203 for 2.3.0). SOMINOR is the
+# mupdf micro version (e.g. 0 for 1.13.0).
+SOMAJOR=$(echo $VERSION | cut -d. -f1-2 | sed -e 's,\.[0-9]$,0&,' -e 's,\.,,g')
+SOMINOR=$(echo $VERSION | cut -d. -f3- | sed 's,\.,,g' )
-if [ "$STATIC" != "yes" ]; then
- patch -p1 < $CWD/shared_libs.diff
- LIBTYPE=shared
- LIBTYPE=static
+# Shared libraries should be installed executable.
+sed -i '/install.*644.*INSTALL_LIBS/s,644,755,' Makefile
+# tesseract autodetection is mildly broken:
+sed -i 's,tesseract-ocr,tesseract,' Makerules
-# Build against system libs instead of bundled ones. If we didn't do this,
-# libmupdf would be useless for building anything else.
+# Build against system libs instead of bundled ones, where possible.
+# C++ (XCXXFLAGS) is only actually used if building with tesseract.
make verbose=yes \
+ shared=yes \
+ LIB_LDFLAGS="-shared -Wl,-soname -Wl,$SOMAJOR" \
+ SO="so.$SOVER" \
+ XCXXFLAGS="-std=c++11 -fpermissive" \
build=release \
prefix=/usr \
libdir=/usr/lib$LIBDIRSUFFIX \
@@ -90,9 +150,24 @@ make verbose=yes \
all install
-strip $PKG/usr/bin/*
+# bins and libs are already stripped.
gzip -9 $PKG/usr/man/man1/*.1
+# ldconfig will create the$SOVER link, but the
+# one has to be part of the package.
+ln -s lib$$SOMAJOR.$SOMINOR $PKG/usr/lib$LIBDIRSUFFIX/lib$
+# Historically, mupdf has included two libraries: libmupdf itself,
+# and libmupdf-third, containing all the bundled third party code
+# included with the source. In version 1.18.0, when building a
+# shared lib, no libmupdf-third gets created (all the code ends up in
+# However, most projects that link with libmupdf expect
+# this library to exist. This will probably change in the future as
+# those projects get updated for the changes in mupdf, but for now,
+# to be compatible with older mupdf versions, we include an empty
+# libmupdf-third for stuff to link with.
+ar crs $PKG/usr/lib$LIBDIRSUFFIX/libmupdf-third.a
# Compatibility symlinks. Older versions, the binary is just "mupdf".
# Separate -curl binary exists in 1.5 but not 1.4.
ln -s $PRGNAM-x11 $PKG/usr/bin/$PRGNAM
@@ -101,26 +176,20 @@ for i in x11 x11-curl gl; do
ln -s $PRGNAM.1.gz $PKG/usr/man/man1/$PRGNAM-$i.1.gz
-# Installed permissions are atrocious (everything 755).
-find $PKG -type f | xargs chmod 644
-chmod 755 $PKG/usr/bin/*
-if [ "$STATIC" != "yes" ]; then
- chmod 755 $PKG/usr/lib$LIBDIRSUFFIX/lib*.so.*.*
# .desktop taken from debian and modified:
# - make it validate.
# - add mime types for cbz and xps.
mkdir -p $PKG/usr/share/applications
cat $CWD/$PRGNAM.desktop > $PKG/usr/share/applications/$PRGNAM.desktop
-# Icon converted from platform/x11/mupdf.ico, with icotool.
-mkdir -p $PKG/usr/share/pixmaps
-cat $CWD/$PRGNAM.png > $PKG/usr/share/pixmaps/$PRGNAM.png
+# Use shipped PNG and SVG icons.
+mkdir -p $PKG/usr/share/pixmaps $PKG/usr/share/icons/hicolor/scalable/apps
+cat docs/logo/mupdf-icon.png > $PKG/usr/share/pixmaps/$PRGNAM.png
+cat docs/logo/mupdf-logo.svg > $PKG/usr/share/icons/hicolor/scalable/apps/$PRGNAM.svg
# .pc file taken from debian and parameterized.
-PCLIBS="-l$PRGNAM -lfreetype -lharfbuzz -ljbig2dec -ljpeg -lcrypto -lopenjp2 -lz -lm"
-PCLIBS="$PCLIBS -lmupdfthird"
+# -lcrypto used to be in this list, will be again someday.
+PCLIBS="-l$PRGNAM -lfreetype -lharfbuzz -ljbig2dec -ljpeg -lopenjp2 -lz -lm"
mkdir -p $PKG/usr/lib$LIBDIRSUFFIX/pkgconfig/
sed -e "s,@LIB@,lib$LIBDIRSUFFIX,g" \
@@ -129,14 +198,12 @@ sed -e "s,@LIB@,lib$LIBDIRSUFFIX,g" \
$CWD/$PRGNAM.pc > $PKG/usr/lib$LIBDIRSUFFIX/pkgconfig/$PRGNAM.pc
# 'make install' already installed most of the docs.
+cp -a CONTRIBUTORS docs/api $PKG/usr/doc/$PRGNAM-$VERSION
cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild
-# slack-desc will conveniently say whether javascript is built in,
-# and whether libs are shared or static.
mkdir -p $PKG/install
-sed -e "s,@LIBTYPE@,$LIBTYPE," \
- $CWD/slack-desc > $PKG/install/slack-desc
+cat $CWD/slack-desc > $PKG/install/slack-desc
+cat $CWD/ > $PKG/install/
cd $PKG
/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz}
diff --git a/office/mupdf/ b/office/mupdf/
index a53a00deb2..5865c171ae 100644
--- a/office/mupdf/
+++ b/office/mupdf/
@@ -1,8 +1,8 @@
diff --git a/office/mupdf/mupdf.png b/office/mupdf/mupdf.png
deleted file mode 100644
index f7cf1a6e1b..0000000000
--- a/office/mupdf/mupdf.png
+++ /dev/null
Binary files differ
diff --git a/office/mupdf/shared_libs.diff b/office/mupdf/shared_libs.diff
deleted file mode 100644
index 8d8204b67b..0000000000
--- a/office/mupdf/shared_libs.diff
+++ /dev/null
@@ -1,70 +0,0 @@
-diff -Naur mupdf-1.16.1-source/Makefile mupdf-1.16.1-source.patched/Makefile
---- mupdf-1.16.1-source/Makefile 2019-08-02 10:49:26.000000000 -0400
-+++ mupdf-1.16.1-source.patched/Makefile 2020-02-17 22:15:13.596704068 -0500
-@@ -20,7 +20,7 @@
- # Do not specify CFLAGS or LIBS on the make invocation line - specify
- # XCFLAGS or XLIBS instead. Make ignores any lines in the makefile that
- # set a variable that was set on the command line.
--CFLAGS += $(XCFLAGS) -Iinclude
-+CFLAGS += $(XCFLAGS) -Iinclude -fPIC
- LIBS += $(XLIBS) -lm
- ifneq ($(threading),no)
-@@ -189,17 +189,21 @@
- # --- Library ---
--MUPDF_LIB = $(OUT)/libmupdf.a
--THIRD_LIB = $(OUT)/libmupdf-third.a
--THREAD_LIB = $(OUT)/libmupdf-threads.a
--PKCS7_LIB = $(OUT)/libmupdf-pkcs7.a
-+PKCS7_LIB = $(OUT)/
-+ $(LINK_CMD) -shared -Wl,-soname -Wl,$(SOMAJOR) -Wl,--no-undefined $(THIRD_LIBS)
-+ $(LINK_CMD) -shared -Wl,-soname -Wl,$(SOMAJOR) -Wl,--no-undefined
-+ $(LINK_CMD) -shared -Wl,-soname -Wl,$(SOMAJOR) -Wl,--no-undefined -lpthread
- $(PKCS7_LIB) : $(PKCS7_OBJ)
-+ $(LINK_CMD) -shared -Wl,-soname -Wl,$(SOMAJOR)
- # --- Main tools and viewers ---
-@@ -294,6 +298,14 @@
- VERSION = $(shell git describe --tags)
-+# 20180623 bkw: major/minor/micro versions for shared library.
-+# SOMAJOR is the mupdf major/minor version jammed together (e.g. 113
-+# for 1.13.0).
-+# SOMINOR is the mupdf micro version (e.g. 0 for 1.13.0).
-+SOMAJOR = $(shell echo $(VERSION) | cut -d. -f1-2 | sed 's,\.,,g' )
-+SOMINOR = $(shell echo $(VERSION) | cut -d. -f3- | sed 's,\.,,g' )
- version:
- sed -i~ -e '/FZ_VERSION /s/".*"/"'$(VERSION)'"/' include/mupdf/fitz/version.h
-@@ -331,7 +343,13 @@
- install -m 644 include/mupdf/pdf/*.h $(DESTDIR)$(incdir)/mupdf/pdf
- install -d $(DESTDIR)$(libdir)
-- install -m 644 $(INSTALL_LIBS) $(DESTDIR)$(libdir)
-+ install -s -m0755 $(INSTALL_LIBS) $(DESTDIR)$(libdir)
-+ ( cd $(DESTDIR)$(libdir) ; \
-+ for i in $(INSTALL_LIBS); do \
-+ j=$$( basename $$i) ; \
-+ mv $$j $$j.$(SOVER) ; \
-+ ln -s $$j.$(SOVER) $$j ; \
-+ done )
- install -d $(DESTDIR)$(bindir)
- install -m 755 $(TOOL_APPS) $(VIEW_APPS) $(DESTDIR)$(bindir)
diff --git a/office/mupdf/slack-desc b/office/mupdf/slack-desc
index eac6630b9e..b2765401f2 100644
--- a/office/mupdf/slack-desc
+++ b/office/mupdf/slack-desc
@@ -15,5 +15,5 @@ mupdf: the look of a printed page on screen.
-mupdf: This package installs @LIBTYPE@ libraries.