mirror of
https://github.com/Ponce/slackbuilds
synced 2024-11-16 19:50:19 +01:00
bad0abe9f0
Signed-off-by: B. Watson <urchlay@slackware.uk> Signed-off-by: Willy Sudiarto Raharjo <willysr@slackbuilds.org>
247 lines
9.1 KiB
Bash
247 lines
9.1 KiB
Bash
#!/bin/bash
|
|
|
|
# Slackware build script for mupdf
|
|
|
|
# Originally written by Hubert Hesse (email removed).
|
|
# Heavily modified by B. Watson (urchlay@slackware.uk).
|
|
|
|
# Licensed under the WTFPL. See http://www.wtfpl.net/txt/copying/ for details.
|
|
|
|
# 20230531 bkw: BUILD=2, actually use SLKCFLAGS.
|
|
# 20230117 bkw: update for 1.21.1.
|
|
# - Again, this script can't build older versions.
|
|
# - There's a gumbo-parser SlackBuild now, so build with it instead of
|
|
# upstream's bundled version.
|
|
# - tesseract builds work, so make that an option.
|
|
# - Include pre-scaled PNG icons.
|
|
|
|
# 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.
|
|
|
|
cd $(dirname $0) ; CWD=$(pwd)
|
|
|
|
PRGNAM=mupdf
|
|
VERSION=${VERSION:-1.21.1}
|
|
BUILD=${BUILD:-2}
|
|
TAG=${TAG:-_SBo}
|
|
PKGTYPE=${PKGTYPE:-tgz}
|
|
|
|
if [ -z "$ARCH" ]; then
|
|
case "$( uname -m )" in
|
|
i?86) ARCH=i586 ;;
|
|
arm*) ARCH=arm ;;
|
|
*) ARCH=$( uname -m ) ;;
|
|
esac
|
|
fi
|
|
|
|
if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
|
|
echo "$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE"
|
|
exit 0
|
|
fi
|
|
|
|
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
|
|
|
|
# Building mupdf seems to work OK if an older version is installed,
|
|
# but I only tested 1.21.1 when 1.18.0 was installed (doesn't mean
|
|
# it works for all versions).
|
|
print_failed_message() {
|
|
if pkg-config --exists mupdf; then
|
|
cat 1>&2 <<EOF
|
|
|
|
**************************************************************************
|
|
* The build failed. This might have happened because you had an existing *
|
|
* (older) mupdf package installed. Run "removepkg mupdf" and try again. *
|
|
**************************************************************************
|
|
EOF
|
|
fi
|
|
exit 1
|
|
}
|
|
|
|
# 20230117 bkw: tesseract builds work fine in 1.21.1, but tesseract
|
|
# doesn't get autodetected. Help it out a little.
|
|
TESS=no
|
|
[ "${TESSERACT:-yes}" = "yes" ] && pkg-config --exists tesseract && TESS=yes
|
|
|
|
rm -rf $PKG
|
|
mkdir -p $TMP $PKG $OUTPUT
|
|
cd $TMP
|
|
rm -rf $PRGNAM-$VERSION-source
|
|
tar xvf $CWD/$PRGNAM-$VERSION-source.tar.lz
|
|
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
|
|
|
|
# 20230531 bkw: derp. Never did apply the flags...
|
|
sed -i "s,-O2,$SLKCFLAGS," Makerules
|
|
|
|
# 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
|
|
|
|
# Build against system libs instead of bundled ones, where possible.
|
|
# Upstream recommends using their bundled lcms2 and mujs, I'll go with that.
|
|
# Also, we *still* (in Slack 15.0) have to use the bundled freeglut
|
|
# to get copy/paste working in mupdf-gl.
|
|
# C++ (XCXXFLAGS) is only actually used if building with tesseract.
|
|
make verbose=yes \
|
|
shared=yes \
|
|
LIB_LDFLAGS="-shared -Wl,-soname -Wl,libmupdf.so.$SOMAJOR" \
|
|
USE_SYSTEM_LIBS=yes \
|
|
USE_SYSTEM_GLUT=no \
|
|
tesseract=$TESS \
|
|
build=release \
|
|
prefix=/usr \
|
|
libdir=/usr/lib$LIBDIRSUFFIX \
|
|
mandir=/usr/man \
|
|
docdir=/usr/doc/$PRGNAM-$VERSION \
|
|
DESTDIR=$PKG \
|
|
all install || print_failed_message
|
|
|
|
# bins and libs are already stripped.
|
|
gzip -9 $PKG/usr/man/man1/*.1
|
|
|
|
# 20230117 bkw: fix up the lib dir.
|
|
cd $PKG/usr/lib$LIBDIRSUFFIX
|
|
# 20230117 bkw: AFAIK, we have to list every shared lib this one
|
|
# depends on in the .pc file. This rather odd-looking bit of code
|
|
# creates the list.
|
|
PCLIBS="-lmupdf $(
|
|
objdump -p libmupdf.so | \
|
|
perl -ne 'next unless /NEEDED/;
|
|
chomp;
|
|
s,.* lib([^.]*)\.so.*,\1,;
|
|
print "-l$_ " unless /^(c|gcc_s)$/;'
|
|
)"
|
|
WITHTESS=WITHOUT
|
|
echo "$PCLIBS" | grep -q ltesseract && WITHTESS=WITH
|
|
echo "==> PCLIBS='$PCLIBS'"
|
|
|
|
# 20230117 bkw: the library is versioned, but the filename isn't...
|
|
chmod 755 libmupdf.so
|
|
mv libmupdf.so libmupdf.so.$SOVER
|
|
ln -s libmupdf.so.$SOVER libmupdf.so
|
|
ln -s libmupdf.so.$SOVER libmupdf.so.$SOMAJOR
|
|
|
|
# .pc file taken from debian and parameterized.
|
|
mkdir -p pkgconfig/
|
|
sed -e "s,@LIB@,lib$LIBDIRSUFFIX,g" \
|
|
-e "s,@VERSION@,$VERSION,g" \
|
|
-e "s,@PCLIBS@,$PCLIBS,g" \
|
|
$CWD/$PRGNAM.pc > pkgconfig/$PRGNAM.pc
|
|
|
|
# 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 libmupdf-third.a
|
|
cd -
|
|
|
|
# Compatibility symlinks. Older versions, the binary is just "mupdf".
|
|
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 SVG icon, make PNGs at various sizes.
|
|
mkdir -p $PKG/usr/share/pixmaps $PKG/usr/share/icons/hicolor/scalable/apps
|
|
svg=docs/logo/mupdf-logo.svg
|
|
for i in 16 22 32 48 64 128; do
|
|
px=${i}x${i}
|
|
dir=$PKG/usr/share/icons/hicolor/$px/apps
|
|
mkdir -p $dir
|
|
rsvg-convert --width=$i --height=$i -o $dir/$PRGNAM.png $svg
|
|
done
|
|
cat $svg > $PKG/usr/share/icons/hicolor/scalable/apps/$PRGNAM.svg
|
|
ln -s ../icons/hicolor/48x48/apps/$PRGNAM.png $PKG/usr/share/pixmaps/$PRGNAM.png
|
|
|
|
# '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
|
|
sed "s,@WITHTESS@,$WITHTESS," < $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
|