#!/bin/sh # Slackware build script for mupdf # Originally written by Hubert Hesse (slackbuilds@hubertscorner.de). # Heavily modified by B. Watson (yalhcru@gmail.com). # 20150915 bkw BUILD=2: # - add -DJBIG_NO_MEMENTO, needed for building with jbig2dec-0.12. # 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:-2} 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 -DJBIG_NO_MEMENTO" 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}