aboutsummaryrefslogtreecommitdiff
path: root/graphics/mozjpeg
diff options
context:
space:
mode:
authorB. Watson <yalhcru@gmail.com>2017-03-10 15:44:12 -0500
committerWilly Sudiarto Raharjo <willysr@slackbuilds.org>2017-03-18 06:58:55 +0700
commit73d5f834cc53d0b76c35b34d4320c128147a2a73 (patch)
tree7db19100bc99c434a588b38fe3123f0153322da2 /graphics/mozjpeg
parenta53689f7d70574a68f035c8fc942ec8482ecd2c5 (diff)
graphics/mozjpeg: New maintainer, new options.
Signed-off-by: B. Watson <yalhcru@gmail.com>
Diffstat (limited to 'graphics/mozjpeg')
-rw-r--r--graphics/mozjpeg/README38
-rw-r--r--graphics/mozjpeg/mozjpeg.SlackBuild115
-rw-r--r--graphics/mozjpeg/mozjpeg.info6
-rw-r--r--graphics/mozjpeg/slack-desc18
4 files changed, 142 insertions, 35 deletions
diff --git a/graphics/mozjpeg/README b/graphics/mozjpeg/README
index 24f5cd7e3fe60..7853d2ec800aa 100644
--- a/graphics/mozjpeg/README
+++ b/graphics/mozjpeg/README
@@ -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.
diff --git a/graphics/mozjpeg/mozjpeg.SlackBuild b/graphics/mozjpeg/mozjpeg.SlackBuild
index 3fa8bf15d9485..4ab2efb0d224b 100644
--- a/graphics/mozjpeg/mozjpeg.SlackBuild
+++ b/graphics/mozjpeg/mozjpeg.SlackBuild
@@ -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
-./configure \
- --disable-static
-make CFLAGS="$SLKCFLAGS"
-make install DESTDIR=$PKG
+# 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 \
+ $EXTRAOPTS \
+ --build=$ARCH-slackware-linux
-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
+# the java stuff chokes without -j1, everything else is OK.
+if [ "$JAVA" = "yes" ]; then
+ make -j1 -C java
+fi
-find $PKG/opt/${PRGNAM}/man/ -type f -exec gzip -9 {} \;
+make # V=1
+make install-strip DESTDIR=$PKG
+gzip $PKG/opt/$PRGNAM/man/man?/*.?
-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}
diff --git a/graphics/mozjpeg/mozjpeg.info b/graphics/mozjpeg/mozjpeg.info
index b8fa02330efd2..8e78bc0f0bb20 100644
--- a/graphics/mozjpeg/mozjpeg.info
+++ b/graphics/mozjpeg/mozjpeg.info
@@ -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"
diff --git a/graphics/mozjpeg/slack-desc b/graphics/mozjpeg/slack-desc
index 3cb4bbb8e09eb..5845e2e9761ed 100644
--- a/graphics/mozjpeg/slack-desc
+++ b/graphics/mozjpeg/slack-desc
@@ -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@