graphics/mozjpeg: New maintainer, new options.

Signed-off-by: B. Watson <yalhcru@gmail.com>
This commit is contained in:
B. Watson 2017-03-10 15:44:12 -05:00 committed by Willy Sudiarto Raharjo
parent a53689f7d7
commit 73d5f834cc
4 changed files with 142 additions and 35 deletions

View file

@ -1,6 +1,36 @@
Improved JPEG encoder.
mozjpeg (Mozilla JPEG Encoder Project)
This will not interfere with Slackware's libjpeg,
as it installs to /opt/.
mozjpeg is a fork of libjpeg-turbo from Mozilla Research. Its goal is to
reduce the size of JPEG files without reducing quality or compatibility
with the vast majority of the world's deployed decoders. The idea is to
reduce transfer times for JPEGs on the Web, thus reducing page load times.
The binaries are in /opt/libmozjpeg/bin/.
mozjpeg is not intended to be a general JPEG library replacement. It makes
tradeoffs that are intended to benefit Web use cases and focuses solely
on improving encoding. It is best used as part of a Web encoding workflow.
In essence, libjpeg-turbo (as shipped with Slackware) is optimized for
speed of encoding/decoding, while mozjpeg is optimized for encoding
smaller file sizes (at the expense of speed). mozjpeg will not interfere
with Slackware's libjpeg-turbo package, as it installs to /opt/mozjpeg/.
mozjpeg supports multiple versions of the libjpeg API. By default,
version 6b is built. If you need compatibility with libjpeg 7 or 8,
set API=7 or API=8 in the script's environment.
Optionally, mozjpeg can be built with Java wrapper support for
turbojpeg. To do this, install one of: jdk, openjdk, openjdk8, or
openjdk6. Then run this script with JAVA=yes in the environment.
To run the binaries, it's probably easiest to add this to ~/.bash_profile:
export PATH=/opt/mozjpeg/bin:$PATH
export MANPATH=/opt/mozjpeg/man:$MANPATH
To compile & link with the mozjpeg libraries, use -I/opt/mozjpeg/include
and -L/opt/mozjpeg/lib (or lib64). You might also want -static, or else
-Wl,-rpath,/opt/mozjpeg/lib (or lib64).
If you built with JAVA=yes, the java library will be installed
as /opt/mozjpeg/classes/turbojpeg.jar, and the docs will be in
/usr/doc/mozjpeg-$VERSION/javadoc.

View file

@ -2,8 +2,11 @@
# Slackware build script for mozjpeg
# Originally written by:
# Ryan P.C. McQuen | Everett, WA | ryanpcmcquen@member.fsf.org
# Now maintained by B. Watson (yalhcru@gmail.com)
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
@ -22,14 +25,23 @@
# with this program (most likely, a file named COPYING). If not, see
# <http://www.gnu.org/licenses/>.
# 20170310 bkw:
# - take over maintenance
# - i486 => i586
# - build static lib also
# - expand README and slack-desc
# - add JAVA=yes option
# - add API=7 and API=8 options
# - BUILD=2
PRGNAM=mozjpeg
VERSION=${VERSION:-3.1}
BUILD=${BUILD:-1}
BUILD=${BUILD:-2}
TAG=${TAG:-_SBo}
if [ -z "$ARCH" ]; then
case "$( uname -m )" in
i?86) ARCH=i486 ;;
i?86) ARCH=i586 ;;
arm*) ARCH=arm ;;
*) ARCH=$( uname -m ) ;;
esac
@ -40,8 +52,8 @@ TMP=${TMP:-/tmp/SBo}
PKG=$TMP/package-$PRGNAM
OUTPUT=${OUTPUT:-/tmp}
if [ "$ARCH" = "i486" ]; then
SLKCFLAGS="-O2 -march=i486 -mtune=i686"
if [ "$ARCH" = "i586" ]; then
SLKCFLAGS="-O2 -march=i586 -mtune=i686"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "i686" ]; then
SLKCFLAGS="-O2 -march=i686 -mtune=i686"
@ -60,11 +72,7 @@ rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
rm -rf $PRGNAM-$VERSION
if [ -e $CWD/v$VERSION.tar.gz ]; then
tar xvf $CWD/v$VERSION.tar.gz
else
tar xvf $CWD/$PRGNAM-$VERSION.tar.gz
fi
tar xvf $CWD/$PRGNAM-$VERSION.tar.gz
cd $PRGNAM-$VERSION
chown -R root:root .
find -L . \
@ -73,24 +81,93 @@ find -L . \
\( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
-o -perm 440 -o -perm 400 \) -exec chmod 644 {} \;
# JAVA=yes only tested with openjdk and openjdk6. We source the profile.d
# script here in case someone's *just* installed jdk|openjdk, so they
# won't have to log out & back in to get this built. This mostly helps
# out sbopkg users.
JAVA="${JAVA:-no}"
if [ "$JAVA" = "yes" ]; then
EXTRAOPTS="--with-java "
# Find a JDK. Presumably a sane admin will only have one of these
# profile scripts executable, even if he's installed all of them.
# TODO: maybe let the user specify the JDK to use instead? I'm not
# sure it actually matters that much ("write once, run anywhere" should
# mean a .jar built with openjdk will run with Oracle's jdk, right? But
# there's JNI (native code) involved...)
for i in jdk openjdk8 openjdk openjdk6; do
if [ -x /etc/profile.d/$i.sh ]; then
source /etc/profile.d/$i.sh
break
fi
done
# Whichever jdk we decided to use, use its JAVA_HOME. Unfortunately
# mozjpeg ignores the *standard* JAVA_HOME env var, so we persuade
# it thus:
sed -i "s,/usr/java,$JAVA_HOME,g" configure.ac
fi
autoreconf -fiv
# TODO: really, there should be a way to build multiple API versions, with
# file paths that don't clash: /opt/mozjpeg/jpeg$API/(bin|lib|include).
# I'll save this for the 3.2 release. Had a look at 3.2-pre, it has
# pkg-config support, which would make this job easier I think.
API="${API:-6b}"
case "$API" in
6b) ;; # do nothing, this is the default
7|8) EXTRAOPTS="$EXTRAOPTS --with-jpeg$API" ;;
*) echo "Invalid API version, supported versions are 6b 7 8" 1>&2
exit 1
;;
esac
# 20170310 bkw: This stuff needs documenting, or I'll forget why
# I did it this way.
# Leaving off all the --prefix and related options below, since the
# default prefix is already /opt/mozjpeg.
# Ryan's version of this script had --disable-static, but I'm leaving
# that off, because sometimes static libs are easier to deal with when
# you're linking with libraries outside the system /usr/lib(64) dir.
# The LDFLAGS gibberish below is to force the binaries in /opt/mozjpeg/bin
# to use the libraries in /opt/mozjpeg/lib(64), otherwise they use the
# system libjpeg in /usr/lib(64) which partly defeats the purpose of
# having optimized jpeg libs...
LDFLAGS="-Wl,-rpath,/opt/$PRGNAM/lib$LIBDIRSUFFIX" \
CFLAGS="$SLKCFLAGS" \
CXXFLAGS="$SLKCFLAGS" \
./configure \
--disable-static
$EXTRAOPTS \
--build=$ARCH-slackware-linux
make CFLAGS="$SLKCFLAGS"
make install DESTDIR=$PKG
# the java stuff chokes without -j1, everything else is OK.
if [ "$JAVA" = "yes" ]; then
make -j1 -C java
fi
find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \
| cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true
make # V=1
make install-strip DESTDIR=$PKG
gzip $PKG/opt/$PRGNAM/man/man?/*.?
find $PKG/opt/${PRGNAM}/man/ -type f -exec gzip -9 {} \;
mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION/
cp -a BUILDING.txt LICENSE.txt README $PKG/usr/doc/$PRGNAM-$VERSION
# docs are installed in /opt already (except the license)
mkdir -p $PKG/usr/doc
mv $PKG/opt/$PRGNAM/doc $PKG/usr/doc/$PRGNAM-$VERSION
ln -s ../../../usr/doc/$PRGNAM-$VERSION $PKG/opt/$PRGNAM/doc
cp -a LICENSE.txt $PKG/usr/doc/$PRGNAM-$VERSION
cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild
[ "$JAVA" = "yes" ] && cp -a java/doc $PKG/usr/doc/$PRGNAM-$VERSION/javadoc
mkdir -p $PKG/install
cat $CWD/slack-desc > $PKG/install/slack-desc
sed -e "s,@API@,$API," -e "s,@JAVA@,$JAVA," \
$CWD/slack-desc > \
$PKG/install/slack-desc
cd $PKG
/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz}

View file

@ -1,10 +1,10 @@
PRGNAM="mozjpeg"
VERSION="3.1"
HOMEPAGE="https://github.com/mozilla/mozjpeg"
DOWNLOAD="https://github.com/mozilla/mozjpeg/archive/v3.1.tar.gz"
DOWNLOAD="https://github.com/mozilla/mozjpeg/archive/v3.1/mozjpeg-3.1.tar.gz"
MD5SUM="c61d693a16d529fa92be7544a5c2e7f9"
DOWNLOAD_x86_64=""
MD5SUM_x86_64=""
REQUIRES=""
MAINTAINER="Ryan P.C. McQuen"
EMAIL="ryanpcmcquen@member.fsf.org"
MAINTAINER="B. Watson"
EMAIL="yalhcru@gmail.com"

View file

@ -6,14 +6,14 @@
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
mozjpeg: mozjpeg (improved jpeg encoder)
mozjpeg:
mozjpeg: mozjpeg is a variety of jpeg encoding tools.
mozjpeg:
mozjpeg:
mozjpeg:
mozjpeg:
mozjpeg: https://github.com/mozilla/mozjpeg
mozjpeg:
mozjpeg: mozjpeg (Mozilla JPEG Encoder Project)
mozjpeg:
mozjpeg: mozjpeg is a fork of libjpeg-turbo from Mozilla Research. Its
mozjpeg: goal is to reduce the size of JPEG files without reducing quality
mozjpeg: or compatibility with the vast majority of the world's deployed
mozjpeg: decoders. The idea is to reduce transfer times for JPEGs on the Web,
mozjpeg: thus reducing page load times.
mozjpeg:
mozjpeg: This package was built with these options:
mozjpeg: libjpeg API version: @API@
mozjpeg: Java support: @JAVA@