diff options
-rw-r--r-- | graphics/mozjpeg/README | 38 | ||||
-rw-r--r-- | graphics/mozjpeg/mozjpeg.SlackBuild | 115 | ||||
-rw-r--r-- | graphics/mozjpeg/mozjpeg.info | 6 | ||||
-rw-r--r-- | graphics/mozjpeg/slack-desc | 18 |
4 files changed, 142 insertions, 35 deletions
diff --git a/graphics/mozjpeg/README b/graphics/mozjpeg/README index 24f5cd7e3f..7853d2ec80 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 3fa8bf15d9..4ab2efb0d2 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 b8fa02330e..8e78bc0f0b 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 3cb4bbb8e0..5845e2e976 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@ |