summaryrefslogtreecommitdiffstats
path: root/office/mupdf/mupdf.SlackBuild
blob: bd6aad39480ea9f953f3a10edd485b4fb6844d78 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
#!/bin/sh

# Slackware build script for mupdf

# Originally written by Hubert Hesse (email removed).
# Heavily modified by B. Watson (yalhcru@gmail.com).

# 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.
# 20180615 bkw: update for 1.13.0, move old change comments to ChangeLog.old
# 20180101 bkw: update for 1.12.0.
# 20170711 bkw: update for 1.11.
# 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.18.0}
BUILD=${BUILD:-1}
TAG=${TAG:-_SBo}

if [ -z "$ARCH" ]; then
  case "$( uname -m )" in
    i?86) ARCH=i586 ;;
    arm*) ARCH=arm ;;
       *) ARCH=$( uname -m ) ;;
  esac
fi

CWD=$(pwd)
TMP=${TMP:-/tmp/SBo}
PKG=$TMP/package-$PRGNAM
OUTPUT=${OUTPUT:-/tmp}

if [ "$ARCH" = "i586" ]; then
  SLKCFLAGS="-O2 -march=i586 -mtune=i686"
  LIBDIRSUFFIX=""
elif [ "$ARCH" = "i686" ]; then
  SLKCFLAGS="-O2 -march=i686 -mtune=i686"
  LIBDIRSUFFIX=""
elif [ "$ARCH" = "x86_64" ]; then
  SLKCFLAGS="-O2 -fPIC"
  LIBDIRSUFFIX="64"
else
  SLKCFLAGS="-O2"
  LIBDIRSUFFIX=""
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
rm -rf $PRGNAM-$VERSION-source
tar xvf $CWD/$PRGNAM-$VERSION-source.tar.?z
cd $PRGNAM-$VERSION-source

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

# 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

# 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, 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 \
  mandir=/usr/man \
  docdir=/usr/doc/$PRGNAM-$VERSION \
  DESTDIR=$PKG \
  all install

# 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
for i in x11 x11-curl gl; do
  [ -e $PKG/usr/bin/$PRGNAM-$i ] && \
    ln -s $PRGNAM.1.gz $PKG/usr/man/man1/$PRGNAM-$i.1.gz
done

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

# 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.
# -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" \
    -e "s,@VERSION@,$VERSION,g" \
    -e "s,@PCLIBS@,$PCLIBS,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

mkdir -p $PKG/install
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}