summaryrefslogtreecommitdiffstats
path: root/office/mupdf/mupdf.SlackBuild
blob: 57c2a7627f0ff006ef76c8b55445c28aea2f8de7 (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
210
211
212
213
214
#!/bin/sh

# Slackware build script for mupdf

# Originally written by Hubert Hesse (slackbuilds@hubertscorner.de).
# Heavily modified by B. Watson (yalhcru@gmail.com).

# 20150511 bkw:
# - version bump to 1.7a.
# - remembered to reset BUILD to 1, yay.
# - no other changes (amazingly enough).

# 20140827 bkw: fix quality control fails in previous version.
# 2 issues pointed out by Thomas Morper in an email:
# - The source is already found in upstream's archive/, and won't get
#   moved, so update DOWNLOAD in the .info file to point there.
# - Get rid of redundant /usr/share/doc/mupdf dir.
#
# Also, I forgot to reset BUILD to 1 when VERSION changed, so this
# will be build "4" of 1.5 even thought it's really the 2nd one :(

# 20140822 bkw:
# - Updated for mupdf-1.5.
# - Hosting the source on my server, so I know it won't get moved
#   to an archive/ dir when a new release comes out.
# - Script also tested with 1.4:
#   DOWNLOAD="http://urchlay.naptime.net/~urchlay/src/mupdf-1.4-source.tar.gz"
#   MD5SUM="0f6840a7020db0c833b0c090ca1864ec"
# - Add .desktop, .pc, icon
# - Got rid of CVE-2014-2013 patch (integrated by upstream in 1.4).
# - Remove man page patch (not needed for 1.4 and up).
# - Replace openjpeg dep with newly-submitted openjpeg2.
# - Small patch to allow building with openjpeg 2.1.0 (rather than 2.0.0).
# - For now, revert to static libmupdf. Upstream doesn't support
#   shared libs, they hate it when distro packages create them,
#   and rolling my own shared libs is more PITA than it's worth.
# - Upstream renamed the binary to mupdf-x11, add symlinks so scripts
#   or .desktop files can still run it as mupdf, and "man mupdf" will
#   still work.

# 20140224 bkw:
# - backported security fix for CVE-2014-2013. I will be upgrading this
#   build to mupdf-1.3, but it'll take more work than I currently have
#   time for:
#   + mupdf's internals have changed, will have to redo my patches
#   + it depends on openjpeg 2.0 which SBo hasn't got yet. 2.0 uses an
#     incompatible API, so an openjpeg 2.0 SlackBuild would require
#     updates for everything that depends on it.
#   + zathura-pdf-mupdf will need updating (mupdf's API has changed)
#   + probably all the other zathura-* builds will need updating to
#     be compatible with new zathura-pdf-mupdf
#   The security fix is needed now, it's a tiny patch, and shouldn't have
#   to wait on all that other stuff.

# 20140318 bkw: fix permissions on headers and man pages.

# 20130618 bkw:
# - Took over maintenance.
# - Updated for mupdf 1.2.
# - Build library shared, not static.
# - Build with system zlib, libjpeg, openjpeg, jbig2dec, libtiff, libpng,
#   liblcms2 instead of bundled sources (which made the lib + exes *huge*).
#   Also, the included libjpeg is too new (it broke zathura-pdf-mupdf).
# - Include mutool in package (instead of just its man page).
# - Add CHANGES CONTRIBUTORS doc/* to /usr/doc.
# - Use DESTDIR libdir mandir instead of patching makefile.
# - Updated README & slack-desc to mention XPS and CBZ.
# - Fix the man pages slightly.

PRGNAM=mupdf
VERSION=${VERSION:-1.7a}
BUILD=${BUILD:-1}
TAG=${TAG:-_SBo}

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

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

if [ "$ARCH" = "i486" ]; then
  SLKCFLAGS="-O2 -march=i486 -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

rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
rm -rf $PRGNAM-$VERSION-source
tar xvf $CWD/$PRGNAM-$VERSION-source.tar.gz
cd $PRGNAM-$VERSION-source

# don't find/chown/chmod until after the thirdparty junk is removed.

# Build against system libs instead of bundled ones. If we didn't do this,
# libmupdf.a would be useless for building anything else.

# Everything removed from thirdparty/ has to be installed systemwide, and must
# either be a Slackware core pkg, or mentioned in REQUIRES= in the .info
# file... except mujs, which is mupdf's javascript support lib. If missing,
# we end up with a mupdf with no JS support, which is probably a good idea
# for the default build. If you want javascript, MUJS=yes in the env.

MUJS="${MUJS:-no}"
[ "$MUJS" = "yes" ] && mv thirdparty/mujs .keep
rm -rf thirdparty/*
[ "$MUJS" = "yes" ] && mv .keep thirdparty/mujs

chown -R root:root .
find -L . \
 \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 -o -perm 511 \) \
 -exec chmod 755 {} \; -o \
 \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \
 -exec chmod 644 {} \;

# opj_stream_set_user_data() now takes 3 args in openjpeg 2.1.
# Patch applies to both 1.4 and 1.5.
patch -p1 < $CWD/openjpeg-2.1-api-change.diff

# Makerules incorrectly tries to build with openjpeg-1.x system lib, while
# the bundled version is 2.0, and the code uses the 2.0 API.
# Actually this was fixed in 1.5, but I leave this here in case someone
# wants to use this script to build mupdf-1.4 for some reason.
sed -i 's,libopenjpeg1,libopenjp2,g' Makerules

# 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

make build=release prefix=/usr XCFLAGS="$SLKCFLAGS"
make \
  build=release \
  prefix=/usr \
  libdir=/usr/lib$LIBDIRSUFFIX \
  mandir=/usr/man \
  docdir=/usr/doc/$PRGNAM-$VERSION \
  DESTDIR=$PKG \
  install

if [ "$MUJS" = "yes" ]; then
  # If JS support included, applications will need to link with this:
  install -m0664 build/release/libmujs.a $PKG/usr/lib$LIBDIRSUFFIX/
  install -m0664 thirdparty/mujs/mujs.h $PKG/usr/include/
else
  # Don't need mujstest if no javascript support.
  rm -f $PKG/usr/bin/mujstest
fi

strip $PKG/usr/bin/*

find $PKG/usr/man -type f -exec gzip -9 {} \;
for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done

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

# Installed permissions are atrocious (everything 755).
find $PKG -type f | xargs chmod 644
chmod 755 $PKG/usr/bin/*

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

# .pc file taken from debian and parameterized.
PCLIBS="-l$PRGNAM"
[ "$MUJS" = "yes" ] && PCLIBS="$PCLIBS -lmujs"

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

# slack-desc will conveniently say whether javascript is built in.
WITH=without
[ "$MUJS" = "yes" ] && WITH=with

# 'make install' already installed most of the docs.
cp -a CONTRIBUTORS $PKG/usr/doc/$PRGNAM-$VERSION
cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild

mkdir -p $PKG/install
sed "s,@WITH@,$WITH," < $CWD/slack-desc > $PKG/install/slack-desc

cd $PKG
/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz}