office/mupdf: Updated for version 1.18.0.

Signed-off-by: B. Watson <yalhcru@gmail.com>

Signed-off-by: Willy Sudiarto Raharjo <willysr@slackbuilds.org>
This commit is contained in:
B. Watson 2020-10-24 00:50:44 -04:00 committed by Willy Sudiarto Raharjo
parent f1d5293688
commit 1a4ddcd236
No known key found for this signature in database
GPG key ID: 3F617144D7238786
8 changed files with 119 additions and 165 deletions

View file

@ -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.

View file

@ -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.

13
office/mupdf/doinst.sh Normal file
View file

@ -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
fi
if [ -x /usr/bin/update-mime-database ]; then
/usr/bin/update-mime-database usr/share/mime >/dev/null 2>&1
fi
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
fi

View file

@ -7,6 +7,7 @@
# Licensed under the WTFPL. See http://www.wtfpl.net/txt/copying/ 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 doinst.sh
# - 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.
PRGNAM=mupdf
VERSION=${VERSION:-1.16.1}
VERSION=${VERSION:-1.18.0}
BUILD=${BUILD:-1}
TAG=${TAG:-_SBo}
@ -49,6 +84,22 @@ else
fi
set -e
# Tesseract code left here for future reference. At some point upstream
# (or maybe I) will fix it.
if [ "${TESSERACT:-no}" = "yes" ]; then
TESSARGS="USE_SYSTEM_LEPTONICA=yes USE_SYSTEM_TESSERACT=yes"
cat <<EOF
***
*** 20201023 bkw: Tesseract support in mupdf is currently broken. If
*** you want to forcibly build with it, edit the SlackBuild. Aborting.
***
EOF
exit 1
else
TESSARGS="HAVE_LEPTONICA=no HAVE_TESSERACT=no"
fi
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
# http://www.linuxfromscratch.org/patches/blfs/svn/mupdf-1.13.0-shared_libs-1.patch
# but I added versioned sonames. See README_shared.txt for the gory details.
STATIC=${STATIC:-no}
# 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' )
SOVER=$SOMAJOR.$SOMINOR
if [ "$STATIC" != "yes" ]; then
patch -p1 < $CWD/shared_libs.diff
LIBTYPE=shared
else
LIBTYPE=static
fi
# Shared libraries should be installed executable.
sed -i '/install.*644.*INSTALL_LIBS/s,644,755,' Makefile
# Build against system libs instead of bundled ones. If we didn't do this,
# libmupdf would be useless for building anything else.
# tesseract autodetection is mildly broken:
sed -i 's,tesseract-ocr,tesseract,' Makerules
# 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,libmupdf.so.$SOMAJOR" \
SO="so.$SOVER" \
XCFLAGS="$SLKCFLAGS -DJBIG_NO_MEMENTO" \
XCXXFLAGS="-std=c++11 -fpermissive" \
USE_SYSTEM_LIBS=yes \
USE_SYSTEM_GUMBO=no \
USE_SYSTEM_GLUT=no \
$TESSARGS \
build=release \
prefix=/usr \
libdir=/usr/lib$LIBDIRSUFFIX \
@ -90,9 +150,24 @@ make verbose=yes \
DESTDIR=$PKG \
all install
strip $PKG/usr/bin/*
# bins and libs are already stripped.
gzip -9 $PKG/usr/man/man1/*.1
# ldconfig will create the libmupdf.so.$SOVER link, but the libmupdf.so
# one has to be part of the package.
ln -s lib$PRGNAM.so.$SOMAJOR.$SOMINOR $PKG/usr/lib$LIBDIRSUFFIX/lib$PRGNAM.so
# 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
# libmupdf.so). 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
done
# 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.*.*
fi
# .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 $PKG/usr/doc/$PRGNAM-$VERSION
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/doinst.sh > $PKG/install/doinst.sh
cd $PKG
/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz}

View file

@ -1,8 +1,8 @@
PRGNAM="mupdf"
VERSION="1.16.1"
VERSION="1.18.0"
HOMEPAGE="https://www.mupdf.com/"
DOWNLOAD="https://www.mupdf.com/downloads/archive/mupdf-1.16.1-source.tar.xz"
MD5SUM="11075a1d882451b65c3739b588436d68"
DOWNLOAD="https://www.mupdf.com/downloads/archive/mupdf-1.18.0-source.tar.xz"
MD5SUM="3135391b027cdbedf915db1787b4ea05"
DOWNLOAD_x86_64=""
MD5SUM_x86_64=""
REQUIRES="jbig2dec"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

View file

@ -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
+MUPDF_LIB = $(OUT)/libmupdf.so
+THIRD_LIB = $(OUT)/libmupdf-third.so
+THREAD_LIB = $(OUT)/libmupdf-threads.so
+PKCS7_LIB = $(OUT)/libmupdf-pkcs7.so
-$(MUPDF_LIB) : $(MUPDF_OBJ)
+$(MUPDF_LIB) : $(MUPDF_OBJ) $(THIRD_LIB) $(THREAD_LIB)
+ $(LINK_CMD) -shared -Wl,-soname -Wl,libmupdf.so.$(SOMAJOR) -Wl,--no-undefined $(THIRD_LIBS)
$(THIRD_LIB) : $(THIRD_OBJ)
+ $(LINK_CMD) -shared -Wl,-soname -Wl,libmupdf-third.so.$(SOMAJOR) -Wl,--no-undefined
$(THREAD_LIB) : $(THREAD_OBJ)
+ $(LINK_CMD) -shared -Wl,-soname -Wl,libmupdf-threads.so.$(SOMAJOR) -Wl,--no-undefined -lpthread
$(PKCS7_LIB) : $(PKCS7_OBJ)
+ $(LINK_CMD) -shared -Wl,-soname -Wl,libmupfs-pkcs7.so.$(SOMAJOR)
-INSTALL_LIBS := $(MUPDF_LIB) $(THIRD_LIB)
+INSTALL_LIBS := $(MUPDF_LIB) $(THIRD_LIB) $(THREAD_LIB) $(PKCS7_LIB)
# --- 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' )
+SOVER = $(SOMAJOR).$(SOMINOR)
+
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)

View file

@ -15,5 +15,5 @@ mupdf: the look of a printed page on screen.
mupdf:
mupdf: https://www.mupdf.com/
mupdf:
mupdf: This package installs @LIBTYPE@ libraries.
mupdf:
mupdf: