#!/bin/bash # Slackware build script for mozjpeg # Originally written by Ryan P.C. McQuen # Now maintained by B. Watson (urchlay@slackware.uk) # Licensed under the WTFPL. See http://www.wtfpl.net/txt/copying/ for details. # 20230710 bkw: # - update for v4.1.3. # - fail if API in env is bad (not blank, 6b, 7, or 8). # - add zulu-openjdk11 and 17 to JDK search. # - fail if JAVA=yes but we can't find a JDK. # 20230105 bkw: update for v4.1.1, fix doc symlink. # 20220318 bkw: fix 32-bit lib vs. lib32 install path mess. # 20210909 bkw: relicense as WTFPL, w/permission from original author. # 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 cd $(dirname $0) ; CWD=$(pwd) PRGNAM=mozjpeg VERSION=${VERSION:-4.1.3} BUILD=${BUILD:-1} 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 ARGS="" # 20230710 bkw: sanity-check the API environment variable. API="${API:-6b}" case "$API" in 6b) ARGS="" ;; # this is the default. 7) ARGS="-DWITH_JPEG7=TRUE " ;; 8) ARGS="-DWITH_JPEG8=TRUE " ;; *) echo "*** $0: invalid API. must be one of: 6b (default), 7, 8." exit 1 ;; esac # 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}" javafound=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 zulu-openjdk{6,8,11,17}; do if [ -x /etc/profile.d/$i.sh ]; then javafound="$i" source /etc/profile.d/$i.sh break fi done if [ "$javafound" = "no" ]; then echo "*** $0: you set JAVA=yes, but I can't find a JDK to build with" exit 1 fi javafound="yes ($javafound)" fi 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 {} \+ 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 .. # Grr. if [ -e $PKG/opt/$PRGNAM/lib32 ]; then cd $PKG/opt/$PRGNAM mv lib32 lib ln -s lib lib32 cd - fi # 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@,$javafound," \ $CWD/slack-desc > \ $PKG/install/slack-desc cd $PKG /sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE