#!/bin/bash # Slackware build script for mozjpeg # Originally written by: # Ryan P.C. McQuen | Everett, WA | # 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 # (at your option) any later version, with the following exception: # the text of the GPL license may be omitted. # This program is distributed in the hope that it will be useful, but # without any warranty; without even the implied warranty of # merchantability or fitness for a particular purpose. Compiling, # interpreting, executing or merely reading the text of the program # may result in lapses of consciousness and/or very being, up to and # including the end of all existence and the Universe as we know it. # See the GNU General Public License for more details. # You may have received a copy of the GNU General Public License along # with this program (most likely, a file named COPYING). If not, see # . # 20210310 bkw: update for v4.0.3. # - upstream switched from autoconf to cmake, so this script can't # build older versions any more. # - cmake chokes when trying to build static libs, apparently because # we don't have a static libpng.a. So no more static libs in this # package until further notice. If you actually care about this, # remind me to look into it again. # - get rid of man pages, they're identical to the ones from libjpeg-turbo. # - add profile script. # - add -Wl,-rpath to .pc files. # - install HTML docs in /usr/doc. # 20180101 bkw: Update for v3.3.1. Script still works with 3.1 and 3.2, # if you can think of a use for them. # 20170502 bkw: # - update for v3.2. script tested with v3.1 and still works, in case # upstream's updated libjpegturbo API causes a problem (just get the # old source, run with VERSION=3.1 in the env). # - Note: ignore the 'error: ignoring unknown tag NASM' messages, per # https://sourceforge.net/p/libjpeg-turbo/mailman/message/34381375/ # 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:-4.0.3} BUILD=${BUILD:-1} TAG=${TAG:-_SBo} if [ -z "$ARCH" ]; then case "$( uname -m )" in i?86) ARCH=i586 ;; arm*) ARCH=arm ;; *) ARCH=$( uname -m ) ;; esac fi CWD=$(pwd) 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 rm -rf $PKG mkdir -p $TMP $PKG $OUTPUT cd $TMP rm -rf $PRGNAM-$VERSION tar xvf $CWD/$PRGNAM-$VERSION.tar.gz cd $PRGNAM-$VERSION 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 {} \+ ARGS="" # JAVA=yes only tested with openjdk8. 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 ARGS+="-DWITH_JAVA=TRUE " # 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 openjdk7 openjdk6; do if [ -x /etc/profile.d/$i.sh ]; then source /etc/profile.d/$i.sh break fi done fi API="${API:-6b}" [ "$API" = "7" ] && ARGS+="-DWITH_JPEG7=TRUE " [ "$API" = "8" ] && ARGS+="-DWITH_JPEG8=TRUE " mkdir -p build cd build CFLAGS="$SLKCFLAGS" \ CXXFLAGS="$SLKCFLAGS" \ cmake \ $ARGS \ -DENABLE_STATIC=FALSE \ -DPNG_LIBRARY_DEBUG=/usr/lib$LIBDIRSUFFIX/libpng.so \ -DCMAKE_C_FLAGS:STRING="$SLKCFLAGS" \ -DCMAKE_CXX_FLAGS:STRING="$SLKCFLAGS" \ -DCMAKE_INSTALL_PREFIX=/opt/$PRGNAM \ -DCMAKE_BUILD_TYPE=Release .. make make install/strip DESTDIR=$PKG cd .. # Slackware has these man pages already. rm -rf $PKG/opt/$PRGNAM/man # most of the docs are installed in /opt already, but not all. mkdir -p $PKG/usr/doc mv $PKG/opt/$PRGNAM/doc $PKG/usr/doc/$PRGNAM-$VERSION rm -f CMakeLists.txt BUILDING.* jconfig.txt # do not want cp -a *.txt *.md tjexample.c doc/html $PKG/usr/doc/$PRGNAM-$VERSION ln -s ../../../usr/doc/$PRGNAM-$VERSION $PKG/opt/$PRGNAM/doc cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild [ "$JAVA" = "yes" ] && cp -a java/doc $PKG/usr/doc/$PRGNAM-$VERSION/javadoc # 20210312 bkw: profile script is new with v4.0.x. It's installed without +x # permission (see README). mkdir -p $PKG/etc/profile.d sed "s,@,$LIBDIRSUFFIX," $CWD/${PRGNAM}.sh > $PKG/etc/profile.d/${PRGNAM}.sh # 20210312 bkw: help pkg-config out a bit. sed -i '/^Libs:/s|$| -lm -Wl,-rpath,${libdir}|' \ $PKG/opt/$PRGNAM/lib$LIBDIRSUFFIX/pkgconfig/*.pc mkdir -p $PKG/install 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}